How to express trace(P* A * H * Hh * Ah ) in CVX

I want to express trace(Ah * H * K * Hh * A) where:

A = 3X1 complex variable
H = 3X3 complex matrix, diagonal
Hh, Ah = hermitian of H and A respectively
K = 3X3 real valued matrix

I used this code:

   variables A(3)
   power1 = tr(A' * H * K * H' * A);

But it gives me an error:

Disciplined convex programming error:
   Invalid quadratic form: must be a scalar.

I checked another question here:
Invalid quadratic form: must be a scalar (trace minimization)

which suggested using cholsky decomposition to express similar problem:

 trace(LM'*A*LM)  =  trace(LM'*R'*R*LM)    %if A is a positive definite, 

which Then can be expressed in CVX by:


I used the same technique by assuming:

    variables A(3)
    [R,p] = chol(K) 
    % power1 = tr(A' * H * R' * R * H' * A) = tr (A' *H*K*H' * A )
    power1   = sum_square(A'*H*R')

But i got the following error as sum_square work only on real arguments:

Error using cvx/sum_square (line 7)
Disciplined convex programming error:
The argument to SUM_SQUARE must be real and affine.

Error in testing_cholsky_for_trace (line 19)
    power1   = sum_square(A'*H*R')

I want to know if their are other alternative to express this formula for complex entries to get the trace of the given problem?

Use sum_square_abs for complex values. But whenever possible, as described here in the CVX documentation, avoid quadratic forms altogether.

1 Like