使用Sympy解决带有求和符号和索引的方程

6

尝试了许多方法后,我认为在 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.3, 0.1, 0.1]
l = symbols('l')
j = symbols('j')
eq= summation(j*q[j]/(l-j), (j, 0, 4))

s= solve(eq, l)

但是使用j作为下标会导致错误,因为在这里j是一个Symbol对象而不是一个整数。如果我不将j作为符号进行处理,我就无法评估eq表达式。有人知道如何解决吗?
编辑:在上述代码中,p = 1-q,因此应该将q[j]替换为(1-p[j])
1个回答

2
需要将列表p转换为符号数组,然后才能使用符号值j进行索引。
from sympy.solvers import solve
from sympy import symbols, summation, Array

p = Array([0.2, 0.3, 0.3, 0.1, 0.1])
l, j = symbols('l j')
eq = summation(j * (1 - p[j]) / (l - j), (j, 0, 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”)
(假设您的“p”表示“1-q”)

这解决了我的问题!谢谢你的帮助。 - Rutger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接