Exemple : la m´
ethode dichotomique (1/2)
Si fest une fonction continue et monotone, on peut trouver un
z´
ero de fsur un intervalle [a, b]par la m´
ethode dichotomique
quand f(a)et f(b)sont de signes oppos´
es :
Isi est la pr´
ecision souhait´
ee et que |b−a|< alors on
renvoie a
Isinon, couper l’intervalle [a, b]en deux et recommencer sur
l’intervalle contenant 0
13/19 13
Exemple : la m´
ethode dichotomique (2/2)
# let rec dichotomie f (a, b) epsilon =
if abs float (b -. a) < epsilon then a
else
let c = (a +. b) /. 2.0 in
let bornes =
if (f a) *. (f c) > 0. then (c, b) else (a, c)
in
dichotomie f bornes epsilon
val dichotomie :
(float -> float) -> (float * float) -> float -> float = <fun>
Ion peut utiliser cette m´
ethode pour trouver un encadrement
de πen le calculant comme z´
ero de la fonction cos(x/2)
# dichotomie (fun x->cos (x/.2.0)) (3.1, 3.2) 1e-10 ;;
- : float = 3.14159265356138384
14/19 14
Fonctions comme r´
esultats
ILes fonctions `
a plusieurs arguments sont en fait des fonctions
d’ordre sup´
erieur qui rendent des fonctions comme r´
esultats
# let plus x y = x + y ;;
val plus : int -> int -> int
IIl faut lire le type de cette fonction de la mani `
ere suivante
int -> (int -> int)
IDe mani`
ere ´
equivalente, on peut ´
ecrire la fonction plus de la
fac¸on suivante afin de souligner son r´
esultat fonctionnel
# let plus x = (fun y -> x+y) ;;
val plus : int -> int -> int
15/19 15
Applications partielles
# let plus2 = plus 2 ;;
val plus2 : int -> int = <fun>
# plus2 10 ;;
- : int = 12
# plus2 100 ;;
- : int = 102
ILes fonctions d’ordre sup´
erieur rendant des fonctions en
r´
esultats peuvent ˆ
etre appliqu´
ees partiellement
IOn peut faire des calculs avant de renvoyer un r´
esultat
#letfx=
Printf.printf "x = %d" x;
(fun y -> Printf.printf "y = %d" y);;
# let f1 = f 1 ;;
x = 1 val f1 : int -> unit = <fun>
# let () = f1 2 ;;
y=2-:unit=()
16/19 16