Instantly share code, notes, and snippets.

Embed
What would you like to do?
from scipy.integrate import ode
import numpy as np
import pylab as pl
# Parámetros físicos
omega = np.pi
# Parámetros de simulación
t = np.linspace(0,4,101)
# La solución se guarda en el arreglo y que es de 2xlen(t).
# El 2 es necesario porque nuestro vector de estado tiene 2 componentes
y = np.zeros((2,len(t)),dtype=np.complex)
# Condiciones iniciales [c_g, c_e]
y[:,0] = [1,0]
# Definir lado derecho de ecuación de la forma y'(t) = rhs(t,y)
# En este caso y es un vector con componentes [c_g, c_e]
def rhs(t,y):
return [-0.5j*omega*y[1],-0.5j*omega*y[0]]
# Definir solucionador de ecuación diferencial, el parámetro 'zvode'
# es para poder usar valores complejos
r = ode(rhs).set_integrator('zvode')
# Definir condiciones inciales
r.set_initial_value(y[:,0], t[0])
# Integrar la ecuación
i = 0
while r.successful() and i < len(t)-1:
r.integrate(t[i+1])
y[:,i+1] = r.y
i = i+1
# Graficar la solución
pl.plot(t,np.abs(y[0,:])**2,label="$P_g$")
pl.plot(t,np.abs(y[1,:])**2,label="$P_e$")
pl.legend(loc=0)
pl.xlabel("A")
pl.ylabel("A")
pl.savefig("atomo_2_niveles.png",dpi=100)
pl.show()
import numpy as np
import pylab as pl
# Definición de parámetros físicos
w = np.linspace(0,3) # frecuencia de larmor
A = 1 # constante de interacción hiperfina
# Definimos un arreglo 3D lleno de ceros.
H = np.zeros((len(w),4,4))
# Llenamos las entradas distintas de cero de nuestro Hamiltoniano
H[:,0,0] = w+A/4
H[:,1,1] = w-A/4
H[:,1,2] = H[:,2,1]= A/2
H[:,2,2] = -w-A/4
H[:,3,3] = -w+A/4
# Calculamos los eigenvalores
evals = np.linalg.eigvalsh(H)
# Graficamos el resultado
pl.plot(w,evals)
pl.xlabel("Frecuencia de Larmor $\omega_0$")
pl.ylabel("Energía")
pl.savefig("efecto_zeeman.png",dpi=100)
pl.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment