# CVX Matlab code For Lagrangian Duality Optimization Problem

Hello, I have been working on an optimization problem which is related to Langrangian Duality methodand for its first step i need to adopt the optimization problem in CVX. I typed the code but the result seems to be pretty odd. I actually need the vector of lamda i’s as my output which i can replace in my problem. BUt i seem to be getting a final value only.

My CVX Matlab Code:

m = 32;
n= 50;
h= (randn(n,1)+1j*randn(n,1))*sqrt(0.5);
Q=h’*h;

cvx_begin
variable lamda(n,1) nonnegative
maximize(sum(lamda))
subject to
for j=1:n
eye(n)-sum(lamda*Q) >=0
end
cvx_end

`>= 0` specifies semidefinite constraint only when in sdp mode, which your program is not in. Therefore, you have been specifying element-wise nonnegativity.

So either use
`cvx_begin sdp`
or
`== semidefinite(n)`

If the problem is solved to optimality, `lamda` will be an n by 1 vector of the argmax.

Hi,
Actually I am looking for lamda to be a vector as an output not a single value. How can I get the lambda as a vector instead ?

CVX reports the optimal objective value as `cvx_optval`, and the optimal argument value as `lamda, `which is a vector because the declared variable `lamda` is a vector. if you want something else, I don’t understand what that is.

Hi,
I want to mazimize the sum of lamda_i’s for all Q_i matrix. Q_1 is a matrix, Q_2 is a matrix and so on. In my code i have not been able to get Q_i. I only have one Q , when i print the result. I want to implement the optimization problem above whose picture I have attached earlier and the latest code is attached here.

Why did you use an unnecessary for-loop? If there’s only one Q, then there must be only one lamda, according to your first picture. But you wrote lamda(1,n) instead of lamda.

Your difficulty is with MATLAB, not CVX.

``````Q = NaN(n,n,n);
for k = 1:n
Q(:,:,k) = <fill this in>
end
``````

Then the CVX code:

``````Sum_lamdaQ = 0;
for k=1:n
Sum_lamdqaQ = Sum_lamndaQ + lamda(k)*Q(:,:,k);
end
eye(n) - Sum_lamdaQ >= 0``````