Skip to main content
 首页 » 编程设计

python之用 Python 求解方程

2025年05月04日11webabcd

我正在尝试为 x 求解以下等式:

eq

此处给出了 alpha 和 K,N 将超过 1,000。有没有一种方法可以使用 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 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') 

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