+++++++++++
This algorithm allows to calculate the values, linked to a :math:`\mathbf{x}`
-state, of the data assimilation error function :math:`J` and of the observation
-operator, for an priori given states sample. This is a useful algorithm to test
-the sensitivity, of the error function :math:`J` in particular, to the state
-:math:`\mathbf{x}` variations. When a state is not observable, a *"NaN"* value
-is returned.
+state, of a general error function :math:`J` of type :math:`L^1`, :math:`L^2` or
+:math:`L^{\infty}`, with or without weights, and of the observation operator,
+for an priori given states sample. The default error function is the augmented
+weighted least squares function, classicaly used in data assimilation.
+
+This is a useful algorithm to test the sensitivity, of the error function
+:math:`J` in particular, to the state :math:`\mathbf{x}` variations. When a
+state is not observable, a *"NaN"* value is returned.
The sampling of the states :math:`\mathbf{x}` can be given explicitly or under
the form of hypercubes.
.. index:: single: SampleAsnUplet
.. index:: single: SampleAsExplicitHyperCube
.. index:: single: SampleAsMinMaxStepHyperCube
+.. index:: single: QualityCriterion
.. index:: single: SetDebug
.. index:: single: StoreSupplementaryCalculations
Example : ``{"SampleAsMinMaxStepHyperCube":[[0.,1.,0.25],[-1,3,1]]}`` for a state space of dimension 2
+ QualityCriterion
+ This key indicates the quality criterion, used to find the state estimate.
+ The default is the usual data assimilation criterion named "DA", the
+ augmented weighted least squares. The possible criteria has to be in the
+ following list, where the equivalent names are indicated by the sign "=":
+ ["AugmentedWeightedLeastSquares"="AWLS"="DA", "WeightedLeastSquares"="WLS",
+ "LeastSquares"="LS"="L2", "AbsoluteValue"="L1", "MaximumError"="ME"].
+
+ Example : ``{"QualityCriterion":"DA"}``
+
SetDebug
This key requires the activation, or not, of the debug mode during the
function evaluation. The default is "True", the choices are "True" or
+++++++++++
Cet algorithme permet d'établir les valeurs, liées à un état :math:`\mathbf{x}`,
-de la fonctionnelle d'erreur d'assimilation de données :math:`J` et de
-l'opérateur d'observation, pour un échantillon d'états donné a priori. C'est un
-algorithme utile pour tester la sensibilité, de la fonctionnelle :math:`J` en
-particulier, aux variations de l'état :math:`\mathbf{x}`. Lorsque un état n'est
-pas observable, une value *"NaN"* est retournée.
+d'une fonctionnelle d'erreur :math:`J` quelconque de type :math:`L^1`,
+:math:`L^2` ou :math:`L^{\infty}`, avec ou sans pondérations, et de l'opérateur
+d'observation, pour un échantillon d'états donné a priori. La fonctionnelle
+d'erreur par défaut est celle de moindres carrés pondérés augmentés,
+classiquement utilisée en assimilation de données.
+
+C'est un algorithme utile pour tester la sensibilité, de la fonctionnelle
+:math:`J` en particulier, aux variations de l'état :math:`\mathbf{x}`. Lorsque
+un état n'est pas observable, une value *"NaN"* est retournée.
L'échantillon des états :math:`\mathbf{x}` peut être fourni explicitement ou
sous la forme d'hypercubes.
.. index:: single: SampleAsnUplet
.. index:: single: SampleAsExplicitHyperCube
.. index:: single: SampleAsMinMaxStepHyperCube
+.. index:: single: QualityCriterion
.. index:: single: SetDebug
.. index:: single: StoreSupplementaryCalculations
Exemple : ``{"SampleAsMinMaxStepHyperCube":[[0.,1.,0.25],[-1,3,1]]}`` pour un espace d'état à 2 dimensions
+ QualityCriterion
+ Cette clé indique le critère de qualité, qui est utilisé pour trouver
+ l'estimation de l'état. Le défaut est le critère usuel de l'assimilation de
+ données nommé "DA", qui est le critère de moindres carrés pondérés
+ augmentés. Les critères possibles sont dans la liste suivante, dans laquelle
+ les noms équivalents sont indiqués par un signe "=" :
+ ["AugmentedWeightedLeastSquares"="AWLS"="DA", "WeightedLeastSquares"="WLS",
+ "LeastSquares"="LS"="L2", "AbsoluteValue"="L1", "MaximumError"="ME"].
+
+ Exemple : ``{"QualityCriterion":"DA"}``
+
SetDebug
Cette clé requiert l'activation, ou pas, du mode de débogage durant
l'évaluation de la fonction. La valeur par défaut est "True", les choix sont
typecast = list,
message = "Points de calcul définis par un hyper-cube dont on donne la liste des échantillonages de chaque variable par un triplet [min,max,step]",
)
+ self.defineRequiredParameter(
+ name = "QualityCriterion",
+ default = "AugmentedWeightedLeastSquares",
+ typecast = str,
+ message = "Critère de qualité utilisé",
+ listval = ["AugmentedWeightedLeastSquares","AWLS","AugmentedPonderatedLeastSquares","APLS","DA",
+ "WeightedLeastSquares","WLS","PonderatedLeastSquares","PLS",
+ "LeastSquares","LS","L2",
+ "AbsoluteValue","L1",
+ "MaximumError","ME"],
+ )
self.defineRequiredParameter(
name = "SetDebug",
default = False,
# ----------
BI = B.getI()
RI = R.getI()
- def CostFunction(x,HmX):
+ def CostFunction(x,HmX, QualityMeasure="AugmentedWeightedLeastSquares"):
if numpy.any(numpy.isnan(HmX)):
_X = numpy.nan
_HX = numpy.nan
else:
_X = numpy.asmatrix(numpy.ravel( x )).T
_HX = numpy.asmatrix(numpy.ravel( HmX )).T
- Jb = 0.5 * (_X - Xb).T * BI * (_X - Xb)
- Jo = 0.5 * (Y - _HX).T * RI * (Y - _HX)
+ if QualityMeasure in ["AugmentedWeightedLeastSquares","AWLS","AugmentedPonderatedLeastSquares","APLS","DA"]:
+ if BI is None or RI is None:
+ raise ValueError("Background and Observation error covariance matrix has to be properly defined!")
+ Jb = 0.5 * (_X - Xb).T * BI * (_X - Xb)
+ Jo = 0.5 * (Y - _HX).T * RI * (Y - _HX)
+ elif QualityMeasure in ["WeightedLeastSquares","WLS","PonderatedLeastSquares","PLS"]:
+ if RI is None:
+ raise ValueError("Observation error covariance matrix has to be properly defined!")
+ Jb = 0.
+ Jo = 0.5 * (Y - _HX).T * RI * (Y - _HX)
+ elif QualityMeasure in ["LeastSquares","LS","L2"]:
+ Jb = 0.
+ Jo = 0.5 * (Y - _HX).T * (Y - _HX)
+ elif QualityMeasure in ["AbsoluteValue","L1"]:
+ Jb = 0.
+ Jo = numpy.sum( numpy.abs(Y - _HX) )
+ elif QualityMeasure in ["MaximumError","ME"]:
+ Jb = 0.
+ Jo = numpy.max( numpy.abs(Y - _HX) )
+ #
J = float( Jb ) + float( Jo )
if "CurrentState" in self._parameters["StoreSupplementaryCalculations"]:
self.StoredVariables["CurrentState"].store( _X )
except:
Yn = numpy.nan
#
- J, Jb, Jo = CostFunction(__Xn,Yn)
+ J, Jb, Jo = CostFunction(__Xn,Yn,self._parameters["QualityCriterion"])
# ----------
#
if self._parameters["SetDebug"]: