处理由sympy integrate返回的分段函数方程

18

在sympy中,我有一个积分公式,它返回一个Piecewise对象,例如:

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],就可以提取这个表达式。不过这似乎有点像一个黑客行为。有更好的方法吗?

1个回答

15

一般来说,使用.args是访问表达式部分的正确方式。

但在这种情况下,有一个选项可以通过integrate让你忽略收敛条件。

In [39]: integrate(test, (x, 0, oo), conds='none')
Out[39]:
  ___
╲╱ π ⋅z
───────
   2

此外,如果您在变量上明确设置了已知的前提条件,通常收敛条件会自行解决(尽管对于z的任何简单假设情况似乎并不会发生)。例如,如果您知道z是实数,请使用z = Symbol('z', real=True)。通常,在您知道某些东西时假设它们是实数,甚至更好的是正数,将有助于确保收敛。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接