MathGroup Archive 2007

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

Search the Archive

ND's implementation is slow

  • To: mathgroup at smc.vnet.net
  • Subject: [mg82251] ND's implementation is slow
  • From: "Andrew Moylan" <andrew.j.moylan at gmail.com>
  • Date: Tue, 16 Oct 2007 03:28:41 -0400 (EDT)

NumericalCalculus`ND uses Richardson extrapolation to estimate the
derivative, so e.g. ND[Sin[x], x, 5] has the following equivalent one-line
implementation in Mathematica:

InterpolatingPolynomial[{#, (Sin[5. + #] - 
        Sin[5.]) / #} &  /@ (2.^-Range[0, 6]), 0]
>> 0.2836621854529269

Compare with:

Needs["NumericalCalculus`"]
ND[Sin[x], x, 5]
>> 0.2836621854529268

Interestingly, the one-line implementation in Mathematica is quite a bit
faster than ND! :

Do[
  InterpolatingPolynomial[{#, (Sin[5. + #] - 
         Sin[5.]) / #} &  /@ (2.^-Range[0, 6]), 0]
  ,
  {10000}
  ] // Timing
>> {1.392, Null}

Do[ND[Sin[x], x, 5], {10000}] // Timing
>> {7.561, Null}

Part of this is due to extra overheads for ND like processing user input and
options. Even taking this into account, however, the
InterpolatingPolynomial-based implementation above is still about twice as
fast. I've modfied my NDerivative package to use this method instead of
NumericalCalculus`ND and I've also added a drop-in replacement for ND,
called FastND.

Do[FastND[Sin[x], x, 5], {10000}] // Timing
>> {4.046, Null}

If you want to use NDerivative or FastND, you can get them from
http://andrew.j.moylan.googlepages.com/mathematica.



  • Prev by Date: Re: ProgressIndicator Questions
  • Next by Date: Help with NMinimize
  • Previous by thread: Re: ColorData etc.
  • Next by thread: Help with NMinimize