#
msg = "===> Information before launching:\n"
msg += " -----------------------------\n"
- msg += " Characteristics of input parameter Xb, internally converted:\n"
+ msg += " Characteristics of input parameter X, internally converted:\n"
msg += " Type...............: %s\n"%type( Xn )
msg += " Lenght of vector...: %i\n"%max(numpy.matrix( Xn ).shape)
msg += " Minimum value......: %.5e\n"%numpy.min( Xn )
#
CUR_LEVEL = logging.getLogger().getEffectiveLevel()
logging.getLogger().setLevel(logging.DEBUG)
- print("===> Launching direct operator evaluation, activating debug\n")
+ print( "===> Launching direct operator evaluation, activating debug\n")
Y = Hm( Xn )
- print("===> End of direct operator evaluation, deactivating debug\n")
+ print("\n===> End of direct operator evaluation, deactivating debug\n")
logging.getLogger().setLevel(CUR_LEVEL)
#
msg = "===> Information after launching:\n"
msg += " ----------------------------\n"
- msg += " Characteristics of output parameter Y to compare to observation:\n"
+ msg += " Characteristics of output parameter Y, to compare to observation:\n"
msg += " Type...............: %s\n"%type( Y )
msg += " Lenght of vector...: %i\n"%max(numpy.matrix( Y ).shape)
msg += " Minimum value......: %.5e\n"%numpy.min( Y )
m = PlatformInfo.SystemUsage()
import numpy
+import math
# ==============================================================================
class ElementaryAlgorithm(BasicObjects.Algorithm):
# --------------------
if self._parameters["ResiduFormula"] is "Taylor":
__doc__ = """
- On observe le residu issu du développement de Taylor de la fonction F :
+ On observe le residu issu du développement de Taylor de la fonction F,
+ normalisée par la valeur au point nominal :
- R(Alpha) = || F(X+Alpha*dX) - F(X) - Alpha * TangentF_X(dX) ||
+ || F(X+Alpha*dX) - F(X) - Alpha * GradientF_X(dX) ||
+ R(Alpha) = ----------------------------------------------------
+ || F(X) ||
- Si F n'est pas linéaire, ce résidu doit décroître en Alpha**2 selon Alpha.
- Si F est linéaire, le résidu décroit en Alpha à partir de l'erreur faite
- sur le terme TangentF_X.
+ Si le résidu décroit et que la décroissance se fait en Alpha**2 selon Alpha,
+ cela signifie que le gradient est bien calculé jusqu'à la précision d'arrêt
+ de la décroissance quadratique et que F n'est pas linéaire.
+
+ Si le résidu décroit et que la décroissance se fait en Alpha selon Alpha,
+ jusqu'à un certain seuil aprés lequel le résidu est faible et constant, cela
+ signifie que F est linéaire et que le résidu décroit à partir de l'erreur
+ faite dans le calcul du terme GradientF_X.
+
On prend dX0 = Normal(0,X) et dX = Alpha*dX0. F est le code de calcul.
"""
elif self._parameters["ResiduFormula"] is "Norm":
__doc__ = """
- On observe le residu, qui est une approximation du gradient :
+ On observe le residu, qui est basé sur une approximation du gradient :
|| F(X+Alpha*dX) - F(X) ||
R(Alpha) = ---------------------------
msgs = ""
msgs += __doc__
#
- msg = " i Alpha ||X|| ||F(X)|| ||F(X+dX)|| ||dX|| ||F(X+dX)-F(X)|| ||F(X+dX)-F(X)||/||dX|| R(Alpha) "
+ msg = " i Alpha ||X|| ||F(X)|| ||F(X+dX)|| ||dX|| ||F(X+dX)-F(X)|| ||F(X+dX)-F(X)||/||dX|| R(Alpha) log( R ) "
nbtirets = len(msg)
msgs += "\n" + "-"*nbtirets
msgs += "\n" + msg
NormesdFXsAm.append( NormedFXsAm )
#
if self._parameters["ResiduFormula"] is "Taylor":
- Residu = NormedFXGdX
+ Residu = NormedFXGdX / NormeFX
elif self._parameters["ResiduFormula"] is "Norm":
Residu = NormedFXsAm
if Normalisation < 0 : Normalisation = Residu
#
- msg = " %2i %5.0e %9.3e %9.3e %9.3e %9.3e %9.3e | %9.3e | %9.3e"%(i,amplitude,NormeX,NormeFX,NormeFXdX,NormedX,NormedFX,NormedFXsdX,Residu)
+ msg = " %2i %5.0e %9.3e %9.3e %9.3e %9.3e %9.3e | %9.3e | %9.3e %4.0f"%(i,amplitude,NormeX,NormeFX,NormeFXdX,NormedX,NormedFX,NormedFXsdX,Residu,math.log10(max(1.e-99,Residu)))
msgs += "\n" + msg
#
self.StoredVariables["CostFunctionJ"].store( Residu )