16

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]少し調べてみると、この式を抽出できることがわかりました。ただし、これはちょっとしたハックのようです。より良いアプローチはありますか?

4

1 に答える 1

14

一般に、式の一部にアクセスするには using.argsが正しい方法です。

ただし、この場合、integrate収束条件を無視できるオプションがあります。

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

また、変数に既知の仮定を明示的に設定すると、多くの場合、収束条件は自然に解決されます (ただし、この場合、 の単純な仮定では発生しないようzです)。たとえば、それzが本物であることがわかっている場合は、 を使用しますz = Symbol('z', real=True)。通常、物事が現実のものであると仮定するか、またはそれ以上にポジティブであると仮定することは、収束を確実にする上で大いに役立つことがわかっている場合です。

于 2013-03-15T17:11:59.577 に答える