主要内容

ode113

ノンスティッフ微分方程式の求解-可変次数法

説明

ty] = ode113(odefuntspany0は,Tspan = [t0 tf]のときに,初期条件y0を使用して,微分方程式系 y f t y t0から特遣部队まで積分します。解の配列yの各行は,列ベクトルtに返される値に対応します。

すべてのmatlab®Odeソルバ,は, y f t y の形式の方程式系,あるいは質量行列 t y y f t y を含む問題を解くことができます。すべてのソルバ,は類似した構文を使用します。ode23sソルバ,は,質量行列が定数である場合にのみ,これを含む問題を解くことができます。ode15sおよびode23tは,特異質量行列をも方程式,まり微分代数方程式(dae)を解くことができます。odeset质量オプションを使用して質量行列を指定します。

ty] = ode113(odefuntspany0选项选项(関数odesetを使用して作成された引数)で定義された積分設定も使用します。たとえば,AbsTolオプションおよびRelTolオプションを使用して絶対許容誤差と相対許容誤差を指定したり,质量オプションを使用して質量行列を指定することができます。

tyte] = ode113(odefuntspany0选项はさらに,(t, y)の関数(aapl .ベント関数)がゼロになる点を求めます。出力のteは电子邮箱ベント時点,は电子邮箱ベント時点における解,はトリガされたベントのンデックスです。

各関数に対して,ゼロで積分を終了するかどうかと,ゼロクロッシングの方向を考慮するかどうかを指定します。これを行うには,myEventFcn@myEventFcnなどの関数に“事件”プロパティを設定し,対応する関数[价值isterminal方向] =myEventFcnty)を作成します。詳細にいては,Odeのescベント検出を参照してください。

索尔= ode113 (___は,区間(t0 tf)の任意の点で解を計算する関数德瓦尔で使用できる構造体を返します。前述の構文にある任意の入力引数の組み合わせが使用できます。

すべて折りたたむ

単一解要素をもシンプルなodeは,ソルバの呼び出し内に無名関数として指定できます。この無名関数は,2の入力(t, y)を受け入れなければなりません(いずれかの入力が関数で使用されない場合でも)。

次のodeを解きます。

y 2 t

時間区間[0 5]および初期条件Y0 = 0を指定します。

Tspan = [0 5];Y0 = 0;[t,y] = ode113(@(t,y) 2*t, tspan, y0);

解をプロットします。

情节(t y“o”

图中包含一个轴对象。axis对象包含一个line类型的对象。

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

$ $ y“_1 - \μ\离开(1 - y_1 ^ 2 \右)y ' _1 + y_1 = 0, $ $

ここで,美元\μ& # 62;0美元はスカラ,パラメ,タ,です。代入$y'_1 = y_2$を行って,この方程式を1次ode系として書き換えます。その結果得られる1次のodeは,次のようになります。

数组$ $ & # xA; \开始{}{cl} & # xA; y“_1 & # 38;= y_2 \ \ & # xA; y ' _2 & # 38; = \μ(1-y_1 ^ 2) y_2结束——y_1。\{数组}& # xA; $ $

関数ファ@ @ルvdp1.mは,$\mu = 1$を使用するファンデルポ,ルの方程式を表します。変数y_1美元と変数y_2美元は,2要素ベクトルdydtのエントリy (1)およびy (2)です。

函数Dydt = vdp1(t,y)求mu = 1时的范德波尔ode参见ODE113, ODE23, ODE45。雅塞克·基尔曾卡和劳伦斯·f·夏皮恩The MathWorks, Inc.版权所有Dydt = [y(2);(1 y (1) ^ 2) * y (2) - y (1)];

関数ode113を使用し,初期値[2 0]を指定して,時間区間20 [0]でこのodeの解を求めます。その結果,出力として時間の列ベクトルtと解の配列yが得られます。yの各行は,tの対応する行に返される時刻と対応します。yの1列目はy_1美元に対応し,2列目はy_2美元に対応します。

[t,y] = ode113(@vdp1,[0 20],[2;0]);

y_1美元およびy_2美元の解をtに対してプロットします。

情节(t y (: 1),“o”、t、y (:, 2),“o”)标题(用ODE113求解van der Pol方程(\mu = 1));包含(“t”);ylabel (“解决方案y”);传奇(“y_1”“y_2”

ode113は,2の入力引数tyを使用する関数にのみ使用できます。しかし,関数の外部で定義した追加のパラメーターを,関数ハンドルを指定するタイミングで渡すことができます。

次のodeを解きます。

$$y

この方程式を1次系として書き直すと次のようになります。

数组$ $ \开始{}{cl} y ' _1 & # 38; = y_2 \ \ y ' _2 & # 38; = \压裂{一}{B} t y_1强生# xA; \{数组}$ $

odefcn.mはこの方程式系を4の入力引数(ty一个B)を受け入れる関数として表します。

函数dydt = odefcn(t,y,A,B) dydt = 0 (2,1);Dydt (1) = y(2);dydt(2) = (A/B)*t.*y(1);

ode113を使用してodeを解きます。事前定義された一个Bの値をodefcnに渡す関数ハンドルを指定します。

A = 1;B = 2;Tspan = [0 5];Y0 = [0 0.01];[t、y] = ode113 (@ (t, y) odefcn (t, y, A、B), tspan, y0);

結果をプロットします。

情节(t y (: 1),“o”、t、y (:, 2),“-”。

数值よりもode113ode78,およびode89のソルバ、の方が、厳密な許容誤差をも、問題を解く場合に優れています。ode113が優れている一般的な状況は,滑らかな解の曲線と高い精度が要求される軌道力学の問題です。

二体問題では,共通の平面上を周回する,相互に作用する2の質量m1平方米にいて考えます。この例では,一方の質量が他方の質量よりもはるかに大きいものとします。質量の大きい物体を原点に置くと,運動方程式は次のようになります。

数组$ $ \开始{}{cl} x

ここで以下のようになります。

$$r = \√{x^2+y^2}.$$

この問題を解くには,まず代入を行って4の1次odeからなる系に変換します。

数组$ $ \开始{}{cl} y_1 & # 38; = x \ \ y_2 & # 38; = x ' \ \ y_3 & # 38; = y \ \ y_4 & # 38; = & # xA; y '。\{数组}$ $

代入により1次系が生成されます。

数组$ $ \开始{}{cl} y ' _1 & # 38; = y_2 \ \ y ' _2 & # 38; y = -y_1 / r ^ 3 \ \ ' _3 & # 38; = y_4 \ \ y ' _4& # xA; & # 38; = -y_3 / r ^ 3。\{数组}$ $

関数twobodyodeは二体問題の方程式系をコ,ド化したものです。

函数Dy = two - bodyode(t,y)两个身体问题,其中一个质量比另一个大得多。R =√(y(1)²+ y(3)²);Dy = [y(2);- y (1) / r ^ 3;y (4);- y (3) / r ^ 3);

twobodyode.mを作業ディレクトリに保存してから,ode113を使用してodeを解きます。RelTolには1 e-13AbsTolには1 e-14の厳密な許容誤差を指定します。

Opts = odeset(“Reltol”1 e-13“AbsTol”1 e-14“统计数据”“上”);Tspan = [0 10*pi];Y0 = [2 0 0 0.5];[t,y] = ode113(@twobodyode, tspan, y0, opts);情节(t、y)传说(“x”“x””“y”“y””“位置”“东南”)标题(“位置和速度分量”
924个成功步骤4个失败尝试1853个功能评估

图绘制(y (: 1), y (:, 3),“o”, 0, 0,“罗”)轴平等的标题(“小质量轨道”

ode113ソルバ,は,数值よりも少ない関数評価と短い時間で解を得ることができます。

入力引数

すべて折りたたむ

解を求める関数。積分する関数を定義する関数ハンドルとして指定します。

スカラtおよび列ベクトルyをとる関数Dydt = odefun(t,y)は,デ,タ型がまたは f t y に対応する列ベクトルdydtを返さなければなりません。odefunは,tyのいずれかの引数が関数で使用されない場合でも,両方の入力引数を受け入れなければなりません。

たとえば, y 5 y 3. を解くには,次の関数を使用します。

函数Dydt = odefun(t,y) Dydt = 5*y-3;结束

方程式系の場合,odefunの出力はベクトルです。ベクトルの各要素は 1 つの方程式の解です。たとえば、

y 1 y 1 + 2 y 2 y 2 3. y 1 + 2 y 2

を解くには,次の関数を使用します。

函数Dydt = odefun(t,y) Dydt = 0 (2,1);Dydt (1) = y(1)+2*y(2);Dydt (2) = 3*y(1)+2*y(2);结束

関数odefunに追加パラメタを指定する方法の詳細にいては,関数のパラメ,タ,化を参照してください。

例:@myFcn

デ,タ型:function_handle

積分区間。ベクトルとして指定します。少なくとも、tspanは開始時点と終了時点を指定する2要素ベクトル(t0 tf)でなければなりません。t0特遣部队の間の特定時点における解を取得するには,(t0, t1, t2,…,tf)の形式の長いベクトルを使用します。tspanの要素は,単調増加または単調減少でなければなりません。

ソルバ,は開始時点tspan (1)y0によって指定される初期条件を設定し,tspan (1)からtspan(结束)まで積分します。

  • tspanに2の要素がある場合((t0 tf)),ソルバ,は区間内の個々の内部積分ステップで計算した解を返します。

  • tspanに2を超える要素がある場合((t0, t1, t2,…,tf)),ソルバ,は指定された各点で計算した解を返します。ただし,ソルバ,はtspanで指定された各点に正確にステップするわけではありません。代わりに,ソルバ,は独自の内部ステップを使用して解を計算し,tspan内の要求された点で解を評価します。指定された点で出力された解の精度の次数は,各内部ステップで計算された解と同じです。

    中間点をいくつか指定しても計算効率にほとんど影響しませんが,大規模な系の場合はメモリ管理に影響を及ぼす可能性があります。

ソルバ,はtspanの値を使用してInitialStepMaxStepに適した値を計算します。

  • tspanに複数の中間点が含まれる場合((t0, t1, t2,…,tf)),指定した点は問題のスケ,ルの目安となり,これはソルバ,が使用するInitialStepの値に影響することがあります。そのため,ソルバーで得られる解は、tspanを2要素ベクトルとして指定するか,中間点を含むベクトルとして指定するかによって異なる場合があります。

  • tspanの最初と最後の値は,最大ステップサMaxStepの計算に使用されます。そのため,tspanの最初または最後の値を変更すると,ソルバーが別のステップシーケンスを使用する可能性があり,そのため解が変わることがあります。

例:10 [1]

例:[1 3 5 7 9 10]

デ,タ型:|

初期条件。ベクトルとして指定します。odefunに定義された各方程式の初期条件をy0に含めるために,y0odefunのベクトル出力と同じ長さでなければなりません。

デ,タ型:|

オプション構造体。構造体配列として指定します。选项構造体の作成または変更には,関数odesetを使用します。各odeソルバと互換性のあるオプションの一覧にいては,Odeオプションの概要を参照してください。

例:options = odeset('RelTol',1e-5,'Stats','on','OutputFcn',@ odeploy)は,相対許容誤差1 e-5を指定し,ソルバ,統計の表示をオンにして,解の計算時に解をプロットする出力関数@odeplotを指定します。

デ,タ型:结构体

出力引数

すべて折りたたむ

評価点。列ベクトルとして返されます。

  • tspanに2の要素がある場合((t0 tf))、tには積分の実行に使用される内部評価点が含まれます。

  • tspanに2より多い要素が含まれる場合,ttspanと同じです。

解。配列として返されます。yの各行は,tの対応する行に返される値での解です。

ベント時点。列ベクトルとして返されます。teの@ @ベント時点はに返された解に対応し,は発生した@ @ベントを指定します。

ベント時点での解。配列として返されます。teの@ @ベント時点はに返された解に対応し,は発生した@ @ベントを指定します。

トリガされるベント関数のンデックス。列ベクトルとして返されます。teの@ @ベント時点はに返された解に対応し,は発生した@ @ベントを指定します。

評価対象の構造体。構造体配列として返されます。この構造体を関数德瓦尔と共に使用して区間(t0 tf)の任意の点で解を評価します。構造体配列索尔は,常に以下のフィ,ルドを含みます。

構造体フィ,ルド 説明

sol.x

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

sol.y

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

sol.solver

ソルバ,名。

さらに,odeset事件オプションを指定して电子邮箱ベントが検出された場合,索尔は以下のフィ,ルドも含みます。

構造体フィ,ルド 説明

sol.xe

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

sol.ye

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

sol.ie

事件オプションに指定された関数により返されるベクトルの@ @ンデックス。値は,どの。

アルゴリズム

ode113は1次~ 13次の可変ステップ,可変次数(VSVO)のAdams-Bashforth-Moulton PECE法ソルバーです。使用する最高次数は12のようですが,誤差推定の作成には13次の式が使用されます。また,この関数はロ,カル外挿を実行して13次で積分を進めます。

許容誤差が厳しい場合やode関数の評価に特に時間のかかる場合,ode113の方が数值より効率的なことがあります。ode113は複数ステップソルバ,です。まり,通常は現時点の解を計算するために,それより前の複数時点の解が必要です。[1][2]

参照

[1]夏皮恩,L. F.和M. K.戈登,常微分方程的计算机解法:初值问题,W. H.弗里曼,旧金山,1975。

[2]香波,L. F.和M. W. ReicheltMATLAB ODE套件,“SIAM科学计算杂志,Vol. 18, 1997, pp. 1-22。

バ,ジョン履歴

R2006aより前に導入