2 Copyright (C) 2008-2015 EDF R&D
4 This file is part of SALOME ADAO module.
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with this library; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
24 .. index:: single: GradientTest
25 .. _section_ref_algorithm_GradientTest:
27 Algorithme de vérification "*GradientTest*"
28 -------------------------------------------
33 Cet algorithme permet de vérifier la qualité du gradient de l'opérateur, en
34 calculant un résidu dont les propriétés théoriques sont connues. Plusieurs
35 formules de résidu sont disponibles.
37 Dans tous les cas, on prend :math:`\mathbf{dx}_0=Normal(0,\mathbf{x})` et
38 :math:`\mathbf{dx}=\alpha*\mathbf{dx}_0`. :math:`F` est le code de calcul.
43 On observe le résidu issu du développement de Taylor de la fonction :math:`F`,
44 normalisé par la valeur au point nominal :
46 .. math:: R(\alpha) = \frac{|| F(\mathbf{x}+\alpha*\mathbf{dx}) - F(\mathbf{x}) - \alpha * \nabla_xF(\mathbf{dx}) ||}{|| F(\mathbf{x}) ||}
48 Si le résidu décroit et que la décroissance se fait en :math:`\alpha^2` selon
49 :math:`\alpha`, cela signifie que le gradient est bien calculé jusqu'à la
50 précision d'arrêt de la décroissance quadratique, et que :math:`F` n'est pas
53 Si le résidu décroit et que la décroissance se fait en :math:`\alpha` selon
54 :math:`\alpha`, jusqu'à un certain seuil après lequel le résidu est faible et
55 constant, cela signifie que :math:`F` est linéaire et que le résidu décroit à
56 partir de l'erreur faite dans le calcul du terme :math:`\nabla_xF`.
61 On observe le résidu issu du développement de Taylor de la fonction :math:`F`,
62 rapporté au paramètre :math:`\alpha` au carré :
64 .. math:: R(\alpha) = \frac{|| F(\mathbf{x}+\alpha*\mathbf{dx}) - F(\mathbf{x}) - \alpha * \nabla_xF(\mathbf{dx}) ||}{\alpha^2}
66 C'est un résidu essentiellement similaire au critère classique de Taylor décrit
67 précédemment, mais son comportement peut différer selon les propriétés
68 numériques des calculs de ses différents termes.
70 Si le résidu est constant jusqu'à un certain seuil et croissant ensuite, cela
71 signifie que le gradient est bien calculé jusqu'à cette précision d'arrêt, et
72 que :math:`F` n'est pas linéaire.
74 Si le résidu est systématiquement croissant en partant d'une valeur faible par
75 rapport à :math:`||F(\mathbf{x})||`, cela signifie que :math:`F` est
76 (quasi-)linéaire et que le calcul du gradient est correct jusqu'au moment où le
77 résidu est de l'ordre de grandeur de :math:`||F(\mathbf{x})||`.
82 On observe le résidu, qui est basé sur une approximation du gradient :
84 .. math:: R(\alpha) = \frac{|| F(\mathbf{x}+\alpha*\mathbf{dx}) - F(\mathbf{x}) ||}{\alpha}
86 qui doit rester constant jusqu'à ce que l'on atteigne la précision du calcul.
88 Commandes requises et optionnelles
89 ++++++++++++++++++++++++++++++++++
91 .. index:: single: AlgorithmParameters
92 .. index:: single: CheckingPoint
93 .. index:: single: ObservationOperator
94 .. index:: single: AmplitudeOfInitialDirection
95 .. index:: single: EpsilonMinimumExponent
96 .. index:: single: InitialDirection
97 .. index:: single: ResiduFormula
98 .. index:: single: SetSeed
100 Les commandes requises générales, disponibles dans l'interface en édition, sont
104 *Commande obligatoire*. Elle définit le vecteur utilisé comme l'état autour
105 duquel réaliser le test requis, noté :math:`\mathbf{x}` et similaire à
106 l'ébauche :math:`\mathbf{x}^b`. Sa valeur est définie comme un objet de type
110 *Commande obligatoire*. Elle indique l'opérateur d'observation, notée
111 précédemment :math:`H`, qui transforme les paramètres d'entrée
112 :math:`\mathbf{x}` en résultats :math:`\mathbf{y}` qui sont à comparer aux
113 observations :math:`\mathbf{y}^o`. Sa valeur est définie comme un objet de
114 type "*Function*". Différentes formes fonctionnelles peuvent être
115 utilisées, comme décrit dans la section
116 :ref:`section_ref_operator_requirements`. Si un contrôle :math:`U` est
117 inclus dans le modèle d'observation, l'opérateur doit être appliqué à une
120 Les commandes optionnelles générales, disponibles dans l'interface en édition,
121 sont indiquées dans la :ref:`section_ref_checking_keywords`. De plus, les
122 paramètres de la commande "*AlgorithmParameters*" permettent d'indiquer les options
123 particulières, décrites ci-après, de l'algorithme. On se reportera à la
124 :ref:`section_ref_options_Algorithm_Parameters` pour le bon usage de cette
127 Les options de l'algorithme sont les suivantes:
129 AmplitudeOfInitialDirection
130 Cette clé indique la mise à l'échelle de la perturbation initiale construite
131 comme un vecteur utilisé pour la dérivée directionnelle autour du point
132 nominal de vérification. La valeur par défaut est de 1, ce qui signifie pas
135 Exemple : ``{"AmplitudeOfInitialDirection":0.5}``
137 EpsilonMinimumExponent
138 Cette clé indique la valeur de l'exposant minimal du coefficient en
139 puissance de 10 qui doit être utilisé pour faire décroître le multiplicateur
140 de l'incrément. La valeur par défaut est de -8, et elle doit être entre 0 et
141 -20. Par exemple, la valeur par défaut conduit à calculer le résidu de la
142 formule avec un incrément fixe multiplié par 1.e0 jusqu'à 1.e-8.
144 Exemple : ``{"EpsilonMinimumExponent":-12}``
147 Cette clé indique la direction vectorielle utilisée pour la dérivée
148 directionnelle autour du point nominal de vérification. Cela doit être un
149 vecteur. Si elle n'est pas spécifiée, la direction par défaut est une
150 perturbation par défaut autour de zéro de la même taille vectorielle que le
151 point de vérification.
153 Exemple : ``{"InitialDirection":[0.1,0.1,100.,3}``
156 Cette clé indique la formule de résidu qui doit être utilisée pour le test.
157 Le choix par défaut est "Taylor", et les choix possibles sont "Taylor"
158 (résidu du développement de Taylor normalisé de l'opérateur, qui doit
159 décroître comme le carré de la perturbation), "TaylorOnNorm" (résidu du
160 développement de Taylor rapporté à la perturbation de l'opérateur, qui doit
161 rester constant) et "Norm" (résidu obtenu en prenant la norme du
162 développement de Taylor à l'ordre 0, qui approxime le gradient, et qui doit
165 Exemple : ``{"ResiduFormula":"Taylor"}``
168 Cette clé permet de donner un nombre entier pour fixer la graine du
169 générateur aléatoire utilisé pour générer l'ensemble. Un valeur pratique est
170 par exemple 1000. Par défaut, la graine est laissée non initialisée, et elle
171 utilise ainsi l'initialisation par défaut de l'ordinateur.
173 Exemple : ``{"SetSeed":1000}``
178 Références vers d'autres sections :
179 - :ref:`section_ref_algorithm_FunctionTest`
180 - :ref:`section_ref_algorithm_TangentTest`
181 - :ref:`section_ref_algorithm_AdjointTest`