使用 Sympy 求解具有总和和索引的方程
Solve equation with sum and index using Sympy
试过很多东西后,我觉得还是在SO上问问比较好。我的问题相当简单:如何使用 Sympy 求解以下等式?
Equation
我想为 lambda_0 解决这个问题,q
是一个大小为 J
的数组,包含 0 和 1 之间的元素,将 op 求和为 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)
但这给了我一个 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.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
)
试过很多东西后,我觉得还是在SO上问问比较好。我的问题相当简单:如何使用 Sympy 求解以下等式?
Equation
我想为 lambda_0 解决这个问题,q
是一个大小为 J
的数组,包含 0 和 1 之间的元素,将 op 求和为 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)
但这给了我一个 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.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
)