每日签到积分充值书码绑定

MATLAB技术论坛

 找回密码
 注册帐号

QQ登录

只需一步,快速开始

查看: 11225|回复: 17

[教程] 【原创】Lyapunov、Sylvester和Riccati方程的Matlab求解   [复制链接]

管理员

风雪夜归人

Rank: 30Rank: 30Rank: 30Rank: 30

签到天数: 12 天

[LV.3]偶尔看看II

UID
1
主题
1390
帖子
5053
积分
70501
威望
778
贝壳
53863
贡献
4889

管理团队 技术小组 原创先锋 宣传大使

发表于 2009-1-12 10:17:57 |显示全部楼层 | 百度  谷歌 |
Lyapunov、Sylvester和Riccati方程是控系统常用到的几个方程,应用和计算比较广泛


在这里我们只要讨论下Lypunov方程的连续方程、离散方程的数值和解析解法,其中数值解法Matlab提供的直接的lyap()和dlyap()函数

一、连续Lyapunov方程

连续Lyapunov方程可以表示为

1.gif


Lyapunov方程来源与微分方程稳定性理论,其中要求C为对称正定的n×n方阵,从而可以证明解X亦为n×n对称矩阵,这类方程直接求解比较困难,不过有了Matlab中lyap()函数,就简单多了。
  1. >> A=[1 2 3;4 5 6;7 8 0]

  2. A =

  3.      1     2     3
  4.      4     5     6
  5.      7     8     0

  6. >> C=-[10 5 4;5 6 7;4 7 9]

  7. C =

  8.    -10    -5    -4
  9.     -5    -6    -7
  10.     -4    -7    -9

  11. >> X=lyap(A,C)

  12. X =

  13.    -3.9444    3.8889    0.3889
  14.     3.8889   -2.7778    0.2222
  15. 0.3889    0.2222   -0.1111
复制代码
二、Lyapunov方程的解析解

利用Kroncecker乘积的表示方法,可以将Lyapunov方程写为

2.gif


可见,方程有唯一解的条件并不局限与C对称正定,只要满足 非奇异即可保证方程唯一解。同时也打破了传统观念,C必须对称正定的。
  1. function x=lyap2(A,C)
  2. %Lyapunov方程的符号解法
  3. n=size(C,1);
  4. A0=kron(A,eye(n))+kron(eye(n),A);
  5. c=C(:);
  6. x0=-inv(A0)*c;
  7. x=reshape(x0,n,n)
复制代码
恩下面看一个示例,体会下符号解法
  1. >>A=[1 2 3;4 5 6;7 8 0];
  2. >>C=-[10 5 4;5 6 7;4 7 9];
  3. >>x=lyap2(sym(A),sym(C))

  4. x =

  5. [ -71/18,   35/9,   7/18]
  6. [   35/9,  -25/9,    2/9]
  7. [   7/18,    2/9,   -1/9]
复制代码
三、离散Lyapunov方程

离散Lyapunov方程的一般形式为

3.gif


Matlab中直接提供了dlyap()函数求解该方程:X=dlyap(A,Q)

其实,如果A矩阵非奇异,则等式两边同时右乘 4.gif
得到

5.gif


就可以将其变换成连续的Sylvester方程

6.gif


Sylvester方程是广义Lyapunov方程,故离散的Lyapunov方程还可以使用下面的方法求解
  1. B=-inv(A’)
  2. C=Q*inv(A’)
  3. X=lyap(A,B,C)
复制代码
下面总结下我们上面的讲到的知识点:

X=lyap(A,C)                                 连续Lyapunov方程数值解法

X=lyap2(A,C)                               连续Lyapunov方程符号解法

X=lyap(A,B,C)                                广义Lyapunov方程,即Sylvester方程

X=dlyap(A,Q)或者X=lyap(A,-inv(A’),Q*inv(A’))    离散Lyapunov方程

管理员

风雪夜归人

Rank: 30Rank: 30Rank: 30Rank: 30

签到天数: 12 天

[LV.3]偶尔看看II

UID
1
主题
1390
帖子
5053
积分
70501
威望
778
贝壳
53863
贡献
4889

管理团队 技术小组 原创先锋 宣传大使

发表于 2009-1-12 10:40:33 |显示全部楼层

Sylvester方程Matlab求解

Sylvester方程的一般形式为

2.gif


该方程又称为广义的Lyapunov方程,式中A是n×n方阵,B是m×m方阵,X和C是n×m矩阵。Matlab控制工具箱提供了直接的求解该方程的lyap()函数
  1. A=[8 1 6;3 5 7;4 9 2]
  2. B=[2 3;4 5]
  3. C=[1 2;3 4;5 6]
  4. X=lyap(A,B,C)


  5. A =

  6.      8     1     6
  7.      3     5     7
  8.      4     9     2


  9. B =

  10.      2     3
  11.      4     5


  12. C =

  13.      1     2
  14.      3     4
  15.      5     6


  16. X =

  17.     0.2011    0.2016
  18.     0.0393    0.1554
  19.    -0.6428   -0.8966
复制代码
同理,我们使用Kronecker乘机的形式将原方程进行如下变化

3.gif


故可以编写Sylvester方程的解析解函数
  1. function X=lyap3(A,B,C)
  2. %Sylvester方程的解析解法
  3. %rewrited by dynamic
  4. %more information http://www.matlabsky.cn

  5. If nargin==2,C=B;B=A';end
  6. [nr,nc]=size(C);
  7. A0=kron(A,eye(nc))+kron(eye(nr),B');
  8. try
  9.     C1=C';
  10.     X0=-inv(A0)*C1(:);
  11.     X=reshape(X0,nc,nr);
  12. catch
  13.     error('Matlabsky提醒您:矩阵奇异!');
  14. end
复制代码
恩,使用上面的数据,我们试验下该解析解法的
  1. >>X=lyap3(sym(A),B,C)

  2. X =

  3. [   2853/14186,    557/14186,  -9119/14186]
  4. [  11441/56744,   8817/56744, -50879/56744]
复制代码

道具 举报

管理员

风雪夜归人

Rank: 30Rank: 30Rank: 30Rank: 30

签到天数: 12 天

[LV.3]偶尔看看II

UID
1
主题
1390
帖子
5053
积分
70501
威望
778
贝壳
53863
贡献
4889

管理团队 技术小组 原创先锋 宣传大使

发表于 2009-1-12 10:43:06 |显示全部楼层
MATLAB技术论坛"有偿编程担保制度" "技术团队资格认证""官方有偿编程团队",保证您有偿编程安全。

Riccati方程的Matlab求解

Riccati方程是一类很著名的二次型矩阵形式,其一般形式为

4.gif


由于含有矩阵X的二次项,所有Riccati方程求解要Lyapunov方程更难Matlab控制工具箱提供了are()函数,可以直接求解该函数
  1. A=[-2 1 -3;-1 0 -2;0 -1 -2]
  2. B=[2 2 -2;-1 5 -2;-1 1 2]
  3. C=[5 -4 4;1 0 4;1 -1 5]
  4. X=are(A,B,C)


  5. A =

  6.     -2     1    -3
  7.     -1     0    -2
  8.      0    -1    -2


  9. B =

  10.      2     2    -2
  11.     -1     5    -2
  12.     -1     1     2


  13. C =

  14.      5    -4     4
  15.      1     0     4
  16.      1    -1     5


  17. X =

  18.     0.9874   -0.7983    0.4189
  19.     0.5774   -0.1308    0.5775
  20.    -0.2840   -0.0730    0.6924
复制代码

道具 举报

Rank: 1

该用户从未签到

UID
1267
主题
0
帖子
22
积分
36
威望
0
贝壳
12
贡献
1
发表于 2009-2-12 17:00:50 |显示全部楼层

道具 举报

Rank: 1

该用户从未签到

UID
2122
主题
1
帖子
3
积分
22
威望
0
贝壳
18
贡献
1
发表于 2009-3-3 11:12:15 |显示全部楼层
MATLAB技术论坛"有偿编程担保制度" "技术团队资格认证""官方有偿编程团队",保证您有偿编程安全。

如何用matlab求解lyapunov指数

我是需要分析计算LOGISTIC数据  ,都是用来说明对初值的敏感.以下是LOGISTIC求解的程序 ,希望得到LYAPUNOV的程序.
clc
clear
close all

lambda = 3:5e-4:4;
x = 0.4*ones(1,length(lambda));

N1 = 400;                   % 前面的迭代点数
N2 = 100;                   % 后面的迭代点数

f = zeros(N1+N2,length(lambda));
for i = 1:N1+N2
    x = lambda .* x .* (1 - x);
    f(i,:) = x;
end
f = f(N1+1:end,:);
plot(lambda,f,'k.','MarkerSize',1)
xlabel('\lambda')
ylabel('x');

道具 举报

本科

菜鸟

Rank: 5Rank: 5Rank: 5

签到天数: 76 天

[LV.6]常住居民II

UID
31372
主题
3
帖子
358
积分
1102
威望
0
贝壳
461
贡献
650
发表于 2010-1-8 00:08:42 |显示全部楼层
本帖最后由 青山不改 于 2010-1-8 00:10 编辑

回复 5# yyuu


    您有没有作过Lyapunov指数图?我也关心这个问题啊

道具 举报

本科

菜鸟

Rank: 5Rank: 5Rank: 5

签到天数: 76 天

[LV.6]常住居民II

UID
31372
主题
3
帖子
358
积分
1102
威望
0
贝壳
461
贡献
650
发表于 2010-1-8 00:11:50 |显示全部楼层
MATLAB技术论坛"有偿编程担保制度" "技术团队资格认证""官方有偿编程团队",保证您有偿编程安全。
回复 3# dynamic


    感谢您的介绍!

道具 举报

Rank: 1

该用户从未签到

UID
33908
主题
0
帖子
7
积分
21
威望
0
贝壳
6
贡献
6
发表于 2010-2-10 15:08:56 |显示全部楼层
离散时间代数riccati方程的求解
                                   -1
E'XE = A'XA - (A'XB + S)(B'XB + R)    (A'XB + S)' + Q
用dare求解riccati方程的X的代码是多少?
谢谢!

道具 举报

Rank: 1

该用户从未签到

UID
33908
主题
0
帖子
7
积分
21
威望
0
贝壳
6
贡献
6
发表于 2010-2-10 15:24:29 |显示全部楼层
MATLAB技术论坛"有偿编程担保制度" "技术团队资格认证""官方有偿编程团队",保证您有偿编程安全。
A=[-0.2 0 0 0,0 -0.25 0 0,0 0 -0.25 0,0 0 0 -0.25]
B=[12 -17,24 -9,-12 18,-24 10]
C=[1 0 1 0,0 1 0 1]

道具 举报

Rank: 1

该用户从未签到

UID
35367
主题
0
帖子
3
积分
12
威望
0
贝壳
4
贡献
3
发表于 2010-3-8 10:29:21 |显示全部楼层
请问楼主如何求解形如Dx=Ax+xA'+xB'Bx+CC'的微分Riccati方程

注册这个号就是为了请教楼主,务必回答啊,拜谢了!

道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

关闭

站长推荐

MATLAB技术论坛数据挖掘公开课开课啦!
MATLAB技术论坛数据挖掘公开课开课啦!
MATLAB技术论坛将为大家奉献N期MATLAB数据挖掘公开课。公开课的安排为综合篇+专题篇,现在第一期数据挖掘概论已经出来了,更多视频敬请关注。。。

查看 »

网站简介 | 发展历程 | 特色业务 | 管理团队 | 免责声明 | 广告服务 | 联系我们 | 付款方式 | 友情链接 | 帮助中心

商务合作:455681698   服务邮箱:matlabsky@gmail.com   支付宝:yuthreestone@163.com

合作站点:数模联盟 函数百科 网上商城   出版单位:北航出版社 道然科技   开发平台:Discuz! X2

CopyRight © 2008-2012 迈粉网 ( 陕ICP备08102094号 ) All Rights Reserved

排行热榜|网站地图|手机浏览|管理邮箱||     

GMT+8, 2012-5-19 06:25 , Processed in 0.216982 second(s), 28 queries , Gzip On, Xcache On.

回顶部