24.3 Matlab-compatible solvers

Last-modified: 2025-03-07 (金) 23:04:08

24.3 Matlab互換ソルバー

Octave は、 MATLAB互換のインターフェースを持つ常微分方程式 (ODE) の初期値問題のソルバーのセットも提供します。このクラスのメソッドのオプションは、関数を使用して設定されます。

odeset
odeget

現在実装されているソルバーは次のとおりです。

ルンゲ・クッタ法
ode45 は、高次、可変ステップの Dormand-Prince 法を使用して、非スティッフ ODE またはインデックス 1 の微分代数方程式 (DAE) のシステムを積分します。積分ステップごとに 6 つの関数評価が必要ですが、滑らかな問題では よりも大きなステップが必要になる場合がありますode23。これにより、許容誤差が小さい場合に効率が向上する可能性があります。
ode23 は、非スティフ ODE または (またはインデックス 1 DAE) のシステムを積分します。3 次 Bogacki-Shampine 法を使用し、ユーザー指定の許容値を満たすようにローカル ステップ サイズを調整します。ソルバーは、積分ステップごとに 3 つの関数評価を必要とします。
ode23s は、修正された 2 次 Rosenbrock 法を使用して、硬い ODE (またはインデックス 1 DAE) のシステムを積分します。

線形多段階法
ode15s は、後退差分公式 (BDF) に基づく可変ステップ、可変順序法を使用して、硬い ODE (またはインデックス 1 DAE) のシステムを統合します。
ode15i は、 と同じ可変ステップ、可変順序法を使用して、完全に暗黙的な ODE (またはインデックス 1 DAE) のシステムを積分します ode15s。 decic を使用して、 の一貫した初期条件を計算できますode15i。
ソルバーの詳細については、LF Shampine および MW Reichelt 著「The MATLAB ODE Suite」 (SIAM Journal on Scientific Computing、Vol. 18、1997、pp. 1–22、DOI: https://doi.org/10.1137/S1064827594276424 ) を参照してください。

: ode45 [t, y] = (fcn, trange, init)

: ode45 [t, y] = (fcn, trange, init, ode_opt)

: ode45 [t, y, te, ye, ie] = (…)

: solution = ode45 (…)

: ode45 (…)
よく知られている 4 次明示的 Dormand-Prince 法を使用して、一連の非剛性常微分方程式 (非剛性 ODE) を解きます。

fcn は、ODE を定義する関数の名前を含む関数ハンドル、インライン関数、または文字列ですy' = f(t,y)。関数は 2 つの入力を受け入れる必要があり、最初の入力は時間tで、2 番目の入力は未知数の列ベクトルyです。

trange は、ODE が評価される時間間隔を指定します。通常、これは初期時間と最終時間 ( [tinit, tfinal]) を指定する 2 要素のベクトルです。要素が 3 つ以上ある場合、解はこれらの中間時間インスタンスでも評価されます。

デフォルトでは、アルゴリズムode45で適応タイムステップを使用します integrate_adaptive。タイムステップ計算の許容値は、オプション"RelTol"と を使用して変更できます"AbsTol"。

init には未知数の初期値が含まれます。行ベクトルの場合、解y は各列がinit内の対応する初期値の解である行列になります。

オプションの 4 番目の引数ode_opt は、ODE ソルバーのデフォルト以外のオプションを指定します。これは、によって生成される構造体ですodeset。

この関数は通常、 2 つの出力を返します。変数tは列ベクトルで、解が見つかった時刻が含まれます。出力yは、各列が問題の異なる未知数を参照し、各行がtの時間に対応する行列です。

出力は、ソリューションが評価された時間の行ベクトルを含むフィールドxと、各列がxの時間に対応するソリューション行列を含むフィールドyを持つ構造体 solutionとして返すこともできます。 を使用して、 返される他のフィールドと追加情報を確認します。 fieldnames (solution)

出力引数が要求されず、ode_opt"OutputFcn"に が指定されていない場合は、が に設定され 、ソルバーの結果がすぐにプロットされます。 "OutputFcn"odeplot

オプションを使用する場合"Events"、3 つの追加出力が返されることがあります。te は、イベント関数がゼロを返した時刻を保持します。ye は、時刻teにおけるソリューションの値を保持します。ie には、 複数のイベント関数がある場合にどのイベント関数がトリガーされたかを示すインデックスが含まれます。

例: ファンデルポール方程式を解く

vdp = @(t,y) [y(2); (1 - y(1)^2) * y(2) - y(1)];
[t,y] = ode45 (fvdp, [0, 20], [2, 0]);

参照: odeset、odeget、ode23、ode15s。

: [t, y] = ode23 (fcn, trange, init)

: [t, y] = ode23 (fcn, trange, init, ode_opt)

: [t, y, te, ye, ie] = ode23 (…)

: solution = ode23 (…)

: ode23 (…)

よく知られている 3 次明示的 Bogacki-Shampine 法を使用して、一連の非剛性常微分方程式 (非剛性 ODE) を解きます。

fcn は、ODE を定義する関数の名前を含む関数ハンドル、インライン関数、または文字列ですy' = f(t,y)。関数は 2 つの入力を受け入れる必要があり、最初の入力は時間tで、2 番目の入力は未知数の列ベクトルyです。

trange は、ODE が評価される時間間隔を指定します。通常、これは初期時間と最終時間 ( [tinit, tfinal]) を指定する 2 要素のベクトルです。要素が 3 つ以上ある場合、解はこれらの中間時間インスタンスでも評価されます。

デフォルトでは、アルゴリズムode23で適応タイムステップを使用します integrate_adaptive。タイムステップ計算の許容値は、オプション"RelTol"と を使用して変更できます"AbsTol"。

init には未知数の初期値が含まれます。行ベクトルの場合、解y は各列がinit内の対応する初期値の解である行列になります。

オプションの 4 番目の引数ode_opt は、ODE ソルバーのデフォルト以外のオプションを指定します。これは、によって生成される構造体ですodeset。

この関数は通常、 2 つの出力を返します。変数tは列ベクトルで、解が見つかった時刻が含まれます。出力yは、各列が問題の異なる未知数を参照し、各行がtの時間に対応する行列です。

出力は、ソリューションが評価された時間の行ベクトルを含むフィールドxと、各列がxの時間に対応するソリューション行列を含むフィールドyを持つ構造体 solutionとして返すこともできます。 を使用して、 返される他のフィールドと追加情報を確認します。 fieldnames (solution)

出力引数が要求されず、ode_opt"OutputFcn"に が指定されていない場合は、が に設定され 、ソルバーの結果がすぐにプロットされます。 "OutputFcn"odeplot

オプションを使用する場合"Events"、3 つの追加出力が返されることがあります。te は、イベント関数がゼロを返した時刻を保持します。ye は、時刻teにおけるソリューションの値を保持します。ie には、 複数のイベント関数がある場合にどのイベント関数がトリガーされたかを示すインデックスが含まれます。

例: ファンデルポール方程式を解く

fvdp = @(t,y) [y(2); (1 - y(1)^2) * y(2) - y(1)];
[t,y] = ode23 (fvdp, [0, 20], [2, 0]);

参考: このメソッドの定義については、 https://en.wikipedia.org/wiki/List_of_Runge%E2%80%93Kutta_methodsを参照してください

参照: odeset、odeget、ode45、ode15s。

: ode23s [t, y] = (fcn, trange, init)

: ode23s [t, y] = (fcn, trange, init, ode_opt)

: ode23s [t, y] = (…, par1, par2, …)

: ode23s [t, y, te, ye, ie] = (…)

: solution = ode23s (…)
次数(2,3)のローゼンブロック法を用いて、一連の硬い常微分方程式(硬いODE)を解きます。

fcn は、関数ハンドル、インライン関数、または ODE を定義する関数の名前を含む文字列です。M y' = f(t,y)関数は 2 つの入力を受け入れる必要があります。最初の入力は時間tで、2 番目の入力は未知数の列ベクトルyです。M は、非特異でスパースである可能性のある定数質量行列です。odeset を使用して odeopts のフィールドを設定し、質量行列"Mass"を 指定します。

trange は、ODE が評価される時間間隔を指定します。通常、これは初期時間と最終時間 ( [tinit, tfinal]) を指定する 2 要素のベクトルです。要素が 3 つ以上ある場合は、ソルバーと同じ順序の補間手順を使用して、これらの中間時間インスタンスでも解が評価されます。

デフォルトでは、アルゴリズムode23sで適応タイムステップを使用します integrate_adaptive。タイムステップ計算の許容値は、オプション"RelTol"と を使用して変更できます"AbsTol"。

init には未知数の初期値が含まれます。行ベクトルの場合、解y は各列がinit内の対応する初期値の解である行列になります。

オプションの 4 番目の引数ode_opt は、ODE ソルバーのデフォルト以外のオプションを指定します。これは、によって生成される構造体です。 次odesetの ode23sオプションは無視されます: "BDF"、、、、、、、 。"InitialSlope""MassSingular""MStateDependence""MvPattern""MaxOrder""Non-negative"

この関数は通常、 2 つの出力を返します。変数tは列ベクトルで、解が見つかった時刻が含まれます。出力yは、各列が問題の異なる未知数を参照し、各行がt内の時刻に対応する行列です。trange が中間の時間ステップを指定した場合、それらのみ返されます。

出力は、ソリューションが評価された時間の行ベクトルを含むフィールドxと、各列がxの時間に対応するソリューション行列を含むフィールドyを持つ構造体 solutionとして返すこともできます。 を使用して、 返される他のフィールドと追加情報を確認します。 fieldnames (solution)

オプションを使用する場合"Events"、3 つの追加出力が返されることがあります。te は、イベント関数がゼロを返した時刻を保持します。ye は、時刻teにおけるソリューションの値を保持します。ie には、 複数のイベント関数がある場合にどのイベント関数がトリガーされたかを示すインデックスが含まれます。

例: 硬いファンデルポール方程式を解く

f = @(t,y) [y(2); 1000*(1 - y(1)^2) * y(2) - y(1)];
opt = odeset ('Mass', [1 0; 0 1], 'MaxStep', 1e-1);
[vt, vy] = ode23s (f, [0 2000], [2 0], opt);

参照: odeset、daspk、dassl。

: ode15s [t, y] = (fcn, trange, y0)

: ode15s [t, y] = (fcn, trange, y0, ode_opt)

: solution = ode15s (…)

: ode15s (…)

一連のスティッフな常微分方程式 (ODE) またはスティッフな半明示的インデックス 1 微分代数方程式 (DAE) を解きます。

ode15s1 次から 5 次までの可変ステップ、可変次数 BDF (後退微分公式) 法を使用します。

fcn は、ODE を定義する関数の名前を含む関数ハンドル、インライン関数、または文字列ですy' = f(t,y)。関数は 2 つの入力を受け入れる必要があり、最初の入力は時間tで、2 番目の入力は未知数の列ベクトルyです。

trange は、ODE が評価される時間間隔を指定します。通常、これは初期時間と最終時間 ( [tinit, tfinal]) を指定する 2 要素のベクトルです。要素が 3 つ以上ある場合、解はこれらの中間時間インスタンスでも評価されます。

init には未知数の初期値が含まれます。行ベクトルの場合、解y は各列がinit内の対応する初期値の解である行列になります。

オプションの 4 番目の引数ode_opt は、ODE ソルバーのデフォルト以外のオプションを指定します。これは、によって生成される構造体ですodeset。

この関数は通常、 2 つの出力を返します。変数tは列ベクトルで、解が見つかった時刻が含まれます。出力yは、各列が問題の異なる未知数を参照し、各行がtの時間に対応する行列です。

出力は、ソリューションが評価された時間の行ベクトルを含むフィールドxと、各列がxの時間に対応するソリューション行列を含むフィールドyを持つ構造体 solutionとして返すこともできます。 を使用して、 返される他のフィールドと追加情報を確認します。 fieldnames (solution)

出力引数が要求されず、ode_opt"OutputFcn"に が指定されていない場合は、が に設定され 、ソルバーの結果がすぐにプロットされます。 "OutputFcn"odeplot

オプションを使用する場合"Events"、3 つの追加出力が返されることがあります。te は、イベント関数がゼロを返した時刻を保持します。ye は、時刻teにおけるソリューションの値を保持します。ie には、 複数のイベント関数がある場合にどのイベント関数がトリガーされたかを示すインデックスが含まれます。

例: ロバートソン方程式を解く:

function r = robertson_dae (t, y)
 r = [ -0.04*y(1) + 1e4*y(2)*y(3)
        0.04*y(1) - 1e4*y(2)*y(3) - 3e7*y(2)^2
y(1) + y(2) + y(3) - 1 ];
endfunction
opt = odeset ("Mass", [1 0 0; 0 1 0; 0 0 0], "MStateDependence", "none");
[t,y] = ode15s (@robertson_dae, [0, 1e3], [1; 0; 0], opt);

decic、odeset、odeget、ode23、ode45も参照してください。

: ode15i [t, y] = (fcn, trange, y0, yp0)

: ode15i [t, y] = (fcn, trange, y0, yp0, ode_opt)

: ode15i [t, y, te, ye, ie] = (…)

: solution = ode15i (…)

: ode15i (…)

完全に暗黙的な常微分方程式 (ODE) またはインデックス 1 の微分代数方程式 (DAE) のセットを解きます。

ode15i1 次から 5 次までの可変ステップ、可変次数 BDF (後退微分公式) 法を使用します。

fcn は、ODE を定義する関数の名前を含む関数ハンドル、インライン関数、または文字列です0 = f(t,y,yp)。関数は 3 つの入力を受け入れる必要があります。最初の入力は時間t、2 番目の入力は関数値y (列ベクトル)、3 番目の入力は導関数値yp (列ベクトル) です。

trange は、ODE が評価される時間間隔を指定します。通常、これは初期時間と最終時間 ( [tinit, tfinal]) を指定する 2 要素のベクトルです。要素が 3 つ以上ある場合、解はこれらの中間時間インスタンスでも評価されます。

y0とyp0には、未知数y とypの初期値が含まれます。これらが行ベクトルの場合、解yは、各列がy0とyp0の対応する初期値の解である行列になります。

y0とyp0 は、が満たされる、つまり一貫した初期条件でなければなりません f(t,y0,yp0) = 0。この関数は、decic初期推定値が与えられた場合に一貫した初期条件を計算するために使用できます。

オプションの 5 番目の引数ode_opt は、ODE ソルバーのデフォルト以外のオプションを指定します。これは、によって生成される構造体ですodeset。

この関数は通常、 2 つの出力を返します。変数tは列ベクトルで、解が見つかった時刻が含まれます。出力yは、各列が問題の異なる未知数を参照し、各行がtの時間に対応する行列です。

出力は、ソリューションが評価された時間の行ベクトルを含むフィールドxと、各列がxの時間に対応するソリューション行列を含むフィールドyを持つ構造体 solutionとして返すこともできます。 を使用して、 返される他のフィールドと追加情報を確認します。 fieldnames (solution)

出力引数が要求されず、ode_opt"OutputFcn"に が指定されていない場合は、が に設定され 、ソルバーの結果がすぐにプロットされます。 "OutputFcn"odeplot

オプションを使用する場合"Events"、3 つの追加出力が返されることがあります。te は、イベント関数がゼロを返した時刻を保持します。ye は、時刻teにおけるソリューションの値を保持します。ie には、 複数のイベント関数がある場合にどのイベント関数がトリガーされたかを示すインデックスが含まれます。

例: ロバートソン方程式を解く:

function r = robertson_dae (t, y, yp)
 r = [ -(yp(1) + 0.04*y(1) - 1e4*y(2)*y(3))
       -(yp(2) - 0.04*y(1) + 1e4*y(2)*y(3) + 3e7*y(2)^2)
y(1) + y(2) + y(3) - 1 ];
endfunction
[t,y] = ode15i (@robertson_dae, [0, 1e3], [1; 0; 0], [-1e- 4; 1e-4; 0]);

See also: decic, odeset, odeget.

: [y0_new, yp0_new] = decic (fcn, t0, y0, fixed_y0, yp0, fixed_yp0)

: [y0_new, yp0_new] = decic (fcn, t0, y0, fixed_y0, yp0, fixed_yp0, options)

: [y0_new, yp0_new, resnorm] = decic (…)
初期推定値y0とyp0を指定して、一貫した暗黙の ODE 初期条件y0_newと yp0_newを計算します。

fixed_y0と fixed_yp0の間の最大コンポーネントを固定値として選択できます。 length (y0)

fcnは関数ハンドルです。関数は 3 つの入力を受け入れる必要があります。最初の入力は時間t 、2 番目の入力は未知数yの列ベクトル 、3 番目の入力は未知数ypの列ベクトルです。

t0は、スカラーとして指定される 初期時間です 。fcn(t0, y0_new, yp0_new) = 0

y0はyの初期推定値として使用されるベクトルです。

fixed_y0は、固定するy0のコンポーネントを指定するベクトルです。fixed_y0とfixed_yp0の間の最大コンポーネント を固定値として選択します。y0 (i) の値を固定する場合は、fixed_y0 (i) コンポーネントを 1 に設定します。y0 ( i )の値を変更できるようにする場合は、 fixed_y0 (i) コンポーネントを 0 に設定します。 length (y0)

yp0はypの初期推定値として使用されるベクトルです。

fixed_yp0は、固定するyp0のコンポーネントを指定するベクトルです。fixed_y0とfixed_yp0の間のコンポーネントの最大数を固定値として選択します。yp0 (i)の値を固定する場合は、fixed_yp0 (i) コンポーネントを 1 に 設定します。yp0 (i) の値を変更できるようにする場合は、 fixed_yp0 (i) コンポーネントを 0 に 設定します。 length (yp0)

オプションの 7 番目の引数options は構造体配列です。 odesetこの構造体を生成するには、を使用します。関連するオプションは、 初期条件を計算するために使用されるエラーしきい値を指定する RelTolとです。AbsTol

この関数は通常、 2 つの出力を返します。変数y0_newは列ベクトルで、yの一貫した初期値が含まれます。出力yp0_newは列ベクトルで、ypの一貫した初期値が含まれます。

オプションの 3 番目の出力resnormは、残差ベクトルのノルムです。resnorm が小さい場合、初期decic条件は正常に計算されています。resnorm の値が大きい場合は、とを使用してRelTol調整AbsTolします。

例: ロバートソン方程式の初期条件を計算します。

function r = robertson_dae (t, y, yp)
 r = [ -(yp(1) + 0.04*y(1) - 1e4*y(2)*y(3))
       -(yp(2) - 0.04*y(1) + 1e4*y(2)*y(3) + 3e7*y(2)^2)
y(1) + y(2) + y(3) - 1 ];
endfunction
[y0_new,yp0_new] = decic (@robertson_dae, 0, [1; 0; 0], [1; 1; 0],
[-1e-4; 1; 0], [0; 0; 0]);

See also: ode15i, odeset.

: odestruct = odeset ()

: odestruct = odeset ("field1", value1, "field2", value2, …)

: odestruct = odeset (oldstruct, "field1", value1, "field2", value2, …)

: odestruct = odeset (oldstruct, newstruct)

: odeset ()

ODE オプション構造を作成または変更します。

入力引数なしで 1 つの出力引数を指定して呼び出されると、デフォルト値に初期化されたすべての可能なフィールドを含む新しい ODE オプション構造を返します。出力引数が要求されていない場合は、一般的な ODE ソルバー オプションのリストとそのデフォルト値を表示します。

名前と値の入力引数のペア「field1」、 「value1」、「field2」、「value2」、…で呼び出された場合、最も一般的なオプション フィールドがすべて初期化された新しい ODE オプション構造を返し、フィールド「field1」、 「field2」、…の値を値value1、value2、…に設定します。

入力構造oldstructで呼び出された場合は、オプション"field1"、"field2"、… の値を新しい値value1、value2、… で上書きし、変更された構造を返します。

2 つの入力 ODE オプション構造体oldstructと newstructで呼び出されると、構造体 oldstructのすべての値が構造体newstructの新しい値で上書きされます。newstructの空の値は、 oldstructの値を上書きしません 。

最も一般的に使用される ODE オプションは、常に によって値が割り当てられodeset、次のとおりです。

AbsTol: 正のスカラー | ベクトル、定義。1e-6
絶対的なエラー許容度。

BDF: { "off"} |"on"
暗黙的なマルチステップ法で BDF 式を使用します。 注: このオプションはまだ実装されていません。

Events: 関数ハンドル
イベント関数。イベント関数は次の形式を持つ必要があります。 [value, isterminal, direction] = my_events_f (t, y)

InitialSlope: ベクトル
DAE ソルバーの一貫した初期傾斜ベクトル。

InitialStep: 正のスカラー
初期の時間ステップ サイズ。

Jacobian: マトリックス | 関数ハンドル
ヤコビ行列。定数行列または時間と状態の関数として指定されます。

JConstant: { "off"} |"on"
ヤコビアンが定数行列であるか、状態に依存するかを指定します。

JPattern: 疎行列
ヤコビ行列がスパースかつ非定数であるが、一定のスパース パターンを維持する場合は、スパース パターンを指定します。

Mass: マトリックス | 関数ハンドル
定数行列または時間と状態の関数として指定される質量行列。

MassSingular: { "maybe"} | "yes"|"on"
質量行列が特異であるかどうかを指定します。

MaxOrder: { 5} | 4| 3| 2|1
式の最大次数。

MaxStep: 正のスカラー
最大時間ステップ値。

MStateDependence: { "weak"} | "none"|"strong"
質量マトリックスが状態に依存するか、時間のみに依存するかを指定します。

MvPattern: 疎行列
質量行列がスパースで非定数であるが、一定のスパース パターンを維持する場合は、スパース パターンを指定します。 注: このオプションはまだ実装されていません。

NonNegative: スカラー | ベクトル
シミュレーション中に非負のままであると予想される状態ベクトルの要素を指定します。

NormControl: { "off"} |"on"
絶対値ではなく、ソリューションの 2 ノルムに対する相対的なエラーを制御します。

OutputFcn: 関数ハンドル
シミュレーション中に状態を監視する関数。使用する関数の形式については、を参照してくださいodeplot。

OutputSel: スカラー | ベクトル
出力監視関数に渡される状態ベクトルの要素のインデックス。

Refine: 正のスカラー
出力を各タイム ステップの終了時にのみ返すか、中間の時間インスタンスでも返すかを指定します。値は、出力を返す各タイム ステップ内で使用する等間隔の時間ポイントの数を示すスカラーである必要があります。

RelTol: 正のスカラー
相対的なエラー許容度。

Stats: { "off"} |"on"
シミュレーション後にソルバーの統計情報を出力します。

Vectorized: { "off"} |"on"
odefcn状態の複数の値を一度に渡すことができる かどうかを指定します。

上記のリストにないフィールド名も受け入れられ、結果構造に追加されます。

See also: odeget.

: val = odeget (ode_opt, field)

: val = odeget (ode_opt, field, default)

ODE オプション構造体 ode_optのプロパティフィールドの値を照会します。

2 つの入力引数で呼び出され、最初の入力引数 ode_opt がODE オプション構造体であり、 2 番目の入力引数 field がオプション名を指定する文字列である場合、ode_optのfieldに対応するオプション値valを返します。

オプションの 3 番目の入力引数で呼び出され、構造体ode_optにフィールドが設定されていない場合は、代わりにデフォルト値 defaultを返します。

See also: odeset.

: stop_solve = odeplot (t, y, flag)

新しい図ウィンドウを開き、積分中の各時間ステップで ODE 問題の解をプロットします。

入力パラメータtとyの型と値は、文字列型の入力フラグによって異なります。フラグの有効な値は 次のとおりです。

"init"
入力t は、最初と最後の時間ステップ ( ) を持つ長さ 2 の列ベクトルでなければなりません。入力y には、Ode 問題の初期条件 ( y0 ) が含まれます。 [tfirst tlast]

""
入力t は、入力yのソリューションが計算された時間を指定するスカラー倍精度浮動小数点数型またはベクトルである必要があります。

"done"
入力は空である必要がありますが、存在する場合は無視されます。

odeplot常に false を返します。つまり、ode ソルバーを停止しません。

例: 方程式の匿名実装を解き "Van der Pol"、解きながら結果を表示します。

fvdp = @(t,y) [y(2); (1 - y(1)^2) * y(2) - y(1)];
opt = odeset ("OutputFcn", @odeplot, "RelTol", 1e-6);
sol = ode45 (fvdp, [0 20], [2 0], opt);

背景情報: この関数は、"OutputFcn"で作成されたオプション構造体の プロパティ で指定されている場合、ode ソルバー関数によって呼び出されますodeset。ode ソルバーは最初に という構文で関数を呼び出します。関数は内部変数を初期化し、新しい図ウィンドウを作成し、プロットの x 範囲を設定します。その後、積分中の各時間ステップで、ode ソルバーは を呼び出します。ソリューションの最後に、ode ソルバーは を呼び出して、 odeplot が必要なクリーンアップ アクションを実行できるようにします。 odeplot ([tfirst, tlast], y0, "init")odeplot (t, y, [])odeplot ([], [], "done")

See also: odeset, odeget, ode23, ode45.