Main Content

ddesd

一般的な遅れを含む微分方程式 (DDE) を解く

構文

sol = ddesd(ddefun,delays,history,tspan)
sol = ddesd(ddefun,delays,history,tspan,options)

引数

ddefun

微分方程式 y′(t)=f(t,y(t),y(d(1),...,y(d(k))) の右辺を評価する関数ハンドル。方程式は、以下の形式でなければなりません。

dydt = ddefun(t,y,Z)

ここで、t は、現在の t に対応します。y は、y(t) を近似する列ベクトルです。Z(:,j) は、delays(t,y) の要素 j として与えられる 遅延 d(j) の y(d(j)) を近似します。出力は、 f(t,y(t),y(d(1),...,y(d(k))) に対応する列ベクトルです。

delays

遅延 d(j) の列ベクトルを返す関数ハンドル。遅延は、t と y(t) の両方に基づいて異なります。ddesd は、min(d(j),t) を使用して、d(j) ≤ t という要件を課しています。

すべての遅延関数の形式が d(j) = t – τj の場合、引数 delays を定数ベクトル delays(j) = τj に設定できます。この形式の遅延関数では、ddesd は、関数 dde23 と同様に使用されます。

history

以下の 3 つのいずれかの方法で、history を指定します。

  • t ≤ t0 の解 y(t) を列ベクトルとして返す y = history(t) のような t の関数

  • y(t) が定数の場合、定数列ベクトル

  • この呼び出しがその積分を続ける場合、前の積分からの解 sol

tspan

t0=tspan(1) から tf=tspan(end) までの積分区間。ここで、t0 < tf です。

options

オプションの積分引数。関数 ddeset を使用して作成する構造体。詳細については、ddeset を参照してください。

説明

sol = ddesd(ddefun,delays,history,tspan) は、次の DDE 系を積分します。

y(t)=f(t,y(t),y(d(1)),...,y(d(k)))

を [t0,tf] の区間で統合します。ここで遅延 d(j) は、t および y(t) の両方、および t0 < tf に基づいて異なります。入力 ddefun および delays は、関数ハンドルです。詳細については、関数ハンドルの作成を参照してください。

関数のパラメーター化 は必要に応じて追加のパラメーターを関数 ddefundelayshistory へ提供する方法を説明します。

関数 ddesd は、構造体 sol として解を返します。補助関数 deval と出力 sol を使用して、区間 tspan = [t0,tf] 内の特定の点 tint で、解を計算することができます。

yint = deval(sol,tint)

関数 ddesd により返される構造体 sol には、以下のフィールドがあります。

sol.x

ddesd で選択されたメッシュ

sol.y

sol.x のメッシュ点での y(x) への近似

sol.yp

sol.x のメッシュ点での y′(x) への近似

sol.solver

ソルバー名 'ddesd'

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)

この関数は、テストされる個々のイベントに関するイベント関数を含んでいます。eventsk 番目のイベント関数では、以下のようになります。

  • value(k) は、k 番目のイベント関数の値です。

  • このイベント関数のゼロの位置で積分を終了させたい場合は isterminal(k) = 1、その他の場合は 0 です。

  • このイベント関数のすべてのゼロを関数 ddesd で計算させる場合は direction(k) = 0、イベント関数が増加する部分のゼロのみの場合は +1、減少する部分のゼロのみの場合は -1 です。

'Events' オプションを指定してイベントを検出する場合、出力構造体 sol には、以下のフィールドも含まれます。

sol.xe

すべてのイベントの位置、つまり、イベント関数がゼロになる時刻を要素とする行ベクトル

sol.ye

sol.xe の時刻に対応する解の値を列の要素とする行列

sol.ie

sol.xe の中の対応する時間で生じるイベントのどれかを指定するインデックスから構成されるベクトル

以下の方程式があります。

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.