ddesd
一般的な遅れを含む微分方程式 (DDE) を解く
構文
sol = ddesd(ddefun,delays,history,tspan)
sol = ddesd(ddefun,delays,history,tspan,options)
引数
| 微分方程式 y′(t)=f(t,y(t),y(d(1),...,y(d(k))) の右辺を評価する関数ハンドル。方程式は、以下の形式でなければなりません。 dydt = ddefun(t,y,Z) ここで、 |
| 遅延 d(j) の列ベクトルを返す関数ハンドル。遅延は、t と y(t) の両方に基づいて異なります。 すべての遅延関数の形式が d(j) = t – τj の場合、引数 |
| 以下の 3 つのいずれかの方法で、
|
|
|
| オプションの積分引数。関数 |
説明
sol = ddesd(ddefun,delays,history,tspan) は、次の DDE 系を積分します。
を [t0,tf] の区間で統合します。ここで遅延 d(j) は、t および y(t) の両方、および t0 < tf に基づいて異なります。入力 ddefun および delays は、関数ハンドルです。詳細については、関数ハンドルの作成を参照してください。
関数のパラメーター化 は必要に応じて追加のパラメーターを関数 ddefun、delays、history へ提供する方法を説明します。
関数 ddesd は、構造体 sol として解を返します。補助関数 deval と出力 sol を使用して、区間 tspan = [t0,tf] 内の特定の点 tint で、解を計算することができます。
yint = deval(sol,tint)
関数 ddesd により返される構造体 sol には、以下のフィールドがあります。
|
|
|
|
|
|
| ソルバー名 |
sol = ddesd(ddefun,delays,history,tspan,options) は、関数 ddeset で作成された引数の options に設定された値で、既定の積分プロパティを置き換えて上記のように解きます。詳細については、ddeset および遅延微分方程式の求解を参照してください。
一般に使われるオプションは、スカラーの相対許容誤差 'RelTol' (既定の設定では 1e-3) と絶対許容誤差 'AbsTol' (既定の設定ではすべての要素に対して 1e-6) です。
'Events' オプションを使って、関数 g(t,y(t),y(d(1)),...,y(d(k))) がゼロになる部分を検出するときに関数 ddesd が呼び出す関数を指定します。この関数は、以下の形式でなければなりません。
[value,isterminal,direction] = events(t,y,Z)
この関数は、テストされる個々のイベントに関するイベント関数を含んでいます。events の k 番目のイベント関数では、以下のようになります。
value(k)は、k番目のイベント関数の値です。このイベント関数のゼロの位置で積分を終了させたい場合は
isterminal(k) = 1、その他の場合は0です。このイベント関数のすべてのゼロを関数
ddesdで計算させる場合はdirection(k) = 0、イベント関数が増加する部分のゼロのみの場合は+1、減少する部分のゼロのみの場合は-1です。
'Events' オプションを指定してイベントを検出する場合、出力構造体 sol には、以下のフィールドも含まれます。
| すべてのイベントの位置、つまり、イベント関数がゼロになる時刻を要素とする行ベクトル |
|
|
|
|
例
以下の方程式があります。
sol = ddesd(@ddex1de,@ddex1delays,@ddex1hist,[0,5]);
これは、関数 ddex1delays で指定された遅延、および ddex1de で計算された微分方程式により、区間 [0,5] で DDE の解を求めます。履歴は、関数 ddex1hist により、t ≤ 0 に対して評価されます。この解は、[0,5] の 100 点の等間隔点で評価されます。
tint = linspace(0,5); yint = deval(sol,tint);
また、以下のようにプロットされます。
plot(tint,yint);
この式には、定数遅れが含まれます。関数 delay の形式を以下に示します。
function d = ddex1delays(t,y)
%DDEX1DELAYS Delays for using with DDEX1DE.
d = [ t - 1
t - 0.2];この式は、定数遅れに対応する構文で解を求めることもできます。
delays = [1, 0.2]; sol = ddesd(@ddex1de,delays,@ddex1hist,[0, 5]);
または、関数 dde23 を使用することもできます。
sol = dde23(@ddex1de,delays,@ddex1hist,[0, 5]);
遅れを含む微分方程式の解を求める例については、ddex2 および ddex3 を参照してください。
参照
[1] Shampine, L.F., “Solving ODEs and DDEs with Residual Control,” Applied Numerical Mathematics, Vol. 52, 2005, pp. 113-127.