MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Timing For loops!


Thank for your answer. anh sorry for the code, i made an error when i
posted the message.


I give here the code and my problem.


pmax=22 ;
nbdenormek=30 ;
nbdetheta=70 ;
pastheta=Pi/36 ;
pasnormedek=0.05/30 ;

(* band[m], vecta[m] are function that defined above*)
HBFpot[m_,l_] :=Module[{bm=band[m],bl=band[l],vl=vectq[l],vm=vectq[m]},
If[bm==bl,Vtot[[bm,2pmax+1+(vm-vl)]],0]+coefHBF*Sum[Exp[I*(-vm+vl)*sopi*poscouche[[co+1]]]*couplageHbf[[co]],{co,1,nbcouches-1}]*
*couplageHBFsousmat[[bm,bl]]]] ;




For[indicenormedek=1,indicenormedek<=nbdenormek,indicenormedek++,
For[indicetheta=1,indicetheta<=nbdetheta,indicetheta++,

		normedek=normedekmin+(indicenormedek-1)*pasnormedek;
		theta=thetainit+(indicetheta-1)*pastheta;



Print[¡§ Using For loops to store the result of calculation, where
TFHbulktotal[kx_,ky_,ky_q_] is a function that is defined above. Here I
want to store the calculation of TFHbulktotal in Hkptotal[p,q] because
I¡¦ll use Hkptotal[p,q] in the next iteration  ¡§];


For[p=-pmax,p?Tpmax,p++,
    For[q=-pmax,q?Tpmax,q++,
      Hkptotal[p,q]=TFHbulktotal[kmoins[normedek*Cos[theta],normedek*Sin[theta]],kplus[normedek*Cos[theta],normedek*Sin[theta]],p*sopi,(-p+q)*sopi]
      ]];

Hkphetero[m_,l_]:=Hkptotal[vectq[m],vectq[l]][[band[m],band[l]]];

Hmatkp=Table[Hkphetero[m,l],{m,1,indmax},{l,1,indmax}];

Hmat=Hmatkp+HBFpotmat; (* here HBFpotmat is calculated easily above*)
sol =Eigensystem[Hmat];
Blochmat=sol[[2]];
Energy=Re[sol[[1]]];


listcond=Sort[Transpose[Select[Transpose[{Range[Length[Energy]],Energy}],(#[[2]]>BCmin)&]][[1]],Greater];
listval=Sort[Transpose[Select[Transpose[{Range[Length[Energy]],Energy}],(#[[2]]<BVmax)&]][[1]],Greater];


enecond[[indicenormedek,indicetheta,All]]=Sort[Select[Energy,(#>BCmin)&]];
eneval[[indicenormedek,indicetheta,All]]=Sort[Select[Energy,(#<BVmax)&],Greater];
	]
    	];






> and thus spake NGUYEN Quang Tuong [2005.09.03 @ 01:31]:
>> Hi,
>>
>> I wrote a program in which i used the loop for to store the evaluation
>> of an expression ( in order to reduce the time of calculation ). But my
>> program is until slow. I would like to kwow if we can have another to
>> reduce the time of calculation.
>
> In general, For[], Do[], and While[] loops are slower than their
> functional equivalents in Mathematica.  You can probably do what you
> want using Map[] and Table[].  Unfortunately the code you gave below
> is incomplete and makes no sense, so it's hard to say for sure.  Try
> posting some more specific example code.  Thanks!
>
>>Here in the loop for that i used.
>>
>> pmax=10;
>>
>>
>> Here TFHbulktotal is a function that is  defined previously. And I'll
>> use Hkptotal[p,q] for the next calculation..
>>
>>
>> nbdenormek=30;
>> nbdetheta=70;
>> normedekmin=0;
>>
>>
>>
>>
>> What I must do to replace the two loop For above to reduce the time of
>> calculation ??
>>
>> Thanks a lot!
>>
>
> --
> /*------------------------------*\
> |        stephen layland         |
> |    Documentation Programmer    |
> | http://members.wri.com/layland |
> \*------------------------------*/
>


-- 
NGUYEN QUANG Tuong
PhD student
Laboratory for Photonics and Nanostructures
LPN,UPR20, CNRS. Route de Nozay, 91460 Marcoussis, France.
Tel : (33)+1 69 63 60 43
Fax : (33)+1 69 63 60 06

Home : Ch 68, Maison du Japon
Cite Internationale, 7 Boulevard Jordan.
75014 Paris, France
Tel : (33)+1 44 16 12 28


  • Prev by Date: Re: Would a code generator from dynamic systems be feasible and useful?
  • Next by Date: Re: PC Requirements for Mathematica
  • Previous by thread: Re: Timing loop For !!
  • Next by thread: Re: Timing loop For !!