Re: speed

*To*: mathgroup at smc.vnet.net*Subject*: [mg15729] Re: speed*From*: "Atul Sharma" <mdsa at musica.mcgill.ca>*Date*: Fri, 5 Feb 1999 03:42:24 -0500 (EST)*Organization*: McGill University Computing Centre*References*: <77utg2$jnk@smc.vnet.net> <78pbv2$d0t@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

This is a good example of why it is necessary to pay attention to the choice of most efficient approach to solving a given problem (as it turns out, your example is is virtually identical to one contained in the Mathematica book, under Compile, which may be more clear than my note below). A procedural approach is usually not the most efficient strategy for Mathematica: In[66]:=x=0.3;Print[x]; Do[x=x*1.003456,{i,1,100000}]//Timing Print[x] 0.3 Out[66]= {1.48 Second, 2.044235^149) Using the built in Nest function is slightly more efficient, as is usually the case In[68]:= Nest[#*1.003456&,0.3,100000]//Timing Out[68]= (1.039 Second, 2.044235^149}) However, since it is a relatively straightforward algebraic expression, it stands to benefit significantly from being compiled. In[69]=. fc=Compile[{{x,_Real},{n,_Integer}},Module[{t},t=x;Do[t=1.003456*t,{n}];t]]; In[70]:= Timing[fc[0.3,100000]] Out[70]= {0.11 Second, 2.044235^149}) While this is significantly faster, it is restrictive, in that you have had to specify the input parameters types. In this example, by limiting n (iterates) to integer values, the range of applicability is restricted to +- 2^31. If you exceed this, the function defaults to regular Mathematica implementation and returns the answer more slowly. By using Compile [ ], you also lose arbitrary precision calculations, limiting yourself to machine precision. I hope this helps. A. Sharma -------------------------------------------------------------------------- Experience is a hard teacher because she gives the test first, the lesson afterward. Atul Sharma MD, FRCP(C) Pediatric Nephrologist, McGill University/Montreal Children's Hospital 2300 Tupper, Montreal, QC, Canada H3H 1P3 email: mdsa at musica.mcgill.ca Margit wrote in message <78pbv2$d0t at smc.vnet.net>... >Hi! > >I have a question concerning the numerical speed of Mathematica: > >I performed the following calculation > >x=0.3;Print[x]; Do[x=x*1.003456,{i,1,1000000}];Print[x] > >with Mathematica, it took about 150 seconds. > >The same calculation is performed by TurboPascal in 0.4 seconds. > >I guess that the difference is caused by the working precision. Does >anyone know what is the reason for this long duration and how it can be >changed? > >Thanks! > >Margit > > Margit wrote in message <78pbv2$d0t at smc.vnet.net>... >Hi! > >I have a question concerning the numerical speed of Mathematica: > >I performed the following calculation > >x=0.3;Print[x]; Do[x=x*1.003456,{i,1,1000000}];Print[x] > >with Mathematica, it took about 150 seconds. > >The same calculation is performed by TurboPascal in 0.4 seconds. > >I guess that the difference is caused by the working precision. Does >anyone know what is the reason for this long duration and how it can be >changed? > >Thanks! > >Margit > >