2016-08-15 201 views
3

我一直無法找到這個微分方程的特定解。求解微分方程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 

對於m = 1000和K = 0.2,它返回

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

這是正確的,但我想要的方程求解當v(0)= 0,這應返回

Eq(f(t), 49000*(1-exp(-0.0002*t)) 

回答

1

我相信Sympy尚未考慮初始條件。雖然dsolve有用於輸入初始條件的選項ics(請參閱文檔),但它似乎用途有限。

因此,您需要手動應用初始條件。例如:

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

此作品不夠好,是否有任何Python包,會做如何尋找特定的解決方案微分方程的一個更好的工作? – Kklj8

+0

@JessieCotton我不知道任何其他python符號數學包比sympy。但是,我認爲上述方法對於差異(通常)解決方案的大多數情況來說已經足夠了。 EQ。可以封閉的形式找到。 – Stelios

+0

解決此類ODE的初始條件應在SymPy的下一個版本中實現https://github.com/sympy/sympy/pull/11264 – asmeurer