2

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

情商

这里给出了 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)
4

1 回答 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')

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

于 2013-02-06T16:02:41.547 回答