.. [WikipediaDA] Wikipedia, *Data assimilation*, http://en.wikipedia.org/wiki/Data_assimilation
+.. [WikipediaKF] Wikipedia, *Kalman Filter*, https://en.wikipedia.org/wiki/Kalman_filter
+
+.. [WikipediaEKF] Wikipedia, *Extended Kalman Filter*, https://en.wikipedia.org/wiki/Extended_Kalman_filter
+
.. [WikipediaEnKF] Wikipedia, *Ensemble Kalman Filter*, http://en.wikipedia.org/wiki/Ensemble_Kalman_filter
.. [WikipediaMO] Wikipedia, *Mathematical optimization*, https://en.wikipedia.org/wiki/Mathematical_optimization
"CostFunctionJoAtCurrentOptimum",
"CurrentOptimum",
"CurrentState",
+ "ForecastState",
"IndexOfOptimum",
"InnovationAtCurrentAnalysis",
"InnovationAtCurrentState",
- "PredictedState",
"SimulatedObservationAtCurrentAnalysis",
"SimulatedObservationAtCurrentOptimum",
"SimulatedObservationAtCurrentState",
.. include:: snippets/CurrentState.rst
+.. include:: snippets/ForecastState.rst
+
.. include:: snippets/IndexOfOptimum.rst
.. include:: snippets/InnovationAtCurrentAnalysis.rst
.. include:: snippets/InnovationAtCurrentState.rst
-.. include:: snippets/PredictedState.rst
-
.. include:: snippets/SimulatedObservationAtCurrentAnalysis.rst
.. include:: snippets/SimulatedObservationAtCurrentOptimum.rst
extended Kalman Filter, using a non-linear calculation of the state and the
incremental evolution (process).
+Conceptually, we can represent the temporal pattern of action of the operators
+for this algorithm in the following way, with **H** the observation operator
+and **M** the evolution operator :
+
+ .. _schema_temporel_KF:
+ .. image:: images/schema_temporel_KF.png
+ :align: center
+ :width: 50%
+ .. centered::
+ **Timeline of steps in Kalman filter assimilation**
+
In case of really non-linear operators, one can easily use the
:ref:`section_ref_algorithm_EnsembleKalmanFilter` or the
:ref:`section_ref_algorithm_UnscentedKalmanFilter`, which are often far more
"CostFunctionJoAtCurrentOptimum",
"CurrentOptimum",
"CurrentState",
+ "ForecastState",
"IndexOfOptimum",
"InnovationAtCurrentAnalysis",
"InnovationAtCurrentState",
- "PredictedState",
"SimulatedObservationAtCurrentAnalysis",
"SimulatedObservationAtCurrentOptimum",
"SimulatedObservationAtCurrentState",
.. include:: snippets/CurrentState.rst
+.. include:: snippets/ForecastState.rst
+
.. include:: snippets/IndexOfOptimum.rst
.. include:: snippets/InnovationAtCurrentAnalysis.rst
.. include:: snippets/InnovationAtCurrentState.rst
-.. include:: snippets/PredictedState.rst
-
.. include:: snippets/SimulatedObservationAtCurrentAnalysis.rst
.. include:: snippets/SimulatedObservationAtCurrentOptimum.rst
- :ref:`section_ref_algorithm_KalmanFilter`
- :ref:`section_ref_algorithm_EnsembleKalmanFilter`
- :ref:`section_ref_algorithm_UnscentedKalmanFilter`
+
+.. ------------------------------------ ..
+.. include:: snippets/Header2Algo07.rst
+
+- [WikipediaEKF]_
cases. One can verify the linearity of the operators with the help of
the :ref:`section_ref_algorithm_LinearityTest`.
+Conceptually, we can represent the temporal pattern of action of the operators
+for this algorithm in the following way, with **H** the observation operator
+and **M** the evolution operator :
+
+ .. _schema_temporel_KF:
+ .. image:: images/schema_temporel_KF.png
+ :align: center
+ :width: 50%
+ .. centered::
+ **Timeline of steps in Kalman filter assimilation**
+
In case of non-linearity, even slightly marked, it will be preferred the
:ref:`section_ref_algorithm_ExtendedKalmanFilter`, or the
:ref:`section_ref_algorithm_UnscentedKalmanFilter` and the
"CostFunctionJoAtCurrentOptimum",
"CurrentOptimum",
"CurrentState",
+ "ForecastState",
"IndexOfOptimum",
"InnovationAtCurrentAnalysis",
"InnovationAtCurrentState",
- "PredictedState",
"SimulatedObservationAtCurrentAnalysis",
"SimulatedObservationAtCurrentOptimum",
"SimulatedObservationAtCurrentState",
.. include:: snippets/CurrentState.rst
+.. include:: snippets/ForecastState.rst
+
.. include:: snippets/IndexOfOptimum.rst
.. include:: snippets/InnovationAtCurrentAnalysis.rst
.. include:: snippets/InnovationAtCurrentState.rst
-.. include:: snippets/PredictedState.rst
-
.. include:: snippets/SimulatedObservationAtCurrentAnalysis.rst
.. include:: snippets/SimulatedObservationAtCurrentOptimum.rst
- :ref:`section_ref_algorithm_ExtendedKalmanFilter`
- :ref:`section_ref_algorithm_EnsembleKalmanFilter`
- :ref:`section_ref_algorithm_UnscentedKalmanFilter`
+
+.. ------------------------------------ ..
+.. include:: snippets/Header2Algo07.rst
+
+- [WikipediaKF]_
--- /dev/null
+.. index:: single: ForecastState
+
+ForecastState
+ *List of vectors*. Each element is a state vector forecasted by the model
+ during the iterative algorithm procedure.
+
+ Example:
+ ``Xp = ADD.get("ForecastState")[:]``
+++ /dev/null
-.. index:: single: PredictedState
-
-PredictedState
- *List of vectors*. Each element is a state vector predicted by the model
- during the iterative algorithm procedure.
-
- Example:
- ``Xp = ADD.get("PredictedState")[:]``
.. [WikipediaDA] Wikipedia, *Data assimilation*, http://en.wikipedia.org/wiki/Data_assimilation
+.. [WikipediaKF] Wikipedia, *Kalman Filter*, https://en.wikipedia.org/wiki/Kalman_filter
+
+.. [WikipediaEKF] Wikipedia, *Extended Kalman Filter*, https://en.wikipedia.org/wiki/Extended_Kalman_filter
+
.. [WikipediaEnKF] Wikipedia, *Ensemble Kalman Filter*, http://en.wikipedia.org/wiki/Ensemble_Kalman_filter
.. [WikipediaMO] Wikipedia, *Mathematical optimization*, https://en.wikipedia.org/wiki/Mathematical_optimization
"CostFunctionJoAtCurrentOptimum",
"CurrentOptimum",
"CurrentState",
+ "ForecastState",
"IndexOfOptimum",
"InnovationAtCurrentAnalysis",
"InnovationAtCurrentState",
- "PredictedState",
"SimulatedObservationAtCurrentAnalysis",
"SimulatedObservationAtCurrentOptimum",
"SimulatedObservationAtCurrentState",
.. include:: snippets/CurrentState.rst
+.. include:: snippets/ForecastState.rst
+
.. include:: snippets/IndexOfOptimum.rst
.. include:: snippets/InnovationAtCurrentAnalysis.rst
.. include:: snippets/InnovationAtCurrentState.rst
-.. include:: snippets/PredictedState.rst
-
.. include:: snippets/SimulatedObservationAtCurrentAnalysis.rst
.. include:: snippets/SimulatedObservationAtCurrentOptimum.rst
filtre de Kalman étendu, utilisant un calcul non linéaire de l'état et de
l'évolution incrémentale (processus).
+Conceptuellement, on peut représenter le schéma temporel d'action des
+opérateurs pour cet algorithme de la manière suivante, avec **H** l'opérateur
+d'observation et **M** l'opérateur d'évolution :
+
+ .. _schema_temporel_KF:
+ .. image:: images/schema_temporel_KF.png
+ :align: center
+ :width: 50%
+ .. centered::
+ **Schéma temporel des étapes en assimilation par filtre de Kalman**
+
Dans le cas d'opérateurs réellement non-linéaires, on peut aisément utiliser
l':ref:`section_ref_algorithm_EnsembleKalmanFilter` ou
l':ref:`section_ref_algorithm_UnscentedKalmanFilter`, qui sont souvent
"CostFunctionJoAtCurrentOptimum",
"CurrentOptimum",
"CurrentState",
+ "ForecastState",
"IndexOfOptimum",
"InnovationAtCurrentAnalysis",
"InnovationAtCurrentState",
- "PredictedState",
"SimulatedObservationAtCurrentAnalysis",
"SimulatedObservationAtCurrentOptimum",
"SimulatedObservationAtCurrentState",
.. include:: snippets/CurrentState.rst
+.. include:: snippets/ForecastState.rst
+
.. include:: snippets/IndexOfOptimum.rst
.. include:: snippets/InnovationAtCurrentAnalysis.rst
.. include:: snippets/InnovationAtCurrentState.rst
-.. include:: snippets/PredictedState.rst
-
.. include:: snippets/SimulatedObservationAtCurrentAnalysis.rst
.. include:: snippets/SimulatedObservationAtCurrentOptimum.rst
- :ref:`section_ref_algorithm_KalmanFilter`
- :ref:`section_ref_algorithm_EnsembleKalmanFilter`
- :ref:`section_ref_algorithm_UnscentedKalmanFilter`
+
+.. ------------------------------------ ..
+.. include:: snippets/Header2Algo07.rst
+
+- [WikipediaEKF]_
"faiblement" non-linéaire. On peut vérifier la linéarité de l'opérateur
d'observation à l'aide de l':ref:`section_ref_algorithm_LinearityTest`.
+Conceptuellement, on peut représenter le schéma temporel d'action des
+opérateurs pour cet algorithme de la manière suivante, avec **H** l'opérateur
+d'observation et **M** l'opérateur d'évolution :
+
+ .. _schema_temporel_KF:
+ .. image:: images/schema_temporel_KF.png
+ :align: center
+ :width: 50%
+ .. centered::
+ **Schéma temporel des étapes en assimilation par filtre de Kalman**
+
En cas de non-linéarité, même peu marquée, on lui préférera
l':ref:`section_ref_algorithm_ExtendedKalmanFilter`, ou
l':ref:`section_ref_algorithm_EnsembleKalmanFilter` et
"CostFunctionJoAtCurrentOptimum",
"CurrentOptimum",
"CurrentState",
+ "ForecastState",
"IndexOfOptimum",
"InnovationAtCurrentAnalysis",
"InnovationAtCurrentState",
- "PredictedState",
"SimulatedObservationAtCurrentAnalysis",
"SimulatedObservationAtCurrentOptimum",
"SimulatedObservationAtCurrentState",
.. include:: snippets/CurrentState.rst
+.. include:: snippets/ForecastState.rst
+
.. include:: snippets/IndexOfOptimum.rst
.. include:: snippets/InnovationAtCurrentAnalysis.rst
.. include:: snippets/InnovationAtCurrentState.rst
-.. include:: snippets/PredictedState.rst
-
.. include:: snippets/SimulatedObservationAtCurrentAnalysis.rst
.. include:: snippets/SimulatedObservationAtCurrentOptimum.rst
- :ref:`section_ref_algorithm_ExtendedKalmanFilter`
- :ref:`section_ref_algorithm_EnsembleKalmanFilter`
- :ref:`section_ref_algorithm_UnscentedKalmanFilter`
+
+.. ------------------------------------ ..
+.. include:: snippets/Header2Algo07.rst
+
+- [WikipediaKF]_
--- /dev/null
+.. index:: single: ForecastState
+
+ForecastState
+ *Liste de vecteurs*. Chaque élément est un vecteur d'état prévu par le modèle
+ dans le cas d'un filtre itératif, au cours du déroulement itératif de
+ l'algorithme utilisé.
+
+ Exemple :
+ ``Xp = ADD.get("ForecastState")[:]``
+++ /dev/null
-.. index:: single: PredictedState
-
-PredictedState
- *Liste de vecteurs*. Chaque élément est un vecteur d'état prévu par le modèle
- dans le cas d'un filtre itératif, au cours du déroulement itératif de
- l'algorithme utilisé.
-
- Exemple :
- ``Xp = ADD.get("PredictedState")[:]``
"CostFunctionJoAtCurrentOptimum",
"CurrentOptimum",
"CurrentState",
+ "ForecastState",
"IndexOfOptimum",
"InnovationAtCurrentAnalysis",
"InnovationAtCurrentState",
- "PredictedState",
"SimulatedObservationAtCurrentAnalysis",
"SimulatedObservationAtCurrentOptimum",
"SimulatedObservationAtCurrentState",
if self._parameters["StoreInternalVariables"] \
or self._toStore("CurrentState"):
self.StoredVariables["CurrentState"].store( Xn )
- if self._toStore("PredictedState"):
- self.StoredVariables["PredictedState"].store( Xn_predicted )
+ if self._toStore("ForecastState"):
+ self.StoredVariables["ForecastState"].store( Xn_predicted )
if self._toStore("BMA"):
self.StoredVariables["BMA"].store( Xn_predicted - Xa )
if self._toStore("InnovationAtCurrentState"):
"CostFunctionJoAtCurrentOptimum",
"CurrentOptimum",
"CurrentState",
+ "ForecastState",
"IndexOfOptimum",
"InnovationAtCurrentAnalysis",
"InnovationAtCurrentState",
- "PredictedState",
"SimulatedObservationAtCurrentAnalysis",
"SimulatedObservationAtCurrentOptimum",
"SimulatedObservationAtCurrentState",
if self._parameters["StoreInternalVariables"] \
or self._toStore("CurrentState"):
self.StoredVariables["CurrentState"].store( Xn )
- if self._toStore("PredictedState"):
- self.StoredVariables["PredictedState"].store( Xn_predicted )
+ if self._toStore("ForecastState"):
+ self.StoredVariables["ForecastState"].store( Xn_predicted )
if self._toStore("BMA"):
self.StoredVariables["BMA"].store( Xn_predicted - Xa )
if self._toStore("InnovationAtCurrentState"):
"CostFunctionJoAtCurrentOptimum",
"CurrentOptimum",
"CurrentState",
+ "ForecastState",
"IndexOfOptimum",
"InnovationAtCurrentAnalysis",
"InnovationAtCurrentState",
- "PredictedState",
"SimulatedObservationAtCurrentAnalysis",
"SimulatedObservationAtCurrentOptimum",
"SimulatedObservationAtCurrentState",
if self._parameters["StoreInternalVariables"] \
or self._toStore("CurrentState"):
self.StoredVariables["CurrentState"].store( Xn )
- if self._toStore("PredictedState"):
- self.StoredVariables["PredictedState"].store( Xn_predicted )
+ if self._toStore("ForecastState"):
+ self.StoredVariables["ForecastState"].store( Xn_predicted )
if self._toStore("BMA"):
self.StoredVariables["BMA"].store( Xn_predicted - Xa )
if self._toStore("InnovationAtCurrentState"):
- MahalanobisConsistency : indicateur de consistance des covariances
- OMA : Observation moins Analyse : Y - Xa
- OMB : Observation moins Background : Y - Xb
- - PredictedState : état prédit courant lors d'itérations
+ - ForecastState : état prédit courant lors d'itérations
- Residu : dans le cas des algorithmes de vérification
- SigmaBck2 : indicateur de correction optimale des erreurs d'ébauche
- SigmaObs2 : indicateur de correction optimale des erreurs d'observation
self.StoredVariables["CostFunctionJoAtCurrentOptimum"] = Persistence.OneScalar(name = "CostFunctionJoAtCurrentOptimum")
self.StoredVariables["CurrentOptimum"] = Persistence.OneVector(name = "CurrentOptimum")
self.StoredVariables["CurrentState"] = Persistence.OneVector(name = "CurrentState")
+ self.StoredVariables["ForecastState"] = Persistence.OneVector(name = "ForecastState")
self.StoredVariables["GradientOfCostFunctionJ"] = Persistence.OneVector(name = "GradientOfCostFunctionJ")
self.StoredVariables["GradientOfCostFunctionJb"] = Persistence.OneVector(name = "GradientOfCostFunctionJb")
self.StoredVariables["GradientOfCostFunctionJo"] = Persistence.OneVector(name = "GradientOfCostFunctionJo")
- self.StoredVariables["IndexOfOptimum"] = Persistence.OneIndex(name = "IndexOfOptimum")
+ self.StoredVariables["IndexOfOptimum"] = Persistence.OneIndex(name = "IndexOfOptimum")
self.StoredVariables["Innovation"] = Persistence.OneVector(name = "Innovation")
self.StoredVariables["InnovationAtCurrentAnalysis"] = Persistence.OneVector(name = "InnovationAtCurrentAnalysis")
self.StoredVariables["InnovationAtCurrentState"] = Persistence.OneVector(name = "InnovationAtCurrentState")
self.StoredVariables["MahalanobisConsistency"] = Persistence.OneScalar(name = "MahalanobisConsistency")
self.StoredVariables["OMA"] = Persistence.OneVector(name = "OMA")
self.StoredVariables["OMB"] = Persistence.OneVector(name = "OMB")
- self.StoredVariables["PredictedState"] = Persistence.OneVector(name = "PredictedState")
self.StoredVariables["Residu"] = Persistence.OneScalar(name = "Residu")
self.StoredVariables["SigmaBck2"] = Persistence.OneScalar(name = "SigmaBck2")
self.StoredVariables["SigmaObs2"] = Persistence.OneScalar(name = "SigmaObs2")
# Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
__doc__ = """
- Définit les versions approximées des opérateurs tangents et adjoints.
+ Définit les objets numériques génériques.
"""
__author__ = "Jean-Philippe ARGAUD"