1 #-*-coding:iso-8859-1-*-
3 Cas-test vérifiant que si H est l'identité et que les matrices de covariance
4 d'erreurs sont liées par R = alpha * B, alors l'ecart type de OMA est
5 proportionnel a l'ecart type de l'innovation d selon la relation :
6 rms(OMA) = alpha/(1. + alpha) rms(d)
8 __author__ = "Sophie RICCI - Septembre 2008"
11 from daCore.AssimilationStudy import AssimilationStudy
13 #===============================================================================
14 def test(precision = 1.e-13, dimension = 3, alpha = 2.):
16 Cas-test vérifiant que si H est l'identité et que les matrices de covariance
17 d'erreurs sont liées par R = alpha * B, alors l'ecart type de OMA est
18 proportionnel a l'ecart type de l'innovation d selon la relation :
19 rms(OMA) = alpha/(1. + alpha) rms(d)
22 # Définition des données "théoriques" vraies
23 # ------------------------------------------
24 xt = numpy.matrix(numpy.arange(dimension)).T
25 Eo = numpy.matrix(numpy.random.normal(0.,1.,size=(dimension,))).T
26 Eb = numpy.matrix(numpy.zeros((dimension,))).T
28 H = numpy.matrix(numpy.core.identity(dimension))
36 # Définition des matrices de covariances d'erreurs
37 # ------------------------------------------------
38 B = numpy.matrix(numpy.core.identity(dimension)).T
43 ADD = AssimilationStudy()
44 ADD.setBackground (asVector = xb )
45 ADD.setBackgroundError (asCovariance = B )
46 ADD.setObservation (asVector = yo )
47 ADD.setObservationError (asCovariance = R )
48 ADD.setObservationOperator(asMatrix = H )
51 ADD.setAlgorithm(choice="Blue")
55 xa = ADD.get("Analysis").valueserie(0)
56 d = ADD.get("Innovation").valueserie(0)
58 # Calcul RMS pour d et OMA
59 # ------------------------
60 ADD.setDiagnostic("RMS",
61 name = "Calcul de la RMS sur l'innovation et OMA",
63 RMS = ADD.get("Calcul de la RMS sur l'innovation et OMA")
65 # La RMS de l'innovation d
66 # ------------------------
67 RMS.calculate(d,numpy.zeros(len(d)))
68 # Le calcul ci-dessus doit être identique à : RMS.calculate(xb,yo)
70 # La RMS de l'écart OMA
71 # ---------------------
74 # Vérification du résultat
75 # ------------------------
76 if (RMS.valueserie(1) - (alpha/(1. + alpha)) * RMS.valueserie(0)) > precision:
77 raise ValueError("Résultat du test erroné")
80 print " Test correct, erreur maximale inférieure à %s"%precision
83 #===============================================================================
84 if __name__ == "__main__":
87 print "AUTODIAGNOSTIC"
88 print "=============="