I have a minimization objective like this:

In my code I am trying to represent it as:
cvx_begin
variable X(size(A));
idx = eye(size(A));
Y = (1-idx).*X;
minimize ( -log_det(X) + S * X + lambda * Y );
cvx_end
I am getting this error:
Your objective function is not a scalar.
A is a random matrix the same size as S.
Can you all please suggest what I am doing wrong? Thanks!
I suggest you read whatever paper or book you are getting this from more carefully and try to understand the material in it. Obviously, a non-scalar matrix objective function makes no sense, which would be apparent if you thought about it.
<S,X>
means trace(S'*X)
, which is an affine function which can be directly entered into CVX. It also happens to equal sum(sum(S.*X))
, which could be alternatively used.
S*X
is a matrix, and therefore, per the rules of MATLAB, so is the objective function. Hence the CVX error ,message.
I don’t believe Y
is correct. I believe
Y = trace((1-idx)*abs(X))
or
Y = sum(sum((1-idx).*abs(X)))
would do the trick.
Actually it’s an assignment question.
I defined X as:
variable X(size(A));
Well, it’s better for you to understand your assignments, not blindly do things which don’t make any sense. Please ask your Prof to give me an A.