zoukankan      html  css  js  c++  java
  • 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)

    拟合结果:

    从结果上看,递推最小二乘结果不如常规最小二乘精确。

    不过其递推特性用在对速度更高要求的情况下也许会更好。

  • 相关阅读:
    【转】基于 Apache 在本地配置多个虚拟主机
    ubuntu linux下各种格式软件包的安装卸载
    钩子
    静态方法中不能使用 $this
    Redis Sentinel机制与用法说明【转】
    CI 分页类的使用
    MySQL压力测试
    简单配置.htaccess就可以实现的10个功能
    bzoj 3529 数表
    poj2773 Happy 2006
  • 原文地址:https://www.cnblogs.com/tiandsp/p/14190747.html
Copyright © 2011-2022 走看看