MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/
はじめに
の、
MATLAB,Python,Scilab,Julia比較 その61【状態空間モデル⑲】
を書き直したもの。
ニュートンの運動方程式を状態空間モデルを離散化したものをJuliaでシミュレーションする。
微分解決済みの状態空間モデル
以下がニュートンの運動方程式を状態空間モデルを離散化したもの。
これをJuliaで表現する。
状態方程式
\(\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)\)
Juliaコード
using PyPlot
function statespacemodel(A,B,C,D,u,dt,x)
# 状態方程式
x = x + (A*x + B*u) * dt;
# 出力方程式
y = C*x + D*u;
return x,y;
end
function statespacemodel_test()
m=1;
A=[0 0; 1 0];
B=[1/m; 0];
C=[1 0; 0 1];
D=[0; 0];
dt=0.001;
t=range(0,10,length=10000); # 時間(横)軸
u=zeros(1,10000); # 入力信号生成
u[5000:10000].=1.0; # 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');
plot(t',u', "--b");
grid();
end
statespacemodel_test()
MATLABコードと全く一緒。
厳密差異としては以下がある。
配列の添え字が丸カッコか角カッコか。
ドット演算子を使用している。
u[5000:10000].=1.0
ここまで差異が無いと、自宅での実験はJuliaでも良いかも?
シミュレーション結果
まとめ
- Juliaでベクトル、行列演算による状態空間モデルの演算実施。
- MATLABとほぼ同一。
- 添え字、ドット演算子に違いあり。
- シミュレーション結果も想定通り。
MATLAB、Python、Scilab、Julia比較ページはこちら
コメント