dde23
一定の遅れを含む差分方程式 (DDE) を解く
構文
sol = dde23(ddefun,lags,history,tspan)
sol = dde23(ddefun,lags,history,tspan,options)
引数
| 微分方程式 の右辺を評価する関数ハンドル。方程式は、以下の形式でなければなりません。 dydt = ddefun(t,y,Z) ここで、 |
| 定数の正の遅延 τ1, ..., τk を要素とするベクトル。 |
| 以下の 3 つのいずれかの方法で、
|
|
|
| オプションの積分引数。関数 |
説明
sol = dde23(ddefun,lags,history,tspan)
は、次の DDE 系を積分します。
区間は [t0,tf] です。ここで τ1, ..., τk は定数で正の遅延、および t0,tf です。入力引数 ddefun
は、関数ハンドルです。
関数のパラメーター化では、必要に応じて関数 ddefun
にパラメーターを追加する方法について説明しています。
関数 dde23
は、構造体 sol
として解を返します。補助関数 deval
と出力 sol
を使用して、区間 tspan = [t0,tf]
内の特定の点 tint
で、解を計算することができます。
yint = deval(sol,tint)
関数 dde23
により返される構造体 sol
には、以下のフィールドがあります。
|
|
|
|
|
|
| ソルバー名 |
sol = dde23(ddefun,lags,history,tspan,options)
は、関数 ddeset
で作成された引数の options
に設定された値で、既定の積分プロパティを置き換えて上記のように解きます。詳細については、ddeset
および遅延微分方程式の求解を参照してください。
一般に使われるオプションは、スカラーの相対許容誤差 'RelTol'
(既定の設定では 1e-3
) と絶対許容誤差 'AbsTol'
(既定の設定ではすべての要素に対して 1e-6
) です。
'Jumps'
オプションを使って、履歴または解に不連続点がある問題を解くことができます。このオプションをベクトルに設定します。このベクトルには、t0
(その履歴) に先立つ解、または t0
より後の既知の t の値での方程式の係数の、いずれかにある不連続点の位置が含まれます。
'Events'
オプションを使用して、関数 がゼロになる位置を検出するために dde23
が呼び出す関数を指定します。この関数は、以下の形式でなければなりません。
[value,isterminal,direction] = events(t,y,Z)
この関数は、テストされる個々のイベントに関するイベント関数を含んでいます。events
の k
番目のイベント関数では、以下のようになります。
value(k)
は、k
番目のイベント関数の値です。このイベント関数のゼロの位置で積分を終了させたい場合は
isterminal(k) = 1
、その他の場合は0
です。このイベント関数のすべてのゼロを関数
dde23
で計算させる場合はdirection(k) = 0
、イベント関数が増加する部分のゼロのみの場合は+1
、減少する部分のゼロのみの場合は-1
です。
'Events'
オプションを指定してイベントを検出する場合、出力構造体 sol
には、以下のフィールドも含まれます。
| すべてのイベントの位置、つまり、イベント関数がゼロになる時刻を要素とする行ベクトル |
|
|
|
|
例
以下の例は、lags に 1 と 0.2 を使って、区間 [0,5] で DDE を解きます。関数 ddex1de
は遅れを含む微分方程式を計算し、ddex1hist
は t <= 0
の history を計算します。
メモ
ファイル ddex1.m
には、この例のコードがすべて含まれています。エディターでコードを表示するには、コマンド ラインで edit ddex1
と入力します。実行するには、コマンド ラインで ddex1
と入力してください。
sol = dde23(@ddex1de,[1, 0.2],@ddex1hist,[0, 5]);
このコードは、区間 [0,5]
の 100 点の等間隔点で解を評価し、結果をプロットします。
tint = linspace(0,5); yint = deval(sol,tint); plot(tint,yint);
ddex1
は、ローカル関数を使って、この問題をコード化する方法を示しています。他の例については、ddex2
を参照してください。
アルゴリズム
関数 dde23
は、陽的 Runge-Kutta (2,3) と ode23
の内挿を使って、不連続点を追跡し、積分します。反復を使って、遅れより長いステップを使います。
参照
[1] Shampine, L.F. and S. Thompson, “Solving DDEs in MATLAB,” Applied Numerical Mathematics, Vol. 37, 2001, pp. 441-458.
[2] Kierzenka, J., L.F. Shampine, and S. Thompson, “Solving Delay Differential Equations with dde23”
バージョン履歴
R2006a より前に導入