最近有脚友咨询递推最小二乘法估算轮胎侧偏刚度的问题,这个问题挺有代表性的,很多模型参数估计的问题都可以用这个方法解决。所以今天花时间学习下,并把个人的理解分享给大家。
理论篇如果想系统学习某领域的理论,最好的办法是买一本相关书籍或者下载几篇优秀的论文,阅读了几篇文章之后,总结如下。
定性来看,最小二乘法就是求解一个多元一次方程组,在已知输入、输出的前提下去估算系数,使得实际值与估算值之差的平方和最小。假设需要求解的系数(即需要估计的模型参数)有m个,那么至少需要采集m组以上的数据,方程才有解。当采集的数据刚好为m组时,方程有唯一解,即求解一个m元一次方程组。
一般情况下,采集的数据可以有很多组。当通过传感器实时采集时,就可以实现模型参数的在线估计,这就是本文要谈的递推最小二乘法。
最小二乘法的基本思路是对系统模型进行变换,把系统状态矩阵、输入矩阵中的参数变为状态量,如下式。
其中z(k)、h(k)代表某一组观测数据,可以由输入量、输出量等任何系统可观测的信号构成,θ代表待估计的模型参数。
然后推导出比较核心的递推公式如下(具体推导过程可参考相关论文):
在已知h(k)的前提下,根据前一时刻的P(k-1)可以计算出当前时刻的K(k),知道了K(k)又可以计算出θ(K),P(k)也可以根据K(k)和p(k-1)计算。当然,P(0), θ(0)等初始值需要直接给定。
工具篇Simulink中有现成的Recursive Least Squares Estimator(RLS)模块,用于递推最小二乘法估计,其模块如下图。
把系统的回归量和输出量作为输入,模块会自己进行迭代计算,逐步计算待估计参数。具体模块设置可参考帮助文档。
这个模块本质上就是把上面三个核心的递推公式封装起来了。
应用篇这里举一个实际的例子来进行模型参数估计。
假如有这样系统,其状态空间方程表达式为:
用矩阵形式可表示为:
对于这个系统,给定输入u可以得到x1,x2。
对于一个黑盒系统,在得到这些输入输出量以后,就可以通过最小二乘法来估计系统参数m、n。需要对以上的状态空间方程进行变换:
用矩阵形式可表示为(绿色为输入矩阵,红色为输出矩阵):
为了采集数据,我们可以先给定m,n的数值,例如:
给定一个输入u,通过构造输出矩阵就可以得到x1,x2的数据了,获取数据模型如下图。
需要强调的是,在实际的操作上,我们并不知道系统的状态空间方程,这些输入输出数据都是通过传感器采集的。这里直接给出具体的状态空间方程,仅为了从仿真的角度获取数据。
在有了u,x1,x2之后,我们可以很方便得到上面的红色输出矩阵、绿色输入矩阵。这里选择第一行的等式作为RLS模块的输入即可,搭建对应的估计模型如下图。
把对应的输入输出量给到RLS模块接口,就完成了估计模型的搭建。
运行模型,RLS模块输出的参数估计结果如下图。m,n的估计结果很快就收敛了,分别为1.961,0.9908,与真实值m=2,n=1差距较小,估计结果正确。
以上,简要介绍了Simulink中使用递推最小二乘法进行参数估计的方法,总结来看分为三步:
1、建立系统状态空间方程;
2、进行状态空间方程变换;
3、利用观测数据构造RLS模块输入信号。
,