Can anyone show me how I can avoid following for loops

*Hello everyone,
Can anyone show me how I can avoid following for loops.
Thanks!*
mth=0;
nth=0;
for i=1:1000
ML = [1,2;3,4];
for ix=1:size(ML,1)
for iy=1:size(ML,2)
M(mth+ix,nth+iy)=ML(ix,iy);
end
end
mth = mth+size(ML,1);
nth = nth+size(ML,2);
end

 Accepted Answer

Here is a one approach:
M = diag(repmat([1 4],1,1000)) +...
diag([repmat([2 0],1,999) 2],1) +...
diag([repmat([3 0],1,999) 3],-1);
And another:
M = diag(repmat([1 4],1,1000));
M(2001:2001:end) = [repmat([2 0],1,999) 2];
M(2:2001:end) = [repmat([3 0],1,999) 3];

More Answers (1)

for iy=1:size(ML,2)
M(mth+ix,nth+iy)=ML(ix,iy);
end
can be written as
MLc = size(ML,2);
M(mth+ix, nth:nth+MLc-1) = ML(ix, 1:MLc);

3 Comments

Are you sure? If nth is 0 and MLc is 2, nth:nth+MLc-1 gives [0, 1] which causes indexing problems. I think it is nth+(1:MLc) on the RHS.
Yes, that would make sense on the LHS.

Sign in to comment.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!