4.4.1. Chemical Kinetics and Rate Laws#
4.4.1.1. Motivation#
The rate of a chemical reaction is a measure of how fast the reaction occurs. This rate will not be the same for all reactions and will not stay constant as a reaction progresses. How fast a reaction happens is an extremely important aspect of a reaction for all sorts of things. For example, how fast food rots/decays is important in our daily lives. All food will rot/decay but we often choose to slow this down by putting it in the refrigerator.
4.4.1.2. Learning Goals#
After working throught these notes, you should be able to:
Write out the differential rate law (rate of reaction in terms of rate of change of reactants and products) for an arbitrary reaction
Differentiate between a differential rate law and a rate law
Describe what is meant by overall order of reaction and order of reaction with respect to a specific reactant
Identify the correct units for the rate constant based on overall rate of reaction
Use the mehtod of initial rates to estimate the orders of reaction with respect to reactants and the rate constant
4.4.1.3. Coding Concepts#
The following coding concepts are used in this notebook:
numpy
4.4.1.4. The Differential Rate Law#
The rate of a chemical reaction, denoted \(v(t)\), is related the rate of dissapearance of the reactants and appearance of the products. The equation relating all of these things is called the differential rate law.
The rate of disappearance and appearance of products in a certain reaction will depend on their stoichiometric coefficients. In the reaction
for example, \(NO(g)\) will dissapear twice as fast as \(O_2(g)\) because two moles of \(NO\) are required to react with one mole of \(O_2\) to form \(2NO_2\). Thus, when we define a rate of reaction, we must do so in a consistent manner with regards to the stoichiometric coefficients.
Consider the general reaction
We define the extent of reaction, \(\xi\) using the moles of each reactant and product
This is similar to what we did in our discussion of Chemical Equilibria but here we have noted that the number of moles of reactants/products and the extent of reaction are time dependent quantities.
The rate of disappearance of reactants \(A\) and \(B\) as well as the rate of appearance of \(C\) and \(D\) can be related to the single rate of change of the extent of reaction. To see this, we differentiate the four equations above with respect to time, \(t\),:
Each equation can be rearranged to solve for \(\frac{d\xi(t)}{dt}\) to yield:
The rate of reaction is defined as the rate of change of extent of the reaction yielding
We typically measure amount of reactants and/or products in concentration, so we typically write the differential rate law in terms of these by dividing the above equation by volumne, \(V\):
This equation is what is called the differential rate law as it relates the rate of reaction to the time derivatives of the concentrations of products and reactants.
4.4.1.4.1. Example: Determine the Differential Rate Law#
Write out the differential rate law for the following balanced chemical reaction
The differential rate law equates the rate of reaction to the rate of dissappearance of all reactants and the rate of appearance of all products. For this reaction it looks like:
4.4.1.5. The Rate Law#
The rate law for a chemical reaction is an equation that relates the rate of a reaction to the concentrations of the reactants. For example, our reaction
Has the differential rate law
but the rate law for this reaction, one that relates the rate, \(v(t)\), to the concentrations of reactants cannot be inferred from the balanced chemical reaction. The rate law for this reaction has been experimentally determined to be
The rate law introduces a few new quantities and concepts to our discussion of rate of reaction. One of these, \(k\), is called the rate constant. This important quantity determines the proportionality or scaling between the concentrations of reactants to their appropriate power and the rate of a reaction.
The rate law also introduces the concept of order of reaction. This reaction is said to be second order with resepect to \(NO_2\), first order with respect to \(O_2\), and third order overall. Second order with resepect to \(NO_2\) can be inferred from the rate law because \([NO]\) is raised to the second power. First order with respect to \(O_2\) can be inferred from the rate law because \([O_2]\) is raised to the first power. Third order overall simply stems from adding up all powers of the reactants in the rate law to get a value of three.
The order of a reaction for any reactant cannot be inferred from the overall balanced chemical reaction. Notice, however, that, in this case, the order of reaction follows the stoichiometry of the balanced chemical reaction.
The overall order of the reaction dictate the units of the force constant. The rate of a reaction is always in units of amount per time (typically concentration per time). The rate law equates concentration per time to some overall power of concentration times \(k\) and thus the units of \(k\) must allow the two sides to be equal. Here is a table to help with this concept
Rate Law |
Order |
Units of \(k\) |
---|---|---|
\(v = k\) |
0 |
M\(\cdot\)s\(^{-1}\) |
\(v =k[A]\) |
1 |
s\(^{-1}\) |
\(v =k[A]^2\) |
2 |
M\(^{-1}\cdot\)s\(^{-1}\) |
\(v =k[A]^3\) |
3 |
M\(^{-2}\cdot\)s\(^{-1}\) |
4.4.1.6. Rate Laws Must be Determined Experimentally#
Rate laws must be determined experimentally. The order of a reaction cannot be inferred by the stoichiometry of the balanced chemical reaction or any other a priori information about the reaction.
To see how we might go about determining an order of reaction consider the generic reaction
The generic rate law can be written as
It is our goal to determine the powers \(m_A\) and \(m_B\).
Here we consider the method of measuring initial rate (with some experimental technique) and varying the initial concentrations of \(A\) and \(B\) in different trials. It is easiest to see how this method works in an example given below.
4.4.1.6.1. Example 1: Rate Law from Initial Rates Using Isolation Method#
Consider the following initial rate data for the reaction
Run/Trial |
\([NO_2]_0\)/mol\(\cdot\)dm\(^3\) |
\([F_2]_0\)/mol\(\cdot\)dm\(^{-3}\) |
\(v_0\)/mol\(\cdot\)dm\(^{-3}\cdot\)s\(^{-1}\) |
---|---|---|---|
1 |
1.15 |
1.15 |
\(6.12\times10^{-4}\) |
2 |
1.72 |
1.15 |
\(1.36\times10^{-3}\) |
3 |
1.15 |
2.30 |
\(1.22\times10^{-3}\) |
Determine the reaction rate law and value of the rate constant.
We start by writing out the generic form of the rate law
Here, we are using initial rates which can be written as
We now look at the trials/runs provided and recognize that the concentration of \(NO_2\) is held constant for trials 1 and 3. Thus, the change in initial rate between these two runs must be due to the change in initial concentration of \(F_2\). We start by writing out the initial rate law for each of these trials
We now divide the initial rate law from Run 3 by that of Run 1 to get:
import numpy as np
np.log(1.22e-3/6.12e-4)/np.log(2.30/1.15)
0.9952775897575967
To now determine \(m_{NO_2}\) we use runs 1 and 2
We now divide the initial rate law from Run 2 by that of Run 1 to get:
import numpy as np
np.log(1.36e-3/6.12e-4)/np.log(1.72/1.15)
1.9835627929236086
With the orders of reaction determined with respect to all reactants we can now determine the value of the rate constant. This can be done for with any run. Here I choose to use Run 1:
6.12e-4/1.15**3
0.00040239993424837686
4.4.1.6.2. Example 2: Rate Law from Initial Rates Using Simultaneous Linear Equations#
A more general solution to determine orders of reactions and the rate constants from initial concentration and rate data is to setup a set of simultaneous linear equations. This is essentially the same approach as the isolation method but does not require that one reactant be held constant between two trials.
The basic idea is as follows. The initial rate of the generic reaction
can be written as
where \(m_A\) and \(m_B\) are the orders of reaction with respect to their reactants and \(k\) is the rate constant for the reaction. It is the goal of this method to determine the values of these three unknowns from the data. If we take the log of the initial rate we see that the resulting equation is linear in our unknowns
with the exception of \(\ln k\) but we can determine that uniquely and then readily solve for \(k\). We see that this equation has three unknowns so we must have at least three linearly independent equations (trials) to solve for these unknowns. Let’s see how it works for our example above.
Consider the following initial rate data for the reaction
Run/Trial |
\([NO_2]_0\)/mol\(\cdot\)dm\(^3\) |
\([F_2]_0\)/mol\(\cdot\)dm\(^{-3}\) |
\(v_0\)/mol\(\cdot\)dm\(^{-3}\cdot\)s\(^{-1}\) |
---|---|---|---|
1 |
1.15 |
1.15 |
\(6.12\times10^{-4}\) |
2 |
1.72 |
1.15 |
\(1.36\times10^{-3}\) |
3 |
1.15 |
2.30 |
\(1.22\times10^{-3}\) |
Determine the reaction rate law and value of the rate constant.
We start by writing the three linear equations that result from this data:
This simultaneous set of linear equations can be solved in a variety of ways. I will do so using matrix algebra. The above set of three linear equations can be rewritten as a single matrix equation
This has the matrix general form
and can be solved using matrix algebra (typically using a least squares). I will do so using numpy least squares.
Show code cell source
import numpy as np
def initial_rates(c0,v0,int_ns = True):
"""
Solve for the orders of reaction and rate constant using initial concentration and rate data.
c0 - (n_trials, n_reactants) float matrix of initial concentration data
v0 - (n_trials) float vector of initial rate data
int_ns - boolean indicating whether to round the orders of reaction
Returns
ns - (n_reactants) float array of orders of reaction
k - float of rate constant for reaction
"""
n_trials = c0.shape[0]
n_reactants = c0.shape[1]
# create coefficient matrix
A = np.column_stack((np.log(c0),np.ones(n_trials)))
# solve least squares problem
x, r = np.linalg.lstsq(A,np.log(v0),rcond=None)[:2]
ns = x[:-1]
print("Non-rounded orders:", ns)
k = np.exp(x[-1])
print("Non-rounded k:", k)
# round the powers to nearest integer if requested
if int_ns == True:
ns = np.rint(ns)
print("Rounded orders:", ns)
prod = np.ones(n_trials)
for i,n in enumerate(ns):
prod *= np.power(c0[:,i],n)
k = np.mean(v0/prod)
print("Rounded k:", k)
# print
return ns, k
# array of initial concentrations of NO2
no2_0 = np.array([1.15,1.72,1.15])
# array of initial concentrations of F2
f2_0 = np.array([1.15,1.15,2.30])
# array of initial rates
v0 = np.array([6.12e-4,1.36e-3,1.22e-3])
# call intial rates routine feeding it combined initial concentration matrix, created using column_stack, and initial rates
ns, ks = initial_rates(np.column_stack((no2_0,f2_0)),v0)
Non-rounded orders: [1.98356279 0.99527759]
Non-rounded k: 0.0004035917166485644
Rounded orders: [2. 1.]
Rounded k: 0.0004010769599072604
A = np.column_stack((np.log(no2_0),np.log(f2_0),np.ones(no2_0.size)))
print(A)
print(np.log(v0))
print(np.linalg.inv(A))
print(np.dot(np.linalg.inv(A),np.log(v0)))
print(np.exp(-7.81510679))
[[0.13976194 0.13976194 1. ]
[0.54232429 0.13976194 1. ]
[0.13976194 0.83290912 1. ]]
[-7.39877828 -6.60027058 -6.70890442]
[[-2.48408726e+00 2.48408726e+00 -5.11789276e-17]
[-1.44269504e+00 0.00000000e+00 1.44269504e+00]
[ 1.54881472e+00 -3.47180860e-01 -2.01633861e-01]]
[ 1.98356279 0.99527759 -7.81510679]
0.0004035917180050492
So we see we get the same solution that