Python中的方程求解

时间:2013-02-05 03:45:39

标签: python sympy

我正在尝试为x:

解决以下等式

eq

这里给出了alpha和K,N将超过1,000。有没有办法在使用sympy给出alpha的np.array时指定LHS?我希望定义:

eqn = Eq(LHR - K)
solve(eqn,x)
通过告诉同意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)

1 个答案:

答案 0 :(得分:0)

您无法使用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')

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