代数Riccati方程
代数Riccati方程(algebraic Riccati equation)是最优控制的非线性方程,和连续时间或是离散时间下,无限时间(infinite-horizon)的最优控制有关。
标准的代数Riccati方程如下:
连续时间代数Riccati方程(CARE):
离散时间代数Riccati方程(DARE):
P是未知数的n×n对称矩阵,A、B、Q及R是已知实系数矩阵。
一般而言此方程式有许多的解,不过若有存在稳定解的话,希望可以找到稳定解。
名称的起源
[编辑]此方程名称中有Riccati,是因为和Riccati方程的关系。连续时间代数Riccati方程(CARE)可以由相关矩阵值的Riccati微分方程的非时变解来验证。离散时间代数Riccati方程(DARE)可以由矩阵值的Riccati微分方程的非时变解来验证(类似离散时间LQR下的Riccati微分方程)。
离散时间的代数Riccati方程
[编辑]在无限时间的最佳控制问题中,关注的是一些变数在相当时间之后的值,因此需在现在选定控制变数的值,让系统在之后的时间都在最佳状态下运作。控制变数在任意时间下的最佳值可以用Riccati方程的解以及状态变数当时的观测值求得。若观测变数及控制变数都不只一个,Riccati方程就会是矩阵方程。
代数Riccati方程可以决定无限时间下非时变LQR控制器的解,以及无限时间下非时变LQG控制的解。这两个是控制理论中的基础问题。
典型的离散时间LQR问题,是要最小化以下的函数
其状态方程如下
其中 y 是 n × 1 的状态变数向量,u 是 k × 1 的控制变数向量,A 是 n × n 的状态递移矩阵,B 是 n × k 的控制系数矩阵,Q (n × n) 是对应半正定状态损失函数矩阵,R (k × k) 是对应正定的控制损失函数矩阵。
从最后时间往前的推导可以找到每一个时间的最佳控制解[1]
其中对应正定cost-to-go矩阵 P 会依下式,配合,以逆向时间推导
这个就是离散时间的代数Riccati方程。P的稳态解和和T趋近无限大时的无限时间问题有关,可以将动态方程反复迭代直到收敛,来求得P的稳态解,之后再将动态方程中的时间标注移除,来确认稳态解是否正确。
求解
[编辑]若代数Riccati方程存在稳定解,求解器一般会设法找到唯一的稳定解。稳定解的意思是指用此解控制相关的LQR系统,可以使闭回路的系统稳定。
针对CARE,其控制律为
闭回路递移矩阵为
其稳定的充份必要条件是所有的特征值都有负的实部。
针对DARE,其控制律为
闭回路递移矩阵为
其稳定的充份必要条件是所有的特征值在复数平面的单位圆内。
代数Riccati方程的解可以用Riccati方程的的迭代或是矩阵因式分解求得。离散时间问题的一种迭代方式是由有限时间问题下的动态Riccati方程,每一次迭代时,矩阵中的值都是从最终时间往前一段有限时间内的最佳解,若进行无限长的迭代。就会分敛到特定矩阵,是无限时间内的最佳解。
针对大型系统,也可以用找特征分解的方式求解。针对CARE,可以定义汉弥尔顿矩阵
因为是汉弥尔顿矩阵,若在虚轴上没有特征值,则会有恰好一半的特征值会有负的实部。若定义矩阵,其纵排(column)形成对应子空间的基底,表示为区块矩阵的形式,如下所示
则
是Riccati方程的解。而且的特征值即为特征值中有负实部的特征值。
针对DARE,若是可逆矩阵,可以定义辛矩阵
因为是辛矩阵,若在单位圆圆周上没有特征值,则会有恰好一半的特征值会在单位圆内。若定义矩阵,其纵排(column)形成对应子空间的基底,表示为区块矩阵的形式,如下所示 则
是Riccati方程的解。而且的特征值即为特征值中,在单位圆内的特征值。
相关条目
[编辑]参考资料
[编辑]- ^ Chow, Gregory. Analysis and Control of Dynamic Economic Systems. New York: John Wiley & Sons. 1975. ISBN 0-471-15616-7.
- 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.(页面存档备份,存于互联网档案馆)