I am a beginner of cvx and trying a SOCP problem using complex_lorentz set, during which I got the following message. When I try a basic SOCP problem with a similar structure, there is no message and cvx gives the solution. Any guess do you have on what is hidden behind the following message ?
" ??? Subscript indices must either be real positive integers or logicals.
Error in ==> cvx_extract at 344
tmpv = sum(dbcA(temp,:)~=0,2)==1;
Error in ==> cvx_solve at 26
[ At, cones, sgn, Q, P, exps, dualized ] = cvx_extract( shim.config, shim.name );
Error in ==> cvx_finish at 57
[ status, result, bound, iters, tol ] = cvx_solve;
Error in ==> cvx_end at 11
evalin( ‘caller’, ‘cvx_finish’ );
Error in ==> test at 165
cvx_end "
This looks like a bug; you should submit a bug report to the issue tracker and make sure to include the full version information (the output of cvx_version, basically) and enough of your model to reproduce the problem.
I tried norm( ) and cvx said I am violating DCP rule since both sides of an inequality are convex functions. When I use complex_lorentz set, I could avoid such violation but met another message as posted above. Below is the cvx code I used to test using the complex_lorentz set and it worked fine. The code which generates above mentioned message uses affine mapping for the expression holders t and tt from the defined variables.
cvx_begin
variable x(m) complex;
variable y complex;
expression t(m);
expression tt(1);
minimize(norm(A*x-b));
subject to
tt =y;
for k=1:m
t(k,1) = x(k);
end
imag(y) == 0;
{ t, tt } == complex_lorentz(m);
cvx_end
Nonlinear equality constraints are not allowed, so CVX was right to reject it. It is curious that you would declare y to be complex and then constrain its imaginary part to be real; why not declare it to be real? In fact the entire constraint have constructed looks like it will do nothing. It is equivalent to norm(x)<=real(y). But y is unconstrained.
What was your original problem, the one that CVX rejected? Perhaps what you are really trying to achieve is nonconvex; if so all of this effort is moot.
The problem I am working on is beamforming in wireless communications, which tries to minimize the transmit power while keeping the signal to interferece power ratios at a set of levels. So, the entries of vector t and scalar tt are signal componets having complex values. To keep tt real in the complex_lorenz set, we phase rotate y so that the imaginary part of y is zero.
That does not answer my question about the original model. Many wireless models are nonconvex. I cannot help further I am afraid. There may be a bug with complex_lorentz but there is absolutely no situation where it will work but norm cannot. Go back to norm and diagnose the real problem with your model.