加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

用MATLAB玩控制-代数黎卡提方程的求解

(2016-11-28 13:13:47)
标签:

代数黎卡提方程

最优控制

代数黎卡提方程的形式如下:
                PA+ATP-PBP+C=0                             
其中P为待求矩阵,它在线性二次型最优控制中有应用,Matlab中有一个are()函数可以直接求解代数黎卡提方程,调用格式是P=are(A,B,C)
http://s5/mw690/001Agcsvzy76LFGrCv284&690



用MATLAB如下代码
                      %Riccati equation

close all;clear all;clc

A=[0 0;1 0];

B=[1;0];

Q=[0 0;0 2];

R=0.5;

[m,n] = size(A);

M=ctrb(A,B);

m1=rank(M);

if m1>=m  %可控性判断

    B1=B*inv(R)*B';

    P=are(A,B1,Q)

    K=inv(R)*B'*P

end

可以求得u(t)=-K*X,K=[ 2.0 2.0]。
除了利用are()函数求解代数黎卡提方程外,也可以一种简单而有效的迭代计算法求解如下形式的黎卡提方程,

http://s12/mw690/001Agcsvzy76LH9E6Cf0b&690

计算方法如下:

http://s12/mw690/001Agcsvzy76LHnCl7Bcb&690


MATLAB实现的关键代码如下:

           
   while norm(phi1-phi0)>1e-10

              if k>=1

                  phi0=phi1;

              end

phi1=E'*phi0*E-(E'*phi0*G+W)*inv(G'*phi0*…

+H)*(E'*phi0*G+W)'+Q;

              k=k+1;

       end

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有