Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Ok-landscape
GitHub Repository: Ok-landscape/computational-pipeline
Path: blob/main/latex-templates/templates/chemistry/reaction_kinetics.tex
51 views
unlisted
1
% Reaction Kinetics Template
2
% Topics: Rate laws, Arrhenius equation, reaction mechanisms, catalysis
3
% Style: Research article with experimental data analysis
4
5
\documentclass[a4paper, 11pt]{article}
6
\usepackage[utf8]{inputenc}
7
\usepackage[T1]{fontenc}
8
\usepackage{amsmath, amssymb}
9
\usepackage{graphicx}
10
\usepackage{siunitx}
11
\usepackage{booktabs}
12
\usepackage{subcaption}
13
\usepackage[makestderr]{pythontex}
14
15
% Theorem environments
16
\newtheorem{definition}{Definition}[section]
17
\newtheorem{theorem}{Theorem}[section]
18
\newtheorem{example}{Example}[section]
19
\newtheorem{remark}{Remark}[section]
20
21
\title{Chemical Reaction Kinetics: Rate Laws, Mechanisms, and Catalysis}
22
\author{Physical Chemistry Laboratory}
23
\date{\today}
24
25
\begin{document}
26
\maketitle
27
28
\begin{abstract}
29
This study presents a comprehensive analysis of chemical reaction kinetics, examining
30
rate laws for reactions of different orders, temperature dependence through the
31
Arrhenius equation, and the effects of catalysis on reaction rates. We analyze
32
experimental concentration-time data to determine rate constants, activation energies,
33
and pre-exponential factors. Computational analysis demonstrates the integrated rate
34
laws, half-life relationships, and mechanistic interpretation of kinetic data.
35
\end{abstract}
36
37
\section{Introduction}
38
39
Chemical kinetics describes the rates of chemical reactions and the factors that affect
40
them. Understanding reaction kinetics is essential for reaction mechanism elucidation,
41
industrial process optimization, and pharmaceutical drug stability studies.
42
43
\begin{definition}[Rate Law]
44
For a reaction $aA + bB \rightarrow$ products, the rate law has the general form:
45
\begin{equation}
46
\text{Rate} = -\frac{1}{a}\frac{d[A]}{dt} = k[A]^m[B]^n
47
\end{equation}
48
where $k$ is the rate constant, and $m$, $n$ are the reaction orders.
49
\end{definition}
50
51
\section{Theoretical Framework}
52
53
\subsection{Integrated Rate Laws}
54
55
\begin{theorem}[Integrated Rate Laws]
56
For a reaction $A \rightarrow$ products with initial concentration $[A]_0$:
57
\begin{itemize}
58
\item \textbf{Zero-order}: $[A] = [A]_0 - kt$, \quad $t_{1/2} = \frac{[A]_0}{2k}$
59
\item \textbf{First-order}: $\ln[A] = \ln[A]_0 - kt$, \quad $t_{1/2} = \frac{\ln 2}{k}$
60
\item \textbf{Second-order}: $\frac{1}{[A]} = \frac{1}{[A]_0} + kt$, \quad $t_{1/2} = \frac{1}{k[A]_0}$
61
\end{itemize}
62
\end{theorem}
63
64
\subsection{Temperature Dependence}
65
66
\begin{definition}[Arrhenius Equation]
67
The temperature dependence of rate constants is described by:
68
\begin{equation}
69
k = A e^{-E_a/RT}
70
\end{equation}
71
where $A$ is the pre-exponential factor, $E_a$ is the activation energy, $R$ is the gas
72
constant, and $T$ is absolute temperature. The linearized form is:
73
\begin{equation}
74
\ln k = \ln A - \frac{E_a}{R} \cdot \frac{1}{T}
75
\end{equation}
76
\end{definition}
77
78
\begin{theorem}[Eyring Equation]
79
Transition state theory gives:
80
\begin{equation}
81
k = \frac{k_B T}{h} e^{-\Delta G^\ddagger/RT} = \frac{k_B T}{h} e^{\Delta S^\ddagger/R} e^{-\Delta H^\ddagger/RT}
82
\end{equation}
83
where $\Delta G^\ddagger$, $\Delta H^\ddagger$, and $\Delta S^\ddagger$ are the activation parameters.
84
\end{theorem}
85
86
\subsection{Catalysis}
87
88
\begin{definition}[Catalytic Effect]
89
A catalyst provides an alternative reaction pathway with lower activation energy $E_a^{cat} < E_a^{uncat}$.
90
The rate enhancement factor is:
91
\begin{equation}
92
\frac{k_{cat}}{k_{uncat}} = e^{(E_a^{uncat} - E_a^{cat})/RT}
93
\end{equation}
94
\end{definition}
95
96
\begin{remark}[Enzyme Catalysis]
97
Enzymes are biological catalysts that follow Michaelis-Menten kinetics:
98
\begin{equation}
99
v = \frac{V_{max}[S]}{K_m + [S]}
100
\end{equation}
101
\end{remark}
102
103
\section{Computational Analysis}
104
105
\begin{pycode}
106
import numpy as np
107
import matplotlib.pyplot as plt
108
from scipy.optimize import curve_fit
109
from scipy.stats import linregress
110
111
np.random.seed(42)
112
113
# Integrated rate laws
114
def zero_order(t, A0, k):
115
return np.maximum(A0 - k * t, 0)
116
117
def first_order(t, A0, k):
118
return A0 * np.exp(-k * t)
119
120
def second_order(t, A0, k):
121
return A0 / (1 + A0 * k * t)
122
123
# True parameters
124
A0_true = 1.0 # mol/L
125
k_zero = 0.02 # mol/(L·s)
126
k_first = 0.05 # 1/s
127
k_second = 0.1 # L/(mol·s)
128
129
# Time array
130
t = np.linspace(0, 50, 100)
131
132
# Generate concentration data with noise
133
noise = 0.02
134
conc_zero = zero_order(t, A0_true, k_zero) * (1 + noise * np.random.randn(len(t)))
135
conc_first = first_order(t, A0_true, k_first) * (1 + noise * np.random.randn(len(t)))
136
conc_second = second_order(t, A0_true, k_second) * (1 + noise * np.random.randn(len(t)))
137
conc_zero = np.maximum(conc_zero, 0.01)
138
conc_first = np.maximum(conc_first, 0.01)
139
conc_second = np.maximum(conc_second, 0.01)
140
141
# Fit first-order data
142
ln_conc = np.log(conc_first)
143
slope_first, intercept_first, r_first, _, _ = linregress(t, ln_conc)
144
k_first_fit = -slope_first
145
A0_first_fit = np.exp(intercept_first)
146
147
# Fit second-order data
148
inv_conc = 1 / conc_second
149
slope_second, intercept_second, r_second, _, _ = linregress(t, inv_conc)
150
k_second_fit = slope_second
151
A0_second_fit = 1 / intercept_second
152
153
# Arrhenius analysis
154
T = np.array([280, 290, 300, 310, 320, 330, 340]) # K
155
Ea_true = 50000 # J/mol
156
A_true = 1e10 # 1/s
157
R = 8.314 # J/(mol·K)
158
k_arr = A_true * np.exp(-Ea_true / (R * T))
159
k_arr_exp = k_arr * (1 + 0.05 * np.random.randn(len(T)))
160
161
# Arrhenius fit
162
inv_T = 1 / T
163
ln_k = np.log(k_arr_exp)
164
slope_arr, intercept_arr, r_arr, _, _ = linregress(inv_T, ln_k)
165
Ea_fit = -slope_arr * R
166
A_fit = np.exp(intercept_arr)
167
168
# Catalysis comparison
169
Ea_uncat = 75000 # J/mol
170
Ea_cat = 45000 # J/mol
171
T_cat = np.linspace(250, 400, 100)
172
k_uncat = 1e13 * np.exp(-Ea_uncat / (R * T_cat))
173
k_cat = 1e13 * np.exp(-Ea_cat / (R * T_cat))
174
enhancement = k_cat / k_uncat
175
176
# Half-life comparison
177
t_range = np.linspace(0, 100, 500)
178
half_lives = []
179
for order, k in [(0, k_zero), (1, k_first), (2, k_second)]:
180
if order == 0:
181
t_half = A0_true / (2 * k)
182
elif order == 1:
183
t_half = np.log(2) / k
184
else:
185
t_half = 1 / (k * A0_true)
186
half_lives.append(t_half)
187
188
# Create figure
189
fig = plt.figure(figsize=(14, 12))
190
191
# Plot 1: Concentration vs time for different orders
192
ax1 = fig.add_subplot(3, 3, 1)
193
ax1.plot(t, conc_zero, 'b-', linewidth=2, label='Zero-order')
194
ax1.plot(t, conc_first, 'g-', linewidth=2, label='First-order')
195
ax1.plot(t, conc_second, 'r-', linewidth=2, label='Second-order')
196
ax1.set_xlabel('Time (s)')
197
ax1.set_ylabel('[A] (mol/L)')
198
ax1.set_title('Concentration vs Time')
199
ax1.legend(fontsize=8)
200
ax1.set_ylim([0, 1.2])
201
202
# Plot 2: First-order linearization
203
ax2 = fig.add_subplot(3, 3, 2)
204
ax2.scatter(t, ln_conc, s=20, c='green', edgecolor='black', alpha=0.7)
205
ax2.plot(t, slope_first * t + intercept_first, 'r-', linewidth=2)
206
ax2.set_xlabel('Time (s)')
207
ax2.set_ylabel('ln[A]')
208
ax2.set_title(f'First-Order Plot ($R^2 = {r_first**2:.4f}$)')
209
210
# Plot 3: Second-order linearization
211
ax3 = fig.add_subplot(3, 3, 3)
212
ax3.scatter(t, inv_conc, s=20, c='red', edgecolor='black', alpha=0.7)
213
ax3.plot(t, slope_second * t + intercept_second, 'b-', linewidth=2)
214
ax3.set_xlabel('Time (s)')
215
ax3.set_ylabel('1/[A] (L/mol)')
216
ax3.set_title(f'Second-Order Plot ($R^2 = {r_second**2:.4f}$)')
217
218
# Plot 4: Arrhenius plot
219
ax4 = fig.add_subplot(3, 3, 4)
220
ax4.scatter(1000/T, ln_k, s=60, c='blue', edgecolor='black')
221
inv_T_fine = np.linspace(1000/350, 1000/270, 100)
222
ax4.plot(inv_T_fine, slope_arr * inv_T_fine/1000 + intercept_arr, 'r-', linewidth=2)
223
ax4.set_xlabel('1000/T (K$^{-1}$)')
224
ax4.set_ylabel('ln k')
225
ax4.set_title('Arrhenius Plot')
226
227
# Plot 5: Rate constant vs temperature
228
ax5 = fig.add_subplot(3, 3, 5)
229
ax5.semilogy(T, k_arr_exp, 'bo', markersize=8)
230
T_fine = np.linspace(275, 345, 100)
231
ax5.semilogy(T_fine, A_fit * np.exp(-Ea_fit / (R * T_fine)), 'r-', linewidth=2)
232
ax5.set_xlabel('Temperature (K)')
233
ax5.set_ylabel('k (s$^{-1}$)')
234
ax5.set_title('Rate Constant vs Temperature')
235
236
# Plot 6: Catalysis effect
237
ax6 = fig.add_subplot(3, 3, 6)
238
ax6.semilogy(T_cat, k_uncat, 'b-', linewidth=2, label='Uncatalyzed')
239
ax6.semilogy(T_cat, k_cat, 'r-', linewidth=2, label='Catalyzed')
240
ax6.set_xlabel('Temperature (K)')
241
ax6.set_ylabel('k (s$^{-1}$)')
242
ax6.set_title('Effect of Catalysis')
243
ax6.legend(fontsize=8)
244
245
# Plot 7: Rate enhancement factor
246
ax7 = fig.add_subplot(3, 3, 7)
247
ax7.semilogy(T_cat, enhancement, 'purple', linewidth=2)
248
ax7.set_xlabel('Temperature (K)')
249
ax7.set_ylabel('$k_{cat}/k_{uncat}$')
250
ax7.set_title('Rate Enhancement Factor')
251
252
# Plot 8: Half-life comparison
253
ax8 = fig.add_subplot(3, 3, 8)
254
A0_range = np.linspace(0.1, 2.0, 100)
255
t_half_zero = A0_range / (2 * k_zero)
256
t_half_first = np.log(2) / k_first * np.ones_like(A0_range)
257
t_half_second = 1 / (k_second * A0_range)
258
ax8.plot(A0_range, t_half_zero, 'b-', linewidth=2, label='Zero-order')
259
ax8.plot(A0_range, t_half_first, 'g-', linewidth=2, label='First-order')
260
ax8.plot(A0_range, t_half_second, 'r-', linewidth=2, label='Second-order')
261
ax8.set_xlabel('$[A]_0$ (mol/L)')
262
ax8.set_ylabel('$t_{1/2}$ (s)')
263
ax8.set_title('Half-Life vs Initial Concentration')
264
ax8.legend(fontsize=8)
265
ax8.set_ylim([0, 50])
266
267
# Plot 9: Energy diagram
268
ax9 = fig.add_subplot(3, 3, 9)
269
reaction_coord = np.linspace(0, 1, 100)
270
# Gaussian-like barrier
271
E_react = 0
272
E_prod = -30
273
E_ts_uncat = 50
274
E_ts_cat = 30
275
E_uncat = E_react + (E_ts_uncat - E_react) * np.exp(-((reaction_coord - 0.4)**2) / 0.02)
276
E_uncat[reaction_coord > 0.5] = E_ts_uncat - (E_ts_uncat - E_prod) * (reaction_coord[reaction_coord > 0.5] - 0.4) / 0.6
277
E_cat = E_react + (E_ts_cat - E_react) * np.exp(-((reaction_coord - 0.4)**2) / 0.02)
278
E_cat[reaction_coord > 0.5] = E_ts_cat - (E_ts_cat - E_prod) * (reaction_coord[reaction_coord > 0.5] - 0.4) / 0.6
279
ax9.plot(reaction_coord, E_uncat, 'b-', linewidth=2, label='Uncatalyzed')
280
ax9.plot(reaction_coord, E_cat, 'r--', linewidth=2, label='Catalyzed')
281
ax9.axhline(y=0, color='gray', linestyle=':', alpha=0.5)
282
ax9.set_xlabel('Reaction Coordinate')
283
ax9.set_ylabel('Energy (kJ/mol)')
284
ax9.set_title('Energy Diagram')
285
ax9.legend(fontsize=8)
286
287
plt.tight_layout()
288
plt.savefig('reaction_kinetics_analysis.pdf', dpi=150, bbox_inches='tight')
289
plt.close()
290
\end{pycode}
291
292
\begin{figure}[htbp]
293
\centering
294
\includegraphics[width=\textwidth]{reaction_kinetics_analysis.pdf}
295
\caption{Reaction kinetics analysis: (a) Concentration decay for different reaction orders;
296
(b-c) Linearization plots for first and second-order reactions; (d-e) Arrhenius analysis
297
for temperature dependence; (f-g) Catalysis effects on rate constants; (h) Half-life
298
dependence on initial concentration; (i) Potential energy diagram with and without catalyst.}
299
\label{fig:kinetics}
300
\end{figure}
301
302
\section{Results}
303
304
\subsection{Kinetic Parameters}
305
306
\begin{pycode}
307
print(r"\begin{table}[htbp]")
308
print(r"\centering")
309
print(r"\caption{Fitted Rate Constants and Kinetic Parameters}")
310
print(r"\begin{tabular}{lccc}")
311
print(r"\toprule")
312
print(r"Parameter & True Value & Fitted Value & Units \\")
313
print(r"\midrule")
314
print(f"$k_{{first}}$ & {k_first} & {k_first_fit:.4f} & s$^{{-1}}$ \\\\")
315
print(f"$k_{{second}}$ & {k_second} & {k_second_fit:.4f} & L mol$^{{-1}}$ s$^{{-1}}$ \\\\")
316
print(f"$E_a$ & {Ea_true/1000:.1f} & {Ea_fit/1000:.1f} & kJ/mol \\\\")
317
print(f"$A$ & {A_true:.2e} & {A_fit:.2e} & s$^{{-1}}$ \\\\")
318
print(r"\bottomrule")
319
print(r"\end{tabular}")
320
print(r"\label{tab:parameters}")
321
print(r"\end{table}")
322
\end{pycode}
323
324
\subsection{Half-Lives}
325
326
\begin{pycode}
327
print(r"\begin{table}[htbp]")
328
print(r"\centering")
329
print(r"\caption{Half-Lives for Different Reaction Orders}")
330
print(r"\begin{tabular}{lccc}")
331
print(r"\toprule")
332
print(r"Order & Formula & Value (s) & Dependence on $[A]_0$ \\")
333
print(r"\midrule")
334
print(f"Zero & $[A]_0/(2k)$ & {half_lives[0]:.1f} & Proportional \\\\")
335
print(f"First & $\\ln 2/k$ & {half_lives[1]:.1f} & Independent \\\\")
336
print(f"Second & $1/(k[A]_0)$ & {half_lives[2]:.1f} & Inversely proportional \\\\")
337
print(r"\bottomrule")
338
print(r"\end{tabular}")
339
print(r"\label{tab:halflives}")
340
print(r"\end{table}")
341
\end{pycode}
342
343
\section{Discussion}
344
345
\begin{example}[Determining Reaction Order]
346
The reaction order is determined by finding which linearization plot gives the best fit:
347
\begin{itemize}
348
\item Zero-order: $[A]$ vs $t$ is linear
349
\item First-order: $\ln[A]$ vs $t$ is linear
350
\item Second-order: $1/[A]$ vs $t$ is linear
351
\end{itemize}
352
The first-order plot has $R^2 = \py{f"{r_first**2:.4f}"}$ for the first-order data.
353
\end{example}
354
355
\begin{remark}[Activation Energy Interpretation]
356
The fitted activation energy of $\py{f"{Ea_fit/1000:.1f}"}$ kJ/mol indicates:
357
\begin{itemize}
358
\item $E_a < 40$ kJ/mol: Diffusion-controlled reaction
359
\item $40 < E_a < 120$ kJ/mol: Typical chemical reaction
360
\item $E_a > 120$ kJ/mol: High barrier, slow reaction
361
\end{itemize}
362
\end{remark}
363
364
\begin{example}[Catalytic Enhancement]
365
At 300 K, the rate enhancement due to catalysis is:
366
\begin{equation}
367
\frac{k_{cat}}{k_{uncat}} = e^{(75000 - 45000)/(8.314 \times 300)} = \py{f"{np.exp(30000/(8.314*300)):.0f}"}
368
\end{equation}
369
This enormous enhancement explains the importance of catalysts in industrial chemistry.
370
\end{example}
371
372
\section{Conclusions}
373
374
This analysis demonstrates the fundamental principles of chemical kinetics:
375
\begin{enumerate}
376
\item First-order rate constant: $k = \py{f"{k_first_fit:.4f}"}$ s$^{-1}$ with $t_{1/2} = \py{f"{half_lives[1]:.1f}"}$ s
377
\item Activation energy from Arrhenius plot: $E_a = \py{f"{Ea_fit/1000:.1f}"}$ kJ/mol
378
\item Catalysis reduces activation energy by $\py{f"{(Ea_uncat-Ea_cat)/1000:.0f}"}$ kJ/mol
379
\item Half-life dependence on $[A]_0$ distinguishes reaction orders
380
\item Linearization methods enable determination of rate laws from experimental data
381
\end{enumerate}
382
383
\section*{Further Reading}
384
385
\begin{itemize}
386
\item Atkins, P. \& de Paula, J. \textit{Physical Chemistry}, 11th ed. Oxford, 2018.
387
\item Houston, P.L. \textit{Chemical Kinetics and Reaction Dynamics}. Dover, 2006.
388
\item Steinfeld, J.I. et al. \textit{Chemical Kinetics and Dynamics}, 2nd ed. Prentice Hall, 1998.
389
\end{itemize}
390
391
\end{document}
392
393