2017-07-20 9 views
1

Iは、F(x)は符号関数記号であり、xは可変記号であるSymPySymPy:式を定数で評価するにはどうすればよいですか?

diffeq = Eq(f(x).diff(x, x) - 2*f(x).diff(x) + f(x), sin(x)) 

に書き込まれ、この微分方程式を有します。

私はこれでそれを解決する場合:

expr = dsolve(diffeq, f(x)) 

私はこの方程式の正しい解決策である

f(x)=(C_1+C_2x)ex+12cos(x) 

を取得します。しかし、今私はいくつかの点でこの機能を評価したいと思います。私はxをsubs関数で置き換えることができますが、関数C_1とC_2を代入する方法があるので、関数を評価することができますか?

答えて

1

icsフラグをdsolveに追加すると、これがGitHubに開かれるPRがあります。

は今のところ、あなたはC1C2を解くためにsolveを使用して、手動でsubsを使用して値を代入し、バック溶液に値を代入するsubsを使用することができます。

例えば、f(0) = 1f'(0) = 0場合、あなたは

>>> p1 = expr.subs([(x, 0), (f(0), 1)]) 
>>> dexpr = Eq(expr.lhs.diff(x), expr.rhs.diff(x)) 
>>> p2 = dexpr.subs([(x, 0), (f(x).diff(x).subs(x, 0), 0)]) 
>>> p1 
Eq(1, C1 + 1/2) 
>>> p2 
Eq(0, C1 + C2) 
>>> C1, C2 = symbols('C1 C2') 
>>> sol = solve([p1, p2], [C1, C2]) 
>>> sol 
{C1: 1/2, C2: -1/2} 
>>> expr.subs(sol) 
Eq(f(x), (-x/2 + 1/2)*exp(x) + cos(x)/2) 
のようなものを使用したいです
0

あなたの式からあなたの定数を得ることができます。それは少し厄介だが、それは動作します:

v1 = expr.args[1].args[1].args[0].args[0] 
v2 = expr.args[1].args[1].args[0].args[1].args[0] 
expr.subs(v1,1).subs(v2,2) 

説明:expr.argsを見てください 。方程式の左辺と右辺のタプルです。ここでは、タプルの2番目のエントリ、つまりインデックス1が必要です。 sympy.core.add.Addを取得します。これはargsを使って再び分解することができ、定数に達するまで続けることができます。

関連する問題