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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
relGradError = full(abs(grad_fd - grad)./max(1.0,abs(grad))); 
... 
if any(relGradError > tol)
...