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)

擬合結果:

從結果上看,遞推最小二乘結果不如常規最小二乘精確。

不過其遞推特性用在對速度更高要求的情況下也許會更好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM