2016-08-15 134 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