Parcours
/
Lua
Lua
/
Exercices
/
Nombres complexes
Nombres complexes

Nombres complexes

Moyen

Instructions

Un nombre complexe s'écrit sous la forme z = a + b * i, où :

  • a est la partie réelle (un nombre réel),

  • b est la partie imaginaire (aussi un nombre réel), et

  • i est l'unité imaginaire qui vérifie i^2 = -1.

Opérations sur les nombres complexes

Conjugué

Le conjugué du nombre complexe z = a + b * i est donné par :

zc = a - b * i

Valeur absolue

La valeur absolue (ou module) de z est définie par :

|z| = sqrt(a^2 + b^2)

Le carré de la valeur absolue se calcule comme le produit de z et de son conjugué zc :

|z|^2 = z * zc = a^2 + b^2

Addition

La somme de deux nombres complexes z1 = a + b * i et z2 = c + d * i s'obtient en additionnant séparément leurs parties réelles et imaginaires :

z1 + z2 = (a + b * i) + (c + d * i)
        = (a + c) + (b + d) * i

Soustraction

La différence de deux nombres complexes s'obtient en soustrayant leurs parties respectives :

z1 - z2 = (a + b * i) - (c + d * i)
        = (a - c) + (b - d) * i

Multiplication

Le produit de deux nombres complexes est défini par :

z1 * z2 = (a + b * i) * (c + d * i)
        = (a * c - b * d) + (b * c + a * d) * i

Inverse

L'inverse d'un nombre complexe non nul est donné par :

1 / z = 1 / (a + b * i)
      = a / (a^2 + b^2) - b / (a^2 + b^2) * i

Division

La division d'un nombre complexe par un autre est donnée par :

z1 / z2 = z1 * (1 / z2)
        = (a + b * i) / (c + d * i)
        = (a * c + b * d) / (c^2 + d^2) + (b * c - a * d) / (c^2 + d^2) * i

Exponentiation

Élever e (la base du logarithme népérien) à un exposant complexe peut s'exprimer à l'aide de la formule d'Euler :

e^(a + b * i) = e^a * e^(b * i)
              = e^a * (cos(b) + i * sin(b))

Exigences d'implémentation

Comme tu ne dois pas t'appuyer sur une prise en charge intégrée des nombres complexes, implémente les opérations suivantes :

  • l'addition de deux nombres complexes
  • la soustraction de deux nombres complexes
  • la multiplication de deux nombres complexes
  • la division de deux nombres complexes
  • le conjugué d'un nombre complexe
  • la valeur absolue d'un nombre complexe
  • l'exponentiation de e (la base du logarithme népérien) à un nombre complexe

Implémentation

Cet exercice te demande d'utiliser des objets basés sur des closures. Tu peux en savoir plus sur cette approche de la programmation orientée objet en Lua dans cet article.

Cet exercice te demande aussi d'utiliser la surcharge d'opérateurs via les métaméthodes de métatables. Tu peux en savoir plus à ce sujet dans Programming in Lua.


Source

WikipediaLe lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Lua Exercism

Prêt à commencer Nombres complexes ?

Inscris-toi sur Exercism pour apprendre et maîtriser Lua avec 117 exercices, et un vrai mentorat humain, le tout gratuitement.