ここにリンクがあります。最初に上記のコンテンツを読むことができます。以前のブログ投稿https://blog.csdn.net/weixin_42887138/article/details/109164200の結論を直接引用します。もちろん、https://blog.csdn.net/weixin_42887138/article/details/109089396を学ぶために最初の記事から始めることをお勧めします。
%DSC example
%--------------------------------system-----------------------------------%
%dot_x1=x2
%dot_x2=-x1^2+u
%-------------------------------settings----------------------------------%
%initial state
%x1(0)=0.5,x2(0)=0
%sample time
%tao=0.01
%tracking target
%x_1d=[3 1 4 1 3]//interval time:20
%-------------------------------------------------------------------------%
%-------------------------------数据初始化--------------------------------%
%参数取值
k1=1;
k2=50;
%采样时间
tao=0.01;
%总采样次数
T=10000;
%总时间
total_time=tao*T; %观测时间设置为100秒
%定义初始状态
x1_initial=0.5;
x2_initial=0;
u_initial=0;
%定义状态变量矩阵和控制变量矩阵
x1=zeros(1,T);
x2=zeros(1,T);
u=zeros(1,T);
%x1d的定义
x1d=zeros(1,T);
for i=1:T/5
x1d(i)=3;
end
for i=T/5+1:2*T/5
x1d(i)=1;
end
for i=2*T/5+1:3*T/5
x1d(i)=4;
end
for i=3*T/5+1:4*T/5
x1d(i)=1;
end
for i=4*T/5+1:T
x1d(i)=3;
end
%x2d初始化
x2d=zeros(1,(T));
%x2_bar表示x2上面带杠杠
x2_bar=0;
for k=1:T
if k==1
x1(k)=x1_initial+tao*x2_initial;
x2(k)=x2_initial+tao*(-x1_initial^2+u_initial);
x2d(k)=x2_bar;
x2_bar=(x1d(k)-0)/tao-k1*(x1(k)-x1d(k));
u(k)=-(x1(k)-x1d(k))+x1(k)^2+(x2_bar-x2d(k))/tao-k2*(x2(k)-x2d(k));
else
x1(k)=x1(k-1)+tao*x2(k-1);
x2(k)=x2(k-1)+tao*(-x1(k-1)^2+u(k-1));
x2d(k)=x2_bar;
x2_bar=(x1d(k)-x1d(k-1))/tao-k1*(x1(k)-x1d(k));
u(k)=-(x1(k)-x1d(k))+x1(k)^2+(x2_bar-x2d(k))/tao-k2*(x2(k)-x2d(k));
end
end
figure(1),hold on;
plot(x1,'b','linewidth',1.2);
plot(x1d,'r','linewidth',1.2);
xlabel('时间/s');
ylabel('信号幅值');
title('动态面控制效果');
legend('x1','x1d')
set(gca,'xticklabel',0:10:100);
hold off;
作成日:2020-10-19
20:00
変更日(このバージョンではパーツの例が追加されています):
2020-11-3
10:40