处理由sympy整合返回的分段方程式

wxs*_*wxs 12 python symbolic-math sympy computer-algebra-systems symbolic-computation

同情我有一个积分返回一个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                                                        
?    
Run Code Online (Sandbox Code Playgroud)

我想提取这个分段方程的第一个分支,换句话说,我希望能够做一些itest.parts(0)简单的提取sqrt(pi)*z/2.我似乎无法找到任何方法来做到这一点,但也许我在文档中使用了错误的搜索词.有任何想法吗?

编辑

稍微探讨一下,我已经设法发现,如果我这样做,itest.args[0][0]我可以提取这个表达式.然而,这看起来有点像黑客.有更好的方法吗?

asm*_*rer 13

通常,使用.args是访问表达式部分的正确方法.

但是,在这种情况下,有一个选项integrate可以让您忽略收敛条件

In [39]: integrate(test, (x, 0, oo), conds='none')
Out[39]:
  ___
?? ? ?z
???????
   2
Run Code Online (Sandbox Code Playgroud)

此外,如果您明确设置了您对变量所知的假设,那么收敛条件通常会自行解决(但在这种情况下似乎不会发生任何简单的假设z).例如,如果您知道这z是真的,请使用z = Symbol('z', real=True).通常假设事情是真实的,甚至更好的,当你知道它将有助于确保收敛.