LQR线性二次型调节器2(Continuous-time system Linear-Quadratic Regulator design,连续系统分析及MATALB实例)

9 篇文章 3 订阅
8 篇文章 2 订阅


**注:**MATLAB中LQR函数有 连续离散两种,本篇文章只分析 连续时间系统lqr()函数离散时间系统LQR()函数将单独写文章进行分析!敬请关注,谢谢~
lqr算出来的 反馈矩阵K,和用 公式k=R-1BTP出来的反馈矩阵k是一样的,本文有详细分析过程。

一、 连续时间系统二次型优化:lqr()函数

1.1 MATLAB函数形式

对于连续时间系统:
在这里插入图片描述
反馈矩阵控制率u=-kx最小化二次型代价函数:
在这里插入图片描述
MATLAB中lqr()函数形式:
在这里插入图片描述
其中输入包含:
在这里插入图片描述
在所有情况中,如果忽略N,则N设定为0。
求出的解包含:
在这里插入图片描述
lqr()返回kPr,其实还可以通过care()函数逐步求解kPr
① 通过care()函数求解Riccati方程的解P
判断稳定性:
在这里插入图片描述
求解P:
在这里插入图片描述
② 再根据求解的P去求解反馈增益矩阵k
在这里插入图片描述
这里的kcare()函数求出的k是一样的
③ 最后根据k求解特征值r
在这里插入图片描述

1.2 举例:

Example1:

>> A=[0 1;10 0];B=[0;-1];Q=[100 0;0 1];R=0.01;
>> [k,P,r]=lqr(A,B,Q,R)

k =

 -110.4988  -17.9164


P =

   18.0058    1.1050
    1.1050    0.1792


r =

  -8.9582 + 4.4999i
  -8.9582 - 4.4999i

在这里插入图片描述

>> eig(A)
ans =

 3.1623
-3.1623

① 可见由于A的特征值有大于0,所以该系统本身就不稳定lyap()函数无解;
② 这时需要通过闭环控制配置状态反馈矩阵K来实现系统稳定,即让闭环状态矩阵Acl=(A-B**k)特征值都小于0,这就是LQR控制起到的作用。
接下来就可以验证闭环反馈:

>> k

k =

-110.4988  -17.9164

>> A=[0 1;10 0];B=[0;-1];Q=[100 0;0 1];R=0.01;A2=A-B*k

A2 =

        0    1.0000
-100.4988  -17.9164

>> eig(A2)

ans =

 -8.9582 + 4.4999i
 -8.9582 - 4.4999i

③ 采用状态反馈矩阵得出的闭环系统矩阵特征值和lqr()求出的特征值结果一致。

Example2:

>> A=[0 1;-1 -1];B=[0;-1];Q=[100 0;0 1];R=0.01;
>>> [k,P,r]=lqr(A,B,Q,R)
k =
  -99.0050  -16.2919

P =
   17.2828    0.9900
    0.9900    0.1629

r =
  -8.6460 + 5.0252i
  -8.6460 - 5.0252i
  
  >> eig(A)
ans =
  -0.5000 + 0.8660i
  -0.5000 - 0.8660i

① 该开环系统本身就是稳定的;

>> A2=A-B*k
A2 =
         0    1.0000
 -100.0050  -17.2919
 
 >> eig(A2)
ans =
  -8.6460 + 5.0252i
  -8.6460 - 5.0252i

② 采用状态反馈矩阵k得出的闭环系统矩阵特征值和lqr()求出的特征值结果一致,相比开环系统特征值从-0.5变成闭环的-8.6460,可见LQR控制器使得系统收敛更快。

>> k=R^(-1)*B'*P

k =

  -99.0050  -16.2919

③ 根据公式k=R-1BTP,将LQR求解出的里卡提方程的解P代入公式中,这里计算出来的kLQR求解的结果k是一样的。

Example3:

>> A
A =
   1     2
  -3    -4
  
>> B
B =
   0
  -1
  
>> Q
Q =
   3     1
   1     1

>> R
R =
  0.0100
  
>> [k,P,r]=lqr(A,B,Q,R)
k =
-18.9585   -9.8504

P =
  0.8659    0.1896
  0.1896    0.0985

r =
 -9.7743
 -3.0761 
 
>> eig(A)
ans =
 -1.0000
 -2.0000

① 该开环系统本身就是稳定的;

>>  A2=A-B*k
A2 =
   1.0000    2.0000
 -21.9585  -13.8504
>> eig(A2)
ans =
   -3.0761
   -9.7743

② 采用状态反馈矩阵k得出的闭环系统矩阵特征值和lqr()求出的特征值结果一致,相比开环系统特征值实部从-2变成闭环的-9.77,可见LQR控制器使得系统收敛更快。

>> k=R^(-1)*B'*P

k =

  -18.9585   -9.8504   

③ 根据公式k=R-1BTP,将LQR求解出的里卡提方程的解P代入公式中,这里计算出来的反馈矩阵kLQR求解的反馈矩阵k是一样的

二、连续时间系统李卡提方程MATLAB函数:care()函数

care()函数:Continuous-time algebraic Riccati equation solution
求解连续时间代数里李提方程(P)

2.1 MATLAB函数形式

lqr()函数相同,对于线性连续系统,形式:
在这里插入图片描述
其中:
在这里插入图片描述

2.2 举例

Example1:

A =
    -3     2
     1     1

B =
     0
     1
     
Q =
     1    -1
    -1     1
    
R =
     3
>> [P,r,k]=care(A,B,Q,R)

P =
    0.5895    1.8216
    1.8216    8.8188

r =
   -3.5026
   -1.4370

k =
    0.6072    2.9396

同样的用LQR求解:

[k2,P2,r2]=lqr(A,B,Q,R)

k2 =

 0.6072    2.9396


P2 =

 0.5895    1.8216
 1.8216    8.8188


r2 =

-3.5026
-1.4370

这里函数care()和lqr()求出的kk=R-1BTP算出来的k是一样的。

k2=R^(-1)*B’*P

k2 =

0.6072    2.9396

Example2:
同1.2节中的Example1,

>> A=[0 1;10 0];B=[0;-1];Q=[100 0;0 1];R=0.01;
>> [P,r,k]=care(A,B,Q,R)

P =
  18.0058    1.1050
   1.1050    0.1792

r =
 -8.9582 + 4.4999i
 -8.9582 - 4.4999i

k =
-110.4988  -17.9164

发现函数care()和lqr()计算的结果相等k,P,r完全相同
同理同1.2节中的Example2、3用函数care()和lqr()计算的结果都相等。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值