[英]How to solve a delay differential equation numerically
為了大致了解 DDE 集成的工作原理,我將提供一些基於低階 Heun 方法的代碼(以避免無趣的細節,同時仍然有點用處)。
在數值積分中,先前的值被視為 function 的時間,就像任何其他時間相關項一樣。 由於沒有真正的函數表達式,目前的解決方案將用作 function 表進行插值。 插值誤差階數應與 ODE 積分器的誤差階數一樣高,這對於低階方法很容易安排,但對於高階方法則需要額外的努力。 solve_ivp
步進器類每步提供這樣一個“密集輸出”插值,可以針對當前存在的積分區間組裝成 function。
所以在理論之后實踐。 Select 步長h=0.05
,將給定的歷史記錄 function 轉換為解決方案的開始 function 表
u=1
u_arr = []
w_arr = []
while u<2+0.5*h:
u_arr.append(u)
w_arr.append(1/u)
u += h
然后求解方程,對於延遲值使用 function 表中的插值,這里使用numpy.interp
。 `scipy.interpolate 中還有其他具有更多選項的函數。
請注意, h
需要小於最小延遲,以便延遲值來自上一步。 這里就是這種情況。
u = u_arr[-1]
w = w_arr[-1]
while u < 4:
k1 = (-w + np.interp(u-1,u_arr,w_arr))/u
us, ws = u+h, w+h*k1
k2 = (-ws + np.interp(us-1,u_arr,w_arr))/us
u,w = us, w+0.5*h*(k1+k2)
u_arr.append(us)
w_arr.append(ws)
現在可以進一步處理數值近似,例如繪制。
plt.plot(u_arr,w_arr); plt.grid(); plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.