2016-11-16 4 views
2

私は(f(t) * g(t))^aのような簡単な方程式を持っています。ここで、aはパラメータであり、fgはtの関数です。私は複製しようとしている方法はf(t), g(t), f'(t)と表現、および `G '(t)となるべき、tに対する式を差別シンピはなぜ値を正しく置き換えないのですか?

  1. です。アップ上記の単純な例では、結果は今

    a * (f(t) * g(t))**(a - 1) * (f'(t) * g(t) + f(t) * g'(t)) 
    
  2. する必要があり、我々は、この特定の問題のいくつかの知識一つの特定の定常値のみで、私たちが知っている(経済学の問題を)、使用しますf(t)およびg(t)の値である。 f(tss) = 1g(tss) = 100としましょう。ここでtssは定常状態の値です。これはtss = 7と任意に設定されます。これらは、であり、fおよびgの一般的な機能形式ではありません。です。

  3. これらの値を代入すると、f'(tss)g'(tss)という2つの未知数の式があります。この時点で、それが派生かどうかは関係ありません。彼らは単なる未知数であり、これと組み合わせると、scipy.optimize.fsolveまたはsympyのソルバーの1つを使って解くことができる非線形システムを私に与えるという別の式があります。

質問は、私はステップ1と2に固執しています。下記のコードは正しく値を置き換えていないようです。

from sympy import * 
t = symbols('t') 
a = symbols('a') 
f, g = symbols('f g', cls=Function) 
eq = (f(t) * g(t))**a 
eq_diff = eq.diff(t) 
output = eq_diff.evalf(subs={f:1, g:100, a:0.5}) 
output 

これは、すべての値を代入しません ![derivatives

を出力します。私は間違って何をしていますか?

この場合も、これはほんの数学的な例ですが、問題をうまく示しています。

+0

「d」はどこから来たのですか? – user2357112

+0

@ user2357112 Typo。それを私が直した。値はまだ正しく置き換えられません。 –

答えて

1

あなたはこのような何かを行うことができます:

fd, gd = symbols('f_d, g_d') #values of steady-state derivatives 
output.subs({f(t).diff(t):fd, g(t).diff(t):gd, f(t):1, g(t):100, a:Rational(1,2)}) 

5*f_d + g_d/20

+0

[その他の回答](http://stackoverflow.com/a/40626765/2766558)置換の構文については正しいですが、私は間違いなくその派生物の代わりにあなたの考えを使用しています。それは私のシステムにプラグインする簡単な方程式を与えます。ありがとうございました! –

1

sympy 1.0ドキュメントは、複数の置換のためのタプルのリストを示しています。私にとってシンボリック変数のための置換を行い

output = eq_diff.subs([(f, 1), (g, 100), (a, 0.5)]) 

F、Gを期待する理由

機能名は交換されますか?

0

設定だけで関数名fは、それに代わるものではありません。 {f(t): 1}または{f(t).diff(t): 1}などの完全な式が必要です(前者は微分を0に置き換えます)。

関連する問題