Python中的方程求解
我正在尝试解一些这样的方程,求出x的值:
在这个方程中,alpha和K是已知的,而N的值会超过1000。请问有没有办法用sympy来指定左边的表达式(LHS),并且给定一个np.array来表示这些alpha?我希望能这样定义:
eqn = Eq(LHR - K)
solve(eqn,x)
告诉sympy左边的表达式是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
你不能用SymPy的符号来索引NumPy数组。因为你的求和是有限的,所以直接用Python的sum函数就可以了:
>>> 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)
,就像Warren Weckesser建议的那样。这样你就可以用像SymPy的 nsolve
这样的数值求解器,或者其他库里的工具来进行数值求解。
>>> nsolve(Mul(*[(x - i) for i in alpha[0]]) - exp(K), 1)
mpf('1.2696755961730152')
你也可以数值求解对数表达式,但除非你的对数可以有负数的参数,否则这两者应该是一样的。