I have K matrices where all of them are M*M and symmetric semidefinite. How I can define these matrices as cvx variables using a loop?

For K=3, I use this:

variable w1( M ,M) symmetric semidefinite

variable w2( M ,M) symmetric semidefinite

variable w3( M ,M) symmetric semidefinite

But I would love to do this in a loop like:

for k=1:K

W{k} == variable(M ,M) symmetric semidefinite;

end

However, Tthis is not valid in Matlab!

Could anybody help me please? Thanks!

The problem is every time I change the value of K in my matlab code, I need to change w1âŚwK! Many thanks in advance!

`variable W(M,M,K) semidefinite`

W(:,:,i) will be semidefinite for each i from 1 to k. No for loop required. See How to change the number of variables based on the iteration number? .

1 Like

Thanks a million Mark! Could you please kindly let me know if I could use:

```
w_obj = 0;
for k=1:K
w_obj = trace( W(:,:,k));
end
minimize (w_obj)
```

For example, for K=4, what I want to minimize is:

minimize (trace( W( : ,:,1))+trace( W( : ,:,2))+trace( W( : ,:,3))+trace( W( : ,:,4)))

Thanks a lot in advance for your very kind help!

Best regards

You need to change the middle line to:

`w_obj = w_obj + trace( W(:,:,k));`

Your code (without my change) would be minimizing `trace( W(:,:,K))`

1 Like

My bad, and sorry for the mistake! Thanks a lot for the nice help with this

Regards