MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/
はじめに
の、
MATLAB,Python,Scilab,Julia比較 その60【状態空間モデル⑱】
を書き直したもの。
ニュートンの運動方程式を状態空間モデルを離散化したものをScilabでシミュレーションする。
微分解決済みの状態空間モデル
以下がニュートンの運動方程式を状態空間モデルを離散化したもの。
これをScilabで表現する。
状態方程式
\(\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)\)
Scilabコード
function [x,y] = statespacemodel(A, B, C, D, u, dt, x)
// 様態方程式
x = x + (A*x + B*u) * dt;
// 出力方程式
y = C*x + D*u;
endfunction
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
plot(t',y','linewidth',3);
plot(t',u','--b','linewidth',3);
p=gca();p.tight_limits(:)="on";p.data_bounds(:,2)=[-1;14];
xgrid();
コードとしてはMATLABと一緒。
特に演算部分に関しては全く一緒で、
グラフ表示の部分で差異があるだけ。
シミュレーション結果
まとめ
- Scilabでベクトル、行列演算による状態空間モデルの演算実施。
- MATLABと同一。
- グラフ表示の部分に差異があるだけ。
- シミュレーション結果も想定通り。
MATLAB、Python、Scilab、Julia比較ページはこちら
コメント