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)

    拟合结果:

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

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

  • 相关阅读:
    windows下mongodb的安装
    命令行执行大sql文件
    用css实现3D立方体旋转特效
    tp框架的详细介绍,tp框架基础
    用smarty来做简易留言系统,明细步骤简单操作
    怎么用php语言来做文件缓存
    用smarty模板做数据实现修改、分页等功能
    用smarty模板做的登录
    smarty函数
    Smarty变量
  • 原文地址:https://www.cnblogs.com/tiandsp/p/14190747.html
Copyright © 2011-2022 走看看