Python中的方程求解

Python中的方程求解,python,sympy,Python,Sympy,我正在尝试解x的以下方程: 这里给出了alpha和K,N将大于1000。有没有一种方法可以使用sympy为alpha指定一个np.array的LHS?我的希望是确定: eqn = Eq(LHR - K) solve(eqn,x) 通过告诉sympy LHS=sum(a_i+x) 任何关于解决方案的提示,哪一个能最快做到这一点,我们也将不胜感激。谢谢 我希望有这样的事情: from sympy import Symbol, symbols, solve, summation, log impo

我正在尝试解x的以下方程:

这里给出了alpha和K,N将大于1000。有没有一种方法可以使用sympy为alpha指定一个np.array的LHS?我的希望是确定:

eqn = Eq(LHR - K)
solve(eqn,x)
通过告诉sympy LHS=sum(a_i+x)

任何关于解决方案的提示,哪一个能最快做到这一点,我们也将不胜感激。谢谢

我希望有这样的事情:

from sympy import Symbol, symbols, solve, summation, log
import numpy as np
N=10
K=1
alpha=np.random.randn(N, 1)
x = Symbol('x')
i = Symbol('i')
eqn = summation(log(x+alpha[i]), (i, 1, N))
solve(eqn-K,x)

不能使用SymPy符号为NumPy数组编制索引。由于求和是有限的,因此只需使用Python求和函数:

>>> alpha=np.random.randn(1, N)
>>> sum([log(x + i) for i in alpha[0]])
log(x - 1.85289943713841) + log(x - 1.40121781484552) + log(x - 1.21850393539695) + log(x - 0.605693136420962) + log(x - 0.575839713282035) + log(x - 0.105389419698408) + log(x + 0.415055726774043) + log(x + 0.71601559149345) + log(x + 0.866995633213984) + log(x + 1.12521825562504)
但即便如此,我也不明白为什么你不按照沃伦·韦克瑟的建议,把它改写成
(x-alpha[0])*(x-alpha[1])*…*(x-alpha[N-1])-exp(K)
。然后,您可以使用数值解算器(如SymPy的
nsolve
或其他库中的东西)以数值方式解算此问题

>>> nsolve(Mul(*[(x - i) for i in alpha[0]]) - exp(K), 1)
mpf('1.2696755961730152')

您也可以用数字方式求解日志表达式,但除非您的日志可以有负参数,否则这些参数应该是相同的。

如果您对两侧都求幂并简化左侧,则最终得到prod(a_i+x)=exp(K),一个N次多项式。你希望得到什么样的答案?@WarrenWeckesser-它们被写成以10为基数的日志。你会有
PROD(a_i+x)=10**K
log
通常表示log base e。