Main Content

ddeset

遅延を含む微分方程式オプション構造体を作成または変更

構文

options = ddeset('name1',value1,'name2',value2,...)
options = ddeset(oldopts,'name1',value1,...)
options = ddeset(oldopts,newopts)
ddeset

説明

options = ddeset('name1',value1,'name2',value2,...) は、名前が指定されたプロパティとその指定値を含む、積分器のオプション構造体 options を作成します。指定していないプロパティは既定値になります。プロパティを固有に識別する頭文字を入力するだけで十分です。関数 ddeset は、プロパティ名の大文字と小文字の区別を無視します。

options = ddeset(oldopts,'name1',value1,...) は、既存のオプション構造体 oldopts を変更します。これは指定された名前と値の組み合わせによって oldopts 内の値を書き換え、変更後の構造体を出力引数として返します。

options = ddeset(oldopts,newopts) は、既存のオプション構造体 oldopts と、新しいオプション構造体 newopts を組み合わせます。newopts 内の値が、oldopts 内の対応する値を書き換えます。

入力引数なしの ddeset は、すべてのプロパティ名と取り得る値を表示し、中かっこ {} 内に既定値を示します。

関数 ddeget を使用して、options 構造体から特定のプロパティの値をクエリできます。

DDE プロパティ

以下の節では、関数 ddeset を使用して設定できるプロパティについて説明します。プロパティには、いくつかのカテゴリがあります。

誤差制御プロパティ

各ステップで、DDE ソルバーはエラー e を推定します。関数 dde23 は、ローカル打ち切り誤差を推定し、その他のソルバーは、残差を推定します。いずれの場合でも、この誤差は、許容レベル以下の誤差でなければなりません。これは、指定された相対許容誤差 RelTol、および指定された絶対許容誤差 AbsTol の関数です。

|e(i)|*max(RelTol*abs(y(i)),AbsTol(i))

ルーチンの問題で、ソルバーは、ユーザーが要求した精度とほぼ同じ精度を設定します。ODE ソルバーは、「長い」間隔で積分する問題、およびある程度不安定な問題に対しては、精度を落として設定します。問題が複雑だと、場合によっては、許容誤差を既定値より厳しくする必要があります。相対精度については、RelTol を調節します。絶対許容誤差では、解要素のスケーリングが重要になります。|y|AbsTol よりやや小さい場合、ソルバーは y の正しい桁を取得しないことがあります。場合によっては、解要素のスケーリングを検出するために、問題の解を複数回求めなければなりません。

したがって、大まかに言うと、しきい値 AbsTol(i) より小さいものを除いて、すべての解の要素は RelTol 程度の正確な桁数が必要です。小さい成分 y(i) が重要ではない場合でも、これより重要な成分を正確に計算できるように、AbsTol(i) を小さく指定して、y(i) の正しい桁を取得しなければなりません。

次の表で誤差制御プロパティを説明します。

DDE 誤差制御プロパティ

プロパティ

説明

RelTol

正のスカラー {1e-3}

解ベクトル y のすべての要素に適用される相対的な許容誤差。これは、各解要素のサイズに相対的な誤差の測定です。概略を言えば、しきい値 AbsTol(i) 以上の場合のみ、解要素の正しい桁数を制御します。既定の設定 1e-3 は、0.1% の精度に対応します。

各積分ステップで推定される誤差は、|e(i)|max(RelTol*abs(y(i)),AbsTol(i)) を満たします。

AbsTol

正のスカラー、またはベクトル {1e-6}

解ベクトルの個々の要素に適用する絶対許容誤差。AbsTol(i) は、i 番目の解要素の値が重要でないと見なされるしきい値です。絶対許容誤差は、解がゼロに接近するときの精度を定義します。小さい成分 y(i) が重要ではない場合でも、これより重要な成分を正確に計算できるように、AbsTol(i) を小さく指定して、y(i) の正しい桁を取得しなければなりません。

AbsTol がベクトルの場合、AbsTol の長さは、解ベクトル y の長さと同じでなければなりません。AbsTol がスカラーの場合、値は、y のすべての要素に適用されます。

NormControl

on | {off}

解ノルムの相対誤差のコントロール。このプロパティを on に設定すると、norm(e)<= max(RelTol*norm(y),AbsTol) の範囲内で各積分ステップの誤差を制御するようにソルバーに要求できます。既定の設定では、ソルバーは誤差の制御に最も影響する成分を使用します。

ソルバー出力プロパティ

ソルバー出力プロパティを使用して、ソルバーが生成する出力を制御できます。

DDE ソルバー出力プロパティ

プロパティ

説明

OutputFcn

関数ハンドル {@odeplot}

出力関数は、積分ステップがすべて成功した後でソルバーが呼び出す関数です。出力関数を指定するには、'OutputFcn' を関数ハンドルに設定します。以下に例を示します。

options = ddeset('OutputFcn',...
@myfun)

これは、'OutputFcn' を関数 myfun のハンドルである @myfun に設定します。詳細については、関数ハンドルの作成を参照してください。

出力関数は、以下の形式でなければなりません。

status = myfun(t,y,flag)

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

ソルバーは、以下のフラグで指定された出力関数を呼び出します。呼び出し構文は、フラグにより異なるので注意してください。関数は適切に処理できるものでなければなりません。

  • init — ソルバーは、積分の開始前に myfun([tspan(1) tspan(end)],y0,'init') を呼び出して、出力関数を初期化できます。tspan は、ソルバーの入力引数です。y0 は解の初期値であり、history(t0) から取得されるか、initialY オプションで指定されます。

  • {none} — ソルバーは、出力が要求される各積分ステップ後に、status = myfun(t,y) を呼び出します。t には、出力がステップ中に生成されたポイントが含まれます。y は、t のポイントでの数値解です。t がベクトルの場合、yi 列目は ti 番目の要素に対応します。

    myfun は、0 または 1status 出力を返さなければなりません。status = 1 の場合、ソルバーは、積分を停止します。このメカニズムは、たとえば、Stop ボタンの実装に使用できます。

  • done — ソルバーは、積分が完了したときに myfun([],[],'done') を呼び出し、出力関数によるクリーンアップ タスクの実行を可能にします。

このような一般的な目的で出力関数を使用するか、変更して独自の関数を作成できます。詳細は、コマンド ラインで help functionname と入力してください。

  • odeplot – 時系列のプロット (出力引数なしでソルバーを呼び出した場合、および出力関数を指定しなかった場合の既定の設定)

  • odephas2 – 2 次元位相プロット

  • odephas3 – 3 次元位相プロット

  • odeprint – ソルバーによる計算時に解を出力

OutputSel

インデックスのベクトル

ソルバーが出力関数に渡す解ベクトルの要素を指定するインデックスのベクトル。たとえば、出力関数 odeplot を使用するが、最初と 3 番目の解要素のみをプロットする場合、以下のようにできます。

options = ddeset...
('OutputFcn',@odeplot,...
'OutputSel',[1 3]);

既定の設定では、ソルバーは、すべての解要素を出力関数に渡します。

Stats

on | {off}

ソルバーが計算に関する統計を表示するかどうかを指定します。既定の設定では、Statsoff です。on の場合、問題を解いた後、ソルバーは以下の情報を表示します。

  • 成功したステップの数

  • 失敗した実行試行回数

  • DDE 関数が呼び出された回数

ステップ サイズ プロパティ

ステップ サイズ プロパティを使用すると、ソルバーが試行する最初のステップのサイズを指定できます。これは、問題のスケールを認識するときに役立ちます。また、以降のステップのサイズに制限を指定できます。

次の表でステップ サイズ プロパティを説明します。

DDE ステップ サイズ プロパティ

プロパティ

説明

InitialStep

正のスカラー

推奨する初期ステップ サイズ。InitialStep は、ソルバーが試行する最初のステップ サイズの大きさの上限を設定します。InitialStep を設定しない場合、ソルバーは、最初の段階 tspan(1) における解の勾配の初期ステップ サイズを使用します。初期ステップ サイズは、最も短い遅延で制限されます。すべての解要素の勾配がゼロの場合、大きすぎるステップ サイズが試行されることがあります。この処理が行われることをユーザーが認識している場合や、ソルバーが積分ステップのはじめに重要な動作を解くことを確認したい場合は、適切な InitialStep を提供すると、コードの開始が効率的になります。

MaxStep

正のスカラー
{0.1*
abs(t0-tf)
}

ソルバー ステップ サイズの上限。微分方程式に周期係数または周期解が含まれる場合、MaxStep を周期の分数 (1/4 など) に設定することをお勧めします。これにより、ソルバーによりタイム ステップが大きくなりすぎず、目的の周期をまたいでしまわないようにします。MaxStep は約分しないでください

  • 解の正確さが十分でないことがあります。この場合は、相対許容誤差 RelTol を減らし、先ほど計算した解を使用して絶対許容誤差ベクトル AbsTol の適切な値を決定してください (許容誤差プロパティの詳細は、誤差制御プロパティを参照してください)。

  • ソルバーにより、シミュレーション中に一度だけ発生するいくつかの動作をまたがないようにすることができます。その変化が起きる時間が既知である場合、シミュレーション区間を 2 つに分割し、ソルバーを 2 回呼び出してください。その変化が起きる時間が未知である場合、許容誤差 RelTolAbsTol を減らしてみてください。MaxStep は、最後の手段として使用してください。

イベント検出プロパティ

DDE の問題によっては、特定のイベントの時刻が重要になります。ソルバーは、問題を解いているときに、ユーザー定義関数のゼロへの移行、ゼロからの移行、またはゼロを介した移行を見つけることで、このようなイベントを検出できます。

次の表で Events プロパティを説明します。

DDE イベント プロパティ

プロパティ

説明

Events

関数ハンドル

1 つ以上のイベント関数を含む関数ハンドル。dde23 および ddesd の場合、関数は次の構文を使用します。

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

ddensd の構文は次のとおりです。

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

出力引数 valueisterminal、および direction は、i 番目のイベント関数に対応する i 番目の要素のベクトルです。

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

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

  • ソルバーですべてのゼロを検出させる場合 (既定の設定) direction(i) = 0、イベント関数が増加する部分のゼロのみの場合 +1、減少する部分のゼロのみ -1 です。

    イベント関数を指定して、イベント関数が検出されると、ソルバーは、解の構造体 sol に 3 つの追加フィールドを返します。

  • sol.xe は、イベントが発生する時刻の行ベクトルです。

  • sol.ye は、sol.xe の時刻に対応する解の値を列の要素とする行列です。

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

常微分方程式問題を解くときにイベント関数を使用する例については、ODE のイベント検出を参照してください。

不連続点プロパティ

ソルバー関数は、履歴または方程式の係数の不連続点に関する問題を解くことができます。以下のプロパティを使用すると、これらのソルバーに異なる初期値を与えることが可能になり、dde23 に既知の不連続点の位置を提供できます。詳細については、DDE の不連続性を参照してください。

次の表は不連続点プロパティの説明です。

DDE 不連続点プロパティ

プロパティ

説明

Jumps

ベクトル

不連続点の位置。低次導関数内において、履歴または解がジャンプ不連続点の可能性がある t を示します。これは、dde23 ソルバーのみに適用されます。

InitialY

ベクトル

解の初期値。既定の設定では、解の初期値は、初期点で history で返される値です。異なる初期値を InitialY プロパティの値として提供します。

ソルバーの相対許容誤差を既定値 1e-3 から 1e-4 に変更するオプション構造体を作成するには、以下のように入力します。

options = ddeset('RelTol',1e-4);

options から 'RelTol' の値を復元するには、以下のように入力します。

ddeget(options,'RelTol')

ans =

  1.0000e-004

拡張機能

スレッドベースの環境
MATLAB® の backgroundPool を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool を使用してコードを高速化します。

バージョン履歴

R2006a より前に導入