python - OverflowError : (34, 'Result too large' ) on the resolution of a differential equation with Euler method

标签 python compiler-errors differential-equations

我正在尝试解决一个物理问题的微分方程:高尔夫球的下落。
我正在使用Euler解析方法,并且我有以下代码:

def F(Z, t):
    res = [Z[1], (-K/m)*Z[1]*sqrt((Z[1]**2) + (Z[1]**2)), Z[3], (-K/m)*Z[3]*sqrt((Z[3]**2) + (Z[3]**2))]
    return res

def reso_z_euler(liste_t, F, CI, K):
    n = len(liste_t)
    Z = CI
    pas = (liste_t[-1] - liste_t[0])/(n-1)
    listeZ = [Z]
    for i in range(1, n):
        Z = F(Z, temps[i-1])
        listeZ.append(Z)
    return listeZ

listeZ = reso_z_euler(temps, F, Z0, K)

当我运行此代码时,终端抛出错误:OverflowError:(34,“结果太大”)
我从未见过此错误,我也不知道该怎么办。
您的帮助会很好。
谢谢

最佳答案

  • 您正在使用未知或非本地数组,temps而不是liste_t
  • 您没有实现Euler方法Z = Z + pas*F(Z,liste_t[i-1]),则必须采用某种机制来实现 vector 算法,例如
    Z = [ zk+pas*fk for zk, fk in zip(Z, F(Z,liste_t[i-1])) ]
    
  • 您忘记了在导数计算中包括重力。


  • 通常,欧拉方法仅对学习数值ODE积分的原理有益,因为任何有用的结果都应使用高阶方法。

    关于python - OverflowError : (34, 'Result too large' ) on the resolution of a differential equation with Euler method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60470524/

    相关文章:

    python - 如何为 Google App Engine 编写 Web 服务?

    python - 散点图上的标称/分类轴

    c++-cli - 使用 Predicate 和 Array::FindAll() 编译 C++/CLI 委托(delegate)调用时出错

    用Notepad++编译生命游戏(C)

    python - Scipy:实现微分方程的两种方法:两种不同的解决方案:已回答

    python求解具有复变量的微分方程

    Python - 匹配和更改日期时间

    python - 如何为 z = f(x, y) 绘制平滑的 2D 颜色图

    linux - OpenCV 构建错误 : libwebp. 所以未找到

    python - SymPy 是否正确求解此 ODE?