ddensd
中立型の遅延微分方程式 (DDE) を解く
構文
説明
例
2 つの遅延をもつ中立 DDE
Paul により提示された次の中立型 DDE を について解きます。
解の履歴は で です。
新しいプログラム ファイルをエディターで作成します。このファイルには、1 つのメイン関数と 4 つのローカル関数が記述されます。
1 次 DDE を ddefun
というローカル関数として定義します。
function yp = ddefun(t,y,ydel,ypdel) yp = 1 + y - 2*ydel^2 - ypdel; end
解の遅延を dely
というローカル関数として定義します。
function dy = dely(t,y) dy = t/2; end
導関数の遅延を delyp
というローカル関数として定義します。
function dyp = delyp(t,y) dyp = t-pi; end
解の履歴を history
というローカル関数として定義します。
function y = history(t) y = cos(t); end
積分区間を定義し、ddensd
を使用して DDE を解きます。このコードをメイン関数に追加します。
tspan = [0 pi]; sol = ddensd(@ddefun,@dely,@delyp,@history,tspan);
から までにある等間隔の 100 点で解を計算します。このコードをメイン関数に追加します。
tn = linspace(0,pi); yn = deval(sol,tn);
結果をプロットします。このコードをメイン関数に追加します。
plot(tn,yn); xlim([0 pi]); ylim([-1.2 1.2]); xlabel('time t'); ylabel('solution y');
プログラム全体を実行し、解を計算してプロットを表示します。ファイル ddex4.m
にこの例のコードがすべて含まれています。エディターでコードを表示するには、コマンド ラインで edit ddex4
と入力します。
入力引数
ddefun
— 導関数
関数ハンドル
導関数を、yp = ddefun(t,y,ydel,ypdel)
をその構文とする関数ハンドルとして指定します。次の表は、ddefun
の引数をまとめています。
ddefun 引数 | 説明 |
---|---|
t | 時間 t の現在の値を表すスカラー値。 |
y | 式 1 での y(t) を表すベクトル。このベクトルのサイズは、n 行 1 列であり、ここで n は、解を求めたいシステムにおける方程式の数です。 |
ydel | 列 ydel(:,i) が y(dyi) を表す行列。この行列のサイズは n 行 p 列であり、ここで n は、解を求めたいシステムにおける方程式の数であり、p は、式 1 における y(dy) 項の数です。 |
ypdel | 列 ypdel(:,j) が y '(dypj) を表す行列。この行列のサイズは n 行 q 列であり、ここで n は、解を求めたいシステムにおける方程式の数であり、q は、式 1 における y '(dyp) 項の数です。 |
yp | ddefun で返される結果。要素が 式 1 の右辺を表す n 行 1 列のベクトルです。 |
dely
— 解の遅延
関数ハンドル | ベクトル
解の遅延。式 1において dy1,..., dyp を返す関数ハンドルとして指定します。あるいは、ベクトルの形式で定数の遅れを渡すこともできます。
dely
を関数ハンドルとして指定する場合、構文は dy = dely(t,y)
でなければなりません。次の表は、この関数の引数をまとめています。
dely 引数 | 説明 |
---|---|
t | 時間 t の現在の値を表すスカラー値。 |
y | 式 1 での y(t) を表すベクトル。このベクトルのサイズは、n 行 1 列であり、ここで n は、解を求めたいシステムにおける方程式の数です。 |
dy | 関数 dely によって返されるベクトルであり、その値は、式 1 における解の遅延 dyi です。このベクトルのサイズは、p 行 1 列であり、ここで p は、方程式における解の遅延の数です。各要素は、t 以下でなければなりません。 |
形式 dyi = t – τi をもつ定数の解の遅延を指定する場合、dely
は、dely(i)
= τi となるベクトルでなければなりません。このベクトルの各値は、ゼロ以上でなければなりません。
dy が問題にない場合、dely
を []
に設定します。
データ型: function_handle
| single
| double
delyp
— 導関数の遅延
関数ハンドル | ベクトル
導関数の遅延。式 1の dyp1,..., dypq を返す関数ハンドルとして指定します。あるいは、ベクトルの形式で定数の遅れを渡すこともできます。
delyp
が関数ハンドルである場合、その構文は dyp = delyp(t,y)
でなければなりません。次の表は、この関数の引数をまとめています。
delyp 引数 | 説明 |
---|---|
t | 時間 t の現在の値を表すスカラー値。 |
y | 式 1 での y(t) を表すベクトル。このベクトルのサイズは、n 行 1 列であり、ここで n は、解を求めたいシステムにおける方程式の数です。 |
dyp | 関数 delyp によって返されるベクトルであり、その値は、式 1 における導関数の遅延 dypj です。このベクトルのサイズは、q 行 1 列でなければなりません。ここで q は、方程式における解の遅延 dypj の数です。dyp の各要素は、t 未満でなければなりません。この制限には、例外が 1 つあります。初期値 DDE を解く場合、dyp の値は、t = t0 において t に等しくなります。詳細については、初期値中立遅延微分方程式を参照してください。 |
形式 dypj = t – τj をもつ定数の導関数の遅延を指定する場合、delyp
は、delyp(j)
= τj となるベクトルでなければなりません。このベクトルの各値は、ゼロより大きくなければなりません。この制限への例外は、中立型の DDE について初期値問題を解く場合に発生します。このような場合、delyp
の値は、t = t0 において 0 に等しくなります。詳細については、初期値中立遅延微分方程式を参照してください。
dyp が問題にない場合、delyp
を []
に設定します。
データ型: function_handle
| single
| double
history
— 解の履歴
関数ハンドル | 列ベクトル | 構造体 (sol
、前の積分から) | 1
行 2
列の cell 配列
解の履歴を、関数ハンドル、列ベクトル、sol
構造体 (前の積分から) または cell 配列として指定します。これは、t ≤ t0 における解です。
履歴が時間と共に変化する場合、構文を
y = history(t)
とする関数ハンドルとして解の履歴を指定します。この関数は、解 y(t) を t <= t0 について近似するn
行1
列のベクトルを返します。このベクトルの長さは、n
であり、これは、解を求めたいシステムにおける方程式の数です。y(t) が定数である場合、
history
を定数値のn
行1
列のベクトルとして指定できます。前の積分を t0 まで継続するために
ddensd
を呼び出す場合、前の積分から出力sol
として履歴を指定できます。初期値 DDE を解く場合、cell 配列
{y0, yp0}
として履歴を指定します。最初の要素y0
は、初期値 y(t0) の列ベクトルです。2 番目の要素 yp0 は、要素が初期導関数 y '(t0) である列ベクトルです。これらのベクトルには、矛盾がないようにしなければなりません。すなわち、いずれもが t0 において式 1 を満たします。詳細については、初期値中立遅延微分方程式を参照してください。
データ型: function_handle
| single
| double
| struct
| cell
tspan
— 積分区間
1
行 2
列のベクトル
積分区間を、ベクトル [t0 tf]
として指定します。最初の要素 t0
は、t の初期値です。2 番目の要素 tf
は、t の最終値です。t0
の値は、 tf
未満でなければなりません。
データ型: single
| double
出力引数
詳細
初期値中立遅延微分方程式
初期値 DDE は、すべての i および j について dyi≥t0 および dypj≥t0 を満たします。t = t0 では、すべての遅延の項が、y(dyi) = y(t0) および y '(dypj) = y '(t0) に縮小し、次の式が成立します。
y '(t0) = f(t0, y(t0), y(t0),..., y(t0), y '(t0),..., y '(t0)) | (2) |
初期値中立 DDE を解く場合、y '(t0) を ddensd
に与えなければなりません。これを行うには、history
を cell 配列 {Y0,YP0}
として指定します。ここで、Y0
は、初期値 y(t0) の列ベクトルであり、YP0
は、初期導関数 y '(t0) の列ベクトルです。これらのベクトルには、矛盾がないようにしなければなりません。すなわち、いずれもが t0 において式 2 を満たします。
アルゴリズム
このソルバーで使用されるアルゴリズムの詳細については、Shampine [2]を参照してください。
参照
[1] Paul, C.A.H. “A Test Set of Functional Differential Equations.” Numerical Analysis Reports. No. 243. Manchester, UK: Math Department, University of Manchester, 1994.
[2] Shampine, L.F. “Dissipative Approximations to Neutral DDEs.” Applied Mathematics & Computation. Vol. 203, Number 2, 2008, pp. 641–648.
バージョン履歴
R2012b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)