MATLAB には多数のヘルプページがあるものの、説明が難解で100%理解するにはかなりの努力と時間が必要です。「ode45 のヘルプセンター」についても御多分に洩れず、今までは疑問点を残しながらも「結果としてプログラムが動いたのだから、細かいことはまあ良いか」で過ごしてきました。
今回、テスト用のプログラムを動かしながら、一部の疑問を自分なりに解消できたので、備忘録として投稿しておきます。
dydt を記述する function に end は要るのか?、要らないのか?
現実: ヘルプセンターの記述を見ると、end は有ったり、無かったり。
解釈: どうも、独立した m ファイルとして記述している例と、ローカル関数として記述している例が入り混じっているので、このような不統一状態になっているようです。ローカル関数として記述している function には end は必須です。
dydt を記述する function の中では、時刻 t はベクトル扱いしなければならないのか?
現実: 例の中では、
dydt(2)=(A/B)*t.*y(1);
dydt=-2*y+2*cos(t).*sin(2*t);
dydt=-f.*y+g; %(f,g は時間 t だけで確定した関数)
のように、掛け算が「*」ではなく必ず「.*」で記述されています。t がスカラーなら、このような記述は必要ないはずなのですが・・・。
解釈: 挙げられている例題で確認しただけですが、「.」を削除して「*」だけにしても、全く問題なく答が得られます。どのようなケースでも「*」だけで問題なさそうだと解釈しました。それなのに、なぜ例外なく「.*」にしているのでしょうか?
初期値は行ベクトルなのか?、列ベクトルなのか?
現実: ヘルプセンターの説明では、[2; 0] だったり、[0 0.01] だったり。条件によって使い分けているようにも見えます。
解釈: 実行してみたところ、どのケースでも、行ベクトル・列ベクトルどちらの形式にしても問題なく動作します。どちらでも良さそうです。
時間依存の項をもつ ODE の記述には補間処理が必須なのか?
現実:「時間依存の項をもつ ODE」の項では、次の式の $f(t)$ や $g(t)$ をわざわざ折線として記述し直し、dydt の function の中で一次補間して使用しています。折線化が必須のように受け取れます。
$$
\begin{align}
&y'(t)=-f(t)y(t)+g(t)\\
&f(t)=t^2-t-3\\
&g(t)=3\sin(t-0.25)
\end{align}
$$
解釈: 次のようにシンプルに記述するだけで大丈夫でした。当然、折線近似よりも正確です。なぜここで折線を持ち出してきたのか疑問です。
function dydt=myode2(t,y)
f=t^2-t-3;
g=3*sin(t-0.25);
dydt=-f*y+g;
end