Taylor problem 5.2
Contents
Taylor problem 5.2#
last revised: 14-Jan-2019 by Dick Furnstahl [furnstahl.1@osu.edu]
The potential energy for two atoms in a molecule can sometimes be approximated by the Morse function
\(\begin{align} U(r) = A\left[ \left(e^{(R-r)/S} -1\right)^2 -1 \right] \end{align}\)
for \(0 < r < \infty\) with \(A\), \(R\), and \(S\) all positive constants and \(S \ll R\).
The goals are to find the equilibrium position \(r_0\) and then the frequency of small oscillations.
Take the derivative and solve for the equilibrium \(r_0\):
\(\begin{align} \frac{dU}{dr} = 2A\left(e^{(R-r)/S} -1\right)\times e^{(R-r)/S} \times \frac{-1}{S} = 0 \quad\Longrightarrow\quad r_0 = R \quad\Longrightarrow\quad U(r_0) = -A \end{align}\)
Expand around \(r = r_0\) up to \((r - r_0)^2\) to find the small angle approximation equation and frequency:
\(\begin{align} U_{sa}(r) = A + \frac{A}{S^2} (r - r_0)^2 \quad\Longrightarrow\quad k = \frac{2 A}{S^2} \quad\Longrightarrow\quad \omega = \sqrt{k/m} = \sqrt{\frac{2 A}{ m S^2}} \end{align}\)
Make a plot to check \(r_0\)#
%matplotlib notebook
# Use notebook rather than inline so plot remains active between
# cells and so we can zoom in.
import numpy as np
import matplotlib.pyplot as plt
def U_pot(r, S=0.1, big_R=1, A=1):
"""Potential from Taylor problem 5.13."""
return A * ( (np.exp((big_R - r)/S) - 1.)**2 - 1. )
def U_pot_min(S=0.1, big_R=1, A=1):
"""Returns the value of r at the minimum of U(r) and the value of
U(r) at that point."""
return big_R, -A
def U_pot_sa(r, S=0.1, big_R=1, A=1):
"""Plot the potential in the small angle approximation"""
r0 = big_R
return -A + A * (r - r0)**2 / S**2
r_pts = np.arange(0.01, 6., .001)
U_pot_1 = U_pot(r_pts, S=0.2)
U_pot_2 = U_pot(r_pts, S=0.5)
#U_pot_3 = U_pot(r_pts, S=0.3)
fig = plt.figure(figsize=(4,4))
ax = fig.add_subplot(1,1,1)
ax.plot(r_pts, U_pot_1, label=r'$S=0.2$', color='blue')
ax.plot(r_pts, U_pot_2, label=r'$S=0.5$', color='red')
#ax.plot(r_pts, U_pot_3, label=r'$S=0.3$', color='green')
ax.set_xlim(0.,2.5)
ax.set_ylim(-2.,5.)
x0, y0 = U_pot_min(S=0.2)
ax.scatter(x0, y0, color='blue')
x0, y0 = U_pot_min(S=0.5)
ax.scatter(x0, y0, color='red')
#x0, y0 = U_pot_min(S=0.3)
#ax.scatter(x0, y0, color='green')
ax.set_xlabel('r')
ax.set_ylabel('U(r)')
ax.legend()
fig.tight_layout()
Now put in small angle potentials (note that this changes the figure above, which is still the active figure (because we are using %matplotlib notebook
). Use the controls to zoom in to verify that the small-angle approximated \(U(r)\) really does agree for \(r\) close enough to the minimum.
# "sa" here stands for "small-angle".
U_pot_sa_1 = U_pot_sa(r_pts, S=0.2)
U_pot_sa_2 = U_pot_sa(r_pts, S=0.5)
#U_pot_sa_3 = U_pot_sa(r_pts, S=0.3)
ax.plot(r_pts, U_pot_sa_1, color='blue', ls='--')
ax.plot(r_pts, U_pot_sa_2, color='red', ls='--')
#ax.plot(r_pts, U_pot_sa_3, color='green', ls='--')
[<matplotlib.lines.Line2D at 0x121585240>]
Can we solve for exact and small angle oscillations numerically?