OverflowError:(34,'结果太大')关于使用欧拉方法的微分方程的分辨率

问题描述 投票:-1回答:1

我正在尝试解决一个物理问题的微分方程:高尔夫球掉落。我正在使用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,'结果太大')我从未见过此错误,我也不知道该怎么办。您的帮助会很好。谢谢

python compiler-errors differential-equations
1个回答
0
投票
  • 您当前使用的是未知数组或非本地数组,以temps而不是liste_t

  • 例如,您没有实现Euler方法Z = Z + pas*F(Z,liste_t[i-1]),您将必须采用某种机制来实现矢量算术]]

    Z = [ zk+pas*fk for zk, fk in zip(Z, F(Z,liste_t[i-1])) ]
    
  • [您忘了在导数计算中包括重力。


  • 通常,Euler方法只适合学习数值ODE积分的原理,对于任何有用的结果,请使用高阶方法。

© www.soinside.com 2019 - 2024. All rights reserved.