MATLABで状態空間モデルを離散化し、シミュレーションする。シミュレーションするモデルはバネマスダンパを用いる。連続時間モデル
\begin{align}
\dot{x}(t)&=Ax(t)+Bu(t)\\
y&=Cx(t)
\end{align}
をc2dを使って
\begin{align}
\dot{x}[t+1]&=Ax[t]+Bu[t]\\
y&=Cx[t]
\end{align}
に離散化する。離散化後はブロック線図に従い計算すればいい。
M=0.5;
K=0.25;
B=0.7;
A=[0 1; -K/M -B/M];
B=[0; 1/M];
C=[1 0];
Ts=0.01;
sys = ss(A,B,C,0);
sysd = c2d(sys,Ts);
r1(1:50/Ts)=1;
r2(1:50/Ts)=2;
r3(1:50/Ts)=5;
r4(1:50/Ts)=3;
r0=[r1,r2,r3,r4];
y=zeros(1,200/Ts);
u=zeros(2,200/Ts);
x=zeros(2,200/Ts);
for i=1:1:length(r0)
if i==1
Bu(:,i)=r0(1,i)*sysd.B;
Ax(:,i)=[0;0];
dx(:,i)=Bu(:,i);
x(:,i)=dx(:,1);
y(:,i)=C*x(:,i);
else
Bu(:,i)=r0(1,i)*sysd.B;
Ax(:,i)=sysd.A*x(:,i-1);
dx(:,i)=Bu(:,i)+Ax(:,i-1);
x(:,i)=dx(:,i);
y(:,i)=C*x(:,i);
end
end
figure;
plot(y)
grid on
コメント