代數Riccati方程

**代數 Riccati 方程**（algebraic Riccati equation）是最優控制的非線性方程，和連續時間或是離散時間下，無限時間（infinite-horizon）的最優控制有關。

標準的代數 Riccati 方程如下：

連續時間代數 Riccati 方程（CARE）：

　
: $A^{T}P+PA-PBR^{-1}B^{T}P+Q=0\,$

離散時間代數 Riccati 方程（DARE）：

　
: $P=A^{T}PA-(A^{T}PB)(R+B^{T}PB)^{-1}(B^{T}PA)+Q.\,$

_P_ 是未知數的 _n_×_n_ 對稱矩陣，_A_、_B_、_Q_ 及 _R_ 是已知實係數矩陣。

一般而言此方程式有許多的解，不過若有存在穩定解的話，希望可以找到穩定解。

## 名稱的起源

此方程名稱中有 Riccati，是因為和 Riccati 方程的關係。連續時間代數 Riccati 方程（CARE）可以由相關矩陣值的 Riccati 微分方程的非時變解來驗證。離散時間代數 Riccati 方程（DARE）可以由矩陣值的 Riccati 微分方程的非時變解來驗證（類似離散時間 LQR 下的 Riccati 微分方程）。

## 離散時間的代數 Riccati 方程

在無限時間的最佳控制問題中，關注的是一些變數在相當時間之後的值，因此需在現在選定控制變數的值，讓系統在之後的時間都在最佳狀態下運作。控制變數在任意時間下的最佳值可以用 Riccati 方程的解以及狀態變數當時的觀測值求得。若觀測變數及控制變數都不只一個，Riccati 方程就會是矩陣方程。

代數 Riccati 方程可以決定無限時間下非時變 LQR 控制器的解，以及無限時間下非時變 LQG 控制的解。這兩個是控制理論中的基礎問題。

典型的離散時間 LQR 問題，是要最小化以下的函數

　
: $\sum _{t=1}^{T}(y_{t}^{T}Qy_{t}+u_{t}^{T}Ru_{t})$

其狀態方程如下

　
: $y_{t}=Ay_{t-1}+Bu_{t},$

其中 _y_ 是 _n_ × 1 的狀態變數向量，_u_ 是 _k_ × 1 的控制變數向量，_A_ 是 _n_ × _n_ 的狀態遞移矩陣，_B_ 是 _n_ × _k_ 的控制係數矩陣，_Q_ (_n_ × _n_) 是對應半正定狀態損失函數矩陣，_R_ (_k_ × _k_) 是對應正定的控制損失函數矩陣。

從最後時間往前的推導可以找到每一個時間的最佳控制解

　
: $u_{t}^{*}=-(B^{T}P_{t}B+R)^{-1}(B^{T}P_{t}A)y_{t-1},$

其中對應正定 cost-to-go 矩陣 _P_ 會依下式，配合 $P_{T}=Q$ ，以逆向時間推導

　
: $P_{t-1}=Q+A^{T}P_{t}A-A^{T}P_{t}B(B^{T}P_{t}B+R)^{-1}B^{T}P_{t}A,\,$

這個就是離散時間的代數 Riccati 方程。_P_ 的穩態解和和 _T_ 趨近無限大時的無限時間問題有關，可以將動態方程反覆迭代直到收斂，來求得 _P_ 的穩態解，之後再將動態方程中的時間標註移除，來確認穩態解是否正確。

## 求解

若代數 Riccati 方程存在穩定解，求解器一般會設法找到唯一的穩定解。穩定解的意思是指用此解控制相關的 LQR 系統，可以使閉迴路的系統穩定。

針對 CARE，其控制律為

　
: $K=R^{-1}B^{T}P$

閉迴路遞移矩陣為

　
: $A-BK=A-BR^{-1}B^{T}P$

其穩定的充份必要條件是所有的特徵值都有負的實部。

針對 DARE，其控制律為

　
: $K=(R+B^{T}PB)^{-1}B^{T}PA$

閉迴路遞移矩陣為

　
: $A-BK=A-B(R+B^{T}PB)^{-1}B^{T}PA$

其穩定的充份必要條件是所有的特徵值在複數平面的單位圓內。

代數 Riccati 方程的解可以用 Riccati 方程的的迭代或是矩陣因式分解求得。離散時間問題的一種迭代方式是由有限時間問題下的動態 Riccati 方程，每一次迭代時，矩陣中的值都是從最終時間往前一段有限時間內的最佳解，若進行無限長的迭代。就會分斂到特定矩陣，是無限時間內的最佳解。

針對大型系統，也可以用找特徵分解的方式求解。針對 CARE，可以定義漢彌爾頓矩陣

　
: $Z={\begin{pmatrix}A&-BR^{-1}B^{T}\\-Q&-A^{T}\end{pmatrix}}$

因為 $\scriptstyle Z$ 是漢彌爾頓矩陣，若在虛軸上沒有特徵值，則會有恰好一半的特徵值會有負的實部。若定義 $\scriptstyle 2n\times n$ 矩陣，其縱排（column）形成對應子空間的基底，表示為區塊矩陣的形式，如下所示

　
: ${\begin{pmatrix}U_{1}\\U_{2}\end{pmatrix}}$

則

　
: $P=U_{2}U_{1}^{-1}$

是 Riccati 方程的解。而且 $\scriptstyle A-BR^{-1}B^{T}P$ 的特徵值即為 $\scriptstyle Z$ 特徵值中有負實部的特徵值。

針對 DARE，若 $A$ 是可逆矩陣，可以定義辛矩陣

　
: $Z={\begin{pmatrix}A+BR^{-1}B^{T}(A^{-1})^{T}Q&-BR^{-1}B^{T}(A^{-1})^{T}\\-(A^{-1})^{T}Q&(A^{-1})^{T}\end{pmatrix}}$

因為 $\scriptstyle Z$ 是辛矩陣，若在單位圓圓周上沒有特徵值，則會有恰好一半的特徵值會在單位圓內。若定義 $\scriptstyle 2n\times n$ 矩陣，其縱排（column）形成對應子空間的基底，表示為區塊矩陣的形式，如下所示
則

　
: $P=U_{2}U_{1}^{-1}$

是 Riccati 方程的解。而且 $\scriptstyle A-B(R+B^{T}PB)^{-1}B^{T}PA$ 的特徵值即為 $\scriptstyle Z$ 特徵值中，在單位圓內的特徵值。

## 相關條目

* 李亞普諾夫方程

## 參考資料

* Peter Lancaster; Leiba Rodman, Algebraic Riccati equations, 牛津大學出版社: 504, 1995, ISBN 0-19-853795-6
* Alan J. Laub, A Schur method for solving algebraic RIccati equations (PDF), [2020-02-21], （原始內容存檔 (PDF) 於 2016-10-24）

## 外部連結

* CARE solver help of MATLAB Control toolbox.
* DARE solver help of MATLAB Control toolbox.
* Online CARE solver for arbitrary sized matrices.
* Python CARE and DARE solvers.（頁面存檔備份，存於網際網路檔案館）
* Mathematica function to solve the continuous-time algebraic Riccati equation.（頁面存檔備份，存於網際網路檔案館）
* Mathematica function to solve the discrete-time algebraic Riccati equation.（頁面存檔備份，存於網際網路檔案館）