Analytical vs Numerical Derivatives
There are two ways to get a derivative, and knowing which to use is half the battle.
1. Analytical (exact). You have a formula, like f(t) = t². You apply the rules (power, product, chain) to get an exact new formula: f′(t) = 2t. No error. You can evaluate it anywhere.
Python can do this symbolically with SymPy — sp.diff(f) hands you the exact formula. (That's what powered the explorer earlier, under the hood.)
2. Numerical (approximate). You only have data points — measurements, a recorded signal — not a formula. You estimate the slope with the finite difference:
FD = ( f(a + h) − f(a) ) / h
The rise over the run between two nearby points, a small step h apart. As h → 0, this approaches the true derivative.
The catch with h: smaller h = more accurate, but more computation. Too large and you miss the curve's detail. There's always a tradeoff.
Also: a numerical derivative is one point shorter than the original — with N points you can only form N−1 differences (each one needs a pair of neighbors).
See the tradeoff for yourself. The exact derivative of sin(t) is cos(t). Below, the finite difference estimates that derivative using a step size h. Drag h and watch how close the numerical estimate (green) stays to the exact answer (orange).
The exact derivative of sin(t) is cos(t) (orange). The green curve is the finite-difference estimate using step h. Shrink h → green hugs orange (accurate). Grow h → green lags and distorts. Smaller h is more accurate, but needs more points — the accuracy-vs-cost tradeoff.
Rule of thumb: have a formula? Differentiate it analytically (exact). Only have recorded data? Go numerical with np.gradient. Same idea — the difference is exact formula vs approximation from data.