]> SALOME platform Git repositories - modules/adao.git/commitdiff
Salome HOME
Minor source corrections for calculation precision control
authorJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Thu, 28 May 2015 20:33:54 +0000 (22:33 +0200)
committerJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Thu, 28 May 2015 20:33:54 +0000 (22:33 +0200)
src/daComposant/daAlgorithms/Blue.py
src/daComposant/daAlgorithms/ExtendedKalmanFilter.py
src/daComposant/daAlgorithms/KalmanFilter.py

index 7e05f14b1ae039d9b7cb9b4833cd96c0cdd0e6eb..069e937b11e29ecfc9ce37d4f3f770288fa2fc38 100644 (file)
@@ -150,6 +150,9 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         # ---------------------------------
         if "APosterioriCovariance" in self._parameters["StoreSupplementaryCalculations"] or \
            "SimulationQuantiles"   in self._parameters["StoreSupplementaryCalculations"]:
+            if   (Y.size <= Xb.size) and (Y.size > 100): K  = B * Ha * (R + Hm * B * Ha).I
+            elif (Y.size >  Xb.size) and (Y.size > 100): K = (BI + Ha * RI * Hm).I * Ha * RI
+            else:                                        pass # K deja calcule
             A = B - K * Hm * B
             if min(A.shape) != max(A.shape):
                 raise ValueError("The %s a posteriori covariance matrix A is of shape %s, despites it has to be a squared matrix. There is an error in the observation operator, please check it."%(self._name,str(A.shape)))
index f9e2c81d74ffe69dcabf3b573375184a2e20d4a8..fdc69ccb1ec5c6aeab4f41f3bb6649f5080a5482 100644 (file)
@@ -166,8 +166,10 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
                 if Cm is not None and Un is not None: # Attention : si Cm est aussi dans H, doublon !
                     d = d - Cm * Un
             #
+            _A = R + Ht * Pn_predicted * Ha
+            _u = numpy.linalg.solve( _A , d )
+            Xn = Xn_predicted + Pn_predicted * Ha * _u
             Kn = Pn_predicted * Ha * (R + Ht * Pn_predicted * Ha).I
-            Xn = Xn_predicted + Kn * d
             Pn = Pn_predicted - Kn * Ht * Pn_predicted
             #
             self.StoredVariables["Analysis"].store( Xn.A1 )
index d1d50b9a292507d7ff53d38c259ba4248efa8a59..9695541ade123e8e54a8d588cdf2799e6a9b237f 100644 (file)
@@ -137,8 +137,10 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
                 if Cm is not None and Un is not None: # Attention : si Cm est aussi dans H, doublon !
                     d = d - Cm * Un
             #
+            _A = R + Ht * Pn_predicted * Ha
+            _u = numpy.linalg.solve( _A , d )
+            Xn = Xn_predicted + Pn_predicted * Ha * _u
             Kn = Pn_predicted * Ha * (R + Ht * Pn_predicted * Ha).I
-            Xn = Xn_predicted + Kn * d
             Pn = Pn_predicted - Kn * Ht * Pn_predicted
             #
             self.StoredVariables["Analysis"].store( Xn.A1 )