使用Sympy解决具有和和索引的方程式

问题描述

尝试了很多事情之后,我认为最好提出SO。我的问题很简单:如何使用Sympy求解以下方程式?

Equation

我想为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