离散系统线性二次型调节器,dlqr函数,dare函数
**注:**MATLAB中LQR函数有 连续和 离散两种,本篇文章继续前面分析的连续时间系统lqr()函数,分析 离散时间系统LQR()函数dlqr()。
用 lqr算出来的 反馈矩阵K,和用 公式k=(BTPB+R)-1BTPA算出来的反馈矩阵k是一样的,本文有详细分析过程。
一、 离散时间系统二次型优化:dlqr()函数
1.1 MATLAB函数形式
对于离散时间系统:
反馈矩阵控制率u=-kx最小化二次型代价函数:
离散系统MATLAB中lqr()函数形式:
其中输入包含:
在所有情况中,如果忽略N,则N设定为0。
求出的解包含:
lqr()返回k,P,r,其实还可以通过dare()函数求解k,P,r:
① 通过dare()函数求解Riccati方程的解P;
通过函数dlap()判断稳定性:
P要正定,系统才稳定
求解P:
a. 根据dare()函数求解的P,r,k的含义与[k,P,r)=dlqr()中相同;
b. 函数dare()和dlqr()求出的结果是相同的,都能求解P,r,k;
c. 函数dlap()求出的P和dare()函数、dlqr()函数求出的P不同。
② 再根据求解的P去求解反馈增益矩阵k:
这里根据公式求解的k和dare()函数、dlqr()函数求出的k是一样的。
③ 最后根据k求解闭环系统矩阵特征值r:
1.2 举例:
Example1:
>> A
A =
1.1000 2.0000
0 0.9500
>> B
B =
0
0.0790
>> Q
Q =
1 0
0 1
>> R
R =
0.1000
>> eig(A)
ans =
1.1000
0.9500
>> P=dlyap(A',Q)
P =
1.0e+03 *
-0.0048 0.2328
0.2328 8.8883
① 可见由于离散系统矩阵A的特征值有不在单位圆内,所以该系统本身就不稳定,同时通过dlyap()函数求解P,发现P也不正定,所以该系统本身就不稳定;
② 这时需要通过闭环控制配置状态反馈矩阵K来实现系统稳定,即让闭环状态矩阵Acl=(A-B**k)特征值在单位圆内,这就是LQR控制起到的作用。
>> [K,P,r] = dlqr(A,B,Q,R)
K =
2.4950 12.5106
P =
4.0373 8.5226
8.5226 31.5400
r =
0.5308 + 0.2651i
0.5308 - 0.2651i
① dlqr()直接求解出k,P,r;
② 也可以通过公式k=(BTPB+R)-1BTPA来求解K。
>> K=(B'*P*B+R)^(-1)*B'*P*A
K =
2.4950 12.5106
① 公式k=(BTPB+R)-1BTPA求解的k和dlqr()函数求解的k结果相同。
接下来就可以验证闭环反馈稳定性:
>> Acl=A-B*K
Acl =
1.1000 2.0000
-0.1971 -0.0383
>> eig(Acl)
ans =
0.5308 + 0.2651i
0.5308 - 0.2651i
>> dlyap(Acl',Q)
ans =
3.2764 5.0884
5.0884 13.3450
① 可见由于闭环系统矩阵Acl的特征值都在单位圆内,所以该闭环系统稳定,同时通过dlyap()函数求解P,发现P也正定,各阶主子式均大于0,所以该闭环系统稳定;
② 若用最优增益K去计算lyapunov方程的解P,得到的P和LQR求解的P相同,见“Lyapunov稳定性分析3(离散时间系统)”文章链接: Lyapunov稳定性分析3(离散时间系统)
二、离散时间系统李卡提方程求解函数:dare()函数
dare()函数:Discrete-time algebraic Riccati equation solution
作用:通过dare()函数求解离散系统Riccati方程的解P;
2.1 MATLAB函数形式
与dlqr()函数相同,对于离散系统,形式:
其中:
2.2 举例
Example1:
系统矩阵、权值矩阵A,B,Q,R和1.2节中一样
>> [P,r,K] = dare(A,B,Q,R)
P =
4.0373 8.5226
8.5226 31.5400
r =
0.5308 + 0.2651i
0.5308 - 0.2651i
K =
2.4950 12.5106