【入門】状態空間モデルで微分解決(MATLAB)【数値計算】

【入門】状態空間モデルで微分解決(MATLAB)【数値計算】 数値計算
【入門】状態空間モデルで微分解決(MATLAB)【数値計算】

MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/

はじめに

の、
MATLAB,Python,Scilab,Julia比較 その58【状態空間モデル⑯】

を書き直したもの。

ニュートンの運動方程式を状態空間モデルを離散化したものをMATLABでシミュレーションする。

微分解決済みの状態空間モデル

以下がニュートンの運動方程式を状態空間モデルを離散化したもの。
これをMATLABで表現する。

状態方程式
\(\boldsymbol{x}(t+\Delta t)=\boldsymbol{x}(t)+\{A\boldsymbol{x}(t)+B\boldsymbol{u}(t)\}\Delta t \)

出力方程式
\(\boldsymbol{y}(t+\Delta T)=C\boldsymbol{x}(t+\Delta t)+D\boldsymbol{u}(t)\)

MATLABコード

運動方程式を微分解決済みの状態空間モデル用いてMATLABで書くとこうなる。

[statespacemodel.m]

function [x,y] = statespacemodel(A, B, C, D, u, dt, x)
    % 様態方程式
    x = x + (A*x + B*u) * dt;
    
    % 出力方程式
    y = C*x + D*u;
end
m=1;

A=[0,0 ; 1,0];
B=[1/m ; 0];
C=[1,0;0,1];
D=[0;0];
dt=0.001;

t=linspace(0,10,10000); % 時間(横)軸
u=zeros(1,10000);	% 入力信号生成
u(1,5000:10000)=1;	% 5秒後に0から1へ
y=zeros(2, length(t));
x=zeros(2,1);

for i = 1:length(t)
    [x,y(:,i)] = statespacemodel(A,B,C,D,u(i),dt,x);
end

hold on;
plot(t,y,'linewidth',3);
plot(t,u,'--b','linewidth',3);
ylim([-1,14]);
grid();
hold off;

シミュレーション結果

微分解決済み状態空間モデルで運動方程式(MATLAB版)、力F、速度v、距離s

まとめ

  • MATLABでベクトル、行列演算による状態空間モデルの演算実施。
  • 導出した数式のまんまでコードが組める。
    • このルールに即していれば、さまざまな振る舞いを規定できる。
  • シミュレーション結果も想定通り。

MATLAB、Python、Scilab、Julia比較ページはこちら

コメント

タイトルとURLをコピーしました