Talk:Beginning with CVX

From Wikimization

(Difference between revisions)
Jump to: navigation, search
Line 6: Line 6:
Thanks a lot for all the ideas, they all are greats.
Thanks a lot for all the ideas, they all are greats.
-
Kwokwah That was my first idea (could be great if it works), but isn't possible to do one "if" inside the "cvx_begin - cvx_end" Because it isn't a convex problem.
 
- 
-
Michael Grant explains to me (I'm going to copy it's explanation):
 
- 
-
"Do make sure you understand that if-then statements are typically not
 
-
possible in CVX. In general such constraints will not be convex, and
 
-
CVX does not handle nonconvex problems. CVX requires not only that
 
-
problems be convex, but they must be constructed according to the very
 
-
specific rules outlined in the user guide. If those rules are not
 
-
satisfied then CVX rejects the model."
 
- 
-
I think I'm wrong with this code, I would like to put the "if" with the another constraits, inside the cxv_begin, but the CVX don't let me doing it. Some ideas?
 
I think I’m making thinks wrong. I have a dude.
I think I’m making thinks wrong. I have a dude.
The new code could be:
The new code could be:
-
<pre>
 
-
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º,
 
-
</pre>
 
-
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)
 
-
<pre>
 
-
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
 
-
</pre>
 
-
What do you think? Any idea?
 
- 
-
Thanks a lot for all, again.
 
- 
-
-----------------------------------------------------------------------
 
- 
-
I don't know how to initialice Epsilon1 and Epsilon2. I'm trying different values.
 
- 
-
Thanks a lot again.
 
- 
-
Here is the new code:
 
- 
<pre>
<pre>
%0)Initialization
%0)Initialization
clear all;
clear all;
 +
 +
cvx_setup
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 93: Line 30:
lamda_H=max(eig(H))
lamda_H=max(eig(H))
-
Epsilon1=11;
+
DOK.W=W;
-
Epsilon2=0.1;
+
DOK.R=R
 +
DOK.lW=lamda_W;
 +
DOK.lH=lamda_H;
 +
 
 +
Epsilon1=1e-6;
 +
Epsilon2=1e-6;
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 ) )
 +
 +
%4a)4a
 +
if ( Epsilon1 - lamda_W )>(lamda_H+Epsilon2)
 +
Caso=1 %For know where am I
-
%4a)4a
+
DOK.W=W;
-
cvx_begin
+
DOK.R=R
-
variables p1 p2 W(4,4) R(2,4);
+
DOK.lW=lamda_W;
-
minimize (p1+p2);
+
DOK.lH=lamda_H;
-
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;
+
cvx_begin
-
R(1,1)<=p2;
+
variables p1 p2 W(4,4) R(2,4)
-
R(2,3)==R(1,1);
+
-
R(1,2)>=-p2;
+
minimize (p1+p2)
-
R(1,2)<=p2;
+
-
R(2,4)==R(1,2);
+
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'
 +
 +
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
 +
DOK.W=W;
 +
DOK.R=R
 +
DOK.lW=lamda_W;
 +
DOK.lH=lamda_H;
 +
 +
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
 +
 +
lamda_W = min ( eig ( full ( W ) ) )
 +
lamda_H = max ( eig ( full ( H ) ) )
 +
 +
end
R
R
W=full(W)
W=full(W)
-
K=R/W
+
K=R/W</pre>
-
</pre>
+

Revision as of 07:51, 9 February 2009

lamda_W=eig(full(W))

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


I think I’m making thinks wrong. I have a dude.

The new code could be:

%0)Initialization
clear all;

cvx_setup
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))

DOK.W=W;
DOK.R=R
DOK.lW=lamda_W;
DOK.lH=lamda_H;

Epsilon1=1e-6;
Epsilon2=1e-6;

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
if ( Epsilon1 - lamda_W )>(lamda_H+Epsilon2)
    Caso=1 %For know where am I

    DOK.W=W;
    DOK.R=R
    DOK.lW=lamda_W;
    DOK.lH=lamda_H;

    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'
        
        v_W'*W*v_W - Epsilon1*eye(2*n) == semidefinite(2*n);

cvx_end

else %4b)4b

    Caso = 2
    DOK.W=W;
    DOK.R=R
    DOK.lW=lamda_W;
    DOK.lH=lamda_H;

    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

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

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