J'essaie de simuler la distribution de chaleur sur une plaque infinie au fil du temps. Pour ce faire, j'ai écrit un script Scilab. Maintenant, le point crucial de celui-ci, est le calcul de la température pour tous les points de la plaque, et il doit être fait pour chaque instance de temps, je veux observer:Comment effectuer une opération pour tous les éléments de la matrice dans Scilab?
for j=2:S-1
for i=2:S-1
heat(i, j) = tcoeff*10000*(plate(i-1,j) + plate(i+1,j) - 4*plate(i,j) + plate(i, j-1) + plate(i, j+1)) + plate(i,j);
end;
end
Le problème est que, si je voudrais pour le faire pour une plaque de 100x100 points, cela signifie qu'ici (c'est seulement pour la partie interne, sans conditions aux limites), je devrais boucler 98x98 = 9604 fois, à chaque tour de calcul de la chaleur à un point i,j
donné. Si je veux observer que, par exemple, 100 secondes, avec un pas de 1 s, je dois le répéter 100 fois, ce qui donne 960 400 itérations au total. Ce qui prend beaucoup de temps, et j'aimerais l'éviter. Jusqu'à 50x50 plaque, tout se passe dans un délai raisonnable, 4-5 secondes.
Maintenant, ma question est - est-il nécessaire de faire tout cela en utilisant for
boucles? Existe-t-il une fonction d'agrégat intégrée dans Scilab, qui me permettra de faire cela pour tous les éléments d'une matrice? La raison pour laquelle je n'ai pas encore trouvé de solution, c'est que le résultat de chaque point dépend des valeurs des autres points de la matrice, ce qui m'a amené à le faire avec des boucles imbriquées. Toutes les idées sur la façon de le rendre plus rapide apprécié.
Oui, c'est certainement assez rapide. Réponse géniale, merci! –