登录论坛

查看完整版本 : [求助]用LMI求解时却运行不出结果(附程序和运行结果)


lan2265210
2009-03-12, 14:59
程序如下:
A1=[-0.1125 -0.02;1 0];
Ad1=[-0.0125 -0.005;0 0];
B1=[1;0];
A2=[-0.1125 -1.527;1 0];
Ad2=[-0.0125 -0.23;0 0];
C1=[0.1 0;0 0.1];
Da=[-0.425 0;0 -0.425];
Db=[-0.425 0;0 -0.425];
Dd=[-0.425 0;0 -0.425];
Ea1=[0.01 0;0 0.3];
Eb1=0;
Ed1=[0.31 0;0 0.1];
Q=[1 0;0 1];
R=10;
U=[-0.0793 0;0.0402 0];
M=[-0.1597 0;0.0793 0];
K1=[-2.5713 -3.3913];
K2=[-2.5734 -3.3874];
x=[0.2;-0.1];

setlmis([])
%定义变量
X=lmivar(1,[2 1]);
q1=lmivar(1,[1 1]);
q2=lmivar(1,[1 1]);
q3=lmivar(1,[1 1]);
q4=lmivar(1,[1 1]);
q5=lmivar(1,[1 1]);
q6=lmivar(1,[1 1]);
q7=lmivar(1,[1 1]);
q8=lmivar(1,[1 1]);
q9=lmivar(1,[1 1]);
q10=lmivar(1,[1 1]);
q11=lmivar(1,[1 1]);
q12=lmivar(1,[1 1]);
q12=lmivar(1,[1 1]);
q13=lmivar(1,[1 1]);
q14=lmivar(1,[1 1]);
q15=lmivar(1,[1 1]);
q16=lmivar(1,[1 1]);

a=lmivar(1,[1 1]);
b=lmivar(1,[1 1]);
K1=lmivar(2,[1 2]);
T1=lmivar(1,[2 0]);
T2=lmivar(1,[2 0]);
Y1=lmivar(1,[1 1]);
Y1=K1*inv(X);
%第一个LMI
%S (1,1)
lmiterm([1 1 1 X],A1,1,'s');
lmiterm([1 1 1 Y1],B1,1);
lmiterm([1 1 1 -Y1],1,B1');
lmiterm([1 1 1 q1],1,Da*Da');
lmiterm([1 1 1 q2],1,Dd*Dd');
lmiterm([1 1 1 q3],1,Db*Db');
%S(1,2) ————————line 57
lmiterm([1 1 2 X],1,Ea1');
lmiterm([1 1 3 -Y1],1,Eb1');
lmiterm([1 1 4 X],q4,A1*Da);
lmiterm([1 1 5 X],1,Ea1');
lmiterm([1 1 6 X],q5,A1'*Dd);
lmiterm([1 1 7 X],q6,A1'*Db);
lmiterm([1 1 8 Y1],1,Eb1');
lmiterm([1 1 9 -Y1],q7,B1'*Da);
lmiterm([1 1 10 X],1,Ea1');
lmiterm([1 1 11 -Y1],q8,B1'*Db);
lmiterm([1 1 12 -Y1],1,Eb1');
lmiterm([1 1 13 X],a,Ea1');
lmiterm([1 1 14 X],a,Ea1');
lmiterm([1 1 15 a],1,Y1'*Eb1');
lmiterm([1 1 16 -Y1],q9*a,Eb1');
lmiterm([1 1 17 X],q10,Ea1');
lmiterm([1 1 18 -Y1],q11,B1'*Dd);
lmiterm([1 1 19 X],q12*a,Ea1');
lmiterm([1 1 20 X],1,Ea1');
lmiterm([1 1 21 -Y1],1,Eb1');
lmiterm([1 1 22 X],1,1);
lmiterm([1 1 23 -Y1],1,1);

%S(1,3)
lmiterm([1 1 24 0],Ad1);
lmiterm([1 1 24 X],1,A1'*Ad1);
lmiterm([1 1 24 -Y1],1,B1'*Ad1);

%S(1,5)
lmiterm([1 1 32 0],C1);
lmiterm([1 1 32 X],1,A1'*C1);
lmiterm([1 1 32 -Y1],1,B1'*C1);

%-S(2,2)
lmiterm([1 2 2 q1],-1,1);
lmiterm([1 3 3 q3],-1,1);
lmiterm([1 4 4 q4],-1,1);
lmiterm([1 5 5 q4],-1,1);
lmiterm([1 6 6 q5],-1,1);
lmiterm([1 7 7 q6],-1,1);
lmiterm([1 8 8 q6],-1,1);
lmiterm([1 9 9 q7],-1,1);
lmiterm([1 10 10 q7],-1,1);
lmiterm([1 11 11 q8],-1,1);
lmiterm([1 12 12 q8],-1,1);
lmiterm([1 13 13 0],-1);
lmiterm([1 14 14 q9],-1,1);
lmiterm([1 15 15 0],-1);
lmiterm([1 16 16 q9],-1,1);
lmiterm([1 17 17 q10],-1,1);
lmiterm([1 18 18 q11],-1,1);
lmiterm([1 19 19 q12],-1,1);
lmiterm([1 20 20 q14],-1,1);
lmiterm([1 21 21 q15],-1,1);
lmiterm([1 22 22 0],Q);
lmiterm([1 23 23 0],R);

%S(3,3)
lmiterm([1 24 24 0],Ad1'*Ad1);
lmiterm([1 24 24 b],-1,1);
lmiterm([1 24 24 a],a,Ed1'*Ed1);
lmiterm([1 24 24 q13],1,Ad1'*Dd*Dd'*Ad1);

%S(3,4)
lmiterm([1 24 25 0],Ed1');
lmiterm([1 24 26 0],Ed1');
lmiterm([1 24 27 0],Ad1'*Dd);
lmiterm([1 24 28 0],Ed1');
lmiterm([1 24 29 a],1,Ed1');
lmiterm([1 24 30 0],Ed1');
lmiterm([1 24 31 0],Ed1');

%-S(4,4)
lmiterm([1 25 25 q2],-1,1);
lmiterm([1 26 26 q5],-1,1);
lmiterm([1 27 27 q10],-1,1);
lmiterm([1 28 28 q11],-1,1);
lmiterm([1 29 29 q12],-1,1);
lmiterm([1 30 30 q13],-1,1);
lmiterm([1 31 31 q16],-1,1);

%A'C
lmiterm([1 25 32 0],A1'*C1);
%S(5,5)
lmiterm([1 32 32 0],C1'*C1);
lmiterm([1 32 32 0],-1);
lmiterm([1 32 32 q14],1,C1'*Da*Da'*C1);
lmiterm([1 32 32 q15],1,C1'*Db*Db'*C1);
lmiterm([1 32 32 q16],1,C1'*Dd*Dd'*C1);

%第二个LMI
lmiterm([2 1 1 a],-1,1);
lmiterm([2 1 2 0],x');
lmiterm([2 2 2 X],-1,1);

%第三个LMI
lmiterm([3 1 1 T1],-1,1);
lmiterm([3 1 2 b],-1,M');
lmiterm([3 2 2 b],-1,1);

%第四个LMI
lmiterm([4 1 1 T2],-1,1);
lmiterm([4 1 2 0],-U);
lmiterm([4 2 2 0],-1);

lmisys=getlmis;
[tmin,xfeas]=feasp(lmisys);
q11=dec2mat(lmisys,xfeas,q1);
q22=dec2mat(lmisys,xfeas,q2);
q33=dec2mat(lmisys,xfeas,q3);
q44=dec2mat(lmisys,xfeas,q4);
q55=dec2mat(lmisys,xfeas,q5);
q66=dec2mat(lmisys,xfeas,q6);
q77=dec2mat(lmisys,xfeas,q7);
q88=dec2mat(lmisys,xfeas,q8);
q99=dec2mat(lmisys,xfeas,q9);
q100=dec2mat(lmisys,xfeas,q10);
q110=dec2mat(lmisys,xfeas,q11); ——————line 175
q120=dec2mat(lmisys,xfeas,q12);
q130=dec2mat(lmisys,xfeas,q13);
q140=dec2mat(lmisys,xfeas,q14);
q150=dec2mat(lmisys,xfeas,q15);
q160=dec2mat(lmisys,xfeas,q16);

a1=dec2mat(lmisys,xfeas,a);
b1=dec2mat(lmisys,xfeas,b);
T11=dec2mat(lmisys,xfeas,T1);
T12=dec2mat(lmisys,xfeas,T2);

运行结果:Warning in (1,1) block of LMI #1:
Non symmetric term AXB stored as (AXB+B'X'A')/2.
For safety, set FLAG='s' to specify AXB+B'X'A' in one shot
Warning in (1,1) block of LMI #1:
Non symmetric term AXB stored as (AXB+B'X'A')/2.
For safety, set FLAG='s' to specify AXB+B'X'A' in one shot

Solver for LMI feasibility problems L(x) < R(x)
This solver minimizes t subject to L(x) < R(x) + t*I
The best value of t should be negative for feasibility

Iteration : Best value of t so far

1 10.634009
2 10.260599
3 10.260599
4 10.093105
5 10.093105
6 10.018280
7 10.018280
8 10.004556
9 10.004556
10 10.001735
11 10.000804
12 10.000079
13 10.000079
14 10.000040
15 10.000011
16 10.000001
17 10.000001
18 10.000001
19 10.000000
20 10.000000
21 10.000000
22 10.000000
23 10.000000
* switching to QR
24 10.000000
25 10.000000
26 10.000000
27 10.000000
28 10.000000
*** new lower bound: 10.000000

Result: best value of t: 10.000000
guaranteed absolute accuracy: 1.38e-009
f-radius saturation: 92.622% of R = 1.00e+009

These LMI constraints were found infeasible

??? Index exceeds matrix dimensions.

Error in ==> D:\matlab6.5\toolbox\lmi\lmilab\dec2mat.m
On line 57 ==> type=varrec(2);

Error in ==> D:\matlab6.5\work\lmisys.m
On line 175 ==> q110=dec2mat(lmisys,xfeas,q11);

问题:不知这两处怎么错了,而且为什么结果中显示不出a,b及q1~q16的值呢?
那位高人帮帮我吧?

lan2265210
2009-03-13, 20:13
大家帮帮忙嘛,拜托啦