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 :
- Type
- Complexe=Record
- a,b:Real;
- 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 :
- Program NombreComplexeSamples;
-
- Type
- Complexe=Record
- a,b:Real;
- End;
-
- Var
- z1,z2,Somme,Produit:Complexe;
-
- Function RE(z:Complexe):Real;Begin
- RE := z.A;
- End;
-
- Function IM(z:Complexe):Real;Begin
- IM := z.B;
- End;
-
- Function Addition(z1,z2:Complexe):Complexe;
- Var
- zr:Complexe;
- Begin
- zr.A := RE(z1) + RE(z2);
- zr.B := IM(z1) + IM(z2);
- Addition := zr;
- End;
-
- Function Multiplication(z1,z2:Complexe):Complexe;
- Var
- zr:Complexe;
- Begin
- zr.A := RE(z1) * RE(z2) - IM(z1) - IM(z2);
- zr.B := RE(z1) * IM(z2) + RE(z2) * IM(z1);
- Multiplication := zr;
- End;
-
- Function Division(z1,z2:Complexe):Complexe;
- Var
- zr:Complexe;
- m:Real;
- Begin
- m := IM(z2) * IM(z2) + RE(z2) * RE(z2);
- zr.A := RE(z2) / m;
- zr.B := -IM(z2) / m;
- Division := Multiplication(z1,zr);
- End;
-
- Function Opposer(z:Complexe):Complexe;
- var
- zr:Complexe;
- Begin
- zr.A := -z.A;
- zr.B := -z.B;
- Opposer := zr;
- End;
-
- Function RacineCarree(z:Complexe):Complexe;
- Var
- sign:Real;
- zr:Complexe;
- Begin
- If z.A > 0.0 Then Begin
- zr.A := Sqrt((z.A + Sqrt(z.A * z.A + z.B * z.B) ) / 2.0);
- zr.B := z.B / (2.0 * zr.A);
- End
- Else
- If z.A < 0.0 Then Begin
- If z.B > 0.0 Then sign := 1.0 Else sign := -1.0;
- zr.B := sign * Sqrt((-z.A + Sqrt(z.A * z.A + z.B * z.B) ) / 2.0);
- zr.A := z.B / (2.0 * zr.B);
- End
- Else
- Begin
- zr.A := Sqrt(Abs(z.B) / 2.0);
- If z.B >= 0 Then zr.B := zr.A
- Else zr.B := -zr.A;
- End;
- RacineCarree := zr;
- End;
-
- Procedure WriteComplexe(z:Complexe);Begin
- Write(z.A:3:1,' + ',z.B:2:1);
- End;
-
- BEGIN
- z1.A := 5.0;
- z1.B := 6.0;
- z2.A := 1.0;
- z2.B := -4.0;
- Write('z1 = ');
- WriteComplexe(z1);
- WriteLn;
- Write('z2 = ');
- WriteComplexe(z2);
- WriteLn;
- Write('z1 + z2 = ');
- WriteComplexe(Addition(z1,z2));
- WriteLn;
- Write('z1 x z2 = ');
- WriteComplexe(Multiplication(z1,z2));
- WriteLn;
- Write('z1 / z2 = ');
- WriteComplexe(Division(z1,z2));
- WriteLn;
- Write('Sqrt(z1) = ');
- WriteComplexe(RacineCarree(z1));
- WriteLn;
- Write('Opposee(z1) = ');
- WriteComplexe(Opposer(z1));
- WriteLn;
- END.
on obtiendra le résultat suivant :
z1 = 5.0 + 6.0z2 = 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 :
- Program NombreComplexeAbsSamples;
-
- Type
- Complexe=Record
- a,b:Real;
- End;
-
- Var
- z1,z2:Complexe;
-
- Function CAbs(z:Complexe):Real;Begin
- CAbs := sqrt(z.a*z.a + z.b*z.b);
- End;
-
- BEGIN
- z1.A := 5.0;
- z1.B := 6.0;
- z2.A := 1.0;
- z2.B := -4.0;
- Write('z1 = ');
- Write(CAbs(z1));
- WriteLn;
- Write('z2 = ');
- Write(CAbs(z2));
- WriteLn;
- END.
on obtiendra le résultat suivant :
z1 = 7.81024967590665E+000z2 = 4.12310562561766E+000