模型参考自适应控制
考虑一阶线性模型,通过模型参考自适应的控制方法进行参考值的跟随效果,给出了李雅普诺夫的证明,和仿真图,有问题还希望多多指教!
仿真结果:
之前一直没看私信和评论,没想到这么多人关注,代码如下:
clear all;clc;close all;
% 设置仿真总时长、仿真步长、迭代步数
t0=0;tf=10;
h=0.02;tt=0:h:tf;
%对象参数
a=1;b=3;
am=2;bm=5;
%参数初始化
x=zeros(1,length(tt));xm=zeros(1,length(tt));
u=zeros(1,length(tt));um=zeros(1,length(tt));
a1=zeros(1,length(tt));a2=zeros(1,length(tt));
c1=bm/b*ones(1,length(tt));c2=(am-a)/b*ones(1,length(tt));
%定义函数
f=@(x,u)(-a*x+b*u);%被控对象
fm=@(xm,uc)(-am*xm+bm*uc);%参考模型
fu=@(a1,a2,x,uc)(-a2*x+a1*uc);%控制器
fa1=@(uc,e)(-uc*e);%参数theta1
fa2=@(x,e)(x*e);%参数theta2
%设置输入信号初值
uc=sin(2*pi*tt/3);
x(:,1)=[-1];xm(:,1)=[1];e(:,1)=x(:,1)-xm(:,1);V(:,1)=-am*e(:,1)^2;
u(1,1)=fu(a1(:,1),a2(:,1),x(:,1),uc(1,1));
%微分方程求解
for i=2:1:length(tt)
x(:,i)=x(:,i-1)+h*f(x(:,i-1),u(1,i-1));
xm(:,i)=xm(:,i-1)+h*fm(xm(:,i-1),uc(1,i-1));
a1(:,i)=a1(:,i-1)+h*fa1(uc(1,i-1),e(:,i-1));
a2(:,i)=a2(:,i-1)+h*fa2(x(:,i-1),e(:,i-1));
e(:,i)=x(:,i)-xm(:,i);
u(1,i)=fu(a1(:,i),a2(:,i),x(:,i),uc(1,i));
end
y=x;ym=xm;%系统输出
%响应曲线
figure
plot(tt,y,'--r','linewidth',1.5);
hold on;
plot(tt,ym,'--O','linewidth',1);
hold on;
plot(tt,u,'--k','linewidth',1.5);
hold on;
plot(tt,uc,'g','linewidth',1.5);
grid on
xlabel('t');ylabel('x');legend('被控对象输出','参考模型输出','被控对象输入信号','参考模型输入信号');
title('模型参考自适应控制');
figure
plot(tt,c1,'--g','linewidth',1.5);
hold on;
plot(tt,a1,'r','linewidth',1.5);
hold on;
plot(tt,c2,'--k','linewidth',1.5);
hold on;
plot(tt,a2,'b','linewidth',1.5);
grid on
xlabel('t');ylabel('x');legend('bm/b','参数theta1','(am-a)/b','参数theta2');
title('模型参考自适应控制');
`