Vectorize a double loop
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Walter Roberson
le 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
le 13 Mai 2021
If you feel that your post is unclear, then since you are the one who wrote it, you should clarify it.
Réponses (1)
Bob Thompson
le 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;
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!