サーチ…


odesetの例

最初に、私たちが解決したい初期値問題を初期化します。

odefun = @(t,y) cos(y).^2*sin(t);
tspan = [0 16*pi];
y0=1;

この問題を解決するために指定されたオプションを指定せずにode45関数を使用します。後でそれを比較するために軌道をプロットする。

[t,y] = ode45(odefun, tspan, y0);
plot(t,y,'-o');

私たちは今、私たちの問題の狭い相対的な許容範囲と狭い絶対的な許容範囲を設定します。

options = odeset('RelTol',1e-2,'AbsTol',1e-2);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');

私たちは厳密な相対的かつ狭い絶対許容限度を設定します。

options = odeset('RelTol',1e-7,'AbsTol',1e-2);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');

私たちは狭い相対的かつ厳しい絶対許容限界を設定します。許容範囲が狭い前述の例のように、軌道は特定のオプションなしで最初のプロットと完全に異なることが分かります。

options = odeset('RelTol',1e-2,'AbsTol',1e-7);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');

私たちは厳密な相対的かつ厳しい絶対許容限界を設定します。結果を他のプロットと比較すると、許容誤差が狭いと計算された誤差が強調されます。

options = odeset('RelTol',1e-7,'AbsTol',1e-7);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');

以下は、精度と実行時間との間のトレードオフを実証するはずです。

tic;
options = odeset('RelTol',1e-7,'AbsTol',1e-7);
[t,y] = ode45(odefun, tspan, y0, options);
time1 = toc;
plot(t,y,'-o');

比較のため、絶対誤差と相対誤差の許容範囲を厳しくします。精度の大幅な向上がなければ、初期値の問題を解決するにはかなり時間がかかることがわかりました。

tic;
options = odeset('RelTol',1e-13,'AbsTol',1e-13);
[t,y] = ode45(odefun, tspan, y0, options);
time2 = toc;
plot(t,y,'-o');


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow