中立型初期値 DDE
この例では、ddensd を使用して、時間依存の遅延を伴う初期値 DDE (遅延微分方程式) 系を解く方法を説明します。この例は、元々 Jackiewicz [1] により提示されました。
この方程式は次のとおりです。
この方程式は、 における時間遅延が 0 のため、"初期値" DDE になります。したがって、解の履歴は解の計算には必要ありません。必要なのは次の初期値のみです。
は の解です。この方程式を満たす の値は と です。
方程式の時間遅延は の項に存在しているため、この方程式は "中立型 DDE" と呼ばれます。
MATLAB® でこの方程式を解くには、遅延微分方程式ソルバー ddensd (中立型方程式のソルバー) を呼び出す前に、方程式と遅延をコード化する必要があります。(ここで行ったように) 必要な関数をファイルの最後にローカル関数として含めることも、あるいは個別のファイルとして MATLAB パスのディレクトリに保存することもできます。
遅延のコード化
最初に、方程式の遅延を定義する無名関数を作成します。 と のどちらにも形式 の遅延があるため、必要な関数定義は 1 つのみです。この遅延関数は後でソルバーに 2 回渡されます。1 回は の遅延を示すため、もう 1 回は の遅延を示すためです。
delay = @(t,y) t/2;
方程式のコード化
ここで、方程式をコード化する関数を作成します。この関数にはシグネチャ yp = ddefun(t,y,ydel,ypdel) がなければなりません。ここでは以下のようになります。
tは時間 (独立変数) です。yは解 (従属変数) です。ydelには y の遅延が含まれます。ypdelには の遅延が含まれます。
これらの入力はソルバーによって自動的に関数に渡されますが、変数名によって方程式のコード化方法が決まります。この場合、
ydelypdel
function yp = ddefun(t,y,ydel,ypdel) yp = 2*cos(2*t)*ydel^(2*cos(t)) + log(ypdel) - log(2*cos(t)) - sin(t); end
メモ: 関数はすべて例の最後にローカル関数として含まれます。
方程式の求解
最後に、積分区間 と初期値を定義してから、ddensd ソルバーを使用して DDE を解きます。4 番目の入力引数の cell 配列内に指定することで、初期値をソルバーに渡します。
tspan = [0 0.1];
y0 = 1;
s1 = 2;
sol1 = ddensd(@ddefun, delay, delay, {y0,s1}, tspan);方程式を再度解きます。今回は初期条件に対して の代替値を使用します。
s2 = 0.4063757399599599;
sol2 = ddensd(@ddefun, delay, delay, {y0,s2}, tspan);解のプロット
解の構造体 sol1 および sol2 には x フィールドと y フィールドがあり、ソルバーが受け入れる内部タイム ステップと、その時の対応する解が含まれます。ただし、deval を使用して特定の点における解を計算することができます。
結果を比較するために 2 つの解をプロットします。
plot(sol1.x,sol1.y,sol2.x,sol2.y); legend('y''(0) = 2','y''(0) = .40637..','Location','NorthWest'); xlabel('Time t'); ylabel('Solution y'); title('Two Solutions of Jackiewicz''s Initial-Value NDDE');

ローカル関数
ここでは、DDE ソルバー ddensd が解を計算するために呼び出すローカル補助関数を紹介しています。あるいは、これらの関数を独自のファイルとして MATLAB パスのディレクトリに保存することもできます。
function yp = ddefun(t,y,ydel,ypdel) yp = 2*cos(2*t)*ydel^(2*cos(t)) + log(ypdel) - log(2*cos(t)) - sin(t); end
参照
[1] Jackiewicz, Z."One step Methods of any Order for Neutral Functional Differential Equations."SIAM Journal on Numerical Analysis.Vol. 21, Number 3. 1984. pp. 486–511.
参考
ddensd | ddesd | dde23 | deval