Class UnitIdentifier
Identifier of the "Default" process model - a dynamic process model with time-constant, time-delay, linear process gain and optional (nonlinear) curvature process gains.
This model class is sufficent for real-world linear or weakly nonlinear dynamic systems, yet also introduces the fewest possible parameters to describe the system in an attempt to avoid over-fitting/over-parameterization.
The "default" process model is identified using a linear-in-parameters parameterization (parameters a,b,c), so that it can be solved by linear regression and identification should thus be both fast and stable. The issue with the parameterization (a,b,c) is that the meaning of each parameter is less intuitive, for instance the time constant depends on a, but linear gain depends on both a and b, while curvature depends on a and c. Looking at the unceratinty of each parameter to determine if the model should be dynamic or static or what the uncertainty of the time constant is, is very hard, and this observation motivates re-parameterizing the model after identification.
When assessing and simulating the model, parameters are converted into the more intuitive parameters "time constant", "linear gains" and "curvature gain" which are a different parameterization. The UnitIdentifier, UnitModel and UnitParameters classes handle this transition seamlessly to the user. Uncertainty is expressed in terms of this more intuitive parameterization, to allow for a more intuitive assessment of the parameters.
Another advantage of the parameterization is that the model internally separates between steady-state and transient state. You can at any instance "turn off" dynamics and request the steady-state model output for the current input. This is useful if you have transient data that you want to analyze in the steady-state, as you can then fit the model to all available data-points without having to select what data points you believe are at steady state, then you can disable dynamic terms to do a static analysis of the dynamic model.
Time-delay is an integer parameter, and finding the time-delay alongside continuous parameters turns the identification problem into a linear mixed-integer problem. The time delay identification is done by splitting the time-delay estimation from continuous parameter identification, turning the solver into a sequential optimization solver. This logic to re-run estimation for multiple time-delays and selecting the best estimate of time delay is deferred to TimeSeriesAnalysis.Dynamic.UnitTimeDelayIdentifier.
Since the aim is to identify transients/dynamics, the regression is done on model differences rather than absolute values.
Inherited Members
Namespace: TimeSeriesAnalysis.Dynamic
Assembly: TimeSeriesAnalysis.dll
Syntax
public static class UnitIdentifier
Methods
| Edit this page View SourceIdentify(ref UnitDataSet, FittingSpecs, bool)
Identifies the "Default" process model that best fits the dataSet given
Declaration
public static UnitModel Identify(ref UnitDataSet dataSet, FittingSpecs fittingSpecs = null, bool doEstimateTimeDelay = true)
Parameters
Type | Name | Description |
---|---|---|
UnitDataSet | dataSet | The dataset containing the ymeas and U that is to be fitted against, a new y_sim is also added |
FittingSpecs | fittingSpecs | optional fitting specs object for tuning data |
bool | doEstimateTimeDelay | (default:true) if set to false, time delay estimation is disabled (can drastically speeed up identification) |
Returns
Type | Description |
---|---|
UnitModel | the identified model parameters and some information about the fit |
IdentifyLinear(ref UnitDataSet, FittingSpecs, bool)
Identifies the "Default" process model that best fits the dataSet given, but disables curvatures
Declaration
public static UnitModel IdentifyLinear(ref UnitDataSet dataSet, FittingSpecs fittingSpecs, bool doEstimateTimeDelay = true)
Parameters
Type | Name | Description |
---|---|---|
UnitDataSet | dataSet | The dataset containing the ymeas and U that is to be fitted against, a new y_sim is also added |
FittingSpecs | fittingSpecs | optionally set constraints on the identification |
bool | doEstimateTimeDelay | if set to false, estimation of time delays are disabled |
Returns
Type | Description |
---|---|
UnitModel | the identified model parameters and some information about the fit |
IdentifyLinearAndStatic(ref UnitDataSet, FittingSpecs, bool)
Identifies the "Default" process model that best fits the dataSet given, but disables curvatures and time-constants
Declaration
public static UnitModel IdentifyLinearAndStatic(ref UnitDataSet dataSet, FittingSpecs fittingSpecs, bool doEstimateTimeDelay = true)
Parameters
Type | Name | Description |
---|---|---|
UnitDataSet | dataSet | The dataset containing the ymeas and U that is to be fitted against, a new y_sim is also added |
FittingSpecs | fittingSpecs | object of specifications for |
bool | doEstimateTimeDelay | set to false to disable time delay estimation (this speeds up identification manyfold) |
Returns
Type | Description |
---|---|
UnitModel | the identified model parameters and some information about the fit |
IdentifyLinearAndStaticDiff(ref UnitDataSet, FittingSpecs, bool)
Identifies the process model that best fits the dataSet given by minimizing differences y[k]-y[k-1], but disables curvatures and time-constants.
Declaration
public static UnitModel IdentifyLinearAndStaticDiff(ref UnitDataSet dataSet, FittingSpecs fittingSpecs, bool doEstimateTimeDelay = true)
Parameters
Type | Name | Description |
---|---|---|
UnitDataSet | dataSet | The dataset containing the ymeas and U that is to be fitted against, a new y_sim is also added |
FittingSpecs | fittingSpecs | Optionally sets the local working point, constraints etc. for id. |
bool | doEstimateTimeDelay | if set to false, modeling does not identify time-delays |
Returns
Type | Description |
---|---|
UnitModel | the identified model parameters and some information about the fit |
IdentifyLinearAndStaticWhileKeepingLinearGainFixed(UnitDataSet, int, double, double, double)
Freezed one input to a given pre-determined value, but re-identifies other static paramters. This is useful if doing a "global search" where varying a single gain.
Declaration
public static UnitModel IdentifyLinearAndStaticWhileKeepingLinearGainFixed(UnitDataSet dataSet, int inputIdxToFix, double inputProcessGainValueToFix, double u0_fixedInput, double uNorm_fixedInput)
Parameters
Type | Name | Description |
---|---|---|
UnitDataSet | dataSet | |
int | inputIdxToFix | the index of the value to freeze |
double | inputProcessGainValueToFix | the linear gain to freeze the at |
double | u0_fixedInput | |
double | uNorm_fixedInput |
Returns
Type | Description |
---|---|
UnitModel | identified model, to check if identification suceeded, check .modelParameters.Fitting.WasAbleToIdentify |
IdentifyLinearDiff(ref UnitDataSet, FittingSpecs, bool)
Identifies the process model based on differences y[k]-y[k-1] that best fits the dataSet given, but disables curvatures
Declaration
public static UnitModel IdentifyLinearDiff(ref UnitDataSet dataSet, FittingSpecs fittingSpecs, bool doEstimateTimeDelay = true)
Parameters
Type | Name | Description |
---|---|---|
UnitDataSet | dataSet | The dataset containing the ymeas and U that is to be fitted against, a new y_sim is also added |
FittingSpecs | fittingSpecs | optionally set constraints on the identification |
bool | doEstimateTimeDelay | if set to false, estimation of time delays are disabled(default is true) |
Returns
Type | Description |
---|---|
UnitModel | the identified model parameters and some information about the fit |
IdentifyStatic(ref UnitDataSet, FittingSpecs)
Identifies the "Default" process model that best fits the dataSet given, but no time-constants
Declaration
public static UnitModel IdentifyStatic(ref UnitDataSet dataSet, FittingSpecs fittingSpecs = null)
Parameters
Type | Name | Description |
---|---|---|
UnitDataSet | dataSet | The dataset containing the |
FittingSpecs | fittingSpecs |
Returns
Type | Description |
---|---|
UnitModel | the identified model parameters and some information about the fit |
SimulateAndReEstimateBias(UnitDataSet, UnitParameters)
For a given set of paramters and a dataset, find the bias which gives the lowest mean offset (this can be especially useful when identification uses the "difference" formulation)
Declaration
public static (double?, double[]) SimulateAndReEstimateBias(UnitDataSet dataSet, UnitParameters parameters)
Parameters
Type | Name | Description |
---|---|---|
UnitDataSet | dataSet | |
UnitParameters | parameters |
Returns
Type | Description |
---|---|
(double?, double[]) |