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:
objectBase 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.
argsin 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.CurveFitTransfer function fitting class
This class is basically a
CurveFitclass 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}, whereNis the number of variables. All of these can be overridden if specified.Parameters: - xdata (
arrayorNone, optional) – Independent variable data. Defaults toNone. - ydata (
arrayorNone, 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.argsin model is anarrayof parameters that define the model. Defaults toNone - model_kwargs (
dictorNone, optional) – Keyword arguments passed to the model. Defaults toNone. - cost (
kontrol.curvefit.Costorfunc(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 (
arrayorNone, optional) – Weighting function. DefaultsNone. - error_func_kwargs (
dictorNone, 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 (
dictorNone, optional) – Keyword arguments passed to the optimizer function. Defaults toNone. - options (
dictorNone, 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
1for $mathcal{L}_1$ norm and2for $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
1for $mathcal{L}_1$ norm and2for $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
1for $mathcal{L}_1$ norm and2for $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:
objectModel 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.ModelZPK 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], wherefare resonance frequencies of the complex zero/pole pairs,qare the quality factors, andkis the static gain,iis the number of complex zero pairs, andn-iis 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.TransferFunctionModelTransfer 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], wherekis the DC gain of the transfer function,fnis the resonance frequency in Hz, andqis 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.ModelZPK 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]wherezare the locations of the zeros in Hz,pare the locations of the pole in Hz, andkis 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.ModelTransfer 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.ModelThe 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.ModelSimply 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
-