clear;clc;
a=randn(3,1)+1i*randn(3,1);
A=a*a';
cvx_begin sdp
variable phi(3,1) complex
expression B(3,3)
B=phi*phi';
minimize trace(A*B)
subject to
[phi*phi',phi;phi',1 ]==hermitian_semidefinite(4);
cvx_end
For the above problem, I found that the outer product (x*x’) is not allowed in CVX. The error is shown as
Disciplined convex programming error: Invalid quadratic form(s): not a square.
What’s the meaning of this error and how can I express outer product in object and constraints?
Using the cyclic permutation invariance of trace, the objective can be rewritten as square_pos(norm(a'*phi)
), which can be replaced by norm(a'*phi)
because it has the same argmin.
Your semidefintie constraint, as written, is a Bilinear Matrix Inequality (BMI) constraint, which is non-convex and not allowed by CVX.
See my answer to your previous question ERROR:Disciplined convex programming error: Only scalar quadratic forms can be specified in CVX . Did you not learn from that answer?
The link below was also provided in my answer to your previous question. Perhaps you did not read it carefully enough?