递推最小二乘法求解线性方程组(附MATLAB代码)

两盒软妹~` 提交于 2020-04-14 17:39:19

【推荐阅读】微服务还能火多久?>>>

前言

  • 参考博文:
  • 关于递推最小二乘法,网上各种资料,让人莫衷一是,故整理其重要部分,述而不作,说的就是我了!
  • 最后附MATLAB代码,实测可用

概述

  • 递推最小二乘法的引入(具体见知乎文章)
    在这里插入图片描述

关键公式

  • 递推公式如下所示(推导见参考书目46页或者知乎文章)
    在这里插入图片描述

MATLAB代码实现

function res = RLS(A,b,num,len)
%num为辨识参数的个数,即A的列数
%len为数据的长度,即A的行数
%求解Ax=b
%res为辨识的参数,即求解得到的x值
format long;
x = rand(num,1);
I = eye(num, num);
P = (10^6) * I;

for k = 1:len
    Ak = A(k,:); %新的数据行,即phi
    Q1 = P*(Ak'); %K(k)的分子
    Q2 = 1 + Ak * P * (Ak'); %K(k)的分母
    K = Q1/Q2;   %更新K(k) 
    x = x + K * (b(k) - Ak*x);  %更新辨识的参数
    P = (I - K*Ak)*P;    %更新P
    thetae(:,k) = x;   %记录每次计算的辨识参数
    steps(k) = k;     %记录当前步数(也可理解为当前用到的数据个数)
end
steps = steps';
res=thetae(:,end);
for i = 1:num
    subplot(num,1,i)
    plot(steps, thetae(i,:));
end
end
发布了154 篇原创文章 · 获赞 16 · 访问量 3万+
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!