2017-10-27 23 views
3

dsolveを使用して初期値の問題を解決したいが、初期条件icsは効果がないようです。この例のdsolveは両方とも同じ結果を示します。私はSympy ODEソルバーの初期条件は無効です

  x 
f(x) = C1 ℯ 

C1同じ解を得るいずれの場合も

from sympy import * 
x = symbols('x') 
f = Function('f') 

eq = Eq(Derivative(f(x), x), f(x)) 

# No initial condition 
pprint(dsolve(eq, f(x))) 

# With initial condition f(0) = 1 
pprint(dsolve(eq, f(x), ics={f(0):1})) 

さえicsで値1によって置き換えられません。 Sympy second order odeにsympy issue 4720が記載されていますが、問題は解決しました。 SymPy 1.1.1を使用しています。

答えて

3

PR implementing the initial conditionsは、SymPy 1.1.1の一部ではありませんが、1.2にある必要があります。あなたはSymPyのバージョンが

from sympy.solvers.ode import solve_ics 

を(それがエラーをスローした場合、あなたは級数を除きICSをサポートしていません)を実行して、それを持っているかどうかをテストすることができます。あなたが述べた投稿に加えて、私のanswerは、solve(さまざまな状況で異なるタイプを返す習慣がある)を使用して定数を見つけて置き換える方法について簡単に議論しています。

eq = Eq(Derivative(f(x), x), f(x)) 
sol = dsolve(eq, f(x)).rhs 
constants = solve([sol.subs(x,0)-1], dict=True) 
print(sol.subs(constants[0])) 
+2

このプル要求は、SymPy 1.1リリースの後にマージされました。 1.1.1のリリースは、1.1の上に重大な修正を含む小さなバグ修正リリースでした。 1.1の後にマージされた大きな変更は含まれていませんでした。ブランチは次のメジャーバージョン(1.2)に含まれるべきです。または、gitマスターバージョンのSymPyを使用して今すぐ入手できます(http://docs.sympy.org/latest/install.html#gitを参照)。 – asmeurer

+1

私にとって最も混乱していたのは、[支店1.1.1に解決策があります](https://github.com/sympy/sympy/blob/1.1.1/sympy/solvers/ode.py)です。 – FTP

+1

これを指摘してくれてありがとう。リリースブランチはずっと前に削除されているはずです。それは、リリース後にマスターをマージしたので(マスターに戻ってマージされる可能性があるので)、その中に機能がありました。見るべき正しいことは[sympy-1.1.1タグ](https://github.com/sympy/sympy/blob/sympy-1.1.1/sympy/solvers/ode.py)です。 – asmeurer

関連する問題