前面对离散最优控制做了相关介绍,算法的具体笔记可参看如下链接:
最优控制理论笔记总结(25)——连续系统的离散化、离散最优控制问题数学表达
最优控制理论笔记总结(26)——离散欧拉方程与离散横截条件表达式推导
最优控制理论笔记总结(27)——离散最小值原理
最优控制理论笔记总结(28)——离散LQR算法(在线、离线)
本次笔记利用Matlab和Simulink对离散最优控制进行算法学习和仿真。
1、Matlab求解:
设系统状态方程为:
其中,初始状态为:
给定最优指标为:
求上述系统的控制序列 u*(i) ,使性能指标取极小值。
从上面的题目中可以看到,最优控制指标为二次型,所以该问题就是在求使得离散线性LQR性能指标为最小的反馈控制量。
在Matlab中,我们可以利用命令“dlqr”来求解反馈控制增益 K ,即:
[K,P,E] = dlqr(A,B,Q,R)
其中,K 是反馈增益向量;P 是黎卡提方程的解; E 是闭环系统特征值。
此外,也可以直接根据前面所说的反馈增益的表达式进行求解:
K = (R+B'*P*B)^(-1)*B'*P*A
但无论哪种形式都要注意:该反馈为负反馈,所以:
u = -K*x
具体算法如下:
A = [2 1 ;0 1] ;B = [0 ;1] ;Q = [1 0 ; 0 1] ;R = 1 ;[K,P,E]=dlqr(A,B,Q,R)
上面代码中:
A 是系统矩阵;
B 是控制矩阵;
Q 是状态代价矩阵;
R 是控制代价矩阵;
求解可得:
K = [2.64047680301092 2.24007933551814]P = [28.6595100893592 16.4702318476905; 16.4702318476905 11.4751952593634]
除此之外,黎卡提方程的求解还可以利用基于 Schur 变换的 Riccati 方程求解函数 dare 命令:
V = B*inv(R)*B' ;P = dare(A,V,Q)
2、Simulink仿真
下面利用simulink建模检测算法效果。根据状态空间方程建模如下:
其中,K1和K2就是前面利用Matlab求解得到的反馈增益值。
观察其控制量和状态量分别为:
对应性能指标随时间变化曲线为:
如果将某个反馈增益做微小改动,例如将 K2 从 2.2401 改为 2.3 ,对性能指标进行对比,如图所示:
稳态的局部图为:
可以看到,任意微小的增益变化,都会导致最终稳态性能指标比用命令求解得到的性能指标更大。所以该算法确实达到了目标:使性能指标为最小值。
本阶段全套笔记:
【最优控制理论与仿真】
公众号内还有:
【经典控制理论】全套笔记
【现代控制理论】全套笔记
【非线性控制理论】全套笔记
【车辆动力学】全套笔记
下阶段全套笔记:
【模型预测控制理论与仿真】
期待您的关注、留言、讨论!