📄 yuce.m
字号:
%在李国勇《智能控制及其MATALB实现》最后
%有关于隐式广义预测的介绍,主要思想就是通过RLS辨识G中的g1,g2,等
%就不必解丢番图方程,求E,F了
%在后面的程序中有一个地方不是很明白
%现在向大家请教一下
%主要问题是在程序中他用到的对象模型是
%y=1.496585*yy(n,1)-0.496585*yy(n-1,1)+0.5*uu(n-1,1);
%然而实际的模型是:y(k)-1.496585*y(k-1)=0.5*u(k-2,1);
%不知道为什么是这样子的啊?
%原程序如下:
close all;
clear all;
n=6 %预测长度
m=2 %控制长度
nn=6
t0=0.8
a=0.3
t1=1;
P=(1e+5)*eye(n+1);
uuu=0;
yyy=0;
uu=zeros(n,1);
u=zeros(m,1);
yy=zeros(n,1);
y1=zeros(n,1);
Q=zeros(n+1,1);
Q(1,1)=1;
Q(n+1,1)=1;
%产生周期为100,时间为T,幅值为l的方波信号的给定值
T=300; %仿真时间
[yr0,t]=gensig('square',100,T,1); %画方波
nm=length(t);
for i=2:nm
yr=yr0(i)+1; %产生周期为100,时间为工幅值在1和2之间变化的方波信号的给定值
%根据系统模型,计算k时刻的输出值y(k)
y=1.496585*yy(n,1)-0.496585*yy(n-1,1)+0.5*uu(n-1,1);
%y=0.496585*yy(n-1,1)+0.5*uu(n-1,1);
%保存k时刻及以前
for i=1:n-1
yy(i,1)= yy(i+1,1);
end
yy(n,1)=y;
yyy=[yyy;y];
for i=1:n
X(1,i)= uu(i,1);
end
X(1,n+1)=1;
K=P*X'*inv(t1+X*P*X');
P=(eye(n+1)-K*X)*P/t1;
Q=Q+K*(y-X*Q);
for j=1:m
for i=n:-1:j
i1=n-i+j;
G(i1,j)=Q(i,1);
end
end
y0(1:nn-1,1)=y1(2:nn,1);
y0(nn,1)=y1(nn,1);
y0=y0+(y-y1(1,1));
for i=1:n
y1(i,1)=y0(i,1)+u(1,1)*Q(n+1-i,1);
end
for i=n+1:nm
y1(i,1)=y1(n,1);
end
f(1:n,1)=y0(1:n,1);
w=a*y+(1-a)*yr;
for i=2:n
w=[w;a^i*y+(1-a^i)*yr];
end
u=inv(G'*G+t0*eye(m))*G'*(w-f);
for i=1:n-1
uu(i,1)=uu(i+1,1);
end
uu(n,1)=u(1,1);
uuu=[uuu;u(1,1)];
if(u(1,1)>1)
u(1,1)=1;
end
if(u(1,1)<-1)
u(1,1)=-1;
end
end
subplot(2,1,1);
plot(t,(yr0+1),t,yyy);
axis([0,nm,0,2.5]);xlabel('t');ylabel('yr,y');
subplot(2,1,2);
plot(t,uuu);
axis([0,nm,-1.5,1.5]);xlabel('t');ylabel('u');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -