Guest User

Untitled

a guest
Jan 15th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 2.44 KB | None | 0 0
  1. let stop_distance epsilon delta max_iter fnext a b n=
  2.   (abs_float fnext < epsilon) && (abs_float(a -. b) < delta);;
  3.  
  4. let stop_iter epsilon delta max_iter fnext a b n=
  5.   n<max_iter;;
  6.  
  7. let full_stop epsilon delta max_iter fnext a b n =
  8.   (stop_iter epsilon delta max_iter fnext a b n) &&
  9.     (stop_distance epsilon delta max_iter fnext a b n);;
  10.  
  11. let next_bissection a b fa fb =
  12.   0.5 *. (a +. b);;
  13.  
  14. let next_fausse_position_secante a b fa fb =
  15.   a -. (b -. a)/.(fb -. fa)*.fa;;
  16.  
  17. let next_newton x fx derivee =
  18.   x -. fx /. derivee;;
  19.  
  20. let research good_enough epsilon delta max_iter next_function f a b =
  21.   let fa = f a and fb = f b in
  22.   let rec iter a b n =
  23.     let next = next_function a b fa fb in
  24.     let fnext = f next in
  25.     if good_enough epsilon delta max_iter fnext a b n then next
  26.     else if fnext>0. then iter a next (n+1)
  27.     else iter next b (n+1)
  28.   in if fa > 0. then iter b a 0
  29.     else if stop_distance epsilon delta max_iter fa a b 0 then a
  30.     else if stop_distance epsilon delta max_iter fb a b 0 then b
  31.     else iter a b 0;;
  32.  
  33.  
  34. let bissection ?(good_enough = full_stop)
  35.     ?(epsilon = 1e-8) ?(delta = 1e-8) ?(max_iter = 50)
  36.     f a b =
  37.   research good_enough epsilon delta max_iter next_bissection f a b;;
  38.  
  39. let fausse_position ?(good_enough = full_stop)
  40.     ?(epsilon = 1e-8) ?(delta = 1e-8) ?(max_iter = 50)
  41.     f a b =
  42.   research good_enough epsilon delta max_iter next_fausse_position_secante f a b;;
  43.  
  44.  
  45. let secante ?(good_enough = full_stop)
  46.     ?(epsilon = 1e-8) ?(delta = 1e-8) ?(max_iter = 50)
  47.     f a b =
  48.   let rec iter a b n=
  49.     let fa = f a and fb = f b in
  50.     let next = next_fausse_position_secante a b fa fb in
  51.     let fnext = f next in
  52.     if good_enough epsilon delta max_iter fnext a b n then next
  53.     else iter b next (n+1)
  54.   in iter a b 0;;
  55.  
  56. let newton ?(good_enough = full_stop)
  57.     ?(epsilon = 1e-8) ?(delta = 1e-8) ?(max_iter = 50)
  58.     f derivee a b =
  59.   let rec iter b n =
  60.     let fb = f b in
  61.     let derivee_in_b = derivee b in
  62.     let next = next_newton b fb derivee_in_b in
  63.     let fnext = f next in
  64.     if good_enough epsilon delta max_iter fnext a b n then next
  65.     else iter next (n+1)
  66.   in let fa = f a and fb = f b in
  67.      if f a > 0. then iter a 0
  68.      else if stop_distance epsilon delta max_iter fa a b 0 then a
  69.      else if stop_distance epsilon delta max_iter fb a b 0 then b
  70.      else iter b 0;;
  71.  
  72. let f x = x*.x -. 2.;;
  73. let g x = x*.x*.x;;
  74. let h x = x*.x*.x*.x -. 5.;;
Add Comment
Please, Sign In to add comment