当使用 sympy 的积分有多个解决方案时,如何检索特定解决方案?

How to retrieve a specific solution when there are multiple solutions for an integral using sympy?

经常,当我求解积分时,结果恰好是一个多重解,每个区间有一个方程。例如,由两个标准正态变量(例如 X 和 Y)的比率给出的随机变量(例如 Z)的密度函数的计算是以下表达式的积分:

积分计算得出:

expr=Rational(1/2)*(1/pi)*abs(y)*exp(-pow(y,2)*(pow(z,2)+1)/2)
result=integrate(expr,(y,-oo,+oo))
result

我想检索第一个表达式作为新变量。我试过 equation=result[0] 但没有用。我还检查了使用 dir 关联到 result 的方法。我尝试了其中的一些,例如 getOextract_branch_factor(),但没有成功。

有没有办法只将解中的第一个表达式作为新变量?

首先你得到这种情况是因为你没有在交易品种上指定任何属性(“假设”)z,如果你这样做那么你可以更简单地得到结果:

In [43]: z = Symbol('z', real=True)

In [44]: expr=Rational(1/2)*(1/pi)*abs(y)*exp(-pow(y,2)*(pow(z,2)+1)/2)

In [45]: expr
Out[45]: 
   2 ⎛ 2    ⎞     
 -y ⋅⎝z  + 1⎠     
 ─────────────    
       2          
ℯ             ⋅│y│
──────────────────
       2⋅π        

In [46]: integrate(expr,(y,-oo,+oo))
Out[46]: 
    1     
──────────
  ⎛ 2    ⎞
π⋅⎝z  + 1⎠

您可能已将 z 创建为没有 real=True 条件的普通符号,因此您得到:

In [47]: z = Symbol('z')

In [48]: expr=Rational(1/2)*(1/pi)*abs(y)*exp(-pow(y,2)*(pow(z,2)+1)/2)

In [49]: integrate(expr,(y,-oo,+oo))
Out[49]: 
⎧           1                  │   ⎛ 2    ⎞│   π
⎪       ──────────         for │arg⎝z  + 1⎠│ < ─
⎪         ⎛ 2    ⎞                             2
⎪       π⋅⎝z  + 1⎠                              
⎪                                               
⎪∞                                              
⎪⌠                                              
⎪⎮     2 ⎛ 2    ⎞                               
⎨⎮   -y ⋅⎝z  + 1⎠                               
⎪⎮   ─────────────                              
⎪⎮         2                                    
⎪⎮  ℯ             ⋅│y│                          
⎪⎮  ────────────────── dy        otherwise      
⎪⎮         2⋅π                                  
⎪⌡                                              
⎪-∞                                             
⎩    

如果你想要第一个表达式,你可以通过访问 .args:

In [51]: integrate(expr,(y,-oo,+oo)).args[0][0]
Out[51]: 
    1     
──────────
  ⎛ 2    ⎞
π⋅⎝z  + 1⎠