Menu1 Menu2 Menu3 Menu4 Menu5 Menu6

Comme les rationnels, les complexes n'existent pas dans Caml. On va donc les représenter comme couples de flottants : la partie réelle et la partie imaginaire. Ainsi, 1 est représenté par (1.,0.) et i par (0.,1.). On n'oubliera pas de mettre un point pour les nombres flottants et les opérateurs usuels.

1) Commencez par écrire les fonctions plus et moins qui additionnent et soustraient deux complexes.
let plus (a,b) (c,d) = (a +. c, b +. d);;
let moins (a,b) (c,d) = (a -. c, b -. d);;

2) Ensuite, définissez la fonction mult qui multiplie deux complexes.
Commençons par faire des maths : (a + ib) x (c + id) = ac + iad + ibc + i2bd = (ac - bd) + i(ad + bc). D'où :
let mult (a,b) (c,d) = (a*.c -. b*.d,a*.d +. b*.c);;

3) Pour la division, commencez par définir l'inverse d'un complexe (pour faire simple, rappelez-vous de ce que fait le produit d'un complexe par son conjugué). Une fois cette fonction inverse écrite, déduisez-en la division de deux complexes.
Rappelez-vous : le produit de z par z vaut le module de z au carré. L'inverse d'un complexe est donc simple à définir :
let inverse (a,b) = let modulecarre = a*.a +. b*.b in (a /. modulecarre, -.b/. modulecarre);;
let divise x y = mult x (inverse y);;

4) Une dernière fonction : écrivez la fonction racine qui cherche la racine carrée d'un complexe. Là encore, il faut trouver une astuce pour faire simple. En effet, on pourrait passer par le module et l'argument, mais ce serait compliqué. Pour simplifier, intéressez-vous à la partie réelle de z2 (si z est la racine cherchée) et au module de z.
Soit n = a + ib le complexe dont on cherche la racine et soit z = x + iy cette racine. Alors :
   z2 = (x2 - y2) + 2ixy donc x2 - y2 = a
   le module de z vaut sqrt(x2+y2) et le module de n vaut sqrt(a2 + b2) or le module de n est le carré du module de z donc x2+y2 = sqrt(a2+b2)
D'où en ajoutant : 2x2 = sqrt(a2+b2) + a et alors x2 = (sqrt(a2+b2) + a)/2.
Comme y2 = x2 - a, on a y2 = (sqrt(a2+b2) - a)/2.
let racine (a,b) =
let xcarre = (sqrt (a*.a+.b*.b) +. a)/. 2. and ycarre = (sqrt (a*.a+.b*.b) -. a)/. 2. in
(sqrt xcarre, sqrt ycarre);;

5) Maintenant que nous savons calculer avec des complexes, intéressons-nous à des choses sérieuses : vous devez écrire une fonction resout telle que l'appel resout a b c, où a b et c sont complexes, rende les deux solutions (ou la solution double) de az² + bz + c = 0. Pour simplifier, on suppose que a est non nul.
Solution

> Haut de la page