Vectorize a double loop

1 Ansicht (letzte 30 Tage)
AC
AC am 10 Mai 2021
Kommentiert: Walter Roberson am 13 Mai 2021
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 Kommentare
Walter Roberson
Walter Roberson am 10 Mai 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
Walter Roberson am 13 Mai 2021
If you feel that your post is unclear, then since you are the one who wrote it, you should clarify it.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Bob Thompson
Bob Thompson am 10 Mai 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;
  1 Kommentar
AC
AC am 10 Mai 2021
Thank you for your answer! I tried this, but didn't work. When using the double for loop, I get (n-2)*(n-2) combinations of ki's and kj's. But (cell-1)*n^2+(1:n-2)*n+(2:n-1) is a vector of length (n-2). I need a vector of length (n-2)*(n-2)

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Produkte


Version

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by