Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let stop_distance epsilon delta max_iter fnext a b n=
- (abs_float fnext < epsilon) && (abs_float(a -. b) < delta);;
- let stop_iter epsilon delta max_iter fnext a b n=
- n<max_iter;;
- let full_stop epsilon delta max_iter fnext a b n =
- (stop_iter epsilon delta max_iter fnext a b n) &&
- (stop_distance epsilon delta max_iter fnext a b n);;
- let next_bissection a b fa fb =
- 0.5 *. (a +. b);;
- let next_fausse_position_secante a b fa fb =
- a -. (b -. a)/.(fb -. fa)*.fa;;
- let next_newton x fx derivee =
- x -. fx /. derivee;;
- let research good_enough epsilon delta max_iter next_function f a b =
- let fa = f a and fb = f b in
- let rec iter a b n =
- let next = next_function a b fa fb in
- let fnext = f next in
- if good_enough epsilon delta max_iter fnext a b n then next
- else if fnext>0. then iter a next (n+1)
- else iter next b (n+1)
- in if fa > 0. then iter b a 0
- else if stop_distance epsilon delta max_iter fa a b 0 then a
- else if stop_distance epsilon delta max_iter fb a b 0 then b
- else iter a b 0;;
- let bissection ?(good_enough = full_stop)
- ?(epsilon = 1e-8) ?(delta = 1e-8) ?(max_iter = 50)
- f a b =
- research good_enough epsilon delta max_iter next_bissection f a b;;
- let fausse_position ?(good_enough = full_stop)
- ?(epsilon = 1e-8) ?(delta = 1e-8) ?(max_iter = 50)
- f a b =
- research good_enough epsilon delta max_iter next_fausse_position_secante f a b;;
- let secante ?(good_enough = full_stop)
- ?(epsilon = 1e-8) ?(delta = 1e-8) ?(max_iter = 50)
- f a b =
- let rec iter a b n=
- let fa = f a and fb = f b in
- let next = next_fausse_position_secante a b fa fb in
- let fnext = f next in
- if good_enough epsilon delta max_iter fnext a b n then next
- else iter b next (n+1)
- in iter a b 0;;
- let newton ?(good_enough = full_stop)
- ?(epsilon = 1e-8) ?(delta = 1e-8) ?(max_iter = 50)
- f derivee a b =
- let rec iter b n =
- let fb = f b in
- let derivee_in_b = derivee b in
- let next = next_newton b fb derivee_in_b in
- let fnext = f next in
- if good_enough epsilon delta max_iter fnext a b n then next
- else iter next (n+1)
- in let fa = f a and fb = f b in
- if f a > 0. then iter a 0
- else if stop_distance epsilon delta max_iter fa a b 0 then a
- else if stop_distance epsilon delta max_iter fb a b 0 then b
- else iter b 0;;
- let f x = x*.x -. 2.;;
- let g x = x*.x*.x;;
- let h x = x*.x*.x*.x -. 5.;;
Add Comment
Please, Sign In to add comment