In [2]:
# Hacemos que los graficos aparezcan insertados en celdas
%matplotlib inline
In [3]:
import numpy
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
In [4]:
# almacenamos constantes
r_o = 0.0529
pi = numpy.pi
e = numpy.exp(1)
In [5]:
def p_r(r: "float(nm)", r_o:"float(nm)" = 0.0529) -> "float":
""" Probabilidad radial
Z = 1 (atomo de H)$
Args:
r -- distancia al nucleo
r_o -- radio de Bohr
Returns:$
p_r -- probabilidad de encontrar el electron a una
distancia r del nucleo
"""
return 4 * r**2 / r_o**3 * numpy.exp(- 2*r / r_o)
In [6]:
x = numpy.linspace(0, .5, 100)
y = [p_r(i) for i in x]
In [7]:
plt.plot(x, y)
plt.title('Densidad de probabilidad radial - distancia');
## Representamos multiplos enteros del radio de Bohr
# Dibujamos un punto con un circulo rojo ([r]ed, [o]circle)
x_o = [i*r_o for i in range(1, 5)]
y_o = [p_r(i) for i in x_o]
plt.plot(x_o, y_o, 'ro')
plt.text(r_o + .01, p_r(r_o), 'r0')
plt.text(2*r_o + .01, p_r(2*r_o), '2r0')
plt.text(3*r_o + .01, p_r(3*r_o), '3r0')
plt.text(4*r_o + .01, p_r(4*r_o), '4r0')
plt.hlines(p_r(r_o), 0, .06, 'grey', 'dashed')
plt.vlines(r_o, 0, 10.6, 'grey', 'dashed')
plt.hlines(p_r(2*r_o), 0, .12, 'grey', 'dashed')
plt.vlines(2*r_o, 0, 5.9, 'grey', 'dashed')
plt.hlines(p_r(3*r_o), 0, .16, 'grey', 'dashed')
plt.vlines(3*r_o, 0, 2, 'grey', 'dashed')
plt.hlines(p_r(4*r_o), 0, .21, 'grey', 'dashed')
plt.vlines(4*r_o, 0, 1.05, 'grey', 'dashed')
plt.xlabel('Distancia al nucleo [nm]')
plt.ylabel('Pr [1 / nm]')
plt.show()
In [8]:
r = 2 * r_o
a = 4/r_o**3 * numpy.exp(-2*r / r_o) * (- r_o * r**2 / 2 - r_o**2 * r / 2 - r_o**3 / 4)
r2 = 0
b = 4/r_o**3 * numpy.exp(-2*r2 / r_o) * (- r_o * r2**2 / 2 - r_o**2 * r2 / 2 - r_o**3 / 4)
texto = "Probabilidad entre r={} y r={:.2f} : {:.4f}".format(r2, r, a - b)
print(texto)
In [9]:
def densidad(r: "float(nm)", r_o:"float(nm)" = 0.0529) -> "float":
""" Funcion de onda en corrdenadas esfericas para n=1, l=0, ml=0
Args:
r -- distancia al nucleo
r_o -- radio de Bohr
Returns:
chi -- chi_100
"""
return 1 / (pi * r_o**3) * numpy.exp(- 2*numpy.abs(r) / r_o)
In [10]:
## Representacion nube electronica (densidad de probabilidad)
x = numpy.linspace(-5*r_o, 5*r_o, 200)
y1 = [densidad(i)**2 for i in x]
y2 = [-densidad(i)**2 for i in x]
plt.plot(x, y1)
plt.plot(x, y2, 'b-')
plt.show()
In [15]:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = numpy.linspace(-5*r_o, 5*r_o, 100)
y = numpy.linspace(-5*r_o, 5*r_o, 100)
z = densidad(numpy.sqrt(x**2 + y**2))
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.scatter(x, y, z, c='r', marker='o')
plt.show()
In [26]:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for k in numpy.linspace(0, 5, 5):
THETA = numpy.linspace(0, 2*pi, 10)
R = numpy.ones(THETA.shape)*numpy.cos(THETA*k)
DENS = densidad(R)
X = R*numpy.cos(THETA)
Y = R*numpy.sin(THETA)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.scatter(X, Y, k-2)
plt.show()
In [11]:
def p_r(r: "float(nm)", r_o:"float(nm)" = 0.0529) -> "float":
""" Probabilidad radial
Z = 1 (atomo de H)$
Args:
r -- distancia al nucleo
r_o -- radio de Bohr
Returns:$
p_r -- probabilidad de encontrar el electron a una
distancia r del nucleo
"""
return r**2 / (8 * r_o**3) * (2 - r/r_o)**2 * numpy.exp(- r/r_o)
In [16]:
x = numpy.linspace(0, .9, 100)
y = [p_r(i) for i in x]
In [31]:
plt.plot(x, y)
plt.title('Densidad de probabilidad radial - distancia');
## Representamos multiplos enteros del radio de Bohr
# Dibujamos un punto con un circulo rojo ([r]ed, [o]circle)
x_o = [i*r_o for i in range(1, 5)]
y_o = [p_r(i) for i in x_o]
plt.plot(x_o, y_o, 'ro')
# Etiquetamos los puntos
plt.text(r_o + .02, p_r(r_o), 'r0')
plt.text(2*r_o - .02, p_r(2*r_o) + 0.2, '2r0')
plt.text(3*r_o + .01, p_r(3*r_o), '3r0')
plt.text(4*r_o + .015, p_r(4*r_o), '4r0')
# Dibujamos líneas a trazos para marcar los puntos
plt.hlines(p_r(r_o), 0, .06, 'grey', 'dashed')
plt.vlines(r_o, 0, 1.1, 'grey', 'dashed')
plt.hlines(p_r(2*r_o), 0, .12, 'grey', 'dashed')
plt.vlines(2*r_o, 0, 0.1, 'grey', 'dashed')
plt.hlines(p_r(3*r_o), 0, .16, 'grey', 'dashed')
plt.vlines(3*r_o, 0, 1.2, 'grey', 'dashed')
plt.hlines(p_r(4*r_o), 0, .21, 'grey', 'dashed')
plt.vlines(4*r_o, 0, 2.7, 'grey', 'dashed')
plt.xlabel('Distancia al nucleo [nm]')
plt.ylabel('Pr [1 / nm]')
plt.show()
In [ ]: