Un número complejo se expresa de la forma z = a + b * i, donde:
a es la parte real (un número real),
b es la parte imaginaria (también un número real), y
i es la unidad imaginaria, que cumple i^2 = -1.
El conjugado del número complejo z = a + b * i viene dado por:
zc = a - b * i
El valor absoluto (o módulo) de z se define como:
|z| = sqrt(a^2 + b^2)
El cuadrado del valor absoluto se calcula como el producto de z y su conjugado zc:
|z|^2 = z * zc = a^2 + b^2
La suma de dos números complejos z1 = a + b * i y z2 = c + d * i se calcula sumando sus partes real e imaginaria por separado:
z1 + z2 = (a + b * i) + (c + d * i)
= (a + c) + (b + d) * i
La diferencia de dos números complejos se obtiene restando sus partes respectivas:
z1 - z2 = (a + b * i) - (c + d * i)
= (a - c) + (b - d) * i
El producto de dos números complejos se define como:
z1 * z2 = (a + b * i) * (c + d * i)
= (a * c - b * d) + (b * c + a * d) * i
El recíproco de un número complejo distinto de cero viene dado por:
1 / z = 1 / (a + b * i)
= a / (a^2 + b^2) - b / (a^2 + b^2) * i
La división de un número complejo entre otro viene dada por:
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
Elevar e (la base del logaritmo neperiano) a un exponente complejo puede expresarse con la fórmula de Euler:
e^(a + b * i) = e^a * e^(b * i)
= e^a * (cos(b) + i * sin(b))
Dado que no debes usar el soporte integrado para números complejos, implementa las siguientes operaciones:
Este es un ejercicio de orientación a objetos: vas a implementar ComplexNumbers como una clase.
Los tests compararán dos instancias de números complejos para ver si son iguales.
Esto significa que tu clase tendrá que implementar el metamétodo __eq.
Los tests también realizan operaciones aritméticas con números complejos, así que hay metamétodos aritméticos que implementar.
Algunas de las funciones de números complejos harán cálculos con números de coma flotante. Tu «igualdad» tendrá que lidiar con que los números sean aproximadamente iguales.
Regístrate en Exercism para aprender y dominar MoonScript con 126 ejercicios y mentoría humana real, todo gratis.