(0, -2)  (0, -1)  (0, 1)  (0, 2)  (0, 3)  (0, 4)  (0, 5)  (0, 6)  (0, 7)  (0, -0.9)  (0, -0.8)  (0, -0.7)  (0, -0.6)  (0, -0.5)  (0, -0.4)  (0, -0.3)  (0, -0.2)  (0, -0.1)  (0, 0.1)  (0, 0.2)  (0, 0.3)  (0, 0.4)  (0, 0.5)  (0, 0.6)  (0, 0.7)  (0, 0.8)  (0, 0.9)  (0, -0.09)  (0, -0.08)  (0, -0.07)  (0, -0.06)  (0, -0.05)  (0, -0.04)  (0, -0.03)  (0, -0.02)  (0, -0.01)  (0, 0.01)  (0, 0.02)  (0, 0.03)  (0, 0.04)  (0, 0.05)  (0, 0.06)  (0, 0.07)  (0, 0.08)  (0, 0.09) Legend: Function (Input) Actual Tangent Line (Desired Output) Measurements Estimated Tangent Line (Actual Output) Margin of Error (Not to Scale) Legend:  small, smaller, even smaller. “Good enough” estimate: f′(x) = ( f(x + dx) - f(x) ) ÷ dx           f(x + dx) = c₀ + c₁·(x + dx) + c₂·(x + dx)² + c₃·(x + dx)³ + ...                     = c₀ + c₁·x + c₁·dx + c₂·x² + 2·c₂·x·dx + c₂·dx² + c₃·x³ + 3·c₃·x²·dx + 3·c₃·x·dx² + c₃·dx³ + ... f′(x) = (c₀ + c₁·x + c₁·dx + c₂·x² + 2·c₂·x·dx + c₂·dx² + c₃·x³ + 3·c₃·x²·dx + 3·c₃·x·dx² + c₃·dx³ - (c₀ + c₁·x + c₂·x² + c₃·x³) + …) ÷ dx       = c₁ + 2·c₂·x + c₂·dx + 3·c₃·x² + 3·c₃·x·dx + c₃·dx² + ... New and improved estimate: Simple algorithm applied to 2dx:  c₁ + 2·c₂·x + 2·c₂·dx + 3·c₃·x² + 6·c₃·x·dx + 4·c₃·dx² + ... Extrapolate to get new and improved output:  2•(near estimate) - (far estimate) f′(x) = 2·(c₁ + 2·c₂·x + c₂·dx + 3·c₃·x² + 3·c₃·x·dx + c₃·dx²) - (c₁ + 2·c₂·x + 2·c₂·dx + 3·c₃·x² + 6·c₃·x·dx + 4·c₃·dx²) + ...       = c₁ + 2·c₂·x + 3·c₃·x² - 2·c₃·dx² + ... f(x) = c₀ + c₁·x + c₂·x² + c₃·x³ + ... + cₙ·xⁿ + ... f′(x) = c₁ + 2·c₂·x + 3·c₃·x² + (c₂ + 3·c₃·x)·dx +   c₃·dx² + ... f′(x) = c₁ + 2·c₂·x + 3·c₃·x²                    - 2·c₃·dx² + ... f′(x) = c₁ + 2·c₂·x + 3·c₃·x²                               + ... Input: “Good enough” result: New and improved result: Correct result:
More About