|
I have this huge loop in matlab, which of course asks a lot of
computation time. I can't find another way because i need the
differences between the steps in Q, and also in my formula, but I'm
not a genius with matlab. can anyone give me advice on how to remove
my loops?
Thanks
Adinda
The loop:
Hms=zeros(nx,ny,nz,3);
Hmsnk=zeros(nx,ny,nz);
gradHms=zeros(nx,ny,nz,3,6);
%for loop with calculation of the magnetostatic field and its
derivative
for i=1:nx
for j=1:ny
for s=1:nz
for k=1:nx
for l=1:ny
for m=1:nz
if (i~=k && j~=l && s~=m)
Q=sqrt((k-i)^2+(l-j)^2+(m-s)^2);
Hms(i,j,s,1)=Hms(i,j,s,1)+(M(k,l,m,1)/
Q^3-3*(k-i)/Q^5*(M(k,l,m,1)*(k-i)+M(k,l,m,2)*(l-j)+M(k,l,m,3)*(m-s)));
Hms(i,j,s,2)=Hms(i,j,s,2)+(M(k,l,m,2)/
Q^3-3*(l-j)/Q^5*(M(k,l,m,1)*(k-i)+M(k,l,m,2)*(l-j)+M(k,l,m,3)*(m-s)));
Hms(i,j,s,3)=Hms(i,j,s,3)+(M(k,l,m,3)/
Q^3-3*(m-s)/Q^5*(M(k,l,m,1)*(k-i)+M(k,l,m,2)*(l-j)+M(k,l,m,3)*(m-s)));
%gradient van H_ms_x naar de 6 volumes
gradHms(i,j,s,1,1)=sum(sum(sum((1/
Q^3-3*(k-
i)^2/Q^5).*difMx1(k,l,m)+(-3*(k-i)*(l-j)/Q^5).*difMy1(k,l,m)...
+(-3*(k-i)*(m-s)/
Q^5).*difMz1(k,l,m))));
gradHms(i,j,s,1,2)=gradHms(i,j,s,1,2)+(1/
Q^3-3*(k-i)^2/Q^5).*difMx2(k,l,m)+(-3*(k-i)*(l-j)/
Q^5).*difMy2(k,l,m)...
+(-3*(k-i)*(m-s)/Q^5).*difMz2(k,l,m);
gradHms(i,j,s,1,3)=gradHms(i,j,s,1,3)+(1/
Q^3-3*(k-i)^2/Q^5).*difMx3(k,l,m)+(-3*(k-i)*(l-j)/
Q^5).*difMy3(k,l,m)...
+(-3*(k-i)*(m-s)/Q^5).*difMz3(k,l,m);
gradHms(i,j,s,1,4)=gradHms(i,j,s,1,4)+(1/
Q^3-3*(k-i)^2/Q^5).*difMx4(k,l,m)+(-3*(k-i)*(l-j)/
Q^5).*difMy4(k,l,m)...
+(-3*(k-i)*(m-s)/Q^5).*difMz4(k,l,m);
gradHms(i,j,s,1,5)=gradHms(i,j,s,1,5)+(1/
Q^3-3*(k-i)^2/Q^5).*difMx5(k,l,m)+(-3*(k-i)*(l-j)/
Q^5).*difMy5(k,l,m)...
+(-3*(k-i)*(m-s)/Q^5).*difMz5(k,l,m);
gradHms(i,j,s,1,6)=gradHms(i,j,s,1,6)+(1/
Q^3-3*(k-i)^2/Q^5).*difMx6(k,l,m)+(-3*(k-i)*(l-j)/
Q^5).*difMy6(k,l,m)...
+(-3*(k-i)*(m-s)/Q^5).*difMz6(k,l,m);
%gradient van H_ms_y naar de 6 volumes
gradHms(i,j,s,2,1)=gradHms(i,j,s,2,1)+
(-3*(k-i)*(l-j)/Q^5).*difMx1(k,l,m)+(1/Q^3-3*(l-j)^2/
Q^5).*difMy1(k,l,m)...
+(-3*(l-j)*(m-s)/Q^5).*difMz1(k,l,m);
gradHms(i,j,s,2,2)=gradHms(i,j,s,2,2)+
(-3*(k-i)*(l-j)/Q^5).*difMx2(k,l,m)+(1/Q^3-3*(l-j)^2/
Q^5).*difMy2(k,l,m)...
+(-3*(l-j)*(m-s)/Q^5).*difMz2(k,l,m);
gradHms(i,j,s,2,3)=gradHms(i,j,s,2,3)+
(-3*(k-i)*(l-j)/Q^5).*difMx3(k,l,m)+(1/Q^3-3*(l-j)^2/
Q^5).*difMy3(k,l,m)...
+(-3*(l-j)*(m-s)/Q^5).*difMz3(k,l,m);
gradHms(i,j,s,2,4)=gradHms(i,j,s,2,4)+
(-3*(k-i)*(l-j)/Q^5).*difMx4(k,l,m)+(1/Q^3-3*(l-j)^2/
Q^5).*difMy4(k,l,m)...
+(-3*(l-j)*(m-s)/Q^5).*difMz4(k,l,m);
gradHms(i,j,s,2,5)=gradHms(i,j,s,2,5)+
(-3*(k-i)*(l-j)/Q^5).*difMx5(k,l,m)+(1/Q^3-3*(l-j)^2/
Q^5).*difMy5(k,l,m)...
+(-3*(l-j)*(m-s)/Q^5).*difMz5(k,l,m);
gradHms(i,j,s,2,6)=gradHms(i,j,s,2,6)+
(-3*(k-i)*(l-j)/Q^5).*difMx6(k,l,m)+(1/Q^3-3*(l-j)^2/
Q^5).*difMy6(k,l,m)...
+(-3*(l-j)*(m-s)/Q^5).*difMz6(k,l,m);
%gradient van H_ms_z naar de 6 volumes
gradHms(i,j,s,3,1)=gradHms(i,j,s,3,1)+
(-3*(k-i)*(m-s)/Q^5).*difMx1(k,l,m)+(-3*(l-j)*(m-s)/
Q^5).*difMy1(k,l,m)...
+(1/Q^3-3*(m-s)^2/Q^5).*difMz1(k,l,m);
gradHms(i,j,s,3,2)=gradHms(i,j,s,3,2)+
(-3*(k-i)*(m-s)/Q^5).*difMx2(k,l,m)+(-3*(l-j)*(m-s)/
Q^5).*difMy2(k,l,m)...
+(1/Q^3-3*(m-s)^2/Q^5).*difMz2(k,l,m);
gradHms(i,j,s,3,3)=gradHms(i,j,s,3,3)+
(-3*(k-i)*(m-s)/Q^5).*difMx3(k,l,m)+(-3*(l-j)*(m-s)/
Q^5).*difMy3(k,l,m)...
+(1/Q^3-3*(m-s)^2/Q^5).*difMz3(k,l,m);
gradHms(i,j,s,3,4)=gradHms(i,j,s,3,4)+
(-3*(k-i)*(m-s)/Q^5).*difMx4(k,l,m)+(-3*(l-j)*(m-s)/
Q^5).*difMy4(k,l,m)...
+(1/Q^3-3*(m-s)^2/Q^5).*difMz4(k,l,m);
gradHms(i,j,s,3,5)=gradHms(i,j,s,3,5)+
(-3*(k-i)*(m-s)/Q^5).*difMx5(k,l,m)+(-3*(l-j)*(m-s)/
Q^5).*difMy5(k,l,m)...
+(1/Q^3-3*(m-s)^2/Q^5).*difMz5(k,l,m);
gradHms(i,j,s,3,6)=gradHms(i,j,s,3,6)+
(-3*(k-i)*(m-s)/Q^5).*difMx6(k,l,m)+(-3*(l-j)*(m-s)/
Q^5).*difMy6(k,l,m)...
+(1/Q^3-3*(m-s)^2/Q^5).*difMz6(k,l,m);
end
end
end
end
Hmsnk(i,j,s)=norm((-1/4/pi)*Hms(i,j,s))^2;
end
end
end
gradHms=-1/4/pi*gradHms;
Hms=-1/4/pi*Hms;
|