Parcours
/
Swift
Swift
/
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

Instructions spécifiques au parcours

Tu devras implémenter ton propre opérateur d'égalité pour l'objet ComplexNumber. Cela te posera le défi de comparer deux nombres à virgule flottante. Il peut être utile d'utiliser la méthode isApproximatelyEqual(to:absoluteTolerance:), que l'on trouve dans la bibliothèque Numerics. En raison de problèmes de performance, tu n'auras accès qu'à la partie RealModule. Pour l'importer, il te suffit d'écrire import RealModule en haut du fichier. Une tolérance de 0.00001 devrait suffire pour passer les tests. La bibliothèque est déjà importée dans le projet, il te suffit donc de l'importer dans ton fichier.

Tu es également libre d'implémenter ta propre méthode pour comparer les deux nombres complexes.


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
Swift Exercism

Prêt à commencer Nombres complexes ?

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