带遗忘因子的递推最小二乘法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;