遗忘因子递推最小二乘法估计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述`%遗忘因子递推最小二乘参数估计(FFRLS)
clear all; close all;

a=[1 -1.5 0.7]’; b=[1 0.5]’; d=3; %对象参数
na=length(a)-1; nb=length(b)-1; %na、nb为A、B阶次

L=1000; %仿真长度
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)
yk=zeros(na,1); %输出初值
u=randn(L,1); %输入采用白噪声序列
xi=sqrt(0.1)*randn(L,1); %白噪声序列

thetae_1=zeros(na+nb+1,1); %thetae初值
P=10^6*eye(na+nb+1);
lambda=0.98; %遗忘因子范围[0.9 1]
for k=1:L
if k==501
a=[1 -1 0.4]’;b=[1.5 0.2]’; %对象参数突变
end
theta(:,k)=[a(2:na+1);b]; %对象参数真值

phi=[-yk;uk(d:d+nb)];
y(k)=phi'*theta(:,k)+xi(k); %采集输出数据

%遗忘因子递推最小二乘法
K=P*phi/(lambda+phi'*P*phi);
thetae(:,k)=thetae_1+K*(y(k)-phi'*thetae_1);
P=(eye(na+nb+1)-K*phi')*P/lambda;

%更新数据
thetae_1=thetae(:,k);

for i=d+nb:-1:2
    uk(i)=uk(i-1);
end
uk(1)=u(k);

for i=na:-1:2
    yk(i)=yk(i-1);
end
yk(1)=y(k);

end
subplot(1,2,1)
plot([1:L],thetae(1:na,:)); hold on; plot([1:L],theta(1:na,:),‘k:’);
xlabel(‘k’); ylabel(‘参数估计a’);
legend(‘a_1’,‘a_2’); axis([0 L -2 2]);
subplot(1,2,2)
plot([1:L],thetae(na+1:na+nb+1,:)); hold on; plot([1:L],theta(na+1:na+nb+1,:),‘k:’);
xlabel(‘k’); ylabel(‘参数估计b’);
legend(‘b_0’,‘b_1’); axis([0 L -0.5 2]);`

  • 5
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值