最小二乘法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、递推最小二乘法
    • 1.递推小二乘法
  • 二、RLS代码


前言

提示:这里可以添加本文要记录的大概内容:

最小二乘法是1795年高斯在研究星体的运动轨迹的工作 提出来的,后来,最小二乘法成了估计理论的奠基石。最小二乘法由于原理简明、收敛较快、易于理解、易于编程等特点,在参数估计中应用广泛。本章介绍(《系统辨识与自适应控制》)最小二乘的批处理法、递推法、遗忘因子、遗忘因子递推法和递推增广法。


提示:以下是本篇文章正文内容,下面案例可供参考

一、递推最小二乘法

1.递推小二乘法

在自适应控制系统中,被控对象通常都可以不断提供新的输入和输出数据,而且利用这些新的信息来改善其估计的精度,因此,尝尝要求对象参数能够在线实时估计。通过利用最小二乘法转化成递推算法,其基本思想可以概括为:
在这里插入图片描述
其系统参数最小二乘估计theta的递推公式为:

最小二乘法_第1张图片
已知:na、nb和d。
step1:设置初值theta_1 和P,输入初始数据;
step2:采样当前的输出y(k)和u(k)。
step3:利用式1.1计算K、theta、P
step4:k=k+1,返回step2,继续循环

二、RLS代码

代码如下(示例):

%递推最小二乘参数估计(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]);

利用RLS算法辨识得到的参数估计与真值几乎相同。
最小二乘法_第2张图片

你可能感兴趣的:(最小二乘法,算法,人工智能)