2

x について次のような方程式を解こうとしています。

式

ここでアルファと K が指定され、N は 1,000 以上になります。sympy を使用してアルファの 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 に答える