1. ホーム
  2. matlab

[解決済み] ode45 が T 軸上で正確に 0.01 のステップを取るように強制するにはどうすればよいですか?

2022-02-18 03:46:01

質問

Matlabを使って微分方程式を解いています。ode45が一定のステップを踏むように強制したいのですが、方程式を解いている間は常にT軸を0.01ずつ増加させます。どうすればよいのでしょうか?

ode45 は一貫して最適化されたランダムなステップをとっており、一貫して 0.01 の小さなステップをとるようにする方法がわからないようです。以下はそのコードです。

options= odeset('Reltol',0.001,'Stats','on');

%figure(1);
%clf;
init=[xo yo zo]';
tspan=[to tf];
%tspan = t0:0.01:tf;

[T,Y]=ode45(name,tspan,init,options);

解決方法は?

ベースは ドキュメント が内部で行うステップの大きさを制御できるようには見えません。 ode45 方程式を解くときに できる 出力が生成される時点を制御します。コメントアウトされた行に示されているように、これを行うことができます。

tspan = to:0.01:tf;  % Obtain solution at specific times
[T, Y] = ode45(name, tspan, init, options);

固定ステップサイズを使用した場合の解の精度については、上記リンク先からの抜粋を参照してください。

<ブロッククオート

もし tspan が2つ以上の要素を持っている場合 [t0,t1,t2,...,tf] の場合、ソルバーは与えられた点で評価された解を返す。しかし, ソルバーは tspan . その代わり、ソルバーは独自の内部ステップを使用して解を計算し、その解を tspan . 指定された点で生成される解は、各内部ステップで計算された解と同じ精度のものである。

中間点を複数指定しても計算効率にはほとんど影響しないが、大規模なシステムではメモリ管理に影響することがある。

つまり、出力に特定の時点の解が欲しいと指定した場合でも、ソルバーは内部で多くの適応的なステップを踏んでいるのです の間に を指定すると、その時点の値に近づけることができます。