Constraints in my SDP: \$(X^TWX)_{ii} <= c\$

Hey guys!

When solving my SDP, there are some problems encountered. So I come here for some solutions.

1. Suppose my variable is X. One of my constraints goes like (X’WX)_{i,i} <= c, the i-th diagonal of the matrix X’WX with W given. But since X is to be determined, how can I write such constraints in CVX?

2. Following the first question, I have k such constraints, that is, (X’WX)_{i,i} <= c, for i = 1,…,k. Should I go with a for-loop or writing each and every one of them inside CVX?

Thanks much!

Can we assume W is positive definite? Otherwise I doubt this is convex.

@mcg Yes, W is PD. More precisely, at very first iteration, W is PSD, then from 2nd iteration on, it becomes PD, assuming we can find such X.

What you need to do here is compute a square root W^{1/2} of W, then compute Y=W^{1/2}X. Once you do that, then you have
\$\$(X^TWX){ii} = (Y^TY){ii} = |Y_{:i}|2^2 = |W^{1/2} X{:i}|_2^2 \$\$
where X_{:i} denotes the \$i\$th column of X. So if `Wsqrt` is the variable that holds W^{1/2}, each of these quantities is just `sum_square( Wsqrt * X(:,i) )`.

And while you can indeed use a for loop, note that you can get all n elements of this with the command `sum_square( Wsqrt * X )`. This is a row vector, so if `c` is a column vector, you’ll need a transpose; i.e.

``sum_square( Wsqrt * X ) <= c'``