%It seems that there is a dimensional mismatch caused by type conversion, and if the keyword %"complex" is deleted, no error is reported, but this keyword can't be deleted. %cvx 2.1 %How to solve it? N = 10; Kr = 3; Q = zeros(N,N,N); for j = 1:N Q(j,j,j) = 1; end cvx_begin cvx_quiet(true); variable W1(N-2,N-2,Kr) complex; variable W2(2,2,Kr) complex; expression W(N,N,Kr) for i = 1:Kr if i==1 W(:,:,i) = blkdiag(zeros(N-2),W2(:,:,i)); else W(:,:,i) = blkdiag(W1(:,:,i),zeros(2)); %error:Assignment dimensions with subscripts do not math % cvx/subsasgn (line 79) bx( :, ndx_x ) = by; end end minimize real(trace(sum(W,3))) subject to for l = 1:N real(trace(Q(:,:,l)*sum(W,3))) <= 20; end cvx_end
This seems to be the same bug with blkdiag as occurred in Where is the mistake of this Convex optimization problem? .
My workaround there, as here, is to form the required expression by concatenation rather than using blkdiag .
else W(:,:,i) = [W1(:,:,i) zeros(N-2,2);zeros(2,N-2) zeros(2)];
Note: of course, the last block row can be combined into
zeros(2,N), but I wrote it as I did for readability.
This executed without error for me, although unbounded without adding what are presumably your additional unprovided constraints.
Yes,Thank you, you are right. thank you very much.