2016-08-15 13 views
3

私はこの微分方程式に特定の解を見つけることができませんでした。 M = 1000とkの差分方程式を解くSympy

from sympy import * 

m = float(raw_input('Mass:\n> ')) 
g = 9.8 
k = float(raw_input('Drag Coefficient:\n> ')) 
v = Function('v') 
f1 = g * m 
t = Symbol('t') 
v = Function('v') 
equation = dsolve(f1 - k * v(t) - m * Derivative(v(t)), 0) 
print equation 

= .2それは正しいが、私は、V(0)

Eq(f(t), 49000*(1-exp(-0.0002*t)) 
を返すべき= 0の場合の式は解く必要

Eq(f(t), C1*exp(-0.0002*t) + 49000.0) 

を返します

答えて

1

私はSympyがまだ初期条件を考慮していないと信じています。 dsolveには初期条件を入力するためのオプションicsがありますが(マニュアルを参照)、使用が制限されているようです。

したがって、手動で初期条件を適用する必要があります。例えば:、微分方程式の特定の解決策を見つけるのより良い仕事をするだろう任意のPythonパッケージは

C1 = Symbol('C1') 
C1_ic = solve(equation.rhs.subs({t:0}),C1)[0] 

print equation.subs({C1:C1_ic}) 

Eq(v(t), 49000.0 - 49000.0*exp(-0.0002*t))

+0

これは十分に機能がありますか? – Kklj8

+0

@JessieCotton私はSympyよりも他のPythonシンボリック数学パッケージについて知らない。しかし、私は上記の方法論が、diffの(一般的な)解の大半の場合には十分であると思う。 eq。閉じた形で見つけることができます。 – Stelios

+0

この種のODEを解決する初期条件は、SymPyの次のバージョンhttps://github.com/sympy/sympy/pull/11264で実装する必要があります – asmeurer