我尝试使用python的sympy库来计算:m(dv/dt)= -mg-dt
我有以下代码:
from sympy import *
import matplotlib as plt
mass, g, k, t = symbols('mass g k t', real=True)
v = symbols('v', cls=Function)
# equation = mass*v(t).diff(t)-mass*g+k*(v(t))**2
# print(equation)
equation = Eq(mass*v(t).diff(t), mass*g - k*v(t))
print(equation)
solution = dsolve(equation,v(t),hint='lie_group')
print(solution)
particularSolution = solution.subs([(v(t),0),(t,0)])
print(particularSolution)
C1 = symbols('C1')
const = solve(particularSolution, C1)
print(const)
final_solution = (solution.subs(C1,const[1]).rhs).expand().simplify()
print(final_solution)
我举了一个跳伞运动员的例子,他的终端速度是200公里/小时,然后我用
#m = 100kg
#g = 9.8 m/s2 => 127008 km/hr2
#v_max = 200km/hr
#k = mg/v_max => 63504
plot(final_solution.subs([(g,127008),(mass,100),(k,63504)]),(t,0,1))
但结果图看起来像x1c 0d1x
我不知道我的方程或sympy实现有什么问题,无法得到准确的图形
1条答案
按热度按时间u4dcyp6a1#
诚然,在写这篇文章之前,我没有重新推导你的方程,但乍一看,你的解似乎有点收敛于你所期望的。唯一让我感到奇怪的是,它在一个时间步长后达到极限。对我来说,这表明你的初始条件不太正确。
如果我把所有的东西都放回SI单位(米、千克、秒)并运行你的代码,你似乎得到了一些在实际时间内平滑地接近终端速度的东西:
其产生
快速谷歌搜索“终端速度图”显示类似的结果,所以我认为这是你正在寻找的。