matlab练习程序(递推最小二乘)
一般的最小二乘通常是一次拿到全部的数据, 对所有数据进行统一优化计算得到模型系数。
递推最小二乘是以一种递推的方式计算最小二乘,每次使用最新的测量值,来不断更新模型系数。
递推公式如下:
公式中A和B为测量值,X为模型系数。
matlab代码如下:
clear all; close all; clc; a=2;b=2;c=-3;d=1;e=2;f=30; %原始系数 [x,y]=meshgrid(0:0.1:30); z=a*x.^2+b*y.^2+c*x.*y+d*x+e*y +f; %模型 mesh(x,y,z) hold on; %%准备数据 X=x(:);Y=y(:);Z=z(:); p = randperm(90000,100); %90000个点中随机选100个 X=X(p);Y=Y(p);Z=Z(p); plot3(X,Y,Z,'ro') %%正常最小二乘 A=[X.^2 Y.^2 X.*Y X Y ones(length(X),1)]; B=Z; C=inv(A'*A)*A'*B; %%递推最小二乘 figure; plot3(X,Y,Z,'ro') hold on; P = eye(6)*1000; X = zeros(6,1); for i=1:length(A) A1 = A(i,:); % P = inv(inv(P)+A1'*A1); P = P - P*A1'*A1*P/(1+A1*P*A1'); X = X + P*A1'*(B(i) - A1*X); end %%画出RLS计算出的结果 a=X(1);b=X(2);c=X(3);d=X(4);e=X(5);f=X(6); %拟合系数 [x,y]=meshgrid(0:0.1:30); z=a*x.^2+b*y.^2+c*x.*y+d*x+e*y +f; %模型 mesh(x,y,z)
拟合结果:
从结果上看,递推最小二乘结果不如常规最小二乘精确。
不过其递推特性用在对速度更高要求的情况下也许会更好。