I wanted to use the Matlab function angle
(the complex argument) in CVX. Since this is not implemented for CVX objects, I added the following file angle.m
in the directory @cvx
:
function y = angle( x )
y = cvx( x.size_, angle( x.basis_ ) );
end
Now, say I want to optimize over vectors such that all angles are constrained to be equal. Given a fixed vector v
, I do the following:
cvx_begin quiet
variable z(n) complex
variable q
angle(z) == q*ones(n,1)
norm(z)<=1
maximize real(z'*v)
cvx_end
However, the optimal solution has the imaginary parts equal, and not angles. For instance, here is an example optimal z
:
z =
0.1718 - 0.0863i
0.5861 - 0.0863i
-0.7219 - 0.0863i
0.2756 - 0.0863i
Is there something I’m not understanding here?