如何通过sympy / scipy中的数值积分求解方程式?

时间:2019-06-18 12:41:44

标签: python scipy sympy

我有一个关于使用scipy或sympy解决有限数值积分的问题。我有两个定义如下的方程组:

enter image description here

在两个表达式中,F表示累积分布函数,f表示概率质量函数。 h1,h2,b,L1和L2均为数值。目标是找到值S1和S2。 我尝试解决的一个示例使用均值= 10,标准差= 5(= stdev)的正态分布; L1 = L2 = 5,h1 = 1.5,h2 = 1,b = 10。 我使用scipy.stats定义了正态分布,如下所示:

from scipy.stats import norm
d1 = norm(loc= mean * (L1 + 1), scale=stdev * sqrt(L1 + 1))
d2 = norm(loc = mean * L2, scale=stdev * sqrt(L2))

使用scipy包中的内置函数可以很容易地解决第一个方程式

S1 = d1.ppf((h2+b)/(h1+b))

导致S1等于80.96365553135416,它定义第二个方程式中积分的上限。 F_L2是d2的累积分布,而f_L1 + 1只是d1。 我尝试使用sympy中的符号表示来解决此问题,如下所示:

from sympy import Symbol
from sympy.solvers import solve
from sympy.integrals import integrate
S2 = Symbol('S2')`
x = Symbol('x')`
eq = d2.cdf(S2-x) * d1.ppf(x) - b/(b+h1)
result = integrate(eq, 0, S1)

但是,这会导致TypeError。关于我做错了什么的任何想法?在此示例中,S2应该近似等于129。我是sympy的一名新手,我们将不胜感激。

0 个答案:

没有答案