import numpy as np
import sympy as sym
from IPython.display import display,Math
print('Multiplication with complex numbers')
display(Math('z = (a\\quad bi)'))
display(Math('w = (c\\quad di)'))
display(Math('z\\times w = (a\\quad bi) \\times (c\\quad di)'))
display(Math('\\quad \\quad \\quad= ac + adi + cbi + bdi^2'))
display(Math('\\quad \\quad \\quad= ac + adi + cbi - bd'))
print('Complex number: 複素数')
display(Math('z'))
display(Math('z = a + bi'))
display(Math('w = a - bi'))
print('Complex conjugate: 複素共役')
display(Math('z^*'))
display(Math('z^* = a - bi'))
display(Math('w^* = a + bi'))
print('Multiplication with complex conjugate')
display(Math('z\\times z^* = (a\\quad bi) \\times (a- bi)'))
display(Math('\\quad \\quad \\quad= a^2 - abi + abi - bi^2'))
display(Math('\\quad \\quad \\quad= a^2 + b^2'))
z1 = np.complex(4,5)
z2 = np.complex(6,-2)
w = np.real(z1)*np.real(z2) + np.real(z1)*np.imag(z2)*1j + np.imag(z1)*1j*np.real(z2) + np.imag(z1)*1j*np.imag(z2)*1j
print(w)
print(z1*z2)
print(sym.sympify(w))
print(sym.sympify(z1*z2))
np.conj(z1)
np.conj(z2)
a,b = sym.symbols('a,b',real=True)
z = a + b*sym.I
print(z)
sym.conjugate(z)
z * sym.conjugate(z)
sym.expand(z * sym.conjugate(z))
display(Math('z\\times x^* = %s' %sym.latex(sym.expand(z*sym.conjugate(z)))))