遞推最小二乘法淺談

最近有腳友諮詢遞推最小二乘法估算輪胎側偏剛度的問題,這個問題挺有代表性的,很多模型參數估計的問題都可以用這個方法解決。所以今天花時間學習下,並把個人的理解分享給大家。


理論篇


如果想系統學習某領域的理論,最好的辦法是買一本相關書籍或者下載幾篇優秀的論文,閱讀了幾篇文章之後,總結如下。


定性來看,最小二乘法就是求解一個多元一次方程組,在已知輸入、輸出的前提下去估算係數,使得實際值與估算值之差的平方和最小。假設需要求解的係數(即需要估計的模型參數)有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模塊輸入信號。


分享到:


相關文章: