1 #-*-coding:iso-8859-1-*-
3 Cas-test vérifiant le fonctionnement du filtre de Kalman sur un système
4 dynamique de trajectoire 1D constante
6 __author__ = "Jean-Philippe ARGAUD - Septembre 2008"
9 from daCore.AssimilationStudy import AssimilationStudy
10 from daCore.Persistence import OneScalar
12 #===============================================================================
13 def test(dimension = 3):
15 Cas-test vérifiant le fonctionnement du filtre de Kalman sur un système
16 dynamique de trajectoire 1D constante
20 # Définition des données
21 # ----------------------
26 Xt = OneScalar("Valeur vraie", basetype=float)
28 for i in range(dimension):
31 # Observations bruitées
32 yo = numpy.random.normal(xt, 0.1, size=a_size)
33 Yo = OneScalar("Observations", basetype=float)
38 # Création de l'étude et résolution
39 # ---------------------------------
40 ADD = AssimilationStudy("Assimilation temporelle de Kalman")
42 ADD.setBackground (asVector = "0.")
43 ADD.setBackgroundError (asCovariance = "1.")
45 ADD.setObservationOperator(asMatrix = "1.")
46 ADD.setObservation (asPersistentVector = Yo)
47 ADD.setObservationError (asCovariance = "1.e-2")
49 ADD.setEvolutionModel (asMatrix = "1")
50 ADD.setEvolutionError (asCovariance = "1.e-5")
53 ADD.setAlgorithm(choice="Kalman")
57 Xa = ADD.get("Analysis")
58 print " Valeur vraie visée........................:",xt
59 print " Ebauche, i.e. valeur initiale d'analyse...:",Xa.valueserie(0)[0]
60 print " Nombre d'analyses (sans l'ébauche)........:",Xa.stepnumber()-1
61 print " Moyenne des analyses......................:",Xa.stepmean()
65 for i in range(Yo.stepnumber()):
66 EpsY.append(Yo.valueserie(i) - Xt.valueserie(i))
67 print " Biais des erreurs <Obs-Vraie>.............:",numpy.array(EpsY).mean()
68 print " Variance des erreurs <Obs-Vraie>..........:",numpy.array(EpsY).var()
70 for i in range(Xa.stepnumber()):
71 EpsY.append(Xa.valueserie(i)[0] - Xt.valueserie(i))
72 print " Biais des erreurs <Ana-Vraie>.............:",numpy.array(EpsY).mean()
73 print " Variance des erreurs <Ana-Vraie>..........:",numpy.array(EpsY).var()
76 ADD.setDiagnostic("PlotVectors", "Affichage de Xa et Xt")
77 MonPlot = ADD.get("Affichage de Xa et Xt")
79 ( [ x[0] for x in Xa.valueserie()], Xt.valueserie(), Yo.valueserie() ),
80 title = "Analyse de Kalman sur trajectoire constante",
81 ltitle = ["Analyse", "Valeur vraie", "Observations"],
82 filename = "kalman_sur_trajectoire_constante.ps",
86 #===============================================================================
87 if __name__ == "__main__":
90 print "AUTODIAGNOSTIC"
91 print "=============="
92 numpy.random.seed(1000)