(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: