Logo Studenta

Mec_nica_Cu_ntica_II___Trabajos_Pr_cticos

¡Estudia con miles de materiales!

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’)

Continuar navegando