This is documentation for Mathematica 8, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.1)

ND


gives a numerical approximation to the derivative of expr with respect to x at the point .

gives a numerical approximation to the ^(th) derivative of expr.
  • The expression expr must be numeric when its argument x is numeric.
  • is equivalent to .
  • is unable to recognize small numbers that should in fact be zero. Chop may be needed to eliminate these spurious residuals.
  • The following options can be given:
MethodEulerSummethod to use
Scale1size at which variations are expected
Terms7number of terms to be used
WorkingPrecisionMachinePrecisionprecision to use in internal computations
  • Possible settings for Method include:
EulerSumuse Richardson's extrapolation to the limit
NIntegrateuse Cauchy's integral formula
  • With Method, needs to evaluate expr at .
  • If expr is not analytic in the neighborhood of , then the default method must be used.
  • The option Scale->s is used to capture the scale of variation when using Method.
  • When the value of the derivative depends on the direction, the default is to the right. Other directions can be chosen with the option Scale->s, where the direction is s.
  • The option Terms->n gives the number of terms to use for extrapolation when using Method.
  • With Method->NIntegrate, the expression expr must be analytic in a neighborhood of the point .
Needs["NumericalCalculus`"]
In[2]:=
Click for copyable input
Out[2]=
In[3]:=
Click for copyable input
Out[3]=
The expression and evaluation point may be complex:
is threaded element-wise:
Use the default Method when expr is not analytic in the neighborhood of :
Check:
An incorrect answer is obtained with Method->NIntegrate:
Here is a derivative where the default method works poorly:
The correct answer is:
In this case the expression is analytic, so Method->NIntegrate will work well:
Use Scale->s to capture the region of variation:
The scale of variation is around :
A value of Scale->s which is too large can be compensated by increasing the number of terms:
Use Scale to specify directional derivatives. The left and right derivatives of the nonanalytic function :
Check:
Complex directions may also be specified:
Check:
Use the option Scale to avoid regions of non-analyticity when the method used is NIntegrate:
Shrinking the radius avoids the essential singularity at x=1:
Check:
Increasing the number of terms may improve accuracy. Here is a somewhat inaccurate approximation:
Check:
Increasing the number of terms produces a more accurate answer:
Increasing the number of terms further can produce nonsense due to numerical instability:
Combining an increase in the number of terms with a higher working precision often will reduce the error:
High-order derivatives with Method experience significant subtractive cancellation:
Using a higher working precision and additional terms produces an accurate answer:
For this problem, Method->NIntegrate with default options produces a correct answer:
Higher-order derivatives will again experience numerical instability:
Increasing WorkingPrecision will improve the accuracy:
An alternative is to increase the radius of the contour of integration:
is useful for differentiating functions which are only defined numerically. Here is such a function:
Here is the derivative of with respect to b evaluated at :
can be used as an aid in developing and testing a more robust function for finding the derivative:
Check:
The option Method->NIntegrate uses Cauchy's integral formula to compute derivatives:
The equivalent computation can be performed using NResidue:
Mathematica has built-in code to compute derivatives of numerical functions:
The built-in numerical derivative code can be used. However, it is unable to capture the rapid oscillations:
The correct answer:
Using with the appropriate options can compute an accurate derivative:
With Method, must be able to evaluate expr at the point :
Adding an additional definition for f allows to compute the derivative:
Check:
In this case, Method->NIntegrate produces a more accurate answer:
Some fractional and complex derivatives can be computed: