import numpy as np
import matplotlib.pyplot as plt
import math
import cmath
from scipy import linalg
d = 1.0e-6
a = 0.82*d
epsia = 1.0
epsib = 1.0
e_p0p0 = epsib+(a/d)*(a/d)*(epsia-epsib)
e_p1p0 = (a/d)*(a/d)*(epsia-epsib)*(math.sin(+math.pi*(a/d))/(+math.pi*(a/d)))
e_m1p0 = (a/d)*(a/d)*(epsia-epsib)*(math.sin(-math.pi*(a/d))/(-math.pi*(a/d)))
Nq = 100
qi = 0.0
qf = 0.5
dq = (qf-qi)/Nq
qx = np.zeros(Nq+1)
qy = np.zeros(Nq+1)
Om1_M = np.zeros(Nq+1,dtype=complex)
Om2_M = np.zeros(Nq+1,dtype=complex)
Om1_X = np.zeros(Nq+1,dtype=complex)
Om2_X = np.zeros(Nq+1,dtype=complex)
# MT
for iq in range(0,Nq+1):
qx[iq] = qi+iq*dq
qy[iq] = qi+iq*dq
A = [ [(qx[iq]-1)**2+(qy[iq]-1)**2,0],
[0,qx[iq]**2+qy[iq]**2]]
B = [[e_p0p0,e_p1p0],[e_m1p0,e_p0p0]]
x,E = linalg.eig(A,B)
x.sort()
Om1_M[iq] = cmath.sqrt(x[0])
Om2_M[iq] = cmath.sqrt(x[1])
qM = np.sqrt(qx*qx+qy*qy)
# TX
for iq in range(0,Nq+1):
qx[iq] = qi+iq*dq
qy[iq] = 0.0
A = [ [(qx[iq]-1)**2+qy[iq]**2,0],
[0,qx[iq]**2+qy[iq]**2]]
B = [[e_p0p0,e_p1p0],[e_m1p0,e_p0p0]]
x,E = linalg.eig(A,B)
x.sort()
Om1_X[iq] = cmath.sqrt(x[0])
Om2_X[iq] = cmath.sqrt(x[1])
qX = np.sqrt(qx*qx+qy*qy)
plt.plot(-qM,Om2_M.real,'-r',-qM,Om1_M.real,'-b')
plt.plot(+qX,Om2_X.real,'-r',+qX,Om1_X.real,'-b')
plt.grid()
plt.show()
import numpy as np
import matplotlib.pyplot as plt
import math
N = 10
# Trayectoria X
x = np.zeros(N+1)
Om_p0p0_x = np.zeros(N+1)
Om_m1p0_x = np.zeros(N+1)
Om_p1p0_x = np.zeros(N+1)
Om_p0m1_x = np.zeros(N+1)
Om_p0p1_x = np.zeros(N+1)
Om_p1p1_x = np.zeros(N+1)
Om_m1m1_x = np.zeros(N+1)
for iz in range(0,N+1):
x_x = 0.5*(iz/N)
x_y = 0.0*(iz/N)
x[iz] = math.sqrt(x_x*x_x+x_y+x_y)
Om_p0p0_x[iz] = math.sqrt((x_x+0)**2+(x_y+0)**2)
Om_m1p0_x[iz] = math.sqrt((x_x-1)**2+(x_y+0)**2)
Om_p1p0_x[iz] = math.sqrt((x_x+1)**2+(x_y+0)**2)
Om_p0m1_x[iz] = math.sqrt((x_x+0)**2+(x_y-1)**2)
Om_p0p1_x[iz] = math.sqrt((x_x+0)**2+(x_y+1)**2)
Om_p1p1_x[iz] = math.sqrt((x_x+1)**2+(x_y+1)**2)
Om_m1m1_x[iz] = math.sqrt((x_x-1)**2+(x_y-1)**2)
# Trayectoria M
m = np.zeros(N+1)
Om_p0p0_m = np.zeros(N+1)
Om_m1p0_m = np.zeros(N+1)
Om_p1p0_m = np.zeros(N+1)
Om_p0m1_m = np.zeros(N+1)
Om_p0p1_m = np.zeros(N+1)
Om_p1p1_m = np.zeros(N+1)
Om_m1m1_m = np.zeros(N+1)
for iz in range(0,N+1):
m_x = 0.5*(iz/N)
m_y = 0.5*(iz/N)
m[iz] = -math.sqrt(m_x*m_x+m_y*m_y)
Om_p0p0_m[iz] = math.sqrt((m_x+0)**2+(m_y+0)**2)
Om_m1p0_m[iz] = math.sqrt((m_x-1)**2+(m_y+0)**2)
Om_p1p0_m[iz] = math.sqrt((m_x+1)**2+(m_y+0)**2)
Om_p0m1_m[iz] = math.sqrt((m_x+0)**2+(m_y-1)**2)
Om_p0p1_m[iz] = math.sqrt((m_x+0)**2+(m_y+1)**2)
Om_p1p1_m[iz] = math.sqrt((m_x+1)**2+(m_y+1)**2)
Om_m1m1_m[iz] = math.sqrt((m_x-1)**2+(m_y-1)**2)
plt.plot(x,Om_p0p0_x,'-b',label='(0,0)')
plt.plot(x,Om_m1p0_x,'og',label='(-1,0)')
plt.plot(x,Om_p1p0_x,'-r',label='(+1,0)')
plt.plot(x,Om_p0m1_x,'-c',label='(0,-1)')
plt.plot(x,Om_p0p1_x,'oc',label='(0,+1)')
plt.plot(x,Om_p1p1_x,'-m',label='(+1,+1)')
plt.plot(x,Om_m1m1_x,'-y',label='(-1,-1)')
plt.plot(m,Om_p0p0_m,'-b',label='(0,0)')
plt.plot(m,Om_m1p0_m,'og',label='(-1,0)')
plt.plot(m,Om_p1p0_m,'-r',label='(+1,0)')
plt.plot(m,Om_p0m1_m,'-c',label='(0,-1)')
plt.plot(m,Om_p0p1_m,'oc',label='(0,+1)')
plt.plot(m,Om_p1p1_m,'-m',label='(+1,+1)')
plt.plot(m,Om_m1m1_m,'-y',label='(-1,-1)')
plt.legend()
plt.show()
plt.plot(x,Om_p0p0_x,'.b',label='(0,0)')
plt.plot(x,Om_m1p0_x,'.g',label='(-1,0)')
plt.plot(x,Om_p1p0_x,'.r',label='(+1,0)')
plt.plot(x,Om_p0m1_x,'.c',label='(0,-1)')
plt.plot(x,Om_p0p1_x,'.y',label='(0,+1)')
plt.plot(x,Om_p1p1_x,'.k',label='(+1,+1)')
plt.plot(x,Om_m1m1_x,'ob',label='(-1,-1)')
plt.plot(m,Om_p0p0_m,'.b',label='(0,0)')
plt.plot(m,Om_m1p0_m,'.g',label='(-1,0)')
plt.plot(m,Om_p1p0_m,'.r',label='(+1,0)')
plt.plot(m,Om_p0m1_m,'.c',label='(0,-1)')
plt.plot(m,Om_p0p1_m,'.y',label='(0,+1)')
plt.plot(m,Om_p1p1_m,'.k',label='(+1,+1)')
plt.plot(m,Om_m1m1_m,'ob',label='(-1,-1)')
plt.plot(-qM,Om2_M.real,'-r',-qM,Om1_M.real,'-b')
plt.plot(+qX,Om2_X.real,'-r',+qX,Om1_X.real,'-b')
plt.legend()
plt.show()