簡體   English   中英

如何數值求解延遲微分方程

[英]How to solve a delay differential equation numerically

我想用數字計算Buchstab function 它由延遲微分方程定義:

在此處輸入圖像描述

我怎樣才能有效地計算這個數值?

為了大致了解 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM