problème Optimization Toolbox et Jacobien
Bonjour,
J'utilise deux fonctions Matlab de la Optimization Toolbox: lsqnonlin et fmincon. Comme je minimise des énormes fonctions je donne moi-même le jacobien et le gradient (second argout de chaque fonction à minimiser). Dans les deux cas j'utilise l'option 'DerivativeCheck','on' pour vérifier que mes dérivées sont bonnes
Pour lsqnonlin, pas de problème. La fonction me rends ceci :
Code:
1 2 3 4 5 6 7 8 9
| ____________________________________________________________
Derivative Check Information
Objective function derivatives:
Maximum relative difference between user-supplied
and finite-difference derivatives = 5.36603e-005.
Derivative Check successfully passed.
____________________________________________________________ |
Pour la fonction fmincon, c'est le drame:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ____________________________________________________________
Derivative Check Information
Objective function derivatives:
Maximum relative difference between user-supplied
and finite-difference derivatives = 1.93882e-005.
User-supplied derivative element (249,1): 0.0987307
Finite-difference derivative element (249,1): 0.0987501
____________________________________________________________
Error using validateFirstDerivatives (line 89)
Derivative Check failed:
User-supplied and forward finite-difference derivatives do not match within 1e-006 relative
tolerance. |
L'ordre de grandeur de l'erreur est le même (elle est même plus petite dans le deuxième !) , or l'une passe le test, l'autre pas. Quelqu'un aurait-il une idée ?
Merci de m'éclairer !
PS. Les deux fonctions lsqnonlin et fmincon utilisent validateFirstDerivatives pour vérifier les dérivées, et le seuil d'erreur est fixé à
et le test est
Code:
1 2 3 4
| relGradError = full(abs(grad_fd - grad)./max(1.0,abs(grad)));
...
if any(relGradError > tol)
... |