r"""
Power fit with additive bias of the form :math:`A + Bx^C`.
As a general rule, ``pow_fit(x, y, ...)`` is equivalent to
``exp_fit(log(x), y, ...)`` since
:math:`A + Be^{Cx} = A + B \left( e^x \right)^C`.
.. todo::
Add proper handling of colinear inputs (and other singular matrix cases).
.. todo::
Add tests.
.. todo::
Add `nan_policy` argument.
"""
from numpy import log, power
from .exp import exp_fit
__all__ = ['pow_fit']
[docs]def pow_fit(x, y, sorted=True):
r"""
Power fit of the form :math:`A + Bx^C`.
This implementation is based on the approximate solution to integral
equation :eq:`exp-eq`, presented in :ref:`ref-reei`. A power fit is
regarded as an exponential fit with a logarithmically scaled x-axis
in this algorightm.
Parameters
----------
x : array-like
The x-values of the data points. The fit will be performed on a
raveled version of this array. All elements must be positive.
y : array-like
The y-values of the data points corresponding to `x`. Must be
the same size as `x`. The fit will be performed on a raveled
version of this array.
sorted : bool
Set to True if `x` is already monotonically increasing or
decreasing. If False, `x` will be sorted into increasing order,
and `y` will be sorted along with it.
Return
------
a, b, c : ~numpy.ndarray
A three-element array containing the estimated additive and
multiplicative biases and power, in that order.
References
----------
- [Jacquelin]_ "\ :ref:`ref-reei`\ ", :ref:`pp. 15-18. <reei2-sec2>`
"""
return exp_fit(log(x), y, sorted)
[docs]def model(x, a, b, c):
"""
Compute :math:`y = A + Bx^C`.
Parameters
----------
x : array-like
The value of the model will be the same shape as the input.
a : float
The additive bias.
b : float
The multiplicative bias.
c : float
The power.
Return
------
y : array-like
An array of the same shape as `x`, containing the model
computed for the given parameters.
"""
return a + b * power(x, c)
pow_fit.model = model