Talk:Beginning with CVX

From Wikimization

(Difference between revisions)
Jump to: navigation, search
Line 64: Line 64:
Here is the new code:
Here is the new code:
-
<pre>%0)Initialization
+
<pre>
 +
%0)Initialization
clear all;
clear all;
n=2; m=1;
n=2; m=1;
A_a=3*eye(2*n,2*n)
A_a=3*eye(2*n,2*n)
-
B_a=4*eye(2*n,2*m)
+
B_a=4*eye(2*n,2*m)
%1)1
%1)1
Line 85: Line 86:
if(lamda_W>=Epsilon1)
if(lamda_W>=Epsilon1)
-
if(lamda_H<=-Epsilon2) para=1
+
if(lamda_H<=-Epsilon2), para=1
-
else para = 0
+
else para = 0
-
end
+
end
else para =0
else para =0
end
end
%while para==0
%while para==0
-
%3)3
+
%3)3
-
[v_W,D] = eig( full ( W ) )
+
[v_W,D] = eig(full(W))
-
[v_H,D] = eig( full ( H ) )
+
[v_H,D] = eig(full(H))
-
+
-
% v_W_1 = v_W( : , 1 ) / norm ( v_W ( : , 1 ) ) ;
+
-
% v_W_2 = v_W( : , 2 ) / norm ( v_W ( : , 2 ) ) ;
+
-
% v_W_3 = v_W( : , 3 ) / norm ( v_W ( : , 3 ) ) ;
+
-
% v_W_4 = v_W( : , 4 ) / norm ( v_W ( : , 4 ) ) ;
+
-
+
-
% v_H_1 = v_H( : , 1 ) / norm ( v_H ( : , 1 ) ) ;
+
-
% v_H_2 = v_H( : , 2 ) / norm ( v_H ( : , 2 ) ) ;
+
-
% v_H_3 = v_H( : , 3 ) / norm ( v_H ( : , 3 ) ) ;
+
-
% v_H_4 = v_H( : , 4 ) / norm ( v_H ( : , 4 ) ) ;
+
-
%4a)4a
+
%4a)4a
-
if ( Epsilon1 - lamda_W )>(lamda_H+Epsilon2)
+
cvx_begin
-
Caso=1 %For know where am I
+
variables p1 p2 W(4,4) R(2,4);
 +
minimize (p1+p2);
 +
subject to
 +
W(1,1)<=p1;
 +
W(2,2)<=p1;
 +
W(1,1)>=Epsilon1;
 +
W(2,2)>=Epsilon1;
 +
W(3,3)==W(1,1);
 +
W(4,4)==W(2,2);
-
cvx_begin
+
R(1,1)>=-p2;
-
variables p1 p2 W(4,4) R(2,4)
+
R(1,1)<=p2;
-
+
R(2,3)==R(1,1);
-
minimize (p1+p2)
+
R(1,2)>=-p2;
-
+
R(1,2)<=p2;
-
subject to
+
R(2,4)==R(1,2);
-
 
+
-
W(1,1)<=p1
+
-
W(2,2)<=p1
+
-
W(1,1)>=Epsilon1
+
-
W(2,2)>=Epsilon1
+
-
W(3,3)==W(1,1)
+
-
W(4,4)==W(2,2)
+
-
 
+
-
R(1,1)>=-p2
+
-
R(1,1)<=p2
+
-
R(2,3)==R(1,1)
+
-
R(1,2)>=-p2
+
-
R(1,2)<=p2
+
-
R(2,4)==R(1,2)
+
-
+
-
H=W*A_a'+A_a*W-B_a*R-R'*B_a'
+
-
+
-
v_W'*W*v_W - Epsilon1*eye(2*n) == semidefinite(2*n);
+
 +
H=W*A_a'+A_a*W-B_a*R-R'*B_a';
 +
if (Epsilon1 - lamda_W) > (lamda_H + Epsilon2)
 +
v_W'*W*v_W - Epsilon1*eye(2*n) == semidefinite(2*n);
 +
else
 +
Epsilon2*eye(2*n) + v_H'*H*v_H == -semidefinite(2*n);
 +
end
cvx_end
cvx_end
- 
-
else %4b)4b
 
- 
-
Caso = 2
 
-
cvx_begin
 
-
 
-
variables p1 p2 W(4,4) R(2,4)
 
-
 
-
minimize (p1+p2)
 
-
 
-
subject to
 
-
 
-
W(1,1)>=Epsilon1
 
-
W(2,2)>=Epsilon1
 
-
W(1,1)<=p1
 
-
W(2,2)<=p1
 
-
W(3,3)==W(1,1)
 
-
W(4,4)==W(2,2)
 
- 
-
R(1,1)>=-p2
 
-
R(1,1)<=p2
 
-
R(2,3)==R(1,1)
 
-
R(1,2)>=-p2
 
-
R(1,2)<=p2
 
-
R(2,4)==R(1,2)
 
- 
-
H=W*A_a'+A_a*W-B_a*R-R'*B_a'
 
-
 
-
Epsilon2*eye(2*n) + v_H'*H*v_H == -semidefinite(2*n);
 
- 
-
cvx_end
 
-
end
 
- 
R
R

Revision as of 02:39, 6 February 2009

lamda_W=eig(full(W))

Thanks a lot for all the ideas, they all are greats.

I think I'm wrong with this code, I would like to put the
if - else - end 
with the another constraits, inside the cxv_begin, but the CVX don't let me doing it. Some ideas?

I come work thinking on you idea. I think you idea it’s right and I’m making thinks wrong.

I have a dude.

The new code could be:

1º I calculate some variables, 

2º with one if (with depends to variables point 1º) I select one linear constrint depending value of variables in 1º and I make all the: minimize…subjet to with apropiate constraints, convex and the one linear, 

if
   cvx_begin
   ...
   cvx_end
else
   cvx_begin
   ...
   cvx_end
end

3ºIf there is not solution STOP, if there is, go to 1º, 

I’ve tried making this, I make: 1º, 2, 3º; return to 1º,2º, 3º And here the CVX says that there is not solution, that’s the reason for trying to keep inside the if – else.

My dude is, why CVX says there is not solution, it could be because the iteration (making steps 1-2-3) before is the correct. For explain (I know my English isn’t the best, and it’s hard for me to explain and for you to read)

          One iteracion (steps 1, 2, 3)

          All well

          Save data = DATA1

          One iteracion (steps 1, 2, 3)

          All well

          Save data = DATA2

          One iteracion (steps 1, 2, 3)

          Wrong, no solution

          Correct data = DATA2

What do you think? Any idea?

Thanks a lot for all.


I don't know how to initialice Epsilon1 and Epsilon2. I'm trying different values.

Thanks a lot again.

Here is the new code:

%0)Initialization
clear all;
n=2; m=1;

A_a=3*eye(2*n,2*n)
B_a=4*eye(2*n,2*m)

%1)1
W=eye(4)
R=(zeros(2,4))

%2)2
H=W*A_a'+A_a*W-B_a*R-R'*B_a'

lamda_W=min(eig(full(W)))
lamda_H=max(eig(H))

Epsilon1=11;
Epsilon2=0.1;

if(lamda_W>=Epsilon1)
   if(lamda_H<=-Epsilon2), para=1
   else para = 0
   end
else para =0
end

%while para==0
%3)3
[v_W,D] = eig(full(W))
[v_H,D] = eig(full(H))

%4a)4a
cvx_begin
   variables p1 p2 W(4,4) R(2,4);
   minimize (p1+p2);
   subject to
      W(1,1)<=p1;
      W(2,2)<=p1;
      W(1,1)>=Epsilon1;
      W(2,2)>=Epsilon1;
      W(3,3)==W(1,1);
      W(4,4)==W(2,2);

      R(1,1)>=-p2;
      R(1,1)<=p2;
      R(2,3)==R(1,1);
      R(1,2)>=-p2;
      R(1,2)<=p2;
      R(2,4)==R(1,2);

      H=W*A_a'+A_a*W-B_a*R-R'*B_a';
      if (Epsilon1 - lamda_W) > (lamda_H + Epsilon2)
         v_W'*W*v_W - Epsilon1*eye(2*n) == semidefinite(2*n);
      else
         Epsilon2*eye(2*n) + v_H'*H*v_H == -semidefinite(2*n);
      end
cvx_end

R
W=full(W)
K=R/W
Personal tools