Main Content

odextend

説明

solext = odextend(sol,odefun,tfinal) は、sol を作成したものと同じ ODE ソルバーを使用して、sol.x(end) から tfinal まで、関数 odefun を積分することにより、解 sol を拡張します。関数 odefun は、sol の計算に使用した元の関数と異なる可能性があります。solext の独立変数の下限は、sol と同じ sol.x(1) です。既定では、関数 odextend は以下を使用します。

  • 後続の積分の初期値 y = sol.y(:,end)

  • ODE ソルバーが当初 sol の計算に使用していたものと同じ積分プロパティと追加の入力引数。この情報は解構造体 sol に格納され、後で solext に返されます。これらの値を変更しない限り、これらを関数 odextend に渡す必要はありません。

solext = odextend(sol,[],tfinal) は、sol を得るために求解したものと同じ ODE 関数に解を拡張します。

solext = odextend(sol,odefun,tfinal,y0) は拡張された積分の初期条件に、sol.y(:,end) を使用する代わりに新しい初期条件 y0 を指定します。

ode15i ソルバーの場合: y0 は、解要素およびその導関数の初期条件で構成される列ベクトルを含む m 行 2 列の行列 y0 = [yinit ypinit] でなければなりません。

solext = odextend(sol,odefun,tfinal,y0,options) は、関数 odeset を使用して作成された引数 options で定義された積分オプションを使用します。指定されたオプションは、ODE ソルバーが当初 sol の計算に使用したオプションをオーバーライドします。y0 = [] を指定して、既定の初期条件を使用することもできます。

すべて折りたたむ

ファン デル ポールの方程式は次のように 2 次 ODE です。

y1-μ(1-y12)y1+y1=0.

ode45 を使用して、μ=1 のファン デル ポールの方程式を解きます。MATLAB® に付属の関数 vdp1.m が方程式をエンコードします。ソルバーや評価点などの解に関する情報をもつ構造体を返すために、1 つの出力を指定します。

tspan = [0 20];
y0 = [2 0];
sol = ode45(@vdp1,tspan,y0)
sol = struct with fields:
     solver: 'ode45'
    extdata: [1x1 struct]
          x: [0 1.0048e-04 6.0285e-04 0.0031 0.0157 0.0785 0.2844 0.5407 0.8788 1.4032 1.8905 2.3778 2.7795 3.1285 3.4093 3.6657 3.9275 4.2944 4.9013 5.3506 5.7998 6.2075 6.5387 6.7519 6.9652 7.2247 7.5719 8.1226 8.6122 9.1017 9.5054 ... ] (1x60 double)
          y: [2x60 double]
      stats: [1x1 struct]
      idata: [1x1 struct]

linspace を使用して、区間 [0 20] に 250 点を生成します。deval を使用して、これらの点で解を評価します。

x = linspace(0,20,250);
y = deval(sol,x);

解の最初の要素をプロットします。

plot(x,y(1,:))

Figure contains an axes object. The axes object contains an object of type line.

odextend を使用して解を tf=35 に拡張し、結果を元のプロットに追加します。

sol_new = odextend(sol,@vdp1,35);
x = linspace(20,35,350);
y = deval(sol_new,x);
hold on
plot(x,y(1,:),'r')

Figure contains an axes object. The axes object contains 2 objects of type line.

入力引数

すべて折りたたむ

解の構造体。ODE ソルバーによって返される構造体として指定します。1 つの出力引数をもつ ODE ソルバーを呼び出すと、解の構造体が返されます。

例: sol = ode45(myode,tspan,y0)

データ型: struct

解を求める関数。関数ハンドルとして指定します。この入力を使用し、新しい ODE 関数または変更した ODE 関数によって解を拡張します。解の構造体 sol の作成に使用した元の ODE 関数を続けて使用するには、odefun に空の入力 [] を指定します。

データ型: function_handle

最終積分時間。スカラーとして指定します。

データ型: single | double

初期条件。スカラー、ベクトルまたは行列として指定します。既定では、odextend は初期条件 y = sol.y(:,end) を使用して積分を拡張します。この入力を使用して、拡張された積分の新しい初期条件を指定します。

ode15i ソルバーの場合: y0 は、解要素およびその導関数の初期条件で構成される列ベクトルを含む m 行 2 列の行列 y0 = [yinit ypinit] でなければなりません。

データ型: single | double

オプション構造体。既定では、odextend は ODE ソルバーが当初 sol の計算に使用したものと同じオプションおよび追加入力を使用します。この入力を使用して、sol の作成に使用したオプションをオーバーライドする新しいオプション構造体を指定します。

ODE のオプション構造体の作成または変更を行うには、関数 odeset を使用します。

データ型: struct

出力引数

すべて折りたたむ

拡張された解。構造体として返されます。この構造体を関数 deval と共に使用して区間 [t0 tf] の任意の点で解を評価します。構造体配列 solext は、常に以下のフィールドを含みます。

構造体フィールド説明

sol.x

ソルバーによって選択されたステップの行ベクトル。

sol.y

各列の sol.y(:,i) には、時点 sol.x(i) での解が含まれます。

sol.solver

ソルバー名。

さらに、Events オプションを指定してイベントが検出された場合、solext は以下のフィールドも含みます。

構造体フィールド説明

sol.xe

イベントが発生した点。sol.xe(end) には、終了イベントの厳密な点 (存在する場合) が含まれます。

sol.ye

sol.xe のイベントに対応する解。

sol.ie

Events オプションに指定された関数により返されるベクトルのインデックス。値は、どのイベントをソルバーが検出したかを示します。

バージョン履歴

R2006a より前に導入