# Symmetric positive semidefinite constraint in cvx

(Dave) #1

I am considering the following convex optimization problem:

Let y be a column vector of dimension N and H be a matrix of dimension N x M. I want to find A such that ||y - H vec(A) || is minimized where vec(A) is the vectorized form of A. I am constraining A to be a symmetric positive semidefinite matrix.

I was able to solve it using cvx following the code here. However, the solution I get is non-unique. (I happen to know my true solution).

Every row of H is the vectorized version of the matrix z’*z where z is a column vector. Because of this symmetry in H, H is not full rank as some columns are identical. But If I rewrite the optimization problem such that instead of vec(A), I only consider the terms in A which are in the upper diagonal, then the resulting H can be made full rank. I can then obtain a unique solution.

How can I formulate this in cvx?

(Mark L. Stone) #2

Not sure I understand your question. You can use `triu(A)` and `vec(triu(A))` in CVX It really comes down to what optimization problem you are trying to solve. Whatever you do, it needs to be conformal, i.e., with compatible dimensions.

(Dave) #3

Hi Mark,

Nice suggestion – I didn’t know that. I’ll try vec(triu(A)) and see if it makes a difference!

(Mark L. Stone) #4

Note that `triu(A)` and `vec(triu(A))` will have zeros in what was the lower triangle of `A`, so you’ll have to deal with that. If you figure out what calculation to do with `A`, presuming `A` is a MATLAB variable, then you should be able to do the same thing with `A` being a CVX variable.

(Dave) #5

Hi Mark, Yes I agree. I found a way to extract the non-zero elements from a lower/upper triangular matrix. Surprisingly, cvx gives the same answer whether or not I exploit this simplification. Thanks for the help, though!