Chemical Kinetics
Chapter: Chemical Kinetics Level: 5 — Mastery (cross-domain: math + physics + coding, build/prove) Time limit: 75 minutes Total marks: 50
Instructions: Answer all three questions. Show full derivations. Where code is requested, write clean, runnable Python (NumPy/SciPy allowed). Use .
Question 1 — Derivation + Mechanism Proof (18 marks)
A proposed gas-phase decomposition follows the mechanism:
(a) Using the steady-state approximation for , derive the rate law for and show it reduces to first order. (6)
(b) Starting from the differential first-order rate law, derive the integrated form and prove that the half-life is independent of initial concentration. (4)
(c) At the reaction is first order with . Compute the time for to fall to of its initial value, and the fraction remaining after . (5)
(d) Explain why molecularity of the overall reaction is undefined but order is well-defined here, referencing the rate-determining step. (3)
Question 2 — Arrhenius Analysis + Coding (18 marks)
Kinetic data for a first-order reaction:
| (K) | 300 | 320 | 340 | 360 | 380 |
|---|---|---|---|---|---|
| (s⁻¹) |
(a) Derive the linearized Arrhenius relation and state which quantities you plot to obtain and . (3)
(b) Write a Python script that performs a least-squares linear fit of vs , extracts (in kJ/mol) and , and prints the coefficient of determination . (7)
(c) Using the two extreme data points only (300 K and 380 K), analytically estimate and compare to what a full fit would give (state expected agreement and one source of discrepancy). (4)
(d) A catalyst lowers by . Assuming unchanged, compute the rate-enhancement factor at . (4)
Question 3 — Collision Theory + Pseudo-order Build (14 marks)
(a) The collision-theory rate constant is . For a bimolecular reaction the measured while collision theory predicts a collision frequency factor . Compute the steric factor and interpret its physical meaning. (4)
(b) In the ester hydrolysis carried out with water in large excess, explain quantitatively why the reaction appears first order (pseudo-first-order). Define the observed rate constant in terms of the true rate constant. (4)
(c) You measure ester concentration vs time. Design a coded procedure (pseudocode or Python) that determines whether the data are zero-, first-, or second-order using the integrated-rate linearity test, returning the best-fit order by comparing values. (6)
Answer keyMark scheme & solutions
Question 1
(a) Steady-state on Cl: rate of formation = rate of consumption. (1) (2) Consumption of NO₂Cl occurs in both steps: (1) Substitute : (1) First order with . (1)
(b) (1) (1) At , : (1) — independent of . (1)
(c) 12.5% = → 3 half-lives. (1) . (1) . (1) Fraction after 600 s: (13.0%). (2)
(d) Overall reaction is composite (multi-step), so no single molecular event → molecularity undefined. (1) Order is experimentally determined from the RDS (slow step 1, unimolecular in NO₂Cl) giving overall order 1. (1) Molecularity applies only to elementary steps (each here is uni-/bi-molecular). (1)
Question 2
(a) . (2) Plot (y) vs (x): slope , intercept . (1)
(b) Script (7):
import numpy as np
T = np.array([300,320,340,360,380.])
k = np.array([1.10e-4,6.30e-4,2.90e-3,1.10e-2,3.60e-2])
x, y = 1/T, np.log(k)
slope, intercept = np.polyfit(x, y, 1)
Ea = -slope*8.314 # J/mol
A = np.exp(intercept)
yhat = slope*x + intercept
R2 = 1 - np.sum((y-yhat)**2)/np.sum((y-y.mean())**2)
print(f"Ea = {Ea/1000:.1f} kJ/mol, A = {A:.3e} s^-1, R2 = {R2:.5f}")Expected output ≈ , , . (marks: fit 3, Ea/A 2, R² 2)
(c) Two-point: . (1) . (1) . .
(correction: recompute — see verify) ? Let me flag: two-point gives value close to full fit; discrepancy arises because two-point ignores curvature/scatter and weights only endpoints. (agreement good if data ideal; 1 mark reasoning, 1 mark value) (2)
(d) . (4)
Question 3
(a) . (2) Meaning: only ~0.5% of sufficiently energetic collisions have correct orientation to react; reflects orientational/steric requirements not captured by simple collision geometry. (2)
(b) Rate (true second order). (1) With , const. (1) So rate with . (1) Reaction is pseudo-first-order; a plot of vs is linear. (1)
(c) (6):
import numpy as np
def determine_order(t, C):
tests = {
0: C, # zero: C vs t linear
1: np.log(C), # first: ln C vs t linear
2: 1/C, # second: 1/C vs t linear
}
best, bestR2 = None, -np.inf
for order, y in tests.items():
s, b = np.polyfit(t, y, 1)
yh = s*t + b
R2 = 1 - np.sum((y-yh)**2)/np.sum((y-y.mean())**2)
if R2 > bestR2:
bestR2, best = R2, order
return best, bestR2Marks: correct three transforms 3, R² comparison loop 2, returns best order 1.
[
{"claim":"12.5% needs 3 half-lives; t = 611.6 s","code":"k=3.4e-3; t=3*ln(2)/k; result = abs(float(t)-611.6)<1.0"},
{"claim":"Fraction remaining after 600 s approx 0.130","code":"k=3.4e-3; f=exp(-k*600); result = abs(float(f)-0.130)<0.002"},
{"claim":"Two-point Ea approx 68.6 kJ/mol","code":"R=8.314; val=R*log(3.60e-2/1.10e-4)/(1/300-1/380); result = abs(float(val)/1000-68.6)<1.0"},
{"claim":"Catalyst enhancement e^(25000/(R*300)) approx 2.25e4","code":"R=8.314; r=exp(25000/(R*300)); result = abs(float(r)/2.25e4-1)<0.05"},
{"claim":"Steric factor P = A/Z = 5.25e-3","code":"P=2.1e9/4.0e11; result = abs(float(P)-5.25e-3)<1e-5"}
]