天天看點

MATLAB 數學應用 微分方程 時滞微分方程 dde23

dde23:求解帶有固定時滞的時滞微分方程 (DDE)。

文法

sol = dde23(ddefun,lags,history,tspan)

sol = dde23(ddefun,lags,history,tspan,options)

參數

參數 說明
ddefun 用于對微分方程 y ′ ( t ) = f ( t , y ( t ) , y ( t − τ 1 ) , . . . , y ( t − τ k ) ) y'(t)=f(t,y(t),y(t−τ_1),...,y(t−τ_k)) y′(t)=f(t,y(t),y(t−τ1​),...,y(t−τk​)) 右側進行計算的函數句柄。此函數必須為以下形式:dydt = ddefun(t,y,Z);其中 t 對應目前 t,y 是一個求 y(t) 近似值的列向量,Z(:,j) 用于為時滞 τj = lags(j) 求 y(t – τj) 的近似值。輸出是對應 f ( t , y ( t ) , y ( t − τ 1 ) , . . . , y ( t − τ k ) ) f(t,y(t),y(t−τ_1),...,y(t−τ_k)) f(t,y(t),y(t−τ1​),...,y(t−τk​)) 的列向量。
lags 固定正時滞向量 τ1, …, τk。
history 按以下三種方式之一指定 history:
  • 一個 t 函數,要求 y = history(t) 能夠将 t ≤ t0 的解 y(t) 以列向量的形式傳回
  • 一個固定列向量(如果 y(t) 為常量)
  • 來自之前積分的解 sol(如果此調用繼續該積分)
tspan 從 t0=tspan(1) 到 tf=tspan(end) 的積分區間,其中 t0 < tf。
options 可選積分參數。使用 ddeset 函數建立的結構體。

說明

sol = dde23(ddefun,lags,history,tspan) 計算 DDE 結構體

y ′ ( t ) = f ( t , y ( t ) , y ( t − τ 1 ) , . . . , y ( t − τ k ) ) y'(t)=f(t,y(t),y(t−τ_1),...,y(t−τ_k)) y′(t)=f(t,y(t),y(t−τ1​),...,y(t−τk​))

在 [ t 0 , t f ] [t_0,t_f] [t0​,tf​] 區間上的積分,其中 τ 1 , . . . , τ k τ_1, ..., τ_k τ1​,...,τk​ 為固定正時滞和 t 0 , t f t_0,t_f t0​,tf​。輸入參數 ddefun 是一個函數句柄。

dde23 以結構體 sol 的形式傳回解。使用輔助函數 deval 和輸出 sol 來計算區間 tspan = [t0,tf] 中的特定點 tint 的解。

yint = deval(sol,tint)

dde23 傳回的結構體 sol 包含下列字段。

字段 含義
sol.x dde23 選擇的網格
sol.y sol.x 網格點處的 y(x) 近似值。
sol.yp sol.x 網格點處的 y(x) 近似值
sol.solver 求解器名稱 ‘dde23’

sol = dde23(ddefun,lags,history,tspan,options) 的解算方法與上述方法相同,隻是将預設積分屬性替換為了 options(使用 ddeset 建立的參數)中的值。

常用選項包括标量相對誤差容限 ‘RelTol’(預設為 e − 3 e^{-3} e−3)和絕對誤差容限的向量 ‘AbsTol’(預設情況下,所有分量均為 e − 6 e^{-6} e−6)。

使用 ‘Jumps’ 選項解決曆史記錄或求解中的不連續問題。将此選項設定為一個包含不連續性問題位置的向量,這些不連續性位于 t 0 t_0 t0​ 之前的求解中(曆史記錄),或者位于 t 0 t_0 t0​ 之後的 t t t 已知值位置的等式系數中。

使用 ‘Events’ 選項指定一個函數,dde23 調用該函數來找出函數 g ( t , y ( t ) , y ( t − τ 1 ) , . . . , y ( t − τ k ) ) g(t,y(t),y(t−τ_1),...,y(t−τ_k)) g(t,y(t),y(t−τ1​),...,y(t−τk​)) 消失位置。此函數必須為以下形式

[value,isterminal,direction] = events(t,y,Z)

并包含一個事件函數以測試每個事件。對于 events 中的第 k 個事件函數:

  • value(k) 是第 k 個事件函數的值。
  • 如果想要積分在此事件函數為零時終止,則 isterminal(k) = 1;否則為 0。
  • 如果想要 dde23 計算此事件函數的所有零,則 direction(k) = 0;如果僅計算事件函數呈上升趨勢時的零,則 +1,如果僅計算事件函數呈下降趨勢時的零,則 -1。

如果指定了 ‘Events’ 選項,并且檢測到事件,輸出結構體 sol 還包括下列字段:

字段 含義
sol.xe 包含所有事件位置的行向量,即事件函數消失的時間
sol.ye 包含特定列資料的矩陣,其列值為與 sol.xe 中的時間對應的解
sol.ie 索引向量,其中的索引值用于指定在 sol.xe 中的對應時間所發生的事件

示例

以下示例顯示如何在 [0, 5] 區間上對 DDE 求解,其中 lags 為 1 和 0.2。ddex1de 函數計算時滞微分方程,ddex1hist 計算 t <= 0 的曆史記錄。

此代碼在 [0,5] 的區間上以 100 個等間距點計算解,然後繪制結果。

tint = linspace(0,5);
yint = deval(sol,tint);
plot(tint,yint);
           

ddex1 顯示如何使用局部函數解決此問題。

算法

dde23 跟蹤不連續性并使用顯式 Runge-Kutta (2,3) 對和插值對 ode23 求積分。它通過疊代來采用超過時滞的步長。

繼續閱讀