A komplex szám z = a + b * i alakban írható fel, ahol:
a a valós rész (egy valós szám),
b a képzetes rész (szintén egy valós szám), és
i a képzetes egység, amelyre i^2 = -1 teljesül.
A z = a + b * i komplex szám konjugáltja:
zc = a - b * i
A z abszolút értéke (vagy modulusa):
|z| = sqrt(a^2 + b^2)
Az abszolút érték négyzetét z és zc konjugáltjának szorzataként számítjuk ki:
|z|^2 = z * zc = a^2 + b^2
Két komplex szám, z1 = a + b * i és z2 = c + d * i összegét úgy számítjuk ki, hogy külön-külön összeadjuk a valós és a képzetes részüket:
z1 + z2 = (a + b * i) + (c + d * i)
= (a + c) + (b + d) * i
Két komplex szám különbségét úgy kapjuk meg, hogy kivonjuk egymásból a megfelelő részeiket:
z1 - z2 = (a + b * i) - (c + d * i)
= (a - c) + (b - d) * i
Két komplex szám szorzata:
z1 * z2 = (a + b * i) * (c + d * i)
= (a * c - b * d) + (b * c + a * d) * i
Egy nem nulla komplex szám reciproka:
1 / z = 1 / (a + b * i)
= a / (a^2 + b^2) - b / (a^2 + b^2) * i
Egy komplex szám osztása egy másikkal:
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
Az e (a természetes logaritmus alapszáma) komplex hatványra emelése az Euler-formulával fejezhető ki:
e^(a + b * i) = e^a * e^(b * i)
= e^a * (cos(b) + i * sin(b))
Mivel nem használhatod a komplex számok beépített támogatását, valósítsd meg a következő műveleteket:
Definiálj egy cmplx tuple-t real és imaginary mezővel. A
real>> és imaginary>> mezőelérőket a tuple definíciója adja ingyen,
és a tesztek ezekkel olvassák ki a valós és képzetes részt.
<cmplx> ( real imag -- cmplx ) - komplex szám létrehozása.>cmplx ( pair -- cmplx ) - cmplx építése ebből:
{ real imaginary }.cmplx>pair ( cmplx -- pair ) - { real imaginary } visszaadása.c+ ( a b -- c ), c- ( a b -- c ), c* ( a b -- c ),
c/ ( a b -- c ) - két komplex szám aritmetikája.c-abs ( a -- |a| ) - abszolútérték (valós szám).c-conj ( a -- a* ) - komplex konjugált.c-exp ( z -- e^z ) - komplex exponenciális.A Factor MATH: generikusai (+, -, *, /) csak a beépített
matematikai hierarchián diszpécselnek, ezért ez a feladat az ezekre a
generikusokra írt metódusok helyett külön szóneveket használ.
A valós számokat komplex számokkal vegyítő aritmetika tesztjei
kimaradnak: az itteni műveletek mindegyike két cmplx érték között
történik.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Factor nyelvet 47 fogalom163 feladat segítségével, valódi emberi mentorálással, mindez ingyen.