kontrol.curvefit package¶
Primary modules¶
kontrol.curvefit.curvefit module¶
Base class for curve fitting
-
class
kontrol.curvefit.curvefit.
CurveFit
(xdata=None, ydata=None, model=None, model_kwargs=None, cost=None, optimizer=None, optimizer_kwargs=None)¶ Bases:
object
Base class for curve fitting
Parameters: - xdata (array, ydata: array) -> float) – The independent variable data / data on the x axis. Defaults to None.
- ydata (array or None, optional) – The dependent variable data / data on the y axis. Defaults to None.
- model (func(x: array, args: array, **kwargs) -> array, or None, optional) – The model used to fit the data.
args
in model is an array of parameters that define the model. Defaults to None - model_kwargs (dict or None, optional) – Keyword arguments passed to the model. Defaults to None.
- cost (kontrol.curvefit.Cost or func(args, model, xdata, ydata) -> array) – Cost function.
- xdata – The cost function to be used to fit the data. First argument is a list of parameters that will be passed to the model. This must be pickleable if multiprocessing is to be used. Defaults to None.
- optimizer (func(func, **kwargs) -> OptimizeResult, or None, optional) – The optimization algorithm use for minimizing the cost function.
- optimizer_kwargs (dict or None, optional) – Keyword arguments passed to the optimizer function. Defaults to None.
-
cost
¶ The cost function to be used to fit the data.
-
fit
(model_kwargs=None, cost_kwargs=None, optimizer_kwargs=None)¶ Fit the data
Sets self.optimized_args and self.optimize_result.
Parameters: - model_kwargs (dict or None, optional) – Overriding keyword arguments in self.model_kwargs. Defaults to None.
- cost_kwargs (dict or None, optional) – Overriding keyword arguments in self.cost_kwargs. Defaults to None.
- optimizer_kwargs (dict or None, optional) – Overriding keyword argumetns in self.optimizer_kwargs. Defaults to None.
Returns: Return type: scipy.optimizer.OptimizeResult
-
model
¶ The model used to fit the data.
-
model_kwargs
¶ Keyword arguments passed to the model.
-
optimize_result
¶ Optimization Result
-
optimized_args
¶ The optimized arguments
-
optimizer
¶ The optimizer function to be used to fit the data.
-
optimizer_kwargs
¶ Keyword arguments passed to the optimizer function.
-
prefit
()¶ Something to do before fitting.
-
xdata
¶ The independent variable data.
-
ydata
¶ The dependent variable data
-
yfit
¶ The fitted y values
kontrol.curvefit.transfer_function_fit module¶
Transfer function fitting class
-
class
kontrol.curvefit.transfer_function_fit.
TransferFunctionFit
(xdata=None, ydata=None, model=None, model_kwargs=None, cost=None, weight=None, error_func_kwargs=None, optimizer=None, optimizer_kwargs=None, options=None, x0=None)¶ Bases:
kontrol.curvefit.curvefit.CurveFit
Transfer function fitting class
This class is basically a
CurveFit
class with default cost functions and optimizer that is designed for fitting a transfer function. By default, the error function iskontrol.curvefit.error_func.tf_error()
. The default optimizer isscipy.optimize.minimize( ...,method="Nelder-Mead",...)
, withoptions = {"adaptive": True, "maxiter": N*1000}
, whereN
is the number of variables. All of these can be overridden if specified.Parameters: - xdata (
array
orNone
, optional) – Independent variable data. Defaults toNone
. - ydata (
array
orNone
, optional) – Transfer function frequency response in complex numbers. Defaults toNone
. - model (
func(x: ``array
, args:array
, **kwargs)`` ->array
, orNone
, optional) – The model used to fit the data.args
in model is anarray
of parameters that define the model. Defaults toNone
- model_kwargs (
dict
orNone
, optional) – Keyword arguments passed to the model. Defaults toNone
. - cost (
kontrol.curvefit.Cost
orfunc(args, model, xdata, ydata)
->array
, optional) – Cost function. The cost function to be used to fit the data. First argument is a list of parameters that will be passed to the model. This must be pickleable if multiprocessing is to be used. Defaults toNone
. - weight (
array
orNone
, optional) – Weighting function. DefaultsNone
. - error_func_kwargs (
dict
orNone
, optional) – Keyword arguments the will be passed toerror_func
, which is passed to the construct the cost function. Defaults toNone
. - optimizer (
func(func, **kwargs)
->OptimizeResult
, orNone
, optional) – The optimization algorithm use for minimizing the cost function. - optimizer_kwargs (
dict
orNone
, optional) – Keyword arguments passed to the optimizer function. Defaults toNone
. - options (
dict
orNone
, optional) – The option arguments passed to theoptimizer
- x0 (
array
, optional) – Inital guess. Defaults to None.
-
options
¶ Option arguments passed to optimizer
-
weight
¶ Weighting function
-
x0
¶ Initial guess
- xdata (
Secondary modules¶
kontrol.curvefit.cost module¶
Cost function base class
kontrol.curvefit.error_func module¶
Error functions for curve fitting
-
kontrol.curvefit.error_func.
log_mse
(x1, x2, weight=None, small_multiplier=1e-06)¶ Logarithmic mean square error/Mean square log error
Parameters: - x1 (array) – Array
- x2 (array) – Array
- weight (array or None, optional) – weighting function. If None, defaults to np.ones_like(x1)
- small_multiplier (float, optional) – x1 will be modified by x1`+`small_multiplier`*`np.min(x2) if 0 exists in x1. Same goes to x2. If 0 both exists in x1 and x2, raise.
Returns: Logarithmic mean square error between arrays x1 and x2.
Return type: float
-
kontrol.curvefit.error_func.
mse
(x1, x2, weight=None)¶ Mean square error
Parameters: - x1 (array) – Array
- x2 (array) – Array
- weight (array or None, optional) – weighting function. If None, defaults to np.ones_like(x1)
Returns: Mean square error between arrays x1 and x2.
Return type: float
-
kontrol.curvefit.error_func.
noise_error
(noise1, noise2, weight=None, small_number=1e-06, norm=2)¶ Mean log error between two noise spectrums.
Parameters: - noise1 (array) – Noise spectrum 1.
- noise2 (array) – Noise spectrum 2.
- weight (array or None, optional) – Weighting function. Defaults None.
- small_number (float, optional) – A small number to be added in before evaluating np.log10 to prevent error. Defaults to 1e-6.
- norm (int, optional) – The type of norm used to estimate the error.
Choose
1
for $mathcal{L}_1$ norm and2
for $mathcal{L}_2$ norm. Other norms are are possible but not encouraged unless there’s a specifiy reason. Defaults 2.
Returns: The mean log error.
Return type: float
Notes
$mathcal{L}_1$ norm is more robust while $mathcal{L}_2$ norm is more susceptible to outliers, but fits data with large dynamic range well.
-
kontrol.curvefit.error_func.
spectrum_error
(spectrum1, spectrum2, weight=None, small_number=1e-06, norm=2)¶ Mean log error between two spectrums. Alias of noise_error().
Parameters: - spectrum1 (array) – Spectrum 1.
- spectrum2 (array) – Spectrum 2.
- weight (array or None, optional) – Weighting function. Defaults None.
- small_number (float, optional) – A small number to be added in before evaluating np.log10 to prevent error. Defaults to 1e-6.
- norm (int, optional) – The type of norm used to estimate the error.
Choose
1
for $mathcal{L}_1$ norm and2
for $mathcal{L}_2$ norm. Other norms are are possible but not encouraged unless there’s a specifiy reason. Defaults 2.
Returns: The mean log error.
Return type: float
Notes
$mathcal{L}_1$ norm is more robust while $mathcal{L}_2$ norm is more susceptible to outliers, but fits data with large dynamic range well.
-
kontrol.curvefit.error_func.
tf_error
(tf1, tf2, weight=None, small_number=1e-06, norm=2)¶ Mean log error between two transfer functions frequency response
Parameters: - tf1 (array) – Frequency response of transfer function 1, in complex values.
- tf2 (array) – Frequency response of transfer function 2, in complex values.
- weight (array or None, optional) – Weighting function. Defaults None.
- small_number (float, optional) – A small number to be added in before evaluating np.log10 to prevent error. Defaults to 1e-6.
- norm (int, optional) – The type of norm used to estimate the error.
Choose
1
for $mathcal{L}_1$ norm and2
for $mathcal{L}_2$ norm. Other norms are are possible but not encouraged unless there’s a specifiy reason. Defaults 2.
Returns: Mean log error between two transfer function.
Return type: float
Notes
$mathcal{L}_1$ norm is more robust while $mathcal{L}_2$ norm is more susceptible to outliers, but fits data with large dynamic range well.
Subpackages¶
kontrol.curve.model subpackage¶
Model base class for curve fitting.
-
class
kontrol.curvefit.model.model.
Model
(args=None, nargs=None, log_args=False)¶ Bases:
object
Model base class for curve fitting
-
args
¶ Model parameters
-
nargs
¶ Number of model parameters
-
Transfer function models for transfer function fitting.
-
class
kontrol.curvefit.model.transfer_function_model.
ComplexZPK
(nzero_pairs, npole_pairs, args=None, log_args=False)¶ Bases:
kontrol.curvefit.model.model.Model
ZPK model with complex poles and zeros.
Parameters: - nzero_pairs (int) – Number of complex zero pairs.
- npole_pairs (int) – Number of complex pole pairs.
- args (array, optional) – The model parameters defined as
args = [f1, q1, f2, q2,..., fi, qi,..., fn, qn, k]
, wheref
are resonance frequencies of the complex zero/pole pairs,q
are the quality factors, andk
is the static gain,i
is the number of complex zero pairs, andn-i
is the number of of complex pole pairs. - log_args (boolean, optional) – If true, model parameters passed to the model are assumed to be passed through a log10() function. So, when the real parameters will be assumed to be 10**args instead. Defaults to False.
-
fn_zero
¶ List of resonance frequencies of the complex zeros.
Type: array
-
fn_pole
¶ List of resonance frequencies of the complex poles.
Type: array
-
q_zero
¶ List of Q-factors of the complex zeros.
Type: array
-
q_pole
¶ List of Q-factors of the complex poles.
Type: array
Notes
The complex ZPK model is defined by:
\[G(s; f_i, q_i,k) =k\frac{\prod_i(\frac{s^2}{(2\pi f_i)^2} + \frac{1}{2\pi f_i q_i}s + 1)} {\prod_j(\frac{s^2}{(2\pi f_j)^2} + \frac{1}{2\pi f_j q_j}s + 1)}\]-
args
¶ Model parameters in ZPK [f1, q1, f2, q2,…, fn, qn, k] format
-
fn_pole
List of resonance frequencies of complex poles.
-
fn_zero
List of resonance frequencies of complex zeros.
-
gain
¶ Static gain.
-
npole_pairs
¶ Number of complex pole pairs
-
nzero_pairs
¶ Number of complex zero pairs
-
q_pole
List of quality factors of the complex poles
-
q_zero
List of quality factors of the complex zeros
-
tf
¶ Returns a TransferFunction object of this ZPK model
-
class
kontrol.curvefit.model.transfer_function_model.
CoupledOscillator
¶ Bases:
kontrol.curvefit.model.transfer_function_model.TransferFunctionModel
-
class
kontrol.curvefit.model.transfer_function_model.
DampedOscillator
(args=None)¶ Bases:
kontrol.curvefit.model.transfer_function_model.TransferFunctionModel
Transfer function model for a damped oscillator.
Parameters: args (array or None, optional.) – The model parameters with three numbers. Structured as follows: args = [k, fn, q]
, wherek
is the DC gain of the transfer function,fn
is the resonance frequency in Hz, andq
is the Q-factor. Defaults to None.Notes
The model is definded as
\[G(s; k, \omega_n, q) = k\frac{\omega_n^2}{s^2 + \frac{\omega_n}{q}s + \omega_n^2}\]where \(k\) is the DC gain of the transfer function, \(\omega_n\) is the resonance frequency of the oscillator, and \(q\) is the Q-factor if the damped oscillator.
-
args
¶ Model parameters
-
damped_oscillator_args
¶ The model parameters with three numbers [k, fn, q]
-
fn
¶ Resonance frequency
-
gain
¶ DC gain
-
q
¶ Q factor
-
-
class
kontrol.curvefit.model.transfer_function_model.
SimpleZPK
(nzero, npole, args=None, log_args=False)¶ Bases:
kontrol.curvefit.model.model.Model
ZPK model with simple poles and zeros.
Parameters: - nzero (int) – Number of simple zeros.
- npole (int) – Number of simple poles.
- args (array, optional) – The model parameters defined as
args = [z1, z2,..., p1, p2,..., k]
wherez
are the locations of the zeros in Hz,p
are the locations of the pole in Hz, andk
is the static gain, - log_args (boolean, optional) – If true, model parameters passed to the model are assumed to be passed through a log10() function. So, when the real parameters will be assumed to be 10**args instead. Defaults to False.
-
zero
¶ List of zeros.
Type: array
-
pole
¶ List of poles.
Type: array
-
gain
¶ Static gain.
Type: float
-
tf
¶ The transfer function representation of this ZPK model
Type: kontrol.TranserFunction
Notes
The simple ZPK model is defined as
\[G(s; z_1, z_2,..., p_1, p_2, ..., k) = k\frac{\prod_i(\frac{s}{2\pi z_i}+1)}{\prod_j(\frac{s}{2\pi p_j}+1)}\]-
args
¶ Model parameters in ZPK [z1, z2,…, p1, p2,…, k] format
-
gain
Static gain
-
npole
¶ Number of complex pole pairs
-
nzero
¶ Number of simple zeros
-
pole
List of poles
-
tf
Returns a TransferFunction object of this ZPK model
-
zero
List of zeros
-
class
kontrol.curvefit.model.transfer_function_model.
TransferFunctionModel
(nzero, npole, args=None, log_args=False)¶ Bases:
kontrol.curvefit.model.model.Model
Transfer function model class defined by numerator and denominator
Parameters: - nzero (int) – Number of zeros.
- npole (int) – Number of poles.
- args (array or None, optional.) – The model parameters. Structured as follows: [b_n, b_n-1,…, b_1, b_0, a_m, a_m-1,…, a_1, a_0], where b and a are the coefficients of the numerator and denominator respectively, ordered from higher-order to lower-order. Defaults to None.
-
tf
¶ The last evaluted transfer function.
Type: kontrol.TransferFunction
Notes
The transfer function model is defined as
\[G(s, b_n, b_{n-1},..., b_1, b_0, a_m, a_{m-1},..., a_1, a_0) = \frac{\sum_{i=0}^{n} b_i s^i}{\sum_{j=0}^{m} a_j s^j}\]-
den
¶ Denominator array
-
npole
¶ Number of zeros
-
num
¶ Numerator array
-
nzero
¶ Number of zeros
-
tf
The Transfer Function object.
Basic mathematical models
-
class
kontrol.curvefit.model.math_model.
Erf
(args=None)¶ Bases:
kontrol.curvefit.model.model.Model
The error function erf(x)
Parameters: args (array, optional) – The model parameters structured as [amplitude, slope, x0, y0]. Defaults to None. Notes
The function is defined as
\[f(x; a, m, x_0, y_0) = a\,\mathrm{erf}(m(x-x_0)) + y_0\,,\]where \(\mathrm{erf}(x)\) is the error function [1], \(a\) is the peak to peak amplitude, \(m\) is the slope at the inflection point, \(x_0\) is the \(x\) offset , and \(y_0\) is the \(y\) offset.
References
[1] https://en.wikipedia.org/wiki/Error_function -
amplitude
¶ Peak to Peak amplitude of the error function.
-
slope
¶ Slope at the inflection point.
-
x_offset
¶ x offset
-
y_offset
¶ y offset
-
-
class
kontrol.curvefit.model.math_model.
StraightLine
(args=None)¶ Bases:
kontrol.curvefit.model.model.Model
Simply a straight line.
Parameters: args (array, optional) – The model parameters structued as: [slope, y-intercept]. Defaults to None. -
slope
¶ The slope of the line.
Type: float
-
intercept
¶ The y-intercept of the line.
Type: float
Notes
The straight line is defined as
\[y(x; m, c) = mx + c\,,\]where \(m\) is the slope and \(c\) is the y-intercept.
-
intercept
The y-intercept of the line
-
slope
The slope of the line
-