Un numero complesso è espresso nella forma z = a + b * i, dove:
a è la parte reale (un numero reale),
b è la parte immaginaria (anche lei un numero reale), e
i è l'unità immaginaria che soddisfa i^2 = -1.
Il coniugato del numero complesso z = a + b * i è dato da:
zc = a - b * i
Il valore assoluto (o modulo) di z è definito come:
|z| = sqrt(a^2 + b^2)
Il quadrato del valore assoluto si calcola come prodotto di z e del suo coniugato zc:
|z|^2 = z * zc = a^2 + b^2
La somma di due numeri complessi z1 = a + b * i e z2 = c + d * i si calcola sommando separatamente le loro parti reale e immaginaria:
z1 + z2 = (a + b * i) + (c + d * i)
= (a + c) + (b + d) * i
La differenza di due numeri complessi si ottiene sottraendo le rispettive parti:
z1 - z2 = (a + b * i) - (c + d * i)
= (a - c) + (b - d) * i
Il prodotto di due numeri complessi è definito come:
z1 * z2 = (a + b * i) * (c + d * i)
= (a * c - b * d) + (b * c + a * d) * i
Il reciproco di un numero complesso diverso da zero è dato da:
1 / z = 1 / (a + b * i)
= a / (a^2 + b^2) - b / (a^2 + b^2) * i
La divisione di un numero complesso per un altro è data da:
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
Elevare e (la base del logaritmo naturale) a un esponente complesso si può esprimere usando la formula di Eulero:
e^(a + b * i) = e^a * e^(b * i)
= e^a * (cos(b) + i * sin(b))
Dato che non dovresti usare il supporto integrato per i numeri complessi, implementa le seguenti operazioni:
Questo è un esercizio orientato agli oggetti: implementerai ComplexNumbers come una classe.
I test confronteranno due istanze di numeri complessi per verificarne l'uguaglianza.
Questo significa che la classe dovrà implementare il metametodo __eq.
I test eseguono anche operazioni aritmetiche sui numeri complessi, quindi ci sono dei metametodi aritmetici da implementare.
Alcune delle funzioni sui numeri complessi faranno calcoli con numeri in virgola mobile. La «uguaglianza» dovrà gestire numeri approssimativamente uguali.
Iscriviti a Exercism per imparare e padroneggiare MoonScript con 126 esercizi e il mentoring di persone reali, tutto gratis.