我試圖解決一個物理問題的微分方程:高爾夫球的墜落。我正在使用歐拉解析方法,我有這個代碼: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 resdef 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 listeZlisteZ = reso_z_euler(temps, F, Z0, K)當我運行此代碼時,終端拋出一個錯誤:OverflowError:(34,“結果太大”)我從未見過此錯誤,我不知道該怎么辦。你的幫助會很好..謝謝
1 回答

波斯汪
TA貢獻1811條經驗 獲得超4個贊
您正在使用未知或非本地數組作為時間,而不是
temps
liste_t
你沒有實現歐拉方法,你必須使用某種機制來實現向量算術,例如
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])) ]
您忘記在導數計算中包含重力。
一般來說,歐拉方法只適合學習數值ODE積分的原理,對于任何有用的結果,請使用高階方法。
添加回答
舉報
0/150
提交
取消