Figure 9.10:

Distribution of estimated parameters.

Figure 9.10

Code for Figure 9.10

Text of the GNU GPL.

main.py


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Converted from arrhenius.m - Arrhenius parameter estimation, confidence ellipse
import numpy as np
from scipy.stats import chi2
from misc import ellipse, octave_save

chisq   = 5.99
lnk0    = 1.;   E = 100.
ndata   = 10;   Tmin = 300.;   Tmax = 500.
Tmeas   = np.linspace(Tmin, Tmax, ndata)
X       = np.column_stack([np.ones(ndata), -1./Tmeas])
lnk     = X @ np.array([lnk0, E])
measvar = 1e-3

np.random.seed(0)
nexpts  = 500
lnkmeas = lnk[:,None] + np.sqrt(measvar)*np.random.randn(ndata, nexpts)

theta = (np.linalg.lstsq(X, lnkmeas, rcond=None)[0]).T  # (nexpts, 2)

Tcenter   = -1./Tmeas + 1./np.mean(Tmeas)
Xcenter   = np.column_stack([np.ones(ndata), Tcenter])
thetacenter = (np.linalg.lstsq(Xcenter, lnkmeas, rcond=None)[0]).T

npts = 181
amat = X.T @ X / measvar
x, y, major, minor, bbox = ellipse(amat, chisq, npts)
x = x + lnk0;  y = y + E
minor[:,0] += lnk0;  minor[:,1] += E
major[:,0] += lnk0;  major[:,1] += E
bbox[:,0]  += lnk0;  bbox[:,1]  += E
elips = np.column_stack([x, y])

octave_save('arrhenius.dat',
            ('theta', theta),
            ('bbox',  bbox),
            ('elips', elips))