Why CVX behave like this?

Uncategorized
Apr 22, 2015
H

I have a simple script like this

    cvx_begin
        variable   beta(n,1)
        variable   eta(n,1)
        variable   Y(n,1)
        variable   t
                   
        minimize (t)
        subject to 
            eta    >=0
           beta   >=0
           [R_t,-beta+eta;(-beta+eta)',(c *t*-d) ]>=0
    cvx_end  

It gets an error in matlab, " undefined variable of type ‘char’ ’ about variable eta. After I removed the extra blank characters after eta and beta, like this eta>=0, beta>=0 , matlab no longer gets an error.
Am I doing something incorrectly or it is a defined behaviour of cvx?

M

This is very interesting. I am not exactly sure, but it might have something to do with the fact that beta is a function in MATLAB, so some sort of name conflict. That doesn’t explain eta, but perhaps you have a function called eta somewhere?

Anyway, try this: before cvx_begin, add these lines:

beta = 0;
eta = 0;

Now try your model again, with the spaces intact. Does it work then? This forces MATLAB to deduce that eta and beta are variables.

H
Replying to #2

Sorry for the late reply. Actually, my variables are beta_t and eta_t. I made it simple for the purpose of the question.

M

Well, “keeping it simple” is a problem if it doesn’t help us identify the issue. For instance: which line in particular is causing the error? Perhaps the full error message text should be posted. What version of MATLAB are you running?

H

Yes. you are right. Lines eta >=0 and beta >=0 makes the error. Matlab version is R2014a.

M
Replying to #5

Two things to try:

  • before cvx_begin, add the line eta = 0; beta = 0;
  • Outting spaces after the >= in each inequality; i.e., eta >= 0, beta >= 0.

CVX does weird things to make its models look natural, and sometimes it seems to confuse MATLAB’s parser. These are just tips to help it make the right choices.