Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
UNIVERSIDAD NACIONAL DE ROSARIO FACULTAD DE CIENCIAS EXACTAS, INGENIERÍA Y AGRIMENSURA DEPARTAMENTO DE FÍSICA - ESCUELA DE CIENCIAS EXACTAS Y NATURALES Trabajo Práctico V MECÁNICA CUÁNTICA I I Julián Gelabert Angel Ramírez 3 Problemas 1. Graficar los dos primeros autovalores pares de la energía para algunos valores de lambda entre cero y la unidad, donde el hamiltoniano es de la forma H = H0 + W = − h̄2 2m d2 dx2 + V(x) + W(x) donde V0 = 120MeV y V(x) = { −V0 |x| ≤ R 0 |x| > R , W(x) = { λV0 |x| ≤ R 0 |x| > R con R = 2.1 f m. Para esto, resolver la ecuación trascendental para las soluciones pares del pozo finito ρn = κntan(κnR) con ρn = √ −2m h̄2 E κn = √ 2m h̄2 (V0(1− λ) + E) y 2m h̄2 = 0.024 1 MeV f m2 Hacer la gráfica e interpretar el resultado. Observación: para lambda cero los autovalores se encuentran alrededor de -10 MeV y -120 MeV. 2. Resolver 1 ahora tratando al término W(x) como una perturba- ción, donde las autofunciones de H0 son un(x) = Nn eρnx si x ≤ −R e−ρn R cos(κnR) cos(κnx) si − R < x < R e−ρnx si x ≥ R siendo Nn el factor de normalización y ρn = √ −2mE h̄2 κn = √ 2m h̄2 (V0 + E) Calcular las correcciones de las primeras energías del H0 en pri- mer orden para los valores de lambda 0.01, 0.1 y 0.5. Comparar las autoenergías aproximadas con las exactas. 4 trabajo práctico v Problema 1 Podemos pensar el sistema como el de un pozo finito donde el fondo depende de λ. Tomamos el potencial efectivo: Ṽ(x) = V(x) + W(x) = { λV0 −V0 , |x| ≤ R 0 , |x| > R Ṽ (x) = V (x) +W(x) Ṽ = 0 x R−R Ṽ = λV0 − V0 O Figura 1: Potencial efectivo Las energías confinadas del hamiltoniano H = − h̄ 2 2m d2 dx2 + Ṽ(x) son las soluciones a la ec. : ρn = κntan(κnR) (1) con: ρn = √ −2m h̄2 E κn = √ 2m h̄2 (V0(1− λ) + E) Resolviendo numéricamente mediante un programa en python1, 1 Ver Apéndice. podemos calcular las raíces de la Ec. (1) para λ ∈ [0, 1). Sabemos que en el límite λ → 1, el potencial Ṽ(x) → 0 , ∀x, por lo que esperamos que el número de estados confinados se reduzca a cero mientras λ se acerque a 1. La gráfica nos queda: E [M eV ] −120 −100 −80 −60 −40 −20 0 λ 0 0.2 0.4 0.6 0.8 1 E1 E0 Figura 2: Energías de los estados confinados del hamil- toniano H = H0 + W en función de λ. Donde vemos el comportamiento discutido. Para λ = 02 tenemos 2 Es decir, el sistema descrito por H = H0.dos estados confinados, de energías E00 y E 0 1. Para λ ∼ 0.2 tenemos E1(λ)0 ∼ 0, y a partir de allí tenemos solo un estado confinado con energía E0(λ), el cuál a su vez tiende a cero cuándo λ→ 1. 5 Problema 2 La corrección a primer orden de las primeras energías pares E0 y E1 son E0 ≈ E00 + 〈u0|W|u0〉 E1 ≈ E01 + 〈u1|W|u1〉 (2) Las autoenergías del hamiltoniano no perturbado se calcularon nu- méricamente con el mismo programa del Problema 1. Las mismas son: E00 = [−105.912± 0.001] MeV ; E01 = [−9.275± 0.001] MeV (3) Los valores medios del operador W en los estados |u0〉 y |u1〉 son: 〈u0|W|u0〉 = ∫ ∞ ∞ u∗0(x)W(x)u0(x)dx = ∫ R −R (λV0) ∣∣∣ N0e−ρ0R cos(κ0R) cos(κ0x) ∣∣∣2dx = λV0N20 e −2ρ0R cos2(κ0R) ∫ R −R cos2(κ0x)dx = λV0N20 e −2ρ0R cos2(κ0R) [ sin(2κ0R) + 2κ0R 2κ0 ] (4) y 〈u1|W|u1〉 = ∫ ∞ ∞ u∗1(x)W(x)u1(x)dx = ∫ R −R (λV0) ∣∣∣ N1e−ρ1R cos(κ1R) cos(κ1x) ∣∣∣2dx = λV0N21 e −2ρ1R cos2(κ1R) ∫ R −R cos2(κ1x)dx = λV0N21 e −2ρ1R cos2(κ1R) [ sin(2κ1R) + 2κ1R 2κ1 ] (5) con3 R = 2.1 f m, |N0| = 5.911 y |N1| = 1.256. En virtud de (3) y de 3 Se desprecian errores en los valores de Nn, ρn, κn, En provenientes de las incertezas en E0n puesto los mismos son despreciables en todos los casos. sus definiciones, los coeficientes ρ0, κ0, ρ1, κ1 son ρ0 = 1.594 f m , ρ1 = 0.471 f m , κ0 = 0.581 f m , κ1 = 1.630 f m (6) con lo que, reemplazando, los valores medios de W son 〈u0|W|u0〉 = 116.713 λ , 〈u1|W|u1〉 = 64.225 λ (7) De esta manera, las correcciones a primer orden para las prime- ras energías de H0 resultan E0(λ) = −105.912 + 116.713 λ + O(λ2) E1(λ) = −9.275 + 64.225 λ + O(λ2) (8) El siguiente cuadro compara los valores exactos E0 y E1 (calculados con los recursos del Problema 1) con las correcciones a primer orden. 6 trabajo práctico v λ Valor exacto de E0 Corrección a 1º de E0 Valor exacto de E1 Corrección a 1º de E1 0.01 −104.744 −104.744 −8.637 −8.632 0.1 −94.257 −94.240 −3.573 −2.852 0.5 −48.290 −47.555 no converge 22.837 En general podemos ver que mientras mayor sea λ, más se aleja la solución aproximada de la solución analítica calculada. Esto tiene sentido, ya que al ser una aproximación lineal tiene un error pro- porcional a λ2 que es solo despreciable para λ relativamente chico4. 4 En nuestro caso ayuda además que (ver Fig. 2) para la energía funda- mental el comportamiento analítico es aproximadamente lineal frente a variaciones de λ. Por lo que el error de la corrección a 1◦ orden es menor. Por otro lado sabemos que para λ = 0.5 ya no hay un estado excita- do confinado al pozo, y esto se ve reflejado en que la aproximación calculada nos da E1(λ = 0.5) = 22.837 > 0. Claramente, este valor no puede ser la energía de un estado confinado al pozo. Apéndice | Código usado Los paquetes de Python necesarios para el programa son: 1 import numpy as np 2 from scipy.optimize import root 3 import scipy.constants as cte 4 import matplotlib as mpl 5 import matplotlib.pyplot as plt Introducimos las constantes a usar: 1 #Datos 2 Vo=120 3 R=2.1 4 a=0.024 La idea es encontrar las soluciones a la Ec. (1), o equivalentemen- te encontrar las raíces de la función: f (x) = ρn − κntan(κnR) (9) Definimos la función en nuestro código: 1 #Funcion transcendental 2 def f(E): 3 ro=np.sqrt(a*(-E)) 4 k=np.sqrt(a*(Vo*(1-l)+E)) 5 return k*np.tan(k*R)-ro Donde λ, ρn y κn las llamamos l, ro y k respectivamente. Luego, queremos una gráfica E(λ)vsλ para λ ∈ [0, 1), por lo que necesita- mos la grilla equiespaciada sobre la cuál buscaremos las raíces de (9): 1 #Numero de valores para lambda entre 0 y 1 2 N=20000 3 4 #Creamos la grid para lambda 5 lrange=np.linspace(0,1,N+1,endpoint=False) Ahora busquemos las raíces y guardemos los valores para des- pués graficar. Para ello creamos los arrays e0 y e1 además de es- tablecer la tolerancia que manejaremos a la hora de decidir si un valor es una raíz o no. 7 1 #Creamos el array donde guardaremos las energias 2 e0=[] 3 e1=[] 4 5 #Definimos la tolerancia 6 tol=10**(-9) La idea es: Recorremos la grilla en λ, y seleccionamos dos se- millas adecuadas con las cuáles la función root del paquete scipy buscará las raíces: 1 #Empezamos a recorrer en lambda 2 for l in lrange: 3 4 #La idea es tomar las semillas en un intervalo valido 5 #base==fondo del pozo 6 #altura== superficie E=0 7 8 base=(l-1)*Vo 9 altura=0 10 11 #Para las semillas es conveniente tomar valores cercanos 12 #al fondo y al tope del pozo 13 14 #dividimos el intervalo de energias en 10000 puntos equiespaciados 15 paso=(altura-base)/10000 16 Erange1=np.arange(base, altura,paso) 17 18 #Y tomamos la semilla suficientemente cerca de los extremos del intervalo 19 Erange=[Erange1[500],Erange1[9900]] 20 21 #de mas esta decir que las semillas tomadas son arbitrarias, 22 #seguro hay mejores formas de definirlas. Esto es lo que funciono 23 24 25 #Buscamos las raices: 26 #Si la funcion root converge: 27 #res[0] seria la energia mas baja (estado fundamental) 28 #res[1] seria el siguiente estado excitado 29 30 #Si la funcion root no converge, res[i] devolvera la semilla 31 #que no convergio 32 33 res = [root(f, E).x[0] for E in Erange] 34 35 #Guardamos en los arrays 36 37 #Si fue exitosa la busqueda, f(res[0]) es un valor muy 38 #cercano a 0 39 if abs(f(res[0]))<tol: 40 e0.append(res[0]) 41 #Si no esta cerca de cero es porque root no converge para esa semilla 42 #asi que guardaremos en esa posicion de e0 el valor 10. 43 #Luego tomaremos en cuenta que no encontramos solucion 44 #para esta semilla 45 46 else: 47 e0.append(10) 48 49 50 #Repetimospara res[1]: 51 if abs(f(res[1]))<tol: 52 e1.append(res[1]) 53 else: 54 e1.append(10) 55 8 trabajo práctico v 56 #Terminamos de calcular las raices, queda 57 #graficar e0 y e1 vs lambda 58 59 #Primero vamos a deshacernos de los puntos 60 #donde e0=+10 o e1=+10: 61 62 #Para contar cuantos puntos de no convergencia 63 #tenemos: 64 contador1=0 65 contador2=0 66 67 #Tomamos dos copias de los valores de lambda 68 #que usamos al calcular las raices: 69 lrange1=lrange 70 lrange2=lrange 71 72 73 #Recorremos nuestra solucion en busca de +10 74 for i in range(N+1): 75 76 #Si encontramos un +10 eliminamos esa entrada y el lambda asociado 77 if e0[i-contador1]==10: 78 lrange1=np.delete(lrange1, i-contador1) 79 e0=np.delete(e0, i-contador1) 80 contador1=contador1+1 81 82 if e1[i-contador2]==10: 83 lrange2=np.delete(lrange2, i-contador2) 84 e1=np.delete(e1, i-contador2) 85 contador2=contador2+1 86 87 #Ahora estamos listos para graficar: 88 #Los puntos del primer estado excitado: 89 plt.plot(lrange2, e1, ’ko’) 90 91 #Los puntos del estado fundamental: 92 plt.plot(lrange1, e0, ’bo’) Para el Problema 2 nos interesa conocer cuánto valen las raíces para λ = 0, 0.01, 0.1 y 0.5. Por lo que calculamos particularmente para esos λ’s: 1 #Para el ej2 2 3 #Esencialmente lo unico que cambiamos es como tomamos la grilla. 4 #ahora la definimos con los puntos de interes: 5 ej2=[0, 0.01, 0.1, 0.5] 6 7 #Recorremos en los puntos de interes: 8 for l in ej2: 9 #Vamos a imprimir en pantalla el resultado, en vez de graficarlo 10 print(’Para lambda = ’,l) 11 12 #La eleccion de las semillas es identica 13 base=(l-1)*Vo 14 altura=0 15 paso=(altura-base)/10000 16 17 Erange1=np.arange(base, altura,paso) 18 Erange=[Erange1[500],Erange1[9900]] 19 20 21 #Buscamos las raices: 22 res = [root(f, E).x[0] for E in Erange] 23 24 #Si res[0] es una raiz, imprimimos el valor en pantalla: 25 if abs(f(res[0]))<tol: 26 print(’E0 = ’, res[0]) 9 27 28 #Si no lo es, escribimos el error: 29 else: 30 print(’E0 no converge’) 31 32 #De igual forma con res[1]: 33 if abs(f(res[1]))<tol: 34 print(’E1 = ’, res[1]) 35 else: 36 print(’E1 no converge’)
Compartir