|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
对于对称矩阵不等式
A11 A12 … A1.n-1 A1.n
* A22 … A2.n-1 A2.n … <0 (1)
* * … -P-1 An-1.n * * … * -Q-1
可以采用锥补线性化方法求解
即在满足
A11 A12 … A1.n-1 A1.n * A22 … A2.n-1 A2.n … <0 (2)
* * … -M An-1.n * * … * -N [P,I;I,M]〉=0和[Q,I;I,N]〉=0 (3)
的条件下使trace(PM+QN)取得最小值
算法为
1) 首先找到满足(2)和(3)中三个矩阵不等式的所有未知矩阵变量的一个可行解(P0,Q0,M0,N0),令迭代次数k=0。
2) 对于矩阵变量(P,Q,M,N),求解如下最小化问题:
Minimize [tr (PKM+MKP+QKN+NKQ)]
Subject to (2),(3)
令求出的最优解为:
(PK+1,QK+1,MK+1,NK+1)
3) 验证所求出的最优解是否满足(1),若满足,则得解。若果不满足,检查k是否达到规定的迭代次数,如果达到,则系统无解;否则,令k=k+1,转到步骤2继续执行程序。
以下是我对一具体问题编的一个程序
clear all
a1=[0,5;0,0]
b1=[0;1]
c1=[1,0]
d1=0
[A,B]=c2d(a1,b1,0.05)
C=c1
D=d1
U=[0,0;0,0];
setlmis([])
P=lmivar(1,[2 1])
Q=lmivar(1,[2 1])
R=lmivar(1,[2 1])
S=lmivar(1,[2 1])
M=lmivar(1,[2 1])
N=lmivar(1,[2 1])
K=lmivar(2,[1 2])
F=lmivar(2,[2 1])
lmiterm([1 1 1 S],1,1)
lmiterm([1 1 1 P],-1,1)
lmiterm([1 5 1 0],A)
lmiterm([1 5 1 K],B,1)
lmiterm([1 6 1 F],-1,C)
lmiterm([1 2 2 S],-1,1)
lmiterm([1 6 2 F],1,C)
lmiterm([1 3 3 R],1,1)
lmiterm([1 3 3 Q],-1,1)
lmiterm([1 5 3 K],B,-1)
lmiterm([1 6 3 F],1,C)
lmiterm([1 6 3 0],-A)
lmiterm([1 4 4 R],-1,1)
lmiterm([1 5 5 M],-1,1)
lmiterm([1 6 6 N],-1,1)
lmiterm([-2 1 1 P],1,1)
lmiterm([-2 2 1 0],1)
lmiterm([-2 2 2 M],1,1)
lmiterm([-3 1 1 Q],1,1)
lmiterm([-3 2 1 0],1)
lmiterm([-3 2 2 N],1,1)
lmiterm([-4 1 1 P],1,1)
lmiterm([-5 1 1 Q],1,1)
lmiterm([-6 1 1 R],1,1)
lmiterm([-7 1 1 S],1,1)
lmiterm([-8 1 1 M],1,1)
lmiterm([-9 1 1 N],1,1)
lmisys=getlmis;
[tmin,xfeasp]=feasp(lmisys)
PP=dec2mat(lmisys,xfeasp,P)
QQ=dec2mat(lmisys,xfeasp,Q)
RR=dec2mat(lmisys,xfeasp,R)
SS=dec2mat(lmisys,xfeasp,S)
MM=dec2mat(lmisys,xfeasp,M)
NN=dec2mat(lmisys,xfeasp,N)
KK=dec2mat(lmisys,xfeasp,K)
FF=dec2mat(lmisys,xfeasp,F)
for i=1:100,
n=decnbr(lmisys);
c=zeros(n,1);
for j=1:n,
[Pj,Qj,Rj,Sj,Mj,Nj,Kj,Fj]=defcx(lmisys,j,P,Q,R,S,M,N,K,F);
c(j)=trace(PP*Mj+MM*Pj+QQ*Nj+NN*Qj);
end
options=[1e-4,0,0,0,0]
[copt,xopt]=mincx(lmisys,c,options)
PPP=dec2mat(lmisys,xopt,P)
QQQ=dec2mat(lmisys,xopt,Q)
RRR=dec2mat(lmisys,xopt,R)
SSS=dec2mat(lmisys,xopt,S)
MMM=dec2mat(lmisys,xopt,M)
NNN=dec2mat(lmisys,xopt,N)
KKK=dec2mat(lmisys,xopt,K)
FFF=dec2mat(lmisys,xopt,F)
Z=[SSS-PPP , U , U ,U , (A+B*KKK)' , -(FFF*C)' ;
U , -SSS , U ,U , U , (FFF*C)' ;
U , U , RRR-QQQ ,U , -(B*KKK)' , -(A-FFF*C)';
U , U , U ,-RRR, U , U ;
A+B*KKK, U , -B*KKK ,U , -inv(PPP) , U ;
-FFF*C , FFF*C, -(A-FFF*C),U , U , -inv(QQQ)]
Y=eig(Z)
i2=0;
for i1=1:length(Y),
if(Y(i1,1)<0),i2=i2+1;end
end
if(i2==length(Y)),break;end
PP=PPP
QQ=QQQ
RR=RRR
SS=SSS
MM=MMM
NN=NNN
KK=KKK
FF=FFF
end
if(i==100),disp('There is no result');end
不知道LMI工具箱用的正确与否以及按算法编的对不对,请大侠指点,万分感谢。
[ 本帖最后由 lxq 于 2007-4-27 00:27 编辑 ] |
|