终端速度微分方程 from sympy

Terminal Velocity Differential Equation with from sympy

提问人:Tommy Sanger 提问时间:10/2/2023 最后编辑:Trenton McKinneyTommy Sanger 更新时间:10/2/2023 访问量:47

问:

我正在尝试使用python的sympy库从以下方面进行计算: m(dv/dt) = -毫克-kv

我有以下代码:

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))

但生成的图形如下所示enter image description here

我不知道我的方程或对称实现有什么问题,无法获得准确的图形

python matplotlib sympy 微分方程

评论

0赞 t.o. 10/2/2023
如果将初始条件保留在 SI 中,并在找到解决方案后转换为 hm/hr,会发生什么情况?

答:

2赞 t.o. 10/2/2023 #1

诚然,在写这篇文章之前,我没有重新推导你的方程,但乍一看,你的解决方案似乎有点收敛到你的期望。唯一让我感到奇怪的是,它在一个时间步长后就达到了极限。对我来说,这表明你的初始条件并不完全正确。

如果我把所有东西都放回 SI 单位(米、千克、秒)并运行你的代码,你似乎会得到一些在实际时间内平滑接近终端速度的东西:

mm = 100 #kg
gg = 9.8 #m/s2
vm = 55.5555777778 #m/s
kk = mm*gg/vm 


plot(final_solution.subs([(g,gg),(mass,mm),(k,kk)]),(t,0,100))

这产生

result

快速谷歌搜索“终端速度图”会显示类似的结果,所以我认为这就是你要找的。

评论

1赞 Tommy Sanger 10/2/2023
首先,谢谢你。你已经证实我只是犯了一个数学错误。转换为 SI 时,我正在做 kk = (200*9.8)/360 而不是 3600....非常感谢你让我很快意识到这一点。