「シミュレーション」の版間の差分

576行目: 576行目:
<math>\begin{array}{l l l}\frac{d \boldsymbol{x}(t)}{dt} &=& \boldsymbol{A} \boldsymbol{x}(t) + \boldsymbol{B} \boldsymbol{u}(t) \\\boldsymbol{y}(t) &=& \boldsymbol{C} \boldsymbol{x}(t) + \boldsymbol{D} \boldsymbol{u}(t)\end{array}</math>
<math>\begin{array}{l l l}\frac{d \boldsymbol{x}(t)}{dt} &=& \boldsymbol{A} \boldsymbol{x}(t) + \boldsymbol{B} \boldsymbol{u}(t) \\\boldsymbol{y}(t) &=& \boldsymbol{C} \boldsymbol{x}(t) + \boldsymbol{D} \boldsymbol{u}(t)\end{array}</math>


lsode関数で計算するのは状態方程式のほうだけです.その結果得られた状態変数ベクトル<math>\boldsymbol{x}</math>を用いて出力方程式に基づいて出力ベクトル&math(\boldsymbol{y});を計算します.
lsode関数で計算するのは状態方程式のほうだけです.その結果得られた状態変数ベクトル<math>\boldsymbol{x}</math>を用いて出力方程式に基づいて出力ベクトル<math>\boldsymbol{y}</math>を計算します.


ここでは前述の慣性・粘性・弾性系の強制振動をlsode関数を用いてシミュレーションするスクリプト例を示します.このスクリプトで注意すべきなのは,入力<math>u(t)</math>の取り扱いです.<math>u(t)</math>はlsodeの内部では変数tの代数式として記述しますが,lsodeで得られた状態ベクトルを用いて出力yを計算する際には時間軸ベクトルtに対応したベクトルuとして必要になります.Octaveではsin関数などが引数にベクトルを受けると,要素ごとに関数をかけて同じサイズのベクトルを返しますのでそれを利用しています.<math>u(t)</math>の内容によっては,要素ごとの積算 .* や要素ごとの除算 ./ といった演算子が必要になるので注意です.
ここでは前述の慣性・粘性・弾性系の強制振動をlsode関数を用いてシミュレーションするスクリプト例を示します.このスクリプトで注意すべきなのは,入力<math>u(t)</math>の取り扱いです.<math>u(t)</math>はlsodeの内部では変数tの代数式として記述しますが,lsodeで得られた状態ベクトルを用いて出力yを計算する際には時間軸ベクトルtに対応したベクトルuとして必要になります.Octaveではsin関数などが引数にベクトルを受けると,要素ごとに関数をかけて同じサイズのベクトルを返しますのでそれを利用しています.<math>u(t)</math>の内容によっては,要素ごとの積算 .* や要素ごとの除算 ./ といった演算子が必要になるので注意です.
614行目: 614行目:
  xlabel('time (s)');
  xlabel('time (s)');
  ylabel('y ');
  ylabel('y ');


=== 線形離散時間システムとしてのシミュレーション ===
=== 線形離散時間システムとしてのシミュレーション ===
95

回編集