For a one-variable numerical function, it's simple to calculate the derivative at a point with Derivative as Szabolcs has pointed out before:
f[x_?NumericQ] := x^2 f'[3.] (* 6. *) But this fails for partial derivatives:
g[x_?NumericQ, y_?NumericQ, z_?NumericQ] = x y z + x^2 y^2 z Derivative[1, 0, 0][g][1., 1., 1.] (* 3. *) Derivative[1, 1, 1][g][2., 3., 4.] (* Unevaluated: Derivative[1, 1, 1][g][2., 3., 4.] *) ND seems to only handle the one-dimensional case.
Using SeriesCoefficient simply returns the (scaled) Derivative expression:
SeriesCoefficient[g[x, y, z], {x, 2., 1}, {y, 3., 1}, {z, 4., 1}] (* Derivative[1, 1, 1][g][2., 3., 4.] *) I'd prefer not to clutter my code with finite difference formulas, since this functionality must be in Mathematica somewhere; where is it?
EDIT: The closest I've found so far is NDSolve`FiniteDifferenceDerivative, but that works on grids and it's a hassle to use for other purposes. Anyone know of a convenient C/Java library that links well with Mathematica and handles all kinds of numerical differentiation?
EDIT2: Does Derivative have accuracy control? (step size or anything)
Clear @ f f[x_?NumericQ] = Exp[x]; Array[Abs[Derivative[#1][f][1.] - E] &, {8}] $$\left( \begin{array}{c|c|c} \text{n} & \text{seconds} & \text{error} \\ \hline 5 & 0.123 & 6.77\times 10^{-7} \\ 6 & 0.297 & 0.0000484 \\ 7 & 0.592 & 0.0127 \\ 8 & 1.05 & 1.11 \\ \end{array} \right)$$
NDis freely visible (it's inAddOns/Packages/NumericalCalculus/NLimit.m). $\endgroup$