2016-12-14 7 views
2

Sympyを使用して方程式を解くのに問題があります。私は、コードを実行すると、例えば:solve()実行が中止されました

print(correction(10))

私はそれをfナンバーを印刷することを期待しています。代わりに、それは私にエラーを与える:実行が中止されました。

def correction(r): 

    from sympy import cosh, log, exp, symbols, solve 
    f = symbols('f') 

    def equation(): 
     return cosh(((r - 1.0)/(r + 1.0))*(log(2.0)/f)) - 0.5*exp(log(2.0)/f) 

    correction = solve(equation(),f) 
    return correction 

何が問題ですか?

+0

サウンド。 'r!= 0'でこれを試してみると、これはちょうど座って、CPUを消費してバックトラッカーのメモリー使用が増えています。結論として、「sympy」は自分自身を死に追いかける。 – dhke

答えて

4

あなたの方程式は非常に非線形で、私の推測では、閉じた形の解を見つけることができません。だからこそsympy.solveは失敗します。方程式を数値的に解くだけです。 Sympyはこの目的のためにnsolve関数を提供しています。これは数値的ソルバの典型であるように、解の推定を必要とします。あなたには、いくつかの時間やメモリの制限に実行されているような

import sympy as sp 
r, f = sp.symbols('r, f') 
expr = sp.cosh(((r - 1)/(r + 1))*(sp.log(2)/f)) - sp.Rational(1,2)*sp.exp(sp.log(2)/f) 

sol = sp.nsolve(expr.subs({r:10}), f, 0.5) 
print(sol) 

0.699259455239414

+0

いつものように賢い。そして、あなたはどのように1/2を選んだのですか? –

+1

@BillBell関数をプロットし、その点の近くにゼロ点があることを確認してください:) – Stelios

+1

'sp.Rational'と' expr.subs({r:10}) 'の部分について説明してください。私は前にこれらを見かけなかった。 –

関連する問題