⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 example3.m

📁 多部预测自校正控制的算法仿真程序
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%               自适应控制理论与应用                   %%%
%%%          第四章多步预测自校正控制仿真程序            %%%
%%%                张章    212007081101007               %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear%清理工作间变量

yr=[ones(1,50),zeros(1,50),ones(1,150),zeros(1,50),ones(1,50),zeros(1,54)];

y(2)=0;y(1)=0;
u(1)=0;u(2)=0;
Yr=[0 0 0]';Y=[0 0 0]';dU=[0 0 0]';
du(1)=0; du(2)=0; 

%RLS递推最小二乘辨识
c0=[0.1 0.1 0.001 0.0015]';%直接给出被辨识参数的初始值,即一个充分小的实向量
Q=eye(3,3);R=0.05;I=eye(4,4);
p0=10^10*eye(4,4);%直接给出初始状态P0,即一个充分大的实数单位矩阵
c=[c0,zeros(4,400)];%被辨识参数矩阵的初始值及大小
v=randn(400,1);
for k=3:400; %开始求K 
    y(k)=0.8*y(k-1)+y(k-2)+u(k-1)+1.5*u(k-2)+0.02*v(k);
    h1=[-y(k-1),-y(k-2),u(k-1),u(k-2)]'; x=h1'*p0*h1+0.95; x1=1/x; %开始求K(k)
    k1=p0*h1*x1;%求出K的值
    d1=y(k)-h1'*c0; c1=c0+k1*d1;%求被辨识参数c   
    c0=c1;%新获得的参数作为下一次递推的旧参数
    c(:,k)=c1;%把辨识参数c 列向量加入辨识参数矩阵的最后一列 
    p1=((I-(k1*h1'))*p0)./0.95;
    p0=p1;%给下次用
    
    a1=c(1,k); a2=c(2,k); b1=c(3,k); b2=c(4,k);  
    A1=1-a1;A2=a1-a2;A3=a2;B1=b1;B2=b2-b1;B3=-b2;
    E1=[1 0 0];
    g10=A1;g11=A2;g12=A3;
    G1=[g10 g11 g12];
    e21=g10;
    E2=[e21 1 0];
    g20=g11+g10*A1;g21=g12+g10*A2;g22=g10*A3;
    G2=[g20 g21 g22];
    e32=g20;e31=e21;
    E3=[e32 e21 1];                                                                                                                                    
    g30=g21+g20*A1;g31=g22+g20*A2;g32=g20*A3;
    G3=[g30 g31 g32];
    l10=b1;
    L1=l10;
    h10=b2;                                                                   
    H1=h10 ;
    l21=e21*b1+h10;
    L2=l21;
    h20=e21*b2;
    H2=h20;
    l32=e32*b1+h20;
    L3=l32;                                                                                                                                                                             
    h30=e32*b2;
    H3=h30;
    L=[L1 L2 L3]';H=[H1 H2 H3]';G=[G1' G2' G3']';
    L1=[L1 L2 L3];
    Lm=inv(L1*Q*L+5);
    Lq=Lm*L1*Q;
    lq=Lq(1,:);
    
    Yr=[yr(k+1) yr(k+2) yr(k+3)]';  dU=du(k-1); Y=[y(k) y(k-1) y(k-2)]';
    u(k)=u(k-1)+lq*[Yr-H*dU-G*Y];
    du(k)=u(k)-u(k-1);
    
    AA1(k)=a1;AA2(k)=a2;BB1(k)=b1;BB2(k)=b2;
    
 end%大循环结束
 
h1=figure;
subplot(2,1,1)
plot(y,'-');
hold on
k=1:1:404;
plot(k,yr,':');
subplot(2,1,2)
plot(u,'-');
hold off

figure(2);%第2个图形
i=1:400;%横坐标从1到15
plot(i,AA1,'r',i,AA2,':',i,BB1,'g',i,BB2,':') %画出a1,a2,b1,b2的各次辨识结果
title('Parameter Identification with Recursive Least Squares Method')%图形标题

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -