处理Sympy积分返回的分段方程
问题内容:
在sympy中,我有一个返回逐段对象的积分,例如
In [2]: from sympy.abc import x,y,z
In [3]: test = exp(-x**2/z**2)
In [4]: itest = integrate(test,(x,0,oo))
In [5]: itest
Out[5]:
⎧ ___
⎪ ╲╱ π ⋅z │ ⎛ 1 ⎞│ π
⎪ ─────── for │periodic_argument⎜──────────────, ∞⎟│ ≤ ─
⎪ 2 │ ⎜ 2 ⎟│ 2
⎪ │ ⎝polar_lift (z) ⎠│
⎪
⎪∞
⎪⌠
⎨⎮ 2
⎪⎮ -x
⎪⎮ ───
⎪⎮ 2
⎪⎮ z
⎪⎮ ℯ dx otherwise
⎪⌡
⎪0
⎩
我只想提取该分段方程式的第一分支,换句话说,我希望能够做一些itest.parts(0)
简单的提取sqrt(pi)*z/2
。我似乎找不到任何方法可以执行此操作,但是也许我在文档中使用了错误的搜索词。有任何想法吗?
编辑
仔细研究一下,我设法找到了itest.args[0][0]
可以提取该表达式的方法。但是,这似乎有点骇人听闻。有没有更好的方法?
问题答案:
通常,使用.args
是访问表达式各部分的正确方法。
不过,在这种情况下,有一个选项integrate
可以让您忽略收敛条件
In [39]: integrate(test, (x, 0, oo), conds='none')
Out[39]:
___
╲╱ π ⋅z
───────
2
另外,如果您明确设置了变量已知的假设,那么收敛条件通常会自行解决(不过,在这种情况下,对于的任何简单假设似乎都不会发生z
)。例如,如果您知道这z
是真实的,请使用z = Symbol('z', real=True)
。通常,如果您知道事情是真实的,或者甚至是积极的,那将有助于确保融合。