带遗忘因子的递推最小二乘法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

带遗忘因子的递推最小二乘法

%开环系统参数辨识,带遗忘因子的递推最小二乘估计法(FFRLS),系统为单入单出的CAR(带控制量的自回归模型)模型,三阶系统

clear all

clc

a=[1-1.10.60.1];b=[10.7];d=4;%实际模型系数矩阵与纯迟延

L=1000;%仿真长度

na=length(a)-1;nb=length(b)-1;%na,nb为输出输入系数矩阵A,B的阶数

yk=zeros(na,1);%输出矩阵初始化

yk_m=zeros(na,1);%模型输出

uk=zeros(nb+d,1);%输入矩阵初始化

theta_e0=zeros(na+nb+1,1);%theta_e0为估计参数初值,

a1,a2....an,b0,b1,...bn,共na+nb+1个

phi=zeros(na+nb+1,1);%phi为当前实际输出输入构成的矩阵

P=10^6*eye(na+nb+1);%修正系数初值

beta=0.99;%遗忘因子,在0.95到1之间

u=randn(L,1);%输入信号,方差为1的白噪声序列

omega=sqrt(0.1)*randn(L,1);%干扰信号,方差为0.1的白噪声序列

for i=1:L

theta(:,i)=[a(2:na+1),b]';%系统实际参数值

phi=[-yk;uk(d:d+nb)];%系统输出输入矩阵

phi_e=[-yk_m;uk(d:d+nb)];%模型输出输入矩阵

y(i)=phi'*theta(:,i)+omega(i);%系统实际输出

y_m(i)=phi_e'*theta_e0;%模型输出

%递推公式

K=P*phi/(beta+phi'*P*phi);

theta_e(:,i)=theta_e0+K*(y(i)-phi'*theta_e0);

P=(eye(na+nb+1)-K*phi')*P/beta;

%数据更新

theta_e0=theta_e(:,i);

for j=na:-1:2

yk(j)=yk(j-1);

yk_m(j)=yk_m(j-1);

end

yk(1)=y(i);

yk_m(1)=y_m(i);

for j=(nb+d):-1:2

uk(j)=uk(j-1);

end

uk(1)=u(i);

end

figure

x=[1:L];

plot(x,theta_e,x,theta,'k:'); legend('a1','a2','a3','b1','b2'); axis([0L-22]);

figure

plot(x,y,x,y_m,'r');

legend('实际输出','模型输出'); axis([0L-2020]);

grid on;

相关文档
最新文档