numerical_diff.nbt 445 B

12345678910111213141516
  1. let eps = 1e-10
  2. fn diff(f: Fn[(Scalar) -> Scalar], x: Scalar) -> Scalar =
  3. (f(x + eps) - f(x)) / eps
  4. assert_eq(diff(log, 2.0), 1 / 2, 1e-5)
  5. assert_eq(diff(sin, 0.0), 1.0, 1e-5)
  6. fn f(x: Scalar) -> Scalar = x * x + 4 * x + 1
  7. assert_eq(diff(f, 2.0), 8.0, 1e-5)
  8. # TODO: It would be so cool if we could write it in a generic way:
  9. #
  10. # fn diff<X, Y>(f: Fn[(X) -> Y], x: X) -> Y / X =
  11. # (f(x + eps · unit_of(x)) - f(x)) / (eps · unit_of(x))