arrhenius

Stoner.analysis.fitting.models.thermal.arrhenius(x, A, DE)[source]

Arrhenius Equation without T dependendent prefactor.

Parameters
  • x (array) – temperatyre data in K

  • A (float) – Prefactor - temperature independent. See :py:func:modArrhenius for temperaure dependent version.

  • DE (float) – Energy barrier in eV.

Returns

Typically a rate corresponding to the given temperature values.

The Arrhenius function is defined as \(\tau=A\exp\left(\frac{-\Delta E}{k_B x}\right)\) where \(k_B\) is Boltzmann’s constant.

Example

"""Example of Arrhenius Fit."""
from numpy import linspace, ceil, log10, abs as np_abs
from numpy.random import normal

from Stoner import Data
from Stoner.analysis.fitting.models.thermal import Arrhenius, arrhenius

# Make some data
T = linspace(200, 350, 101)
R = arrhenius(T + normal(size=len(T), scale=3.0, loc=0.0), 1e6, 0.5)
E = 10 ** ceil(log10(np_abs(R - arrhenius(T, 1e6, 0.5))))
d = Data(T, R, E, setas="xye", column_headers=["T", "Rate"])

# Curve_fit on its own
d.curve_fit(arrhenius, p0=(1e6, 0.5), result=True, header="curve_fit")
d.setas = "xyey"
d.plot(fmt=["r.", "b-"])
d.annotate_fit(
    arrhenius,
    x=0.5,
    y=0.5,
    mode="eng",
    fontdict={"size": "x-small", "color": "blue"},
)

# lmfit using lmfit guesses
fit = Arrhenius()
d.setas = "xye"
d.lmfit(fit, result=True, header="lmfit")
d.setas = "x...y"
d.plot(fmt="g-")
d.annotate_fit(
    Arrhenius,
    x=0.5,
    y=0.35,
    prefix="Arrhenius",
    mode="eng",
    fontdict={"size": "x-small", "color": "green"},
)

d.setas = "xye"
res = d.odr(Arrhenius, result=True, header="odr", prefix="ODR")
d.setas = "x....y"
d.plot(fmt="m-")
d.annotate_fit(
    Arrhenius,
    x=0.5,
    y=0.2,
    prefix="ODR",
    mode="eng",
    fontdict={"size": "x-small", "color": "magenta"},
)


d.title = "Arrhenius Test Fit"
d.ylabel = "Rate"
d.xlabel = "Temperature (K)"
d.yscale = "log"