提问人:Axel 提问时间:10/18/2023 最后编辑:Ch3steRAxel 更新时间:10/21/2023 访问量:67
常微分方程的数值实现与解析解有很大不同
Numerical implementation of ODE differs largely from analytical solution
问:
我正在尝试解决自由落体的 ODE,包括空气阻力。
因此,我将我的 ODE 定义为:
def f(v, g, k, m):
return g - k/m * v**2
在我看来,这应该正确地代表系统,因为
m*a = m*g -k*v**2
哪里。a=vdot
现在我使用显式欧拉方法求解这个常微分方程,如下所示:
h = 0.1
t = np.arange(0, 1000 + h, h)
v0 = 0
g = 9.81
k = 0.1
m = 1.
# Explicit Euler Method
v_num = np.zeros(len(t))
v_num[0] = 0
x_num = np.zeros(len(t))
x_num[0] = 100
for i in range(0, len(t) - 1):
v_num[i + 1] = v_num[i] + h*f(v_num[i], g, k, m)
x_num[i + 1] = x_num[i] - v_num[i + 1] * h
乍一看,这似乎工作正常。但是,我将其与我在网上找到的 ODE 的解析解作图
v_ana = m*g*(1.-np.exp(-k/m*t))/k
它们似乎有很大不同,如下所示。
我哪里做错了?
答:
评论
vdot = g - k/m * v**2
v_ana = m*g*(1.-np.exp(-k/m*t))/k
x
v
x