9

sympyには、Piecewiseオブジェクトを返す整数がある。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               
⎩  

私はこの区分式のちょうど最初の分岐を抽出したいと思い、他の言葉で、私は単にsqrt(pi)*z/2を抽出するためにitest.parts(0)ような何かをできるようにしたいと思います。私はこれを行うための方法を見つけることができないようだが、おそらく私はドキュメントで間違った検索用語を使用しています。何か案は?

編集ビットチャンスをうかがっ

は、私がitest.args[0][0]をすれば、私はこの表現を抽出することができますを見つけることができました。しかし、これはちょっとしたハックのようだ。より良いアプローチがありますか?

答えて

10

通常、.argsを使用すると、式の一部にアクセスする正しい方法です。この場合

、しかし、あなたは明示的にあなたがあなたの変数に知っている仮定を設定する場合は、

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

また、多くの場合、収束条件の決意を収束条件を無視できるようになるintegrateのオプションがあります(しかし、この場合はzの単純な仮定のために起こるようには見えません)。たとえば、zが実際のものであることが分かっていた場合は、z = Symbol('z', real=True)を使用します。通常、物事が本当であると仮定するか、より良い肯定的なものであることがわかっている場合、それは収束を確保する上で大いに役立ちます。

関連する問題