MATLABで状態空間モデルを離散化してシミュレーションする

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

コメント

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