一、递归最小二乘法

递推最小二乘法:当矩阵维数增加时,矩阵求逆运算计算量过大,而且不适合在线辨识。为了减少计算量,并且可以实时地辨识出动态系统的特性,可以将最小二乘法转换成参数递推的估计。

取前N组数据,然后从N+1项后向后迭代,当前估计值=上一次估计值+修正值

给定过程:
式中,理想的系数值a1=1.5,a2=0.7,b1=1.0b2=0.5V(k)服从N(0,1)的随机噪声。

clear all
close all
clc
%产生N(0,1)正态分布的随机噪声
randn('seed',100);
v=randn(1,60); %产生M序列
L=60;% M序列的周期
y1=1;y2=1;y3=1;y4=0;%四个移位积存器的输出初始值
for i=1:L;
x1=xor(y3,y4);
x2=y1;x3=y2;x4=y3;y(i)=y4;if y(i)>0.5,u(i)=-5;%M序列的幅值为5else u(i)=5;endy1=x1;y2=x2;y3=x3;y4=x4;
end
figure(1);
stem(u),grid on
% 递推最小二乘辨识程序
z(2)=0;z(1)=0;
%观测值由理想输出值加噪声
for k=3:60;%循环变量从3到15   z(k)=-1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2)+0.5*v(k);
end
%RLS递推最小二乘辨识
c0=[0.001 0.001 0.001 0.001]';
p0=10^3*eye(4,4);
E=0.000000005;%相对误差
c=[c0,zeros(4,59)];%被辨识参数矩阵的初始值及大小
e=zeros(4,60);%相对误差的初始值及大小
lamt=1;
for k=3:60; h1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]';k1=p0*h1*inv(h1'*p0*h1+1*lamt);%求出K的值new=z(k)-h1'*c0; c1=c0+k1*new;%求被辨识参数cp1=1/lamt*(eye(4)-k1*h1')*p0;e1=(c1-c0)./c0;%求参数当前值与上一次的值的差值e(:,k)=e1; %把当前相对变化的列向量加入误差矩阵的最后一列    c(:,k)=c1;%把辨识参数c 列向量加入辨识参数矩阵的最后一列 c0=c1;%新获得的参数作为下一次递推的旧参数p0=p1;if norm(e1)<=E break;%若参数收敛满足要求,终止计算end
end
%分离参数
a1=c(1,:); a2=c(2,:); b1=c(3,:); b2=c(4,:);
ea1=e(1,:); ea2=e(2,:); eb1=e(3,:); eb2=e(4,:);
figure(2);
i=1:60;
plot(i,a1,'k',i,a2,'b',i,b1,'r',i,b2,'g') %画出辨识结果
legend('a1','a2','b1','b2');
title('递推最小二乘参数辨识')
figure(3);
i=1:60;
plot(i,ea1,'k',i,ea2,'b',i,eb1,'r',i,eb2,'g') %画出辨识结果的收敛情况
legend('a1','a2','b1','b2');
title('辨识精度')

二、增广最小二乘法

增广最小二乘法:当噪声均值为0时,最小二乘法参数估计算法为无偏估计,为了解决最小二乘法参数估计的有偏性,将噪声模型的辨识同时考虑进去,就是增广最小二乘法。

增广最小二乘法相当于参数向量和数据向量维数扩大了的最小二乘法,它能在有色噪声(可用平均滑动模型来表示)情况下给出参数的一致估计量,同时可以把噪声模型也辨识出来。

给定过程:

式中,理想的系数值a1=1.5,a2=0.7,b1=1.0b2=0.5,c1=1.2,c2=-1.0,c3=0.2V(k)服从正态分布的白噪声N(0,1),输入信号采用4M序列,其幅值为1

clear all
close all
clc% M序列、噪声信号产生及其显示程序
L=60;%四位移位积存器产生的M序列的周期
y1=1;y2=1;y3=1;y4=0;
for i=1:L;x1=xor(y3,y4);x2=y1;x3=y2;x4=y3;y(i)=y4;if y(i)>0.5,u(i)=-1;else u(i)=1;endy1=x1;y2=x2;y3=x3;y4=x4;
end
figure(1);
stem(u),grid on%画出M序列输入信号
randn('seed',100)
v=randn(1,60); %产生一个N(0,1)的随机噪声
%增广递推最小二乘辨识
z(2)=0;z(1)=0;
theat0=[0.001 0.001 0.001 0.001 0.001 0.001 0.001]';%直接给出被辨识参数的初始值,即一个充分小的实向量
p0=10^4*eye(7,7);%初始状态P0
theat=[theat0,zeros(7,59)];%被辨识参数矩阵的初始值及大小
for k=3:60; z(k)=-1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2)+1.2*v(k)-v(k-1)+0.2*v(k-2)  h1=[-z(k-1),-z(k-2),u(k-1),u(k-2),v(k),v(k-1),v(k-2)]';x=h1'*p0*h1+1;x1=inv(x); k1=p0*h1*x1; %Kd1=z(k)-h1'*theat0; theat1=theat0+k1*d1;%辨识参数c theat0=theat1;%给下一次用theat(:,k)=theat1;%把辨识参数c 列向量加入辨识参数矩阵 p1=p0-k1*k1'*[h1'*p0*h1+1];%find p(k)p0=p1;%给下次用end%循环结束%分离变量a1=theat(1,:); a2=theat(2,:); b1=theat(3,:); b2=theat(4,:);c1=theat(5,:); c2=theat(6,:); c3=theat(7,:);
i=1:60;
figure(2);
plot(i,z)
figure(3)
plot(i,a1,'r',i,a2,'b',i,b1,'k',i,b2,'y',i,c1,'g',i,c2,'c',i,c3,'m')%画出各个被辨识参数
title('增广递推最小二乘辨识方法')%标题

三、带遗忘因子的递归增广最小二乘法的参数估计

遗忘因子算法的基本思想为:对老数据乘以遗忘因子,以降低老数据所提供的信息量,增加新数据的信息量。前一时刻的数据乘以较小的权,后一时刻的数据乘以较大的权,表示对新的数据较为重视,对老数据所起的作用逐渐削弱。

%开环系统参数辨识,带遗忘因子的递推最小二乘估计法(FFRLS),系统为单入单出的CAR(带控制量的自回归模型)模型,三阶系统
clear all
clc
a=[1 -1.1 0.6 0.1];b=[1 0.7];d=4; %实际模型系数矩阵与纯迟延
L=1000;                           %仿真长度
na=length(a)-1;nb=length(b)-1;    %na,nb为输出输入系数矩阵A,B的阶数
yk=zeros(na,1);                   %输出矩阵初始化
yk_m=zeros(na,1);                 %模型输出
uk=zeros(nb+d,1);                 %输入矩阵初始化
theta_e0=zeros(na+nb+1,1);        %theta_e0为估计参数初值,a1,a2....an,b0,b1,...bn,共na+nb+1个
phi=zeros(na+nb+1,1);             %phi为当前实际输出输入构成的矩阵
P=10^6*eye(na+nb+1);              %修正系数初值
beta=0.99;                        %遗忘因子,在0.95到1之间
u=randn(L,1);                     %输入信号,方差为1的白噪声序列
omega=sqrt(0.1)*randn(L,1);       %干扰信号,方差为0.1的白噪声序列for i=1:Ltheta(:,i)=[a(2:na+1),b]';    %系统实际参数值phi=[-yk;uk(d:d+nb)];         %系统输出输入矩阵phi_e=[-yk_m;uk(d:d+nb)];     %模型输出输入矩阵y(i)=phi'*theta(:,i)+omega(i);%系统实际输出y_m(i)=phi_e'*theta_e0;       %模型输出%递推公式K=P*phi/(beta+phi'*P*phi);   theta_e(:,i)=theta_e0+K*(y(i)-phi'*theta_e0);P=(eye(na+nb+1)-K*phi')*P/beta;%数据更新theta_e0=theta_e(:,i);for j=na:-1:2yk(j)=yk(j-1);yk_m(j)=yk_m(j-1);endyk(1)=y(i);yk_m(1)=y_m(i);for j=(nb+d):-1:2uk(j)=uk(j-1);enduk(1)=u(i);
endfigure
x=[1:L];
plot(x,theta_e,x,theta,'k:');
legend('a1','a2','a3','b1','b2');
axis([0 L -2 2]);
figure
plot(x,y,x,y_m,'r');
legend('实际输出','模型输出');
axis([0 L -20 20]);
grid on;


参考文献:

[1]方桂花,王鹤川,高旭.基于动态遗忘因子递推最小二乘法的永磁同步电机参数辨识算法[J].计算机应用与软件,2021,38(01):280-283.
[2]冯亦奇,陈勇.基于遗忘因子的UKF车辆状态参数估计算法[J].合肥工业大学学报(自然科学版),2020,43(11):1450-1455+1499.
[3]焦慧方,陈希亮,高敏,马忠玲.基于带遗忘因子交替广义最小二乘法的多变量耦合系统参数辨识[J].咸阳师范学院学报,2018,33(02):49-53.

递归最小二乘法、增广最小二乘法、带遗忘因子的递归增广最小二乘法相关推荐

  1. JavaScript实现递归楼梯问题(带记忆的递归解决方案)算法(附完整源码)

    JavaScript实现递归楼梯问题(带记忆的递归解决方案)算法(附完整源码) recursiveStaircaseMEM.js完整源代码 recursiveStaircaseMEM.test.js完 ...

  2. 自适应遗忘因子/带遗忘因子最小二乘锂电池二阶RC电路等效模型参数识别

    学习一段时间锂电池状态评论,把等效电路模型部分整理一下,深渊摸索,共勉.在线参数辨识目前文献较多采用最小二乘方法和遗传算法,这里总结了最小二乘. 基本公式如下: (5)-(9)为带遗忘因子的最小二乘( ...

  3. C语言递归函数(递归调用)详解[带实例演示]

    一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数.执行递归函数将反复调用其自身,每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出. 递归函数不是C语言的专 ...

  4. java递归和迭代_Java中的迭代与递归

    递归 提到迭代,不得不提一个数学表达式: n!=n*(n-1)*(n-2)*...*1 有很多方法来计算阶乘.有肯定数学基础的人都知道n!=n*(n-1)!因而,代码的实现可以直接写成: 代码一 in ...

  5. php 回调递归,PHP数组函数 array_walk_recursive (使用回调函数递归遍历数组元素)

    在PHP中,数组函数 array_walk_recursive () 使用回调函数递归遍历数组元素. 函数语法:array_walk_recursive ( array &$array , c ...

  6. 二叉树层序遍历递归与非递归_总结归纳:二叉树遍历【递归 amp;amp; 非递归】...

    今天为大家总结了二叉树前中后序遍历的递归与迭代解法: 1. 前序遍历 递归 List list=new ArrayList<>();public ListpreOrder(TreeNode ...

  7. java 文件递归删除文件夹_Java十行代码实现递归删除文件夹中所有文件

    递归删除文件夹中所有文件 要递归首先需要有方法.递归,即方法自己调用自己.一般在程序中很少使用,但在这个实现中,我们无法知道文件夹的深度,更无法根据深度来实现循环的嵌套. 递归两个重要条件: 终止边界 ...

  8. foreach jdk8 递归_[Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归 .

    递归优化 很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer).但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError.处理这个问题,我们可 ...

  9. php递归实现层级树状展开,PHP递归实现层级树状展开,php递归层级树状_PHP教程...

    PHP递归实现层级树状展开,php递归层级树状 本文实例为大家分享了PHP递归实现层级树状展开的主要代码,供大家参考,具体内容如下 效果图: 实现代码: $arr['id'], 'fid' => ...

最新文章

  1. JS对象和JSON字符串相互转化总结
  2. centos 并发请求数_Linux Shell多进程并发以及并发数控制
  3. extjs4mvc增删改查_asp.net下利用MVC模式实现Extjs表格增删改查
  4. ASP.NET跨页面传值技巧总结
  5. xbox360 功率测试软件,【外星人 Alpha ASM100-1580 游戏主机使用总结】性能|电压|功耗|跑分_摘要频道_什么值得买...
  6. linux中命令对c文件进行编译,Linux下C语言编译基础及makefile的编写
  7. 阿里最后一面,高并发下如何设计一个秒杀系统?
  8. 组合枚举——妖梦拼木棒(洛谷 P3799)
  9. idea中Terminal输入命令git log后如何退出
  10. 伪验证码(含随机验证码方法)js+css
  11. 华为鸿蒙 os 适配机型曝光,华为鸿蒙OS 2.0首批适配机型曝光
  12. 龙讯LONTIUM LT8711EH-C. DP1.2转HDMI2.04K60HZ带HDCP 国产芯片
  13. 分享一张网上的测试工程师能力模型思维导图
  14. 跟随鼠标移动-demo
  15. 百练_1664:放苹果_递归
  16. 高斯—赛德尔求解线性方程+C代码
  17. 《易中天中华史 - 第五卷 从春秋到战国》读书笔记
  18. PDF文档在线浏览防下载加密方案
  19. java, Statement类的介绍
  20. 常用免费文献下载平台

热门文章

  1. Bluetooth core 5.0 ---------- BR/EDR 安全简单配对(BR/EDR secure simple pairing)
  2. VMware虚拟机文件后缀详解
  3. 进程间通信(无名管道)
  4. 沧小海基于xilinx srio核的学习笔记之第三章 xilinx srio核介绍(一)结构介绍
  5. 【蓝桥杯练习--递归】费解的开关
  6. Jenkins ssh 远程启动 nohup
  7. 紫光公有云能后发先至吗?
  8. 清华王牌专业建系70年,撑起中国半导体半壁江山,王兴李健都是系友
  9. QlikView介绍
  10. C库函数——fabs()