7

SymPy を使用して Python で方程式を解こうとしています。生成された方程式があります ( function = y(8.0-(y**3.0))SymPy で使用して、次のような新しい方程式を作成するようなものです: .eq = sympy.Eq(function, 2)を出力しy(8.0-(y**3.0)) == 2ますが、sympy.solve(eq)機能していないようです。

>>> from sympy import Eq, Symbol as sym, solve
>>> y = sym('y')
>>> eqa = Eq(y(8.0-(y**3.0)), 8)
>>> solve(eqa)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/pymodules/python2.6/sympy/solvers/solvers.py", line 332, in solve
    result = tsolve(f, *symbols)
  File "/usr/lib/pymodules/python2.6/sympy/solvers/solvers.py", line 716, in tsolve
    raise NotImplementedError("Unable to solve the equation.")
NotImplementedError: Unable to solve the equation.

読んでくれてありがとう。

4

5 に答える 5

9

(コードでsympyを使用しているときに、質問でscipyに言及する理由がわかりません。sympyを使用していると仮定します。)

Sympy は、 に整数乗を指定するとy(つまりy**3.0に変更するとy**3)、この方程式を解くことができます。

Sympy 0.6.7 を使用している場合、次のように動作します。

from sympy import Eq, Symbol, solve

y = Symbol('y')
eqn = Eq(y*(8.0 - y**3), 8.0)

print solve(eqn)
于 2011-02-26T19:03:52.560 に答える
9

あなたのものは非線形方程式です...だからあなたはそれを使うことができますoptimize.fsolve。詳細については、このチュートリアルscipyで関数を探してください

于 2010-12-15T11:07:00.197 に答える
3

scipy とは対照的に、sympy を使用しようとしていたと仮定すると、方程式を定義した方法を少し調整することで、Sympy (v0.7.2+ で動作) を使用して問題を解決できます。最初の 'y' と '(' の間にある演算子 (*)。べき乗を float として指定するかどうかは問題ではないようです (ただし、0.6.7 では必要だった可能性があります)。

from sympy import Eq, var, solve
var('y')    
eq = Eq(y*(8.0-(y**3.0)), 8)
solve(eq)
于 2013-06-28T13:32:15.860 に答える
2

非線形方程式のsympy.solvers.nsolve場合、より具体的で適切なソルバーが存在する可能性があるいくつかの特殊なケースを除いて、数値的に解くために使用する必要があります(例tsolve)。

たとえば、次のスクリプトは1.2667664310254を出力する必要があります。

from sympy import Symbol
from sympy.solvers import nsolve
from sympy import sin, tan

theta = Symbol('theta')
print nsolve(tan(theta)/(1+1*sin(theta)) - 4.0**2/9.81, theta, (1.2,))
于 2011-10-06T14:40:23.223 に答える
0

これは非線形方程式です。探す必要があるのは、SciPy のルート検索アルゴリズムです。

于 2010-12-15T10:59:29.227 に答える