kontrol.curvefit
Primary modules
kontrol.curvefit.curvefit
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 or None, optional) – 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 (callable or None, optional) – The model used to fit the data. The callable has a signature of func(x: array, args: array, **kwargs) -> array.
args
in model is an array of parameters that define the model. Defaults to Nonemodel_kwargs (dict or None, optional) – Keyword arguments passed to the model. Defaults to None.
cost (kontrol.curvefit.Cost or callable) – Cost function. The callable has a signature of func(args, model, xdata, ydata) -> array. 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.
- property 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.
- Return type
scipy.optimizer.OptimizeResult
- property model
The model used to fit the data.
- property model_kwargs
Keyword arguments passed to the model.
- property optimize_result
Optimization Result
- property optimized_args
The optimized arguments
- property optimizer
The optimizer function to be used to fit the data.
- property optimizer_kwargs
Keyword arguments passed to the optimizer function.
- prefit()
Something to do before fitting.
- property xdata
The independent variable data.
- property ydata
The dependent variable data
- property yfit
The fitted y values
kontrol.curvefit.transfer_function_fit
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:
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 or callable) – Cost function. The callable has a signature of func(args, model, xdata, ydata) -> array. 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.
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.
- property options
Option arguments passed to optimizer
- property weight
Weighting function
- property x0
Initial guess
Secondary modules
kontrol.curvefit.cost
Cost function base class
kontrol.curvefit.error_func
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
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
- property args
Model parameters
- property 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:
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)}\]- property args
Model parameters in ZPK [f1, q1, f2, q2,…, fn, qn, k] format
- property fn_pole
List of resonance frequencies of complex poles.
- property fn_zero
List of resonance frequencies of complex zeros.
- property gain
Static gain.
- property npole_pairs
Number of complex pole pairs
- property nzero_pairs
Number of complex zero pairs
- property q_pole
List of quality factors of the complex poles
- property q_zero
List of quality factors of the complex zeros
- property tf
Returns a TransferFunction object of this ZPK model
- class kontrol.curvefit.model.transfer_function_model.CoupledOscillator
Bases:
TransferFunctionModel
- class kontrol.curvefit.model.transfer_function_model.DampedOscillator(args=None)
Bases:
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.
- property args
Model parameters
- property damped_oscillator_args
The model parameters with three numbers [k, fn, q]
- property fn
Resonance frequency
- property gain
DC gain
- property q
Q factor
- class kontrol.curvefit.model.transfer_function_model.SimpleZPK(nzero, npole, args=None, log_args=False)
Bases:
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)}\]- property args
Model parameters in ZPK [z1, z2,…, p1, p2,…, k] format
- property gain
Static gain
- property npole
Number of complex pole pairs
- property nzero
Number of simple zeros
- property pole
List of poles
- property tf
Returns a TransferFunction object of this ZPK model
- property zero
List of zeros
- class kontrol.curvefit.model.transfer_function_model.TransferFunctionModel(nzero, npole, args=None, log_args=False)
Bases:
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}\]- property den
Denominator array
- property npole
Number of zeros
- property num
Numerator array
- property nzero
Number of zeros
- property tf
The Transfer Function object.
Basic mathematical models
- class kontrol.curvefit.model.math_model.Erf(args=None)
Bases:
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
- property amplitude
Peak to Peak amplitude of the error function.
- property slope
Slope at the inflection point.
- property x_offset
x offset
- property y_offset
y offset
- class kontrol.curvefit.model.math_model.StraightLine(args=None)
Bases:
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.
- property intercept
The y-intercept of the line
- property slope
The slope of the line