问题描述
尝试了很多事情之后,我认为最好提出SO。我的问题很简单:如何使用Sympy求解以下方程式?
我想为lambda_0解决这个问题,并且q
是一个大小为J
的数组,其中包含0到1之间的元素,其总和等于1(离散概率分布)。我尝试了以下方法:
from sympy.solvers import solve
from sympy import symbols,summation
p = [0.2,0.3,0.1,0.1]
l = symbols('l')
j = symbols('j')
eq= summation(j*q[j]/(l-j),(j,4))
s= solve(eq,l)
但这给q[j]
带来了错误,因为j
在这里是Symbol
对象,而不是整数。如果我不将j
用作符号,则无法评估eq
表达式。有谁知道该怎么做?
编辑::p = 1-q
,因此q[j]
应该已经被(1-p[j])
取代。
解决方法
列表p
必须先转换为符号数组,然后才能用符号值j
进行索引。
from sympy.solvers import solve
from sympy import symbols,summation,Array
p = Array([0.2,0.3,0.1,0.1])
l,j = symbols('l j')
eq = summation(j * (1 - p[j]) / (l - j),(j,4))
s = solve(eq - 1,l) # [1.13175762143963 + 9.29204634892077e-30*I,2.23358705810004 - 1.36185313905566e-29*I,3.4387382449005 + 3.71056356734273e-30*I,11.5959170755598 + 6.15921474293073e-31*I]
(假设您的p
代表1 - q
)