一文理清最小二乘法估计

这篇具有很好参考价值的文章主要介绍了一文理清最小二乘法估计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 最小二乘法估计(LS)

1.1 原理与推导

最小二乘法最早是高斯在预估星体轨道时提出来的,后来成为了估计理论的奠基石。考虑如下CAR模型:

一文理清最小二乘法估计

其中:

 一文理清最小二乘法估计

 参数估计的任务就是根据输入和输出,估计出a1,a2,----,ana,b1,b2,...,bnb这na+nb+1个参数。

将1-1式改成差分方程形式:

一文理清最小二乘法估计

一文理清最小二乘法估计

 对于L组输入{y(k),u(k),k=1,2,...,L},系统参数的最小二乘估计为:

一文理清最小二乘法估计

其中:

 一文理清最小二乘法估计

上式推导过程为:

对于第k次测量,其残差为:

一文理清最小二乘法估计

构造如下性能指标J:

一文理清最小二乘法估计

一文理清最小二乘法估计

 当J取极小值时,将有:

一文理清最小二乘法估计

此时有:

一文理清最小二乘法估计

 1.2 例子

考虑如下系统:

一文理清最小二乘法估计

一文理清最小二乘法估计

 Matlab程序为:

%最小二乘参数估计(LS)
clear all;

a=[1 -1.5 0.7]'; b=[1 0.5]'; d=3; %对象参数
na=length(a)-1; nb=length(b)-1; %na、nb为A、B阶次

L=400; %数据长度
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)
yk=zeros(na,1); %输出初值
x1=1; x2=1; x3=1; x4=0; S=1; %移位寄存器初值、方波初值
xi=sqrt(1)*randn(L,1); %白噪声序列

theta=[a(2:na+1);b]; %对象参数真值
for k=1:L
    phi(k,:)=[-yk;uk(d:d+nb)]'; %此处phi(k,:)为行向量,便于组成phi矩阵
    y(k)=phi(k,:)*theta+xi(k); %采集输出数据
    
    M=xor(x3,x4); %产生M序列
    IM=xor(M,S);  %产生逆M序列
    if IM==0
        u(k)=-1;
    else
        u(k)=1;
    end
    S=not(S); %产生方波
    
    %更新数据
    x4=x3; x3=x2; x2=x1; x1=M; 
    
    for i=d+nb:-1:2
        uk(i)=uk(i-1);
    end
    uk(1)=u(k);
    
    for i=na:-1:2
        yk(i)=yk(i-1);
    end
    yk(1)=y(k);
end
thetae=inv(phi'*phi)*phi'*y' %计算参数估计值thetae(结果见MATLAB命令窗口)

 运行结果:

thetae =

   -1.5159
    0.7206
    1.0439
    0.4714

 2 递推最小二乘法(RLS)

 递推最小二乘法RLS是最小二乘法LS的改进版,它可以根据采样的实时数据来不断修正估计参数,从而做到参数的实时估计。其基本思想是:

一文理清最小二乘法估计

RLS的实施步骤为:

一文理清最小二乘法估计

对于上节中的例子,Matlab程序:

%递推最小二乘参数估计(RLS)
clear all; close all;

a=[1 -1.5 0.7]'; b=[1 0.5]'; d=3; %对象参数
na=length(a)-1; nb=length(b)-1; %na、nb为A、B阶次

L=400; %仿真长度
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)
yk=zeros(na,1); %输出初值
u=randn(L,1); %输入采用白噪声序列
xi=sqrt(0.1)*randn(L,1); %白噪声序列

theta=[a(2:na+1);b]; %对象参数真值

thetae_1=zeros(na+nb+1,1); %thetae初值
P=10^6*eye(na+nb+1); 
for k=1:L
    phi=[-yk;uk(d:d+nb)]; %此处phi为列向量
    y(k)=phi'*theta+xi(k); %采集输出数据
   
    %递推最小二乘法
    K=P*phi/(1+phi'*P*phi);
    thetae(:,k)=thetae_1+K*(y(k)-phi'*thetae_1);
    P=(eye(na+nb+1)-K*phi')*P;
    
    %更新数据
    thetae_1=thetae(:,k);
    
    for i=d+nb:-1:2
        uk(i)=uk(i-1);
    end
    uk(1)=u(k);
    
    for i=na:-1:2
        yk(i)=yk(i-1);
    end
    yk(1)=y(k);
end
plot([1:L],thetae); %line([1,L],[theta,theta]);
xlabel('k'); ylabel('参数估计a、b');
legend('a_1','a_2','b_0','b_1'); axis([0 L -2 1.5]);

 运行结果:

一文理清最小二乘法估计

3 遗忘因子最小二乘法(FFRLS)

3.1 FFRLS原理

对于参数时变系统,RLS易出现数据饱和现象,就是随着时间的变化,矫正矩阵P(k)和K(k)越来越小,从而其矫正作用越来越弱,这将导致较大的估计误差。遗忘因子最小二乘法可以较好的处理这个问题。

FFRLS的实施步骤为:

一文理清最小二乘法估计

3.2 例子

 考虑系统

一文理清最小二乘法估计

Matlab程序为:

%遗忘因子递推最小二乘参数估计(FFRLS)
clear all; close all;

a=[1 -1.5 0.7]'; b=[1 0.5]'; d=3; %对象参数
na=length(a)-1; nb=length(b)-1; %na、nb为A、B阶次

L=2000; %仿真长度
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)
yk=zeros(na,1); %输出初值
u=randn(L,1); %输入采用白噪声序列
xi=sqrt(0.1)*randn(L,1); %白噪声序列

thetae_1=zeros(na+nb+1,1); %thetae初值
P=10^6*eye(na+nb+1);
lambda=1; %遗忘因子范围[0.9 1]
for k=1:L
    if k==501
        a=[1 -1 0.4]';b=[1.5 0.2]'; %对象参数突变
    end
    theta(:,k)=[a(2:na+1);b]; %对象参数真值
    
    phi=[-yk;uk(d:d+nb)];
    y(k)=phi'*theta(:,k)+xi(k); %采集输出数据
   
    %遗忘因子递推最小二乘法
    K=P*phi/(lambda+phi'*P*phi);
    thetae(:,k)=thetae_1+K*(y(k)-phi'*thetae_1);
    P=(eye(na+nb+1)-K*phi')*P/lambda;
    
    %更新数据
    thetae_1=thetae(:,k);
    
    for i=d+nb:-1:2
        uk(i)=uk(i-1);
    end
    uk(1)=u(k);
    
    for i=na:-1:2
        yk(i)=yk(i-1);
    end
    yk(1)=y(k);
end
subplot(1,2,1)
plot([1:L],thetae(1:na,:)); hold on; plot([1:L],theta(1:na,:),'k:');
xlabel('k'); ylabel('参数估计a');
legend('a_1','a_2'); axis([0 L -2 2]);
subplot(1,2,2)
plot([1:L],thetae(na+1:na+nb+1,:)); hold on; plot([1:L],theta(na+1:na+nb+1,:),'k:');
xlabel('k'); ylabel('参数估计b');
legend('b_0','b_1'); axis([0 L -0.5 2]);

 当设置遗忘因子为1时,参数估计如图所示有比较大的误差:

一文理清最小二乘法估计

当设置遗忘因子为0.99时,参数估计如图所示:

4 递推增广最小二乘法(RELS)

4.1 RELS原理

当系统模型的干扰为有色噪声时,系统方程表示为

一文理清最小二乘法估计 

 写成最小二乘形式为:

一文理清最小二乘法估计

增广最小二乘法 实施步骤:

一文理清最小二乘法估计

 4.2 例子

.考虑系统

一文理清最小二乘法估计

 Matlab程序:

%递推增广最小二乘参数估计(RELS)
clear all; close all;

a=[1 -1.5 0.7]'; b=[1 0.5]'; c=[1 -1 0.2]'; d=3; %对象参数
na=length(a)-1; nb=length(b)-1; nc=length(c)-1; %na、nb、nc为A、B、C阶次

L=1000; %仿真长度
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)
yk=zeros(na,1); %输出初值
xik=zeros(nc,1); %噪声初值
xiek=zeros(nc,1); %噪声估计初值
u=randn(L,1); %输入采用白噪声序列
xi=sqrt(0.1)*randn(L,1); %白噪声序列

theta=[a(2:na+1);b;c(2:nc+1)]; %对象参数

thetae_1=zeros(na+nb+1+nc,1); %na+nb+1+nc为辨识参数个数
P=10^6*eye(na+nb+1+nc);
for k=1:L
    phi=[-yk;uk(d:d+nb);xik];
    y(k)=phi'*theta+xi(k); %采集输出数据
    
    phie=[-yk;uk(d:d+nb);xiek]; %组建phie
    
    %递推增广最小二乘法
    K=P*phie/(1+phie'*P*phie);
    thetae(:,k)=thetae_1+K*(y(k)-phie'*thetae_1);
    P=(eye(na+nb+1+nc)-K*phie')*P;
    
    xie=y(k)-phie'*thetae(:,k); %白噪声的估计值
    
    %更新数据
    thetae_1=thetae(:,k);
    
    for i=d+nb:-1:2
        uk(i)=uk(i-1);
    end
    uk(1)=u(k);
    
    for i=na:-1:2
        yk(i)=yk(i-1);
    end
    yk(1)=y(k);
    
    for i=nc:-1:2
        xik(i)=xik(i-1);
        xiek(i)=xiek(i-1);
    end
    xik(1)=xi(k);
    xiek(1)=xie;
end
figure(1)
plot([1:L],thetae(1:na,:));
xlabel('k'); ylabel('参数估计a');
legend('a_1','a_2'); axis([0 L -2 2]);
figure(2)
plot([1:L],thetae(na+1:na+nb+1,:));
xlabel('k'); ylabel('参数估计b');
legend('b_0','b_1'); axis([0 L 0 1.5]);
figure(3)
plot([1:L],thetae(na+nb+2:na+nb+nc+1,:));
xlabel('k'); ylabel('参数估计c');
legend('c_1','c_2'); axis([0 L -2 2]);

 运行结果一文理清最小二乘法估计

 

参考:系统辨识与自适应控制Matlab仿真(第3版),庞中华,崔红编著文章来源地址https://www.toymoban.com/news/detail-493732.html

到了这里,关于一文理清最小二乘法估计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文理清相机内参和外参矩阵的来龙去脉 -- review向

    Auther:SeaHIRobot date: 2023-05-03 最近在做一门课程的项目,在pybullet中复现GGCNN的机械臂视觉抓取的深度学习网络。在搭建仿真环境时,又回到了绕不开的相机内参和外参。借此机会对相机内参外参这一套进行一个review,对这个问题进行一个逻辑梳理。 因此本文不建议纯小白阅读

    2024年02月04日
    浏览(37)
  • 一文理清排序算法中的直接插入、快排和希尔排序的区别

    在上一篇文章中,给大家介绍了冒泡排序和选择排序,这两种算法都是排序算法。实际上排序算法还有 插入、希尔、快速排序 等,接下来我们就来学习一下这几种排序算法。 全文大约【 5400】 字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例

    2024年02月08日
    浏览(24)
  • 【Linux系列P3】Linux的权限有哪些?一文带你理清!

    ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含: 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux系列-P1】 Linux环境的搭建 【Linux系列-P2】Linux的基

    2024年02月07日
    浏览(54)
  • 数据中台、数据平台、数据湖、数据仓库傻傻分不清楚?带你一文理清

    随着数字经济蓬勃发展,数字化转型步伐不断加快,大数据技术的不断更新与迭代,数据技术加速创新融合应用,在数字化发展的不同阶段,数据管理工具历经了从数据库、数据仓库、数据集市与数据湖,再到大数据平台与如今的数据中台的发展历程。大数据平台、数据湖、

    2024年04月26日
    浏览(29)
  • 一文理清Arbitrum、Arbitrum One、Arbitrum Nitro和Arbitrum Nova的关系

    目录 Arbitrum Arbitrum One Arbitrum Nitro Arbitrum Nova Nova VS One Arbitrum 是 Offchain Labs 推出的一款 Layer2 扩容方案,通过采用多轮交互型设计的 Optimistic Rollup 方案,以实现对以太坊网络的扩容目标。 Arbitrum 基于 Optimistic Rollup 打造,通过多轮交互型欺诈性证明保证同步到 Layer1 的数据是有效

    2024年02月03日
    浏览(27)
  • 一文搞懂业务架构、技术架构、数据架构、运维架构、物理架构理清不同视角的架构

      一起学习下架构的视角。 在笔者的知识体系中,实际上将架构分为业务架构、应用架构、云基础架构这几大类,业务架构主要着眼于控制业务的复杂性,基础架构着眼于解决分布式系统中存在的一系列问题。无论何种架构,都希望能实现系统的可变的同时保障业务的高可用

    2024年02月08日
    浏览(35)
  • 大模型综述来了!一文带你理清全球AI巨头的大模型进化史

    夕小瑶科技说 原创 作者 | 小戏,Python 如果自己是一个大模型的小白, 第一眼看到 GPT、PaLm、LLaMA 这些单词的怪异组合会作何感想 ?假如再往深里入门, 又看到 BERT、BART、RoBERTa、ELMo 这些奇奇怪怪的词一个接一个蹦出来,不知道作为小白的自己心里会不会抓狂 ? 哪怕是一个

    2024年02月11日
    浏览(37)
  • 【人工智能】大模型综述 —— 一文带你理清全球AI巨头的大模型进化史

      目录 导读 家谱树——大模型的前世今生 数据——大模型的力量源泉

    2024年02月09日
    浏览(40)
  • 最小二乘法公式

    最小二乘法我不需要理解他的本质,只需要会使用这个公式即可: 最小二乘法是求解拟合直线的。注意!!是直线 设直线的方程为 y=bx+a 则以上公式就是用一堆二维平面上的点,来求拟合的直线 其中   为求和符号     如 的意思是   求xi的平方的和    为期望,即平均值

    2024年02月11日
    浏览(38)
  • 最小二乘法工程实践

    最小二乘法是一种在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具 。最小二乘法是一种机器学习算法。 关于其原理的介绍以及公式推导有很多优质资料,比如我学习最小二乘法时的两个视频课程。本文不再介绍原理,而是介

    2024年02月03日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包