2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【MATLAB】ヘルプセンターの ode45 の説明について、自分なりに解釈したこと

Last updated at Posted at 2023-07-18

 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
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?