5. Ecuaciones de Maxwell en el vacío

Autor:Luis Miguel Sánchez Brea

Contenidos de este capítulo:

Herramientas utilizadas en este tutorial:

  • numpy: manipulación de datos
  • scipy: Herramientas matemáticas

Archivos necesarios para la clase interferencias:

  • camposXY.py. Archivo con las funciones principales de campos camposXY.py
  • fuentesXY.py. Archivo con las funciones principales de fuentes fuentesXY.py

Descarga de archivos:

5.1. Introducción

\mathbf{E}=\mathbf{E}_{1}+\mathbf{E}_{2}

también es una solución. Sin embargo, el campo no es un parámetro observable, sino que lo es el promedio temporal del vector de Poynting, que se define como

\mathbf{S}\equiv\frac{1}{\mu_{0}}\mathbf{E}\wedge\mathbf{B},

con tiene unidades de \left[\mathbf{S}\right]=W/m^{2}. Al particularizar al caso de ondas armónicas planas tenemos

\left\langle \mathbf{S}\right\rangle =\frac{1}{2}\sqrt{\frac{\varepsilon_{0}}{\mu_{0}}}\left\vert \mathbf{E}\right\vert ^{2}\mathbf{u}_{k},

:math:`(t,r)`

5.2. Programación

Debido a la sencillez conceptual de las interferencias, las utilizaremos para analizar los distintos tipos de programación que se puede realizar con Python, como es la programación con scripts (todo el código en un mismo archivo lineal), la programación funcional (se escriben funciones que simplifican lo cálculos) y la programación con clases (donde funciones y datos están íntimamente relacionados). Finalmente veremos un procedimiento sencillo para desarrollar vídeos, simulando un interferómetro de Michelson.

tamano=100*um
x=sp.linspace(-tamano,tamano, 256)
y=sp.linspace(-tamano,tamano, 256)
X,Y=sp.meshgrid(x,y)
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
#------------------------------------
# Autor:	Luis Miguel Sanchez Brea
# Fecha		2013/10/24 (version 1.0)
# Licencia:	GPL
# Objetivo:	onda plana
#-------------------------------------

from __future__ import division

import scipy as sp
import matplotlib.pyplot as plt
import sys
sys.path.append('../')

from camposXY import campoXY, um, mm, grados
from fuentesXY import fuenteXY


def onda_plana(A=1, teta=0*grados, phi=0*grados):
	"""
	Generacion de una onda plana
	"""

	#definicion de parametros iniciales
	tamano = 250 * um
	npixels = 256
	#Generacion de la clase
	x = sp.linspace(-tamano / 2, tamano / 2, npixels)
	y = sp.linspace(-tamano / 2, tamano / 2, npixels)
	X, Y = sp.meshgrid(x, y)
	wavelength = 0.6328 * um
	k = 2 * sp.pi / wavelength

	u = A * sp.exp(1.j * k * (X * sp.sin(teta) * sp.sin(phi) + Y * sp.cos(teta) * sp.sin(phi)))
	#carga de la onda plana
	#dibujar y guardar

	IDfig = plt.figure()
	IDax = IDfig.add_subplot(111)
	extension = [x.min(), x.max(), y.min(), y.max()]
	angulo = sp.angle(u) #/ sp.pi
	angulo[angulo == 1] = -1
	IDimagen = plt.imshow(angulo, interpolation = 'bilinear', aspect = 'auto',origin = 'lower', extent = extension)
	plt.xlabel("$x  (\mu m)$", fontsize = 20)
	plt.ylabel("$y  (\mu m)$", fontsize = 20)
	titulo="$A =$ %4.2f $\phi =$  %4.2f $^{0}, \Theta =$ %4.2f $^0$" %(A, phi*180/sp.pi, teta*180/sp.pi)
	plt.suptitle(titulo, fontsize = 20)
	plt.axis('scaled')
	plt.axis(extension)
	plt.colorbar()
	IDimagen.set_cmap("RdBu")
	plt.clim(vmin = -sp.pi, vmax = sp.pi)

onda_plana(A=1, teta=45*grados, phi=1*grados)
onda_plana(A=1, teta=0*grados, phi=0*grados)
plt.show()

(Source code)

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
#------------------------------------
# Autor:	Luis Miguel Sanchez Brea
# Fecha		2013/10/24 (version 1.0)
# Licencia:	GPL
# Objetivo:	onda esferica
#-------------------------------------

from __future__ import division

import scipy as sp
import matplotlib.pyplot as plt

um=1

def onda_esferica(A = 1, z0 = -1000 * um):
	"""
	Generacion de una onda plana
	"""

	#definicion de parametros iniciales
	tamano = 250 * um
	npixels = 256
	#Generacion de la clase
	x = sp.linspace(-tamano / 2, tamano / 2, npixels)
	y = sp.linspace(-tamano / 2, tamano / 2, npixels)
	X, Y = sp.meshgrid(x, y)
	wavelength = 0.6328 * um
	k = 2 * sp.pi / wavelength


	#Centrado radio de la mascara y distancia al origen emisor
	R2 = X ** 2 + Y** 2
	Rz = sp.sqrt(X ** 2 + Y ** 2 + z0 ** 2)

	#Onda esferica
	u = A * sp.exp(-1.j * sp.sign(z0) * k * Rz) / Rz

	IDfig = plt.figure()
	IDax = IDfig.add_subplot(111)
	extension = [x.min(), x.max(), y.min(), y.max()]
	angulo = sp.angle(u)
	angulo[angulo == 1] = -1
	IDimagen = plt.imshow(angulo, interpolation = 'bilinear', aspect = 'auto',origin = 'lower', extent = extension)
	plt.xlabel("$x  (\mu m)$", fontsize = 20)
	plt.ylabel("$y  (\mu m)$", fontsize = 20)
	titulo="fase A = %4.2f z0 = %4.2f mm" %(A, z0/1000*um)
	plt.suptitle(titulo, fontsize = 20)
	plt.axis('scaled')
	plt.axis(extension)
	plt.colorbar()
	IDimagen.set_cmap("RdBu")
	plt.clim(vmin = -sp.pi, vmax = sp.pi)

onda_esferica(A=1, z0 = -1000 * um)
onda_esferica(A=1, z0 = -5000 * um)
onda_esferica(A=1, z0 = 5000 * um)

plt.show()

(Source code)

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
#------------------------------------
# Autor:	Luis Miguel Sanchez Brea
# Fecha		2013/10/24 (version 1.0)
# Licencia:	GPL
# Objetivo:	Emision de una onda esferica
#-------------------------------------

import time, gobject, gtk #@UnusedImport
import scipy as sp
import matplotlib
matplotlib.use('GTKAgg')
import matplotlib.pyplot as plt
import matplotlib.cm as cm

um=1; mm=1000*um; m=1000*mm; s=1; fs=1e-15*s

wavelength=0.6328*um
k = 2 * sp.pi / wavelength
c= 299792.458 *m/s

w=c*k

#area de visualizacion
tamano=1.25*um
x=sp.linspace(-tamano, tamano, 250)
z=sp.linspace(-tamano, tamano, 250)
X,Z=sp.meshgrid(x, z)

#calculo de la intensidad
R = sp.sqrt(X** 2 + Z ** 2)
E_theta=sp.cos(k*R)/R
intensidad = abs(E_theta) ** 2
intensidad=sp.log(intensidad+1)
#fase=sp.angle(E_theta)

#Se dibuja por primera vez
fig = plt.figure(1)
a = plt.subplot(111)
im = a.imshow(intensidad, cmap=cm.jet)
manager = plt.get_current_fig_manager()

#tiempo
t=sp.linspace(0,50000*fs,1001)

#bucle
i=0
def updatefig(*args):
	global  t, i
	E_theta=sp.cos((k*R-w*t[i]))/R
	intensidad = abs(E_theta) ** 2
	intensidad=sp.log(intensidad+1)
	#fase=sp.angle(E_theta)

	im.set_array(intensidad)
	titulo="t = %4.0f fs" %(t[i]/fs)
	plt.title(titulo)
	manager.canvas.draw()
	i += 1
	if i==len(t):
		return False
	return True

gobject.idle_add(updatefig)
plt.show()

(Source code, png, hires.png, pdf)

../../_images/onda_esferica_animado.png
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
#------------------------------------
# Autor:	Luis Miguel Sanchez Brea
# Fecha		2013/10/24 (version 1.0)
# Licencia:	GPL
# Objetivo:	haz gaussiano
#-------------------------------------

from __future__ import division

import scipy as sp
import matplotlib.pyplot as plt
import sys
sys.path.append('../')

from camposXY import campoXY, um, mm, grados
from fuentesXY import fuenteXY

def haz_gauss(A = 1, w = (250 * um, 250 * um)):
	#definicion de parametros iniciales
	tamano = 1000 * um
	x = sp.linspace(-tamano / 2, tamano / 2, 256)
	y = sp.linspace(-tamano / 2, tamano / 2, 256)
	X,Y=sp.meshgrid(x,y)
	wavelength = 0.6238 * um
	k = 2 * sp.pi / wavelength
	wx, wy = w

	#Definicion de la amplitud
	u = A * sp.exp(-X ** 2 / (2 * wx ** 2) - Y** 2 / (2 * wy ** 2))
	intensidad=abs(u)**2

	IDfig = plt.figure()
	IDax = IDfig.add_subplot(111)
	extension = [x.min(), x.max(), y.min(), y.max()]
	IDimagen = plt.imshow(intensidad ,origin = 'lower', extent = extension)
	plt.xlabel("$x  (\mu m)$", fontsize = 20)
	plt.ylabel("$y  (\mu m)$", fontsize = 20)
	plt.axis('scaled')
	plt.axis(extension)
	plt.colorbar()
	IDimagen.set_cmap("gist_heat")

haz_gauss( w = (250 * um, 250 * um))
haz_gauss( w = (250 * um, 125 * um))
plt.show()

(Source code)

5.3. Haces de Gauss

Veamos ahora el proceso de interferencia de 2 haces de Gauss. Estos hace se pueden definir como

E(x,y,z)=A_{0}\frac{\omega_{0}}{\omega(z)}\exp\left(-\frac{\rho^{2}}{\omega^{2}(z)}\right)\exp\left(ikz+ik\frac{\rho^{2}}{2R(z)}-i\zeta(z)\right)

donde

\omega_{0}^{2}=\frac{z_{0}\lambda}{\pi}

\omega(z)=\omega_{0}\sqrt{1+\left(\frac{z}{z_{0}}\right)^{2}}

R(z)=z\left[1+(\frac{z}{z_{0}})^{2}\right]

Este tipo de haces se puede programar fácilmente. Asumamos que estamos en el foco del haz z=0 y los haces están rotados. Entonces también se van a producir interferencias entre los haces.