Note
Go to the end to download the full example code.
Ostwald’s dilution law: weak acids dissociate more when diluted#
Dissolving less acid in more water increases the fraction of it that dissociates, even though the absolute \([H^+]\) goes down – the dilution law Wilhelm Ostwald derived in 1888 by applying the mass-action law to Arrhenius’s dissociation equilibrium,
Here the degree of dissociation \(\alpha\) of acetic acid is
computed from the exact cubic charge-balance solution in
WeakAcid and compared
against Ostwald’s own closed-form solution of the quadratic above (which
ignores water autoionization).
import matplotlib.pyplot as plt
import numpy as np
from chemistrykit.solutions.systems.acid_base import WeakAcid
Ka = 1.8e-5 # acetic acid
Ca_values = np.logspace(-6, 0, 80)
alpha_exact = np.array([WeakAcid(Ca=Ca, Ka=Ka).percent_dissociation() / 100.0 for Ca in Ca_values])
# Ostwald's quadratic alpha^2 Ca + Ka alpha - Ka = 0, positive root:
alpha_ostwald = (-Ka + np.sqrt(Ka**2 + 4.0 * Ka * Ca_values)) / (2.0 * Ca_values)
fig, ax = plt.subplots(figsize=(7, 5))
ax.semilogx(Ca_values, 100.0 * alpha_exact, color="steelblue", label="exact (WeakAcid)")
ax.semilogx(Ca_values, 100.0 * alpha_ostwald, color="darkorange", linestyle="--", label=r"Ostwald: $K_a = \alpha^2 C_a/(1-\alpha)$")
ax.set_xlabel("total acid concentration $C_a$ (mol/L)")
ax.set_ylabel(r"percent dissociated, $100\alpha$")
ax.set_title("Ostwald dilution law: acetic acid")
ax.legend()
fig.tight_layout()

The “Ostwald constant” \(\alpha^2 C_a/(1-\alpha)\) computed from the exact degree of dissociation stays equal to \(K_a\) across four decades of dilution – the experimental test Ostwald made with conductivity data for dozens of weak acids:
Ca = 1.0e-06 M: alpha = 0.9494, alpha^2 Ca/(1-alpha) = 1.780e-05
Ca = 3.3e-05 M: alpha = 0.5144, alpha^2 Ca/(1-alpha) = 1.800e-05
Ca = 1.1e-03 M: alpha = 0.1204, alpha^2 Ca/(1-alpha) = 1.800e-05
Ca = 3.6e-02 M: alpha = 0.0221, alpha^2 Ca/(1-alpha) = 1.800e-05
Total running time of the script: (0 minutes 0.068 seconds)