d = Y - HXb
logging.debug("%s Innovation d = %s"%(self._name, d))
#
- # Calcul de la matrice de gain dans l'espace le plus petit et de l'analyse
- # ------------------------------------------------------------------------
+ # Calcul de la matrice de gain et de l'analyse
+ # --------------------------------------------
if Y.size <= Xb.size:
if self._parameters["R_scalar"] is not None:
R = self._parameters["R_scalar"] * numpy.eye(len(Y), dtype=numpy.float)
typecast = float,
message = "Maximum de variation de la fonction d'estimation lors de l'arrêt",
)
+ self.defineRequiredParameter(
+ name = "StoreInternalVariables",
+ default = False,
+ typecast = bool,
+ message = "Stockage des variables internes ou intermédiaires du calcul",
+ )
def run(self, Xb=None, Y=None, H=None, M=None, R=None, B=None, Q=None, Parameters=None):
"""
logging.debug("%s CostFunction Jb = %s"%(self._name, Jb))
logging.debug("%s CostFunction Jo = %s"%(self._name, Jo))
logging.debug("%s CostFunction J = %s"%(self._name, J))
- self.StoredVariables["CurrentState"].store( _X.A1 )
+ if self._parameters["StoreInternalVariables"]:
+ self.StoredVariables["CurrentState"].store( _X.A1 )
self.StoredVariables["CostFunctionJb"].store( Jb )
self.StoredVariables["CostFunctionJo"].store( Jo )
self.StoredVariables["CostFunctionJ" ].store( J )
# Recuperation des donnees et informations initiales
# --------------------------------------------------
variables = asmatrix(x0).A1
- mesures = asmatrix(asmatrix(y).A1).T
+ mesures = asmatrix(y).flatten().T
increment = sys.float_info[0]
p = len(variables.flat)
n = len(mesures.flat)
+ quantile = float(quantile)
#
# Calcul des parametres du MM
# ---------------------------
# Calculs d'initialisation
# ------------------------
residus = asmatrix( mesures - func( variables ) ).A1
- poids = 1./(epsilon+abs(residus))
+ poids = asarray( 1./(epsilon+abs(residus)) )
veps = 1. - 2. * quantile - residus * poids
lastsurrogate = -sum(residus*veps) - (1.-2.*quantile)*sum(residus)
iteration = 0
while (increment > toler) and (iteration < maxfun) :
iteration += 1
#
- Derivees = fprime(variables)
- DeriveesT = matrix(Derivees).T
- M = - dot( DeriveesT , (array(matrix(p*[poids]).T)*array(Derivees)) )
+ Derivees = array(fprime(variables))
+ Derivees = Derivees.reshape(n,p) # Necessaire pour remettre en place la matrice si elle passe par des tuyaux YACS
+ DeriveesT = array(matrix(Derivees).T)
+ M = - dot( DeriveesT , (array(matrix(p*[poids,]).T)*Derivees) )
SM = dot( DeriveesT , veps ).T
- step = linalg.lstsq( M, SM )[0].A1
+ step = linalg.lstsq( M, SM )[0]
#
- variables = asarray(variables) + asarray(step)
- residus = ( mesures - func(variables) ).A1
+ variables = variables + step
+ residus = asmatrix( mesures - func(variables) ).A1
surrogate = sum(residus**2 * poids) + (4.*quantile-2.) * sum(residus)
#
while ( (surrogate > lastsurrogate) and ( max(list(abs(step))) > 1.e-16 ) ) :