Poisson’s ratio (1829)#

A bar stretched along its axis gets thinner. Siméon Denis Poisson’s 1829 molecular theory of elasticity predicted that the lateral strain is always one quarter of the axial strain. Measurements soon showed that the ratio \(\nu\) depends on the material: about 0.3 for steel, nearly 0.5 for rubber and nearly zero for cork, which is why cork seals a wine bottle without jamming in the neck. The lateral strain is \(-\nu\varepsilon\) (poisson_lateral_strain()), so the volume changes by \((1 - 2\nu)\varepsilon\) to first order: an incompressible material has \(\nu = 1/2\).

import matplotlib.pyplot as plt
import numpy as np

from engineeringkit.structural_engineering import poisson_lateral_strain

Volume change of a stretched bar#

strain = 1e-3
materials = {"cork": 0.0, "Poisson's 1/4": 0.25, "steel": 0.30, "concrete": 0.20, "rubber": 0.499}
for name, nu in materials.items():
    lateral = poisson_lateral_strain(strain, nu)
    volume = (1 + strain) * (1 + lateral) ** 2 - 1
    print(f"{name:14s} nu = {nu:5.3f}: lateral strain {lateral:+.2e}, volume strain {volume:+.3e}")
    assert abs(volume - (1 - 2 * nu) * strain) <= strain**2  # first-order formula, second-order error
cork           nu = 0.000: lateral strain -0.00e+00, volume strain +1.000e-03
Poisson's 1/4  nu = 0.250: lateral strain -2.50e-04, volume strain +4.996e-04
steel          nu = 0.300: lateral strain -3.00e-04, volume strain +3.995e-04
concrete       nu = 0.200: lateral strain -2.00e-04, volume strain +5.996e-04
rubber         nu = 0.499: lateral strain -4.99e-04, volume strain +1.251e-06

The exact volume ratio, across the admissible range#

nu = np.linspace(-0.9, 0.49, 200)
eps = 0.01
exact = (1 + eps) * (1 + poisson_lateral_strain(eps, nu)) ** 2 - 1
fig, ax = plt.subplots(figsize=(6, 3.5))
ax.plot(nu, exact / eps, label="exact")
ax.plot(nu, 1 - 2 * nu, "--", label=r"$1 - 2\nu$")
ax.axvline(0.25, color="gray", ls=":", label="Poisson's 1/4")
ax.set(xlabel=r"Poisson's ratio $\nu$", ylabel="volume strain / axial strain", title="1% stretch")
ax.legend()
fig.tight_layout()

plt.show()
1% stretch

Total running time of the script: (0 minutes 0.031 seconds)

Gallery generated by Sphinx-Gallery