PEC I

Problema 1

a) Hallar Pr a partir de chi_100. Cuales seran las dimensiones de Pr?


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)

b) Representar graficamente la expresion de Pr en funcion de r, senyalando en la grafica los valores de r multiplos enteros de 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()


d) Probabilidad de encontrar el electron entre r=0 y r=r0


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)


Probabilidad entre r=0 y r=0.11 : 0.7619

EXTRAS


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


#### A continuación varias pruebas con scatterplot para ver si consigo representar la nube ####

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

Problema 2

b) hallar gráfica de Pr para chi200


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 [ ]: