ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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)) の右辺を評価する関数ハンドル。方程式は、以下の形式でなければなりません。

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)) に対応する列ベクトルです。

lags

正の定数遅れ τ1, ..., τk を要素とするベクトル。

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 = dde23(ddefun,lags,history,tspan) は、DDE のシステムを積分します。

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

この区間は [t0,tf] です。ここで、τ1, ..., τk は正の定数遅れおよび t0,tf です。入力引数 ddefun は、関数ハンドルです。

「関数のパラメーター化」では、必要に応じて関数 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) は、関数 ddeset で作成され、options に設定された値で、既定の積分プロパティを置き換えて、上記と同じ方法で解かれます。詳細は、関数 ddeset および MATLAB® ドキュメンテーションの「DDE のタイプ」を参照してください。

一般に使われるオプションは、スカラーの相対許容誤差 'RelTol' (既定の設定では 1e-3) と絶対許容誤差 'AbsTol' (既定の設定ではすべての要素に対して 1e-6) です。

'Jumps' オプションを使って、history または解に不連続性をもつ問題を解くことができます。このオプションは、t0 (history) の前の解または t0 の後の既知の値 t での方程式の係数にある不連続性の位置を含むベクトルに設定します。

'Events' オプションを使って、関数 g(t,y(t),y(tτ1),...,y(tτk)) がゼロになる部分を検出するために関数 dde23 が呼び出す関数を指定します。この関数は、以下の形式でなければなりません。

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

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

  • 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 の中の対応する時間で生じるイベントのどれかを指定するインデックスから構成されるベクトル

以下の例は、lags に 1 と 0.2 を使って、区間 [0,5] で DDE を解きます。関数 ddex1de は遅れを含む微分方程式を計算し、ddex1histt <= 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,” available at www.mathworks.com/dde_tutorial.

参考

| | | |

R2006a より前に導入

この情報は役に立ちましたか?