加权最小二乘法

原理简介

最小二乘估计算法是 Gauss 于 1795 年为研究行星轨道问题而提出来的。这种算法的优点就是简单、易实现。但是常规的最小二乘算法估计精度并不高,原因主要在于没有考虑量测信息统计特性的优劣就直接使用了量测信息。如果采用加权的方法区分各量测信息的优劣,就可以大幅度的提高估计精度。加权最小二乘估计算法的思想是:对于精度较高的传感器,权重取的大些,而对于精度较低的传感器,权重就取的小些。
在这里插入图片描述

matlab权重函数

在这里插入图片描述

源码是网上的一个demo,大家凑合着理解
clear all;
close all;
clc;

a=2;b=2;c=-3;d=1;e=2;f=30;   %系数         
n=1:0.2:20;
x=repmat(n,96,1);
y=repmat(n',1,96);
z=a*x.^2+b*y.^2+c*x.*y+d*x+e*y +f;      %原始模型     
surf(x,y,z)

N=100;
ind=int8(rand(N,2)*95+1);

X=x(sub2ind(size(x),ind(:,1),ind(:,2)));
Y=y(sub2ind(size(y),ind(:,1),ind(:,2)));
Z=z(sub2ind(size(z),ind(:,1),ind(:,2)))+rand(N,1)*20;       %生成待拟合点,加个噪声

Z(1:10)=Z(1:10)+400;                    %加入离群点

hold on;
plot3(X,Y,Z,'o');

XX=[X.^2 Y.^2 X.*Y X Y ones(100,1)];
YY=Z;

C=inv(XX'*XX)*XX'*YY;                                          %最小二乘
z=C(1)*x.^2+C(2)*y.^2+C(3)*x.*y+C(4)*x+C(5)*y +C(6);           %拟合结果
Cm=C;
mesh(x,y,z)

z=C(1)*X.^2+C(2)*Y.^2+C(3)*X.*Y+C(4)*X+C(5)*Y +C(6);          
C0=C;
while 1
    r = z-Z;
    w = tanh(r)./r;                                             %权重函数
    W=diag(w);
        
    C=inv(XX'*W*XX)*XX'*W*YY;                                   %加权最小二乘
    z=C(1)*X.^2+C(2)*Y.^2+C(3)*X.*Y+C(4)*X+C(5)*Y +C(6);        %拟合结果

    if norm(C-C0)<1e-10
        break;
    end
    C0=C;
end

z=C(1)*x.^2+C(2)*y.^2+C(3)*x.*y+C(4)*x+C(5)*y +C(6);           %拟合结果
mesh(x,y,z)
结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值