在这里给出链接,可以先看上面的内容,我会直接引用上一篇博文的结论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