# complex.py - rekenen met complexe getallen (Python schrijft j, net als de elektrotechniek)
import cmath
import math

z1, z2 = 3 + 4j, 1 - 2j
print("som      ", z1 + z2)
print("product  ", z1 * z2)
print("quotiënt ", z1 / z2)
print("toegevoegde van z1:", z1.conjugate(), "  |z1| =", abs(z1))
print("arg z1 = %.2f graden" % math.degrees(cmath.phase(z1)))

r, phi = cmath.polar(-2 - 2j)                    # poolvorm: phase gebruikt atan2, dus het juiste kwadrant
print("-2-2j in poolvorm: r = %.4f, hoek = %.1f graden" % (r, math.degrees(phi)))
print("naïef atan(b/a) zou %.1f graden geven" % math.degrees(math.atan(-2 / -2)))
print("2 met hoek 30 graden:", cmath.rect(2, math.radians(30)))

print("e^(j pi) =", cmath.exp(1j * math.pi))     # Euler: -1, op een afrondingsfout na
s, term = 0, 1
for k in range(12):                              # de reeks 1 + (j phi) + (j phi)^2/2! + ... voor phi = 2
    s += term
    term *= 2j / (k + 1)
print("reeks tot k = 11:", s)
print("cmath.exp(2j):   ", cmath.exp(2j))
