Dealing with piecewise equations returned by sympy integrate

不羁岁月 提交于 2019-12-10 12:34:17

问题


In sympy I have an integral which returns a Piecewise object, e.g.

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                                                        
⎩    

I would like to extract just the first branch of this piecewise equation, in other words, I would like to be able to do something like itest.parts(0)to extract simply sqrt(pi)*z/2. I can't seem to find any way to do this, but perhaps I am using the wrong search terms in the documentation. Any ideas?

Edit

Poking around a bit, I've managed to find that if I do itest.args[0][0] I can extract this expression. This seems like a bit of a hack, however. Is there a better approach?


回答1:


In general, using .args is the correct way to access parts of an expression.

In this case, though, there is an option to integrate that will let you ignore convergence conditions

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

Also, if you explicitly set the assumptions that you know on your variables, often the convergence conditions resolve themselves (it doesn't seem to happen in this case for any simple assumptions on z, though). For example, if you knew that z was real, use z = Symbol('z', real=True). Usually assuming that things are real, or even better positive, when you know it will help a lot in ensuring convergence.



来源:https://stackoverflow.com/questions/15420816/dealing-with-piecewise-equations-returned-by-sympy-integrate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!