The moment of inertia tensor

Question P6.5.2

The (symmetric) matrix representing the inertia tensor of a collection of masses, $m_i$, with positions $(x_i, y_i, z_i)$ relative to their centre of mass is \begin{align*} \mathbf{I} = \left( \begin{array}{lll} I_{xx} & I_{xy} & I_{xz}\\ I_{xy} & I_{yy} & I_{yz}\\ I_{xz} & I_{yz} & I_{zz} \end{array}\right), \end{align*} where \begin{align*} I_{xx} &= \sum_i m_i(y_i^2 + z_i^2), & \quad I_{yy} &= \sum_i m_i(x_i^2 + z_i^2), & \quad I_{zz} &= \sum_i m_i(x_i^2 + y_i^2),\\ I_{xy} &= -\sum_i m_ix_iy_i, & \quad I_{yz} &= -\sum_i m_iy_iz_i, & \quad I_{xz} &= -\sum_i m_ix_iz_i. \end{align*}

There exists a transformation of the coordinate frame such that this matrix is diagonal: the axes of this transformed frame are called the principal axes and the diagonal inertia matrix elements, $I_a \le I_b \le I_c$ are the principal moments of inertia.

Write a program to calculate the principal moments of inertia of a molecule, given the position and masses of its atoms relative to some arbitrary origin. Your program should first relocate the atom coordinates relative to its centre of mass and then determine the principal moments of inertia as the eigenvalues of the matrix $\mathbf{I}$.

A molecule may be classified as follows according to the relative values of $I_a$, $I_b$ and $I_c$:

  • $I_a = I_b = I_c$: spherical top;

  • $I_a = I_b < I_c$: oblate symmetric top;

  • $I_a < I_b = I_c$: prolate symmetric top;

  • $I_a < I_b < I_c$: asymmetric top.

Determine the principal moments of inertia of and classify the molecules $\mathrm{NH_3}$, $\mathrm{CH_4}$, $\mathrm{CH_3Cl}$ and $\mathrm{O_3}$ given the data available in the file molecule-data.zip. Also determine the rotational constants, $A$, $B$ and $C$, related to the moments of inertia through $Q = h/(8\pi^2cI_q)$ ($Q=A,B,C; q=a,b,c$) and usually expressed in $\mathrm{cm^{-1}}$.


Solution

To access solutions, please obtain an access code from Cambridge University Press at the Lecturer Resources page for my book (registration required) and then sign up to scipython.com providing this code.