【发布时间】:2021-07-20 16:33:18
【问题描述】:
我使用 4 阶 Runge Kutta 方法求解带有 NumPy 数组的 duffing 振荡器的微分方程,但我收到了一个错误。
RuntimeWarning: overflow encountered in double_scalars
有谁知道可能导致溢出错误的可能错误来源以及我可以尝试解决的方法?
t = np.linspace(0,1,steps)
# start at t=0
h = t[1] - t[0]
xn = np.zeros(steps)
xn[0] = 1
vn = np.zeros(steps)
vn[0] = 1
for n in range(1,steps):
k1 = vn[n-1]
l1 = g * np.cos(w * t[n-1]) - d * vn[n-1] - a * xn[n-1] - b * xn[n-1] **3
k2 = vn[n-1] + h*k1/2
l2 = g * np.cos(w * (t[n-1] + h/2)) - d * (vn[n-1] + h*k1/2) - a * (xn[n-1] + h*l1/2) - b * (xn[n-1] + h*l1/2)**3
k3 = vn[n-1] + h*k2/2
l3 = g * np.cos(w * (t[n-1] + h/2)) - d * (vn[n-1] + h*k2/2) - a * (xn[n-1] + h*l2/2) - b * (xn[n-1] + h*l2/2)**3
k4 = vn[n-1]*k3
l4 = g * np.cos(w * (t[n-1] + h)) - d * (vn[n-1] + h*k3) - a * (xn[n-1] + h*l3) - b * (xn[n-1] + h*l3)**3
vn[n] = vn[n-1] + h/6 * (k1 + 2* k2 + 2 * k3+ k4)
xn[n] = xn[n-1] + h/6 * (l1 + 2* l2 + 2* l3 + l4)
这是我的代码供任何人需要时参考。 vn 表示 v_numerical 维基百科的链接以供参考:https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods 我认为理解公式并不重要,我可以尝试一些可能的解决方案来解决问题。
【问题讨论】:
标签: python numpy numerical-methods runge-kutta