.. literalinclude:: scripts/simple_KalmanFilter1.res
+.. include:: snippets/Header2Algo11.rst
+
+.. _simple_KalmanFilter1_state:
+.. image:: scripts/simple_KalmanFilter1_state.png
+ :align: center
+ :width: 90%
+
+.. _simple_KalmanFilter1_variance:
+.. image:: scripts/simple_KalmanFilter1_variance.png
+ :align: center
+ :width: 90%
+
.. ------------------------------------ ..
.. include:: snippets/Header2Algo06.rst
print("")
print(" Final a posteriori variance:",Pa[-1])
print("")
+#
+#-------------------------------------------------------------------------------
+#
+Observations = array([yo[0] for yo in Yobs])
+Estimates = array([xa[0] for xa in case.get("Analysis")])
+Variances = array([pa[0,0] for pa in case.get("APosterioriCovariance")])
+#
+import matplotlib.pyplot as plt
+plt.rcParams['figure.figsize'] = (10, 4)
+#
+plt.figure()
+plt.plot(Observations,'kx',label='Noisy measurements')
+plt.plot(Estimates,'r-',label='Estimated state')
+plt.axhline(Xtrue,color='b',label='Truth value')
+plt.legend()
+plt.title('Estimate of the state', fontweight='bold')
+plt.xlabel('Observation step')
+plt.ylabel('Voltage')
+plt.savefig("simple_KalmanFilter1_state.png")
+#
+plt.figure()
+iobs = range(1,len(Observations))
+plt.plot(iobs,Variances[iobs],label='A posteriori error variance')
+plt.title('Estimate of the a posteriori error variance', fontweight='bold')
+plt.xlabel('Observation step')
+plt.ylabel('$(Voltage)^2$')
+plt.setp(plt.gca(),'ylim',[0,.01])
+plt.savefig("simple_KalmanFilter1_variance.png")
*reanalysis*, even if the iterative analysis keeps unkown the future
observations at a given time step.
+This example describes iterative estimation of a constant physical quantity (a
+voltage) following seminal example of [Welch06]_ (pages 11 and following, also
+available in the SciPy Cookbook). This model allows to illustrate the excellent
+behavior of this algorithm with respect to the measurement noise when the
+evolution model is simple. The physical problem is the estimation of the
+voltage, observed on 50 time steps, with noise, which imply 50 analysis steps
+by the filter. The idealized state (said the "true" value, unknown in a real
+case) is specified as ``Xtrue`` in the example. The observations
+:math:`\mathbf{y}^o` (denoted by ``Yobs`` in the example) are to be set, using
+the keyword "*VectorSerie*", as a measure time series. We choose to emphasize
+the observations versus the background, by setting a great value for the
+background error variance with respect to the observation error variance. The
+first observation is not used because the background :math:`\mathbf{x}^b` is
+used as the first state estimate.
+
+The adjustment is carried out by displaying intermediate results during
+iterative filtering. Using these intermediate results, one can also obtain
+figures that illustrate the state estimation and the associated *a posteriori*
+covariance estimation.
--- /dev/null
+The figures illustrating the result of its execution are as follows:
.. literalinclude:: scripts/simple_KalmanFilter1.res
+.. include:: snippets/Header2Algo11.rst
+
+.. _simple_KalmanFilter1_state:
+.. image:: scripts/simple_KalmanFilter1_state.png
+ :align: center
+ :width: 90%
+
+.. _simple_KalmanFilter1_variance:
+.. image:: scripts/simple_KalmanFilter1_variance.png
+ :align: center
+ :width: 90%
+
.. ------------------------------------ ..
.. include:: snippets/Header2Algo06.rst
print("")
print(" Variance a posteriori finale :",Pa[-1])
print("")
+#
+#-------------------------------------------------------------------------------
+#
+Observations = array([yo[0] for yo in Yobs])
+Estimates = array([xa[0] for xa in case.get("Analysis")])
+Variances = array([pa[0,0] for pa in case.get("APosterioriCovariance")])
+#
+import matplotlib.pyplot as plt
+plt.rcParams['figure.figsize'] = (10, 4)
+#
+plt.figure()
+plt.plot(Observations,'kx',label='Mesures bruitées')
+plt.plot(Estimates,'r-',label='État estimé')
+plt.axhline(Xtrue,color='b',label='Valeur vraie')
+plt.legend()
+plt.title('Estimation de l\'état', fontweight='bold')
+plt.xlabel('Pas d\'observation')
+plt.ylabel('Tension')
+plt.savefig("simple_KalmanFilter1_state.png")
+#
+plt.figure()
+iobs = range(1,len(Observations))
+plt.plot(iobs,Variances[iobs],label='Variance d\'erreur a posteriori')
+plt.title('Estimation de la variance d\'erreur a posteriori', fontweight='bold')
+plt.xlabel('Pas d\'observation')
+plt.ylabel('$(Tension)^2$')
+plt.setp(plt.gca(),'ylim',[0,.01])
+plt.savefig("simple_KalmanFilter1_variance.png")
parle de *réanalyse*, même si l'analyse itérative conserve inconnues les
observations futures à un pas de temps donné.
+Cet exemple décrit l'estimation itérative d'une quantité physique constante
+(une tension électrique) selon l'exemple de [Welch06]_ (pages 11 et suivantes,
+aussi disponible dans le SciPy Cookbook). Ce modèle permet d'illustrer
+l'excellent comportement de cet algorithme vis-à-vis du bruit de mesure lorsque
+le modèle d'évolution est simple. Le problème physique est l'estimation d'une
+tension électrique, observée sur 50 pas de temps, avec du bruit, ce qui
+implique ensuite 50 étapes d'analyses par le filtre. L'état idéalisé (valeur
+dite "vraie", inconnu dans un cas réel) est désigné par ``Xtrue`` dans
+l'exemple. Les observations :math:`\mathbf{y}^o` (désignée par ``Yobs`` dans
+l'exemple) sont à renseigner, en utilisant le mot-clé "*VectorSerie*", comme
+une série chronologique de mesures. On privilégie les observations au détriment
+de l'ébauche, par l'indication d'une importante variance d'erreur d'ébauche par
+rapport à la variance d'erreur d'observation. La première observation n'est pas
+utilisée car l'ébauche :math:`\mathbf{x}^b` sert de première estimation de
+l'état.
+
+L'estimation s'effectue en affichant des résultats intermédiaires lors du
+filtrage itératif. Grâce à ces informations intermédiaires, on peut aussi
+obtenir les graphiques illustrant l'estimation de l'état et de la covariance
+d'erreur a posteriori associée.
--- /dev/null
+Les graphiques illustrant le résultat de son exécution sont les suivants :