X, Y et z sont des coordonnées représentant la surface. Pour calculer une quantité, appelons-la flux, au point i, j de la surface, j'ai besoin de calculer la contribution de tous les autres points (i0, j0). Pour ce faire j'ai besoin par exemple de connaître cos des angles entre le point i0, j0 et tous les autres points (alpha). Alors toutes les contours de i0, j0 doivent être multipliés sur certaines constantes et ajoutés. zv0 à chaque point i, j est le résultat final nécessaire.Matlab pour la vectorisation en boucle et la mémoire
Je suis arrivé avec un code écrit ci-dessous et il semble être extrêmement inapproprié. Tout d'abord, il ralentit le reste du programme et semble utiliser toute la mémoire disponible. Mon système a une mémoire physique de 4 Go et un fichier d'échange de 12 Go et il manque toujours de mémoire, bien que toutes les tailles de variables ne soient pas plus grandes que 10 Ko. S'il vous plaît aider à accélérer/vectorisation et des problèmes de mémoire.
parfor i0=2:1:length(x00);
for j0=2:1:length(y00);
zv=red3dfunc(X0,Y0,f,z0,i0,j0,st,ang,nx,ny,nz);
zv0=zv0+zv;
end
end
function[X,Y,z,zv]=red3dfunc(X,Y,f,z,i0,j0,st,ang,Nx,Ny,Nz)
x1=X(i0,j0);
y1=Y(i0,j0);
z1=z(i0,j0);
alpha=zeros(size(X));
betha=zeros(size(X));
r=zeros(size(X));
XXa=X-x1;
YYa=Y-y1;
ZZa=z-z1;
VEC=((XXa).^2+(YYa).^2+(ZZa).^2).^(1/2);
VEC(i0,j0)=VEC(i0-1,j0-1);
XXa=XXa./VEC;
YYa=YYa./VEC;
ZZa=ZZa./VEC;
alpha=-(Nx(i0,j0).*XXa+Ny(i0,j0).*YYa+Nz(i0,j0).*ZZa);
betha=Nx.*XXa+Ny.*YYa+Nz.*ZZb;
r=VEC;
zv=(1/pi)*st^2*ang.*f.*(alpha).*betha./r.^2;
Quelle est la taille de 'x00' et' y00'? – HerrKaputt
tel que X0 = meshgrid (x00, y00). Si vous avez besoin de chiffres, ils sont au moins 50 – user1364012