当使用 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
的方法。我尝试了其中的一些,例如 getO
和 extract_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⎠
经常,当我求解积分时,结果恰好是一个多重解,每个区间有一个方程。例如,由两个标准正态变量(例如 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
的方法。我尝试了其中的一些,例如 getO
和 extract_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⎠