Partícula en una caixa
Continguts
Caixa unidimensional
En aquest capítol aprendrem a graficar la forma més bàsica de la funció d’ona d’una partícula en una caixa unidimensonal:
\[\psi_n(x)=\sqrt{\frac{2}{L}}\sin{\left(\frac{n\pi}{L}x\right)}\]Primer necessitem importar les llibreries per aquest exercici en concret:
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
Un cop tenim importades les llibreries, ja podem començar a escriure el codi que ens permeterà observar aquesta expressió en funció de n, és a dir, del nombre quàntic principal.
Primer caldrà determinal la llargada de la caixa unidimensional (L).
L = 1 # Llargada de la caixa
x_list = np.linspace(0,L,100) # Aquest són els valors que necessitem per a poder fer les gràfiques
Ara caldrà definir les funcions que volem graficar. Com que volem veure la pròpia funció i el seu quadrat (funció probabilitat), caldrà definir-les per separat.
def psi(n,L,x):
return np.sqrt(2/L)*np.sin(n*np.pi*x/L)
def psi_2(n,L,x):
return np.square(psi(n,L,x))
I ara ja sí, fem les gràfiques.
No entrarem en detall en el codi de les gràfiques perquè ja està tot explicat en el document de gràfiques.
plt.figure(figsize=(15,10))
plt.suptitle("Funcions d'ona", fontsize=18)
for n in range(1,4):
psi_2_list = []
psi_list = []
for x in x_list:
psi_2_list.append(psi_2(n,L,x))
psi_list.append(psi(n,L,x))
plt.subplot(3,2,2*n-1)
plt.plot(x_list, psi_list)
plt.xlabel("L", fontsize=13)
plt.ylabel("$\psi$", fontsize=13)
plt.xticks(np.arange(0, L, step=0.5))
plt.title("n="+str(n), fontsize=16)
plt.grid()
plt.subplot(3,2,2*n)
plt.plot(x_list, psi_2_list)
plt.xlabel("L", fontsize=13)
plt.ylabel("$\psi^2$", fontsize=13)
plt.xticks(np.arange(0, L, step=0.5))
plt.title("n="+str(n), fontsize=16)
plt.grid()
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()
D’aquesta manera, podem observar on trobarem un node d’aquesta funció i on està la major probabilitat de trobar la partícula en aquesta caixa unidimensional.
Caixa bidimensional
També es pot fer el mateix per una caixa bidimensional.
Evidentment, l’equació a utilitzar canviarà:
\[\psi_n(x,y)=\sqrt{\frac{2}{L_x}}\sqrt{\frac{2}{L_y}}\sin{\left(\frac{n\pi}{L_x}x\right)\sin{\left(\frac{n\pi}{L_y}y\right)}}\]Igual que amb l’exemple anterior, primer definirem algunes de les variables com \(n\), \(L_x\) i \(L_y\).
n = 1
Lx = 1**-10
Ly = 1**-10
x,y = np.linspace(0, Lx, 200), np.linspace(0, Ly, 200)
Ara definim la funció:
def psi_3d(a,b):
return np.sqrt(2/Lx)*np.sqrt(2/Ly)*np.sin(n*np.pi*a/Lx)*np.sin(n*np.pi*b/Ly)
def psi2_3d(a,b):
return np.square(psi_3d(a,b))
I tornem a fer les gràfiques. Aquestes les podem fer per separat:
X,Y = np.meshgrid(x,y)
psi = np.array([psi_3d(x,y) for x,y in zip(np.ravel(X),np.ravel(Y))])
PSI = psi.reshape(X.shape)
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111, projection = '3d')
ax.plot_surface(X,Y,PSI, cmap = 'binary')
plt.xlabel('Coordenades X')
plt.ylabel('Coordenades Y')
ax.set_zlabel("Funció d'ona")
plt.title('$\psi$ per n=%s' %n)
plt.show()
X,Y = np.meshgrid(x,y)
psi2 = np.array([psi2_3d(x,y) for x,y in zip(np.ravel(X),np.ravel(Y))])
PSI2 = psi2.reshape(X.shape)
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111, projection = '3d')
ax.plot_surface(X,Y,PSI2, cmap = 'binary')
plt.xlabel('Coordenades X')
plt.ylabel('Coordenades Y')
ax.set_zlabel("Funció d'ona")
plt.title('$\psi^2$ per n=%s' %n)
plt.show()
O bé o podem fer de manera conjunta:
X,Y = np.meshgrid(x,y)
psi = np.array([psi_3d(x,y) for x,y in zip(np.ravel(X),np.ravel(Y))])
PSI = psi.reshape(X.shape)
psi2 = np.array([psi2_3d(x,y) for x,y in zip(np.ravel(X),np.ravel(Y))])
PSI2 = psi2.reshape(X.shape)
fig = plt.figure(figsize=(15,6))
ax1 = fig.add_subplot(121, projection = '3d')
ax2 = fig.add_subplot(122, projection = '3d')
ax1.plot_surface(X,Y,PSI, cmap = 'binary')
ax1.set_xlabel('Coordenades X')
ax1.set_ylabel('Coordenades Y')
ax1.set_zlabel("Funció d'ona")
ax1.set_title('$\psi$ per n=%s' %n)
ax2.plot_surface(X,Y,PSI2, cmap = 'binary')
ax2.set_xlabel('Coordenades X')
ax2.set_ylabel('Coordenades Y')
ax2.set_zlabel("Funció d'ona")
ax2.set_title('$\psi^2$ per n=%s' %n)
plt.show()
Sel·lecció automàtica
També es pot fer com una “mostra automàtica” de la funció d’ona i la seva funció de densitat de probabilitat.
Primer cal importar les llibreries necessàries i definir la funció de la partícula en una caixa vist anteriorment:
import matplotlib.pyplot as plt
import numpy as np
def psi(x,n,L): return np.sqrt(2.0/L)*np.sin(float(n)*np.pi*x/L)
Ara cal saber per a quines característiques es vol graficar la funció. Això ho indicarà l’alumne:
n = int(input("Digues el valor del nombre quàntic principal: n = "))
L = float(input("Digues la llargada de la caixa en Angstroms: L = "))
Amb les informacions que hem donat nosaltres de la funció i les caràcterístiques que volem que tingui aquesta funció, ja es poden fer les gràfiques.
Per aquest exemple, farem que n=2
i L=10
.
print('Caracerísitiques de la funció: n=%s; L=%s' %(n,L))
# Funció de ona
plt.rcParams.update({'font.size': 18, 'font.family': 'STIXGeneral', 'mathtext.fontset': 'stix'})
x = np.linspace(0, L, 900)
fig, ax = plt.subplots()
ax.plot(x, psi(x,n,L), linestyle='--', color="orange", linewidth=2.8)
ax.hlines(0.0, 0.0, L, linewidth=1.8, linestyle='--', color="black")
ax.set_xlabel(r'$L$')
ax.set_ylabel(r'$\psi_n(x)$')
plt.title("Funció d'ona")
# Funció densitat de probabilitat
fig, ax = plt.subplots()
ax.axis([0.0,L,0.0,lim1*lim1*1.1])
ax.plot(x, psi(x,n,L)*psi(x,n,L), linewidth=2.8)
ax.set_xlabel(r'$L$')
ax.set_ylabel(r'$|\psi_n|^2(x)$')
plt.title("Funció densitat de probabilitat")
plt.show()