Skip to content
Snippets Groups Projects
1_einstein_model.md 19.67 KiB
jupyter:
  jupytext:
    text_representation:
      extension: .md
      format_name: markdown
      format_version: '1.0'
      jupytext_version: 1.0.2
  kernelspec:
    display_name: Python 3
    language: python
    name: python3
import pandas

from matplotlib import pyplot
import numpy as np
from scipy.optimize import curve_fit
from scipy.integrate import quad
import plotly.offline as py
import plotly.graph_objs as go
from ipywidgets import interact, FloatSlider, Layout

from common import draw_classic_axes, configure_plotting

configure_plotting()

py.init_notebook_mode(connected=True)

(based on chapter 2.1 of the book)

!!! success "Expected prerequisites"

Before the start of this lecture, you should be able to:

- Write down the energy spectrum and partition function of a quantum harmonic oscillator
- Describe the equipartition theorem
- Write down the Bose-Einstein distribution

!!! summary "Learning goals"

After this lecture you will be able to:

- Explain how quantum mechanical effects influence the heat capacity of solids (the Einstein model)
- Compute the expected occupation number, energy, and heat capacity of a quantum harmonic oscillator (a bosonic mode)
- Write down the total internal energy of an Einstein solid

Classical limit of heat capacity

Let us look at the heat capacities of different chemical elements1:


elements = pandas.read_json('elements.json')
elements.full_name = elements.full_name.str.capitalize()
hovertext = elements.T.apply(
    lambda s: f'<sup>{s.number}</sup>{s.abbr} '
              f'[{s.full_name}{", " * bool(s.remark)}{s.remark}]'
)

fig = go.Figure(
    data=[
        go.Scatter(
            x=elements.number,
            y=elements.c / 8.314,
            mode='markers+text',
            textposition='top center',
            hovertext=hovertext,
            hoverinfo='text'
        ),
    ],
    layout=go.Layout(
        title='Heat capacity of various chemical elements',
        autosize=True,
        yaxis=go.layout.YAxis(
            title='$C/k_B$',
            tick0=1,
            dtick=2,
        ),
        xaxis=go.layout.XAxis(
            title='Atomic number'
        ),
        hovermode='closest',
    ),
)

py.iplot(fig, show_link=False)