Section courante

A propos

Section administrative du site

Introduction

Les nombres complexes sont des nombres pouvant représentés de nombres de carré négatif, lequel n'est pas possible avec des nombres réels ou des nombres entiers. Ainsi, grâce à l'introduction d'un nombre «i» (pour imaginaire) à un nombre réel existant, on obtient un nombre complexe. Les nombres complexes proposé à l'origine, par les mathématiciens Jérôme Cardan, Raphaël Bombelli, Nicolo Fontana, dit Tartaglia, et Ludovico Ferrari. Mais ce n'est qu'à partir de Carl Friedrich Gauss, que l'aspect géométrique fut proposé. Aujourd'hui, grâce, à ces nombres complexes, on pourra, par exemple, appliquer des fonctions de Fractales de Fatou-Julia ou l'analyse de Fourier.

Ainsi, en mathématique, un nombre complexe «z», ce sont l'utilisation de nombre réel selon la définition suivante :

z = (a,b)

En informatique, on utilise généralement une structure de données de nombre réel afin de représenté un nombre complexe. On aura donc une formulation comme ceci en langage de programmation Pascal :

  1. Type
  2.  Complexe=Record
  3.   a,b:Real;
  4.  End;

Ainsi, on pourra appliquer les opérateurs suivants aux nombres complexes :

Opérateur Formule
Addition (a + ib) (c + id) = (a + c) + i(b + d)
Multiplication (a + ib) (c + id) = (ac - bd) + i(ad + bc)
Inverse (a + ib) (a - ib) = a2 + b2

Langage de programmation

Les nombres complexes ne sont malheureusement pas inclus dans les langages de programmations, toutefois, il existe tout de même certains langages incluant la possibilité du traitement des nombres complexes à la base du langage. Voici un tableau en fonction des langages de programmation le supportant :

Langage de programmation Élément
C _Complex
C pour Linux complex.h (cabs, cabsf, cabsl, cacos, cacosf, cacosh, cacoshf, cacoshl, cacosl, casin, casinf, casinh, casinhf, casinhl, casinl, catanf, catanh, catanhf, catanhl, catanl, ccos, ccosf, ccosh, ccoshf, ccoshl, ccosl, cexp, cexpf, cexpl, csin, csinf, csinh, csinhf, csinhl, csinl, csqrt, csqrtf, csqrtl, ctan, ctanf, ctanh, ctanhf, ctanhl, ctanl,...)
Fortran CMPLX, AIMAG
GNU Pascal ArcCos, ArcSin, ArcTan, Arg, Cmplx, Conjugate, Exp, Im,...
Modula-2 CMPLX
PL/1 DECLARE COMPLEXE
Python COMPLEX

Exemples

Voici un exemple écrit en langage de programmation Free Pascal permettant de montrer comme fonctionne les opérations de base sur des nombres complexes :

  1. Program NombreComplexeSamples;
  2.  
  3. Type
  4.  Complexe=Record
  5.   a,b:Real;
  6.  End;
  7.  
  8. Var
  9.  z1,z2,Somme,Produit:Complexe;
  10.  
  11. Function RE(z:Complexe):Real;Begin
  12.  RE := z.A;
  13. End;
  14.  
  15. Function IM(z:Complexe):Real;Begin
  16.  IM := z.B;
  17. End;
  18.  
  19. Function Addition(z1,z2:Complexe):Complexe;
  20. Var
  21.  zr:Complexe;
  22. Begin
  23.  zr.A := RE(z1) + RE(z2);
  24.  zr.B := IM(z1) + IM(z2);
  25.  Addition := zr;
  26. End;
  27.  
  28. Function Multiplication(z1,z2:Complexe):Complexe;
  29. Var
  30.  zr:Complexe;
  31. Begin
  32.  zr.A := RE(z1) * RE(z2) - IM(z1) - IM(z2);
  33.  zr.B := RE(z1) * IM(z2) + RE(z2) * IM(z1);
  34.  Multiplication := zr;
  35. End;
  36.  
  37. Function Division(z1,z2:Complexe):Complexe;
  38. Var
  39.  zr:Complexe;
  40.  m:Real;
  41. Begin
  42.  m := IM(z2) * IM(z2) + RE(z2) * RE(z2);
  43.  zr.A := RE(z2) / m;
  44.  zr.B := -IM(z2) / m;
  45.  Division := Multiplication(z1,zr);
  46. End;
  47.  
  48. Function Opposer(z:Complexe):Complexe;
  49. var
  50.  zr:Complexe;
  51. Begin
  52.  zr.A := -z.A;
  53.  zr.B := -z.B;
  54.  Opposer := zr;
  55. End;
  56.  
  57. Function RacineCarree(z:Complexe):Complexe;
  58. Var
  59.  sign:Real;
  60.  zr:Complexe;
  61. Begin
  62.  If z.A > 0.0 Then Begin
  63.   zr.A := Sqrt((z.A + Sqrt(z.A * z.A + z.B * z.B) ) / 2.0);
  64.   zr.B := z.B / (2.0 * zr.A);
  65.  End
  66.   Else
  67.  If z.A < 0.0 Then Begin
  68.   If z.B > 0.0 Then sign := 1.0 Else sign := -1.0;
  69.   zr.B := sign * Sqrt((-z.A + Sqrt(z.A * z.A + z.B * z.B) ) / 2.0);
  70.   zr.A := z.B / (2.0 * zr.B);
  71.  End
  72.   Else
  73.  Begin
  74.   zr.A := Sqrt(Abs(z.B) / 2.0);
  75.   If z.B >= 0 Then zr.B := zr.A
  76.               Else zr.B := -zr.A;
  77.  End;
  78.  RacineCarree := zr;
  79. End;
  80.  
  81. Procedure WriteComplexe(z:Complexe);Begin
  82.  Write(z.A:3:1,' + ',z.B:2:1);
  83. End;
  84.  
  85. BEGIN
  86.  z1.A := 5.0;
  87.  z1.B := 6.0;
  88.  z2.A := 1.0;
  89.  z2.B := -4.0;
  90.  Write('z1 = ');
  91.  WriteComplexe(z1);
  92.  WriteLn;
  93.  Write('z2 = ');
  94.  WriteComplexe(z2);
  95.  WriteLn;
  96.  Write('z1 + z2 = ');
  97.  WriteComplexe(Addition(z1,z2));
  98.  WriteLn;
  99.  Write('z1 x z2 = ');
  100.  WriteComplexe(Multiplication(z1,z2));
  101.  WriteLn;
  102.  Write('z1 / z2 = ');
  103.  WriteComplexe(Division(z1,z2));
  104.  WriteLn;
  105.  Write('Sqrt(z1) = ');
  106.  WriteComplexe(RacineCarree(z1));
  107.  WriteLn;
  108.  Write('Opposee(z1) = ');
  109.  WriteComplexe(Opposer(z1));
  110.  WriteLn;
  111. END.

on obtiendra le résultat suivant :

z1 = 5.0 + 6.0
z2 = 1.0 + -4.0
z1 + z2 = 6.0 + 2.0
z1 x z2 = 3.0 + -14.0
z1 / z2 = -5.9 + 1.5
Sqrt(z1) = 2.5 + 1.2
Opposee(z1) = -5.0 + -6.0

On peut également appliquer des fonctions que la valeur absolues (ABS) sur des nombres complexes, comme dans l'exemple suivant en Free Pascal :

  1. Program NombreComplexeAbsSamples;
  2.  
  3. Type
  4.  Complexe=Record
  5.   a,b:Real;
  6.  End;
  7.  
  8. Var
  9.  z1,z2:Complexe;
  10.  
  11. Function CAbs(z:Complexe):Real;Begin
  12.  CAbs := sqrt(z.a*z.a + z.b*z.b);
  13. End;
  14.  
  15. BEGIN
  16.  z1.A := 5.0;
  17.  z1.B := 6.0;
  18.  z2.A := 1.0;
  19.  z2.B := -4.0;
  20.  Write('z1 = ');
  21.  Write(CAbs(z1));
  22.  WriteLn;
  23.  Write('z2 = ');
  24.  Write(CAbs(z2));
  25.  WriteLn;
  26. END.

on obtiendra le résultat suivant :

z1 = 7.81024967590665E+000
z2 = 4.12310562561766E+000


Dernière mise à jour : Dimanche, le 30 avril 2017