Path: news.mathworks.com!newsfeed-00.mathworks.com!newscon02.news.prodigy.net!prodigy.net!border1.nntp.dca.giganews.com!nntp.giganews.com!postnews.google.com!o38g2000hse.googlegroups.com!not-for-mail
From:  adinda <adinda.vandenberg@gmail.com>
Newsgroups: comp.soft-sys.matlab
Subject: urgent: for loops
Date: Tue, 30 Oct 2007 06:11:32 -0700
Organization: http://groups.google.com
Lines: 139
Message-ID: <1193749892.996365.194660@o38g2000hse.googlegroups.com>
NNTP-Posting-Host: 157.193.92.127
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
X-Trace: posting.google.com 1193749893 25932 127.0.0.1 (30 Oct 2007 13:11:33 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Tue, 30 Oct 2007 13:11:33 +0000 (UTC)
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8,gzip(gfe),gzip(gfe)
Complaints-To: groups-abuse@google.com
Injection-Info: o38g2000hse.googlegroups.com; posting-host=157.193.92.127;
Bytes: 6557
Xref: news.mathworks.com comp.soft-sys.matlab:435234



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;