【问题标题】:How to resolve double_scalar error in numpy?如何解决 numpy 中的 double_scalar 错误?
【发布时间】: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


    【解决方案1】:

    kx 的更新,lv 的更新,如 v=dx/dt。您正在将 ODE 更改为由两个半耦合一阶方程组成的不同系统。

    还要注意k4 中的拼写错误或删除错误。

    【讨论】:

    • 感谢您的帮助,我已经对我的代码进行了更改,但是仍然存在溢出错误,您知道如何解决吗?我本来打算做一个庞加莱地图,但一直遇到溢出问题
    • 经过一些调试,我意识到我的一些 x_n 项达到了 10^100,这就是导致错误的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 2021-03-18
    • 1970-01-01
    • 2021-11-29
    • 2017-10-06
    • 2020-11-01
    相关资源
    最近更新 更多