The inv() in CVX

I ran into a problem where the constraint needed to invert the matrix as an optimization variable, but the error “error using inv” was reported:
Invalid data type. The input matrix must be a double or single precision value.
The specific formula is" ar’*inv(F)ar>=taorad/beita02inv(ar’Qar);"
Where ar is a complex vector, and the matrices F and Q are obtained by a simple linear transformation of the optimal variable matrix V, both of which are positive semidefinite Hermitian matrices.
The constraint should be convex, and both sides of the inequality should be real numbers.
How do I represent inv() in CVX?

inv is not supported by CVX, as you would know by reading the CVX User’s Guide However, there is some inverse functionality provided by inv_pos, matrix_frac, prod_inv, det_inv, and trace_inv.

ar’*inv(Q)*ar can be entered as matrix_frac(ar,Q)

Presuming taorad/beita02 >= 0, the RHS of the constraint is convex.

ar’*inv(F)*ar can be entered as matrix_frac(ar,F). However, it is convex, and therefore can’t be used on the LHS of >= constraint.

So the constraint is non-convex, and therefore can’t be entered in CVX. Perhaps SCA or something can be used to iteratively solve a series of convex optimization problems using CVX, but there should be no expectation that it would necessarily converge to anything, let alone a global or even local optimum of the original problem.

1 Like

Thanks, Sir. Really helps me a lot.You are right and I’ll use SCA deal with it.