Solver not applicable (sedumi)

20 views
Skip to first unread message

Ahmad Sheikh

unread,
Oct 28, 2015, 11:04:40 AM10/28/15
to YALMIP
here is the code to find observer gain

clc
clf
;
%................Declare Matrices and constants............................
A
= [1 1;
   
-1 1];
C
=[1 0];
I
= eye(2);
row
= 0;
alpha
=-100;
beta
=-99;
gamma
= 450.191;
h1
=0.05;
h12
=0.25;
mu
=0;
%L=[0.0038; 0.5];


yalmip
('clear')
%........................Declare%variables.................................
P
= sdpvar(2);
Q1
= sdpvar(2);
Q2
= sdpvar(2);
Q3
=sdpvar(2);
Z1
=sdpvar(2);
Z2
=sdpvar(2);
X
=sdpvar(2,1);
epsilon1
=sdpvar(1);
epsilon2
=sdpvar(1);
%gamma=sdpvar(1);
Z1bar
= 1./Z1;
Z2bar
= 1./Z2;
Pbar= 1./P;
T1
= P*Z1bar * P;
T2
= P*Z2bar * P;
T1bar
= 1./T1;
T2bar
= 1./T2;


% .................LMI (26)..................


LMI1
= blkvar();


%1st Row
LMI1
(1,1) = A'*P+P*A+Q1+Q2+Q3-Z1+((row)*(epsilon1)*(I))+((beta)*(epsilon2)*(I));                  
LMI1(1,2) = -X*C;
LMI1(1,3) = Z1;                                                  
LMI1(1,4) = 0;
LMI1(1,5) = P-((epsilon1*I)/2)+((alpha*epsilon2*I)/2);
LMI1(1,6) = h1*A'
*P;
LMI1
(1,7) = h12*A'*P ;


%2nd Row
LMI1(2,2) = -((1-mu)*Q3+2*Z2);                    
LMI1(2,3) = Z2;
LMI1(2,4) = Z2;
LMI1(2,5) = 0;
LMI1(2,6) = -h1*C'
*X';      
LMI1(2,7) = -h12*C'
*X';


%3rd Row
LMI1(3,3) = -(Q1+Z1+Z2);
LMI1(3,4) = 0;
LMI1(3,5) = 0;
LMI1(3,6) = 0;
LMI1(3,7) = 0;


%4th Row
LMI1(4,4) = -(Q2+Z2);                    
LMI1(4,5) = 0;
LMI1(4,6) = h1*P;
LMI1(4,7) = h12*P;


%5th Row
LMI1(5,5) = -epsilon2*I;                        
LMI1(5,6) =  h1*P;          
LMI1(5,7) =  h12*P;


%6th Row
LMI1(6,6) = -P*Z1bar * P;
LMI1(6,7) = 0;


%7th Row
LMI1(7,7) = -P*Z2bar * P;


lmi1= sdpvar(LMI1);


% .................LMI (31)..................


LMI2 = blkvar();


%1st Row
LMI2(1,1) = A'
*P+P*A+Q1+Q2+Q3-Z1+((row)*(epsilon1)*(I))+((beta)*(epsilon2)*(I));                  
LMI2
(1,2) = -X*C;
LMI2
(1,3) = Z1;                                                  
LMI2
(1,4) = 0;
LMI2
(1,5) = P-((epsilon1*I)/2)+((alpha*epsilon2*I)/2);
LMI2
(1,6) = P;
LMI2
(1,7) = I;
LMI2
(1,8) = h1*A'*P;
LMI2(1,9) = h12*A'
*P ;


%2nd Row
LMI2
(2,2) = -((1-mu)*Q3+2*Z2);                    
LMI2
(2,3) = Z2;
LMI2
(2,4) = Z2;
LMI2
(2,5) = 0;
LMI2
(2,6) = 0;
LMI2
(2,7) = 0;
LMI2
(2,8) = -h1*C'*X';      
LMI2
(2,9) = -h12*C'*X';


%3rd Row
LMI2
(3,3) = -(Q1+Z1+Z2);
LMI2
(3,4) = 0;
LMI2
(3,5) = 0;
LMI2
(3,6) = 0;
LMI2
(3,7) = 0;
LMI2
(3,8) = 0;
LMI2
(3,9) = 0;


%4th Row
LMI2
(4,4) = -(Q2+Z2);                    
LMI2
(4,5) = 0;
LMI2
(4,6) = 0;
LMI2
(4,7) = 0;
LMI2
(4,8) = 0;
LMI2
(4,9) = 0;


%5th Row
LMI2
(5,5) = -epsilon2*I;                        
LMI2
(5,6) =  0;          
LMI2
(5,7) =  0;
LMI2
(5,8) =  0;
LMI2
(5,9) =  0;


%6th Row
LMI2
(6,6) = -gamma*I;
LMI2
(6,7) = 0;
LMI2
(6,8) = h1*P;
LMI2
(6,9) = h12*P;


%7th Row
LMI2
(7,7) = -gamma*I;
LMI2
(7,8) = h1*P;
LMI2
(7,9) = h12*P;


%8th Row
LMI2
(8,8) = -P*Z1bar * P;
LMI2
(8,8) = 0;


%9th Row
LMI2
(9,9) = -P*Z2bar * P;


lmi2
= sdpvar(LMI2);




%LMI3 = blkvar();


%LMI3(1,1) = gamma;


%lmi3= sdpvar(LMI3);


%..................... LMI (36)..............
LMI4
= blkvar();


%1st row


LMI4
(1,1) = P ;                  
LMI4
(1,2) = I;


%2nd row


LMI4
(2,2) =  Pbar;


lmi4
= sdpvar(LMI4);


%..................... LMI (36) for i=1....................
LMI5
= blkvar();


%1st row


LMI5
(1,1) = Z1 ;                  
LMI5
(1,2) = I;


%2nd row


LMI5
(2,2) =  Z1bar;


lmi5
= sdpvar(LMI5);


%..................... LMI (36) for i=2....................
LMI6
= blkvar();


%1st row


LMI6
(1,1) = Z2 ;                  
LMI6
(1,2) = I;


%2nd row


LMI6
(2,2) =  Z2bar;


lmi6
= sdpvar(LMI6);


%..................... LMI (37) for i=1....................
LMI7
= blkvar();


%1st row


LMI7
(1,1) = T1 ;                  
LMI7
(1,2) = I;


%2nd row


LMI7
(2,2) =  T1bar;


lmi7
= sdpvar(LMI7);


%..................... LMI (37) for i=2....................
LMI8
= blkvar();


%1st row


LMI8
(1,1) = T2 ;                  
LMI8
(1,2) = I;


%2nd row


LMI8
(2,2) =  T2bar;


lmi8
= sdpvar(LMI8);


%..................... LMI (39) for i=1....................
LMI9
= blkvar();


%1st row


LMI9
(1,1) = Z1bar ;                  
LMI9
(1,2) = Pbar;


%2nd row


LMI9
(2,2) =  T1bar;


lmi9
= sdpvar(LMI9);


%..................... LMI (39) for i=2....................
LMI10
= blkvar();


%1st row


LMI10
(1,1) = Z2bar ;                  
LMI10
(1,2) = Pbar;


%2nd row


LMI10
(2,2) =  T2bar;


lmi10
= sdpvar(LMI10);


%..................... LMI (38) for i=1....................


LMI11
= blkvar();


%1st row


LMI11
(1,1) = P*Z1bar*P ;                  
LMI11
(1,2) = I;


%2nd row


LMI11
(2,2) =  T1bar;


lmi11
= sdpvar(LMI11);


%..................... LMI (38) for i=2....................


LMI12
= blkvar();


%1st row


LMI12
(1,1) = P*Z2bar*P ;                  
LMI12
(1,2) = I;


%2nd row


LMI12
(2,2) =  T2bar;


lmi12
= sdpvar(LMI12);


constraints
=[lmi1<0,lmi2<0,lmi4>0,lmi5>0,lmi6>0,lmi7>0,lmi8>0,lmi9>0,lmi10>0, lmi11>0,lmi12>0];
   
options
= sdpsettings('solver','sedumi');
sol
= solvesdp(constraints,[trace(Z1*Z1bar + 0.5*P*Z1bar*P*T1bar + 0.5*T1*T1bar + Z2*Z2bar + 0.5*P*Z2bar*P*T2bar + 0.5*T2*T2bar+ P*Pbar)], options);




%solution_Y=value(Y);
P
=value(P)
X
=double(P)
L
= inv(P)*X
Enter code here...


but it is giving NaN at the end...!

Johan Löfberg

unread,
Oct 28, 2015, 11:51:55 AM10/28/15
to YALMIP
It's not linear, so it makes no sense to think SeDuMi can solve it.

Even worse, it is not bilinear (hard), polynomial (even harder) but involves divisions etc. i.e, a very nasty semidefinite program.

You have to take a step back and reconsider your whole model. You will not be able to solve the problem in the current form. When deriving models, one strives for linear semidefinite programs. Deriving a polynomial or bilinear is sort of a fail, but can have merits if you have clever methods to address it, and there are local nonlinear SDP solver to *try* to solve it. Here, you've failed even worse as you've had to introduce hadamard divisions etc.
Reply all
Reply to author
Forward
0 new messages