# Talk:Beginning with CVX

(Difference between revisions)
 Revision as of 03:12, 6 February 2009 (edit)← Previous diff Revision as of 07:51, 9 February 2009 (edit) (undo)Next diff → 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: -
-                                                            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, 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: -

%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
-
+

## 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```