「シミュレーション」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし
編集の要約なし |
編集の要約なし |
||
16行目: | 16行目: | ||
微分方程式とは,ある未知関数とその関数の導関数との関係が表されている方程式です.そのうち特に1変数の導関数で表されているものを常微分方程式といいます.システム制御に関わるシミュレーションでは時間に関する導関数で表される場合がほとんどでしょうから,常微分方程式が対象になります.さらに,導関数の階数(次数)が微分方程式の階数となります. | 微分方程式とは,ある未知関数とその関数の導関数との関係が表されている方程式です.そのうち特に1変数の導関数で表されているものを常微分方程式といいます.システム制御に関わるシミュレーションでは時間に関する導関数で表される場合がほとんどでしょうから,常微分方程式が対象になります.さらに,導関数の階数(次数)が微分方程式の階数となります. | ||
ということで,これから取り扱う最も簡単な微分方程式は以下のような一階の常微分方程式となります.ここで | ということで,これから取り扱う最も簡単な微分方程式は以下のような一階の常微分方程式となります.ここで<math>x(t)</math>が未知関数,<math>x_0</math>はその初期値です. | ||
<math>\frac{dx(t)}{dt} = f(x(t), t) \, , \quad x(0) = x_0</math> | <math>\frac{dx(t)}{dt} = f(x(t), t) \, , \quad x(0) = x_0</math> | ||
26行目: | 26行目: | ||
=== オイラー法 === | === オイラー法 === | ||
微分方程式の数値解法の基本は,ある時刻 | 微分方程式の数値解法の基本は,ある時刻<math>t_k</math>から微少な刻み幅<math>\Delta t</math>(サンプリング時間またはサンプリング周期ともいう)だけ時間がたった後の関数値<math>x(t_k + \Delta t)</math>を逐次求めていくことです.これをいかに精度よく(できるだけ少ない計算量で)求めるかが数値解法の善し悪しと言えます. | ||
オイラー法は以下のように | オイラー法は以下のように<math>x(t_k + \Delta t)</math>のテイラー展開の最初の2項だけに基づきます. | ||
<math>\begin{array}{l l l} x(t_k + \Delta t) &=& x(t_k) + \frac{dx}{dt}\bigg|_{t=t_k} \, \Delta t + \frac{1}{2} \frac{d^2x}{dt^2}\bigg|_{t=t_k} \, \Delta t ^2 + \cdots \\ &\approx& x(t_k) + \frac{dx}{dt}\bigg|_{t=t_k} \, \Delta t \\ &\approx& x(t_k) + f(x(t_k), t_k) \, \Delta t \end{array}</math> | |||
ここで,表記上の簡便性から,&math(x(t_k));を&math(x_k);と表記することにし,&math(t_k + \Delta t);を&math(t_{k+1});, &math(x(t_k + \Delta t));を&math(x_{k+1});などと表記することにします.この時オイラー法は以下のように表すことができます. | ここで,表記上の簡便性から,&math(x(t_k));を&math(x_k);と表記することにし,&math(t_k + \Delta t);を&math(t_{k+1});, &math(x(t_k + \Delta t));を&math(x_{k+1});などと表記することにします.この時オイラー法は以下のように表すことができます. |