# ExponentialPlusLinear¶

class plasmapy.analysis.fit_functions.ExponentialPlusLinear(params: Tuple[float, ...] = None, param_errors: Tuple[float, ...] = None)

A sub-class of AbstractFitFunction to represent an exponential with an linear offset.

$\begin{split}y =& f(x) = a \, e^{\alpha \, x} + m \, x + b\\ (\delta y)^2 =& \left( a e^{\alpha x}\right)^2 \left[ \left( \frac{\delta a}{a} \right)^2 + (x \, \delta \alpha)^2 + (\alpha \, \delta x)^2 \right]\\ & + \left(2 \, a \, \alpha \, m \, e^{\alpha x}\right) (\delta x)^2\\ & + \left[(x \, \delta m)^2 + (\delta b)^2 +(m \, \delta x)^2\right]\end{split}$

where $$a$$, $$\alpha$$, $$m$$, and $$b$$ are the real constants to be fitted and $$x$$ is the independent variable. $$\delta a$$, $$\delta \alpha$$, $$\delta m$$, $$\delta b$$, and $$\delta x$$ are the respective uncertainties for $$a$$, $$\alpha$$, $$m$$, and $$b$$, and $$x$$.

Attributes Summary

 curve_fit_results The results returned by the curve fitting routine used by curve_fit. latex_str LaTeX friendly representation of the fit function. param_errors The associated errors of the fitted params. param_names Names of the fitted parameters. params The fitted parameters for the fit function. rsq Coefficient of determination (r-squared) value of the fit.

Methods Summary

 __call__(x[, x_err, reterr]) Direct call of the fit function $$f(x)$$. curve_fit(xdata, ydata, **kwargs) Use a non-linear least squares method to fit the fit function to (xdata, ydata), using scipy.optimize.curve_fit. func(x, a, alpha, m, b) The fit function, an exponential with a linear offset. func_err(x[, x_err, rety]) Calculate dependent variable uncertainties $$\delta y$$ for dependent variables $$y=f(x)$$. root_solve(x0) Solve for the root of the fit function (i.e.

Attributes Documentation

curve_fit_results

The results returned by the curve fitting routine used by curve_fit. This is typically from scipy.stats.linregress or scipy.optimize.curve_fit.

latex_str

LaTeX friendly representation of the fit function.

param_errors

The associated errors of the fitted params.

param_names

Names of the fitted parameters.

params

The fitted parameters for the fit function.

rsq

Coefficient of determination (r-squared) value of the fit.

\begin{align}\begin{aligned}r^2 &= 1 - \frac{SS_{res}}{SS_{tot}}\\SS_{res} &= \sum\limits_{i} (y_i - f(x_i))^2\\SS_{tot} &= \sum\limits_{i} (y_i - \bar{y})^2\end{aligned}\end{align}

where $$(x_i, y_i)$$ are the sample data pairs, $$f(x_i)$$ is the fitted dependent variable corresponding to $$x_i$$, and $$\bar{y}$$ is the average of the $$y_i$$ values.

The $$r^2$$ value is an indicator of how close the points $$(x_i, y_i)$$ lie to the model $$f(x)$$. $$r^2$$ values range between 0 and 1. Values close to 0 indicate that the points are uncorrelated and have little tendency to lie close to the model, whereas, values close to 1 indicate a high correlation to the model.

Methods Documentation

__call__(x, x_err=None, reterr=False)

Direct call of the fit function $$f(x)$$.

Parameters: x (array_like) – Dependent variables. x_err (array_like, optional) – Errors associated with the independent variables x. Must be of size one or equal to the size of x. reterr (bool, optional) – (Default: False) If True, return an array of uncertainties associated with the calculated independent variables y (numpy.ndarray) – Corresponding dependent variables $$y=f(x)$$ of the independent variables x. y_err (numpy.ndarray) – Uncertainties associated with the calculated dependent variables $$\delta y$$
curve_fit(xdata, ydata, **kwargs) → None

Use a non-linear least squares method to fit the fit function to (xdata, ydata), using scipy.optimize.curve_fit. This will set the attributes parameters, parameters_err, and rsq.

The results of scipy.optimize.curve_fit can be obtained via curve_fit_results.

Parameters: xdata (array_like) – The independent variable where data is measured. Should be 1D of length M. ydata (array_like) – The dependent data associated with xdata. **kwargs – Any keywords accepted by scipy.optimize.curve_fit. ValueError – if either ydata or xdata contain numpy.nan’s, or if incompatible options are used. RuntimeError – if the least-squares minimization fails. OptimizeWarning – if covariance of the parameters can not be estimated.
func(x, a, alpha, m, b)

The fit function, an exponential with a linear offset.

$\begin{split}f(x) = a \, e^{\alpha \, x} + m \, x + b\\\end{split}$

where $$a$$, $$\alpha$$, $$m$$, and $$b$$ are the real constants and $$x$$ is the independent variable.

Parameters: x (array_like) – Independent variable. a (float) – value for constant $$a$$ alpha (float) – value for constant $$\alpha$$ m (float) – value for slope $$m$$ b (float) – value for intercept $$b$$ y – dependent variables corresponding to x array_like
func_err(x, x_err=None, rety=False)

Calculate dependent variable uncertainties $$\delta y$$ for dependent variables $$y=f(x)$$.

$\begin{split}(\delta y)^2 =& \left( a e^{\alpha x}\right)^2 \left[ \left( \frac{\delta a}{a} \right)^2 + (x \, \delta \alpha)^2 + (\alpha \, \delta x)^2 \right]\\ & + \left(2 \, a \, \alpha \, m \, e^{\alpha x}\right) (\delta x)^2\\ & + \left[( x \, \delta m)^2 + (\delta b)^2 +(m \, \delta x)^2 \right]\end{split}$
Parameters: x (array_like) – Independent variables to be passed to the fit function. x_err (array_like, optional) – Errors associated with the independent variables x. Must be of size one or equal to the size of x. rety (bool) – Set True to also return the associated dependent variables $$y = f(x)$$. err (numpy.ndarray) – The calculated uncertainties $$\delta y$$ of the dependent variables ($$y = f(x)$$) of the independent variables x. y (numpy.ndarray, optional) – (if rety == True) The associated dependent variables $$y = f(x)$$.

Notes

• A good reference for formulating propagation of uncertainty expressions is:

J. R. Taylor. An Introduction to Error Analysis: The Study of Uncertainties in Physical Measurements. University Science Books, second edition, August 1996 (ISBN: 093570275X)

root_solve(x0)

Solve for the root of the fit function (i.e. $$f(x_r) = 0$$). This mehtod used scipy.optimize.fsolve to find the function roots.

Parameters: x0 (ndarray) – The starting estimate for the roots of $$f(x_r) = 0$$. x (ndarray) – The solution (or the result of the last iteration for an unsuccessful call). x_err (ndarray) – The uncertainty associated with the root calculation. Currently this returns an array of numpy.nan values equal in shape to x , since there is no determined way to calculate the uncertainties.

Notes

If the full output of scipy.optimize.fsolve is desired then one can do:

>>> func = Linear()
>>> func.params = (1.0, 5.0)
>>> func.param_errors = (0.0, 0.0)
>>> roots = fsolve(func, -4.0, full_output=True)
>>> roots
(array([-5.]),
{'nfev': 4,
'fjac': array([[-1.]]),
'r': array([-1.]),
'qtf': array([2.18...e-12]),
'fvec': 0.0},
1,
'The solution converged.')