Skip to content

Instantly share code, notes, and snippets.

@sanxiyn
Created March 17, 2011 04:26
Show Gist options
  • Save sanxiyn/873837 to your computer and use it in GitHub Desktop.
Save sanxiyn/873837 to your computer and use it in GitHub Desktop.
Newton's method
dx = 1e-10
eps = 1e-3
derive f x = (f (x+dx) - f x) / dx
improve f guess x = guess - (f guess - x) / derive f guess
good f guess x = abs (f guess - x) < eps
iter f guess x = if good f guess x then guess else iter f (improve f guess x) x
solve f x = iter f 1.0 x
square x = x*x
cube x = x*x*x
main = do print (solve square 2); print (solve cube 3)
let dx = 1e-10
let eps = 1e-3
let derive f x = (f (x+.dx) -. f x) /. dx
let improve f guess x = guess -. (f guess -. x) /. derive f guess
let good f guess x = abs_float (f guess -. x) < eps
let rec iter f guess x = if good f guess x then guess else iter f (improve f guess x) x
let solve f x = iter f 1.0 x
let square x = x*.x
let cube x = x*.x*.x;;
print_float (solve square 2.0); print_newline ();
print_float (solve cube 3.0); print_newline ();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment