# Vectorize a double loop

2 views (last 30 days)

Show older comments

Hi everyone

I'm tryng to vectorize the folowing piece of code:

n=30;

d=3;

a=1;

b=2;

cell=3;

for ki = 2:n-1

for kj = 2:n-1

M((cell-1)*n^2+(ki-1)*n+kj,(cell-1)*n^2+(ki-1)*n+kj-1) = 1/d^2;

M((cell-1)*n^2+(ki-1)*n+kj,(cell-1)*n^2+(ki-1)*n+kj) = -4/d^2-a;

M((cell-1)*n^2+(ki-1)*n+kj,(cell-1)*n^2+(ki-1)*n+kj+1) = 1/d^2;

M((cell-1)*n^2+(ki-1)*n+kj,(cell-1)*n^2+(ki-1)*n+kj-n) = 1/d^2;

M((cell-1)*n^2+(ki-1)*n+kj,(cell-1)*n^2+(ki-1)*n+kj+n) = 1/d^2;

C((cell-1)*n^2+(ki-1)*n+kj,1) = b;

end

end

How can I do it? I will appreciate any help! Thanks!

##### 3 Comments

Walter Roberson
on 10 May 2021

(cell-1)*n^2+(ki-1)*n+kj

You are faking 4 dimensional indexing. You should switch to actual 4D indexing. reshape() before and after if you need to.

Walter Roberson
on 13 May 2021

### Answers (1)

Bob Thompson
on 10 May 2021

Does this work? I haven't been able to test it.

M((cell-1)*n^2+(1:n-2)*n+(2:n-1),(cell-1)*n^2+(1:n-2)*n+(2:n-1)-1) = 1/d^2;

M((cell-1)*n^2+(1:n-2)*n+(2:n-1),(cell-1)*n^2+(1:n-2)*n+(2:n-1)) = -4/d^2-a;

M((cell-1)*n^2+(1:n-2)*n+(2:n-1),(cell-1)*n^2+(1:n-2)*n+(2:n-1)+1) = 1/d^2;

M((cell-1)*n^2+(1:n-2)*n+(2:n-1),(cell-1)*n^2+(1:n-2)*n+(2:n-1)-n) = 1/d^2;

M((cell-1)*n^2+(1:n-2)*n+(2:n-1)j,(cell-1)*n^2+(1:n-2)*n+(2:n-1)+n) = 1/d^2;

C((cell-1)*n^2+(1:n-2)*n+(2:n-1),1) = b;

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!