Par souci de notation, supposons que (c'est-à-dire que c'est une fonction à valeur vectorielle qui prend un vecteur en entrée et génère un vecteur de la même taille). Il y a deux préoccupations: le coût de calcul et la précision numérique.f:Rn→Rn
Calcul de la dérivée (la matrice jacobienne, J ( x ) ou ( ∇ f ( x ) )Df(x)J(x) , ou tout ce que vous préférez) en utilisant des différences finies va nécessiternévaluations de fonctions. Si vous pouviez calculer la dérivée en utilisant l'arithmétique à virgule flottante directement à partir de la définition, vous devriez calculer le quotient de différence(∇f(x))Tn
Df(x)ei=limε→0f(x+εei)−f(x)ε
pour chaque , en supposant que vous ne faites aucune sorte de «différenciation finie intelligente» (comme Curtis-Powell-Reid) parce que vous connaissez (ou pouvez détecter) le modèle de rareté de D f . Si n est grand, cela pourrait être beaucoup d'évaluations de fonctions. Si vous avez une expression analytique pouri=1,…,nDfn , alors le calculer pourrait être moins cher. Des méthodes de différenciation automatiques (également appelées algorithmes) peuvent également être utilisées dans certains cas pour calculer D f à environ 3 à 5 fois le coût d'une évaluation de fonction.DfDf
Il y a aussi des préoccupations numériques. De toute évidence, sur un ordinateur, nous ne pouvons pas prendre la limite d'un scalaire car il va à zéro, donc lorsque nous approchons Df , nous choisissons vraiment pour être "petit" et calculonsε
Df(x)ei≈f(x+εei)−f(x)ε,
où signifie que c'est une approximation, et nous espérons que c'est une très bonne approximation. Le calcul de cette approximation en arithmétique à virgule flottante est difficile car si vous choisissez ε trop grand, votre approximation pourrait être mauvaise, mais si vous choisissez ε trop petit, il pourrait y avoir une erreur d'arrondi significative. Ces effets sont traités dans l'article de Wikipedia sur la différenciation numérique en détail superficiel; des références plus détaillées peuvent être trouvées dans l'article.≈εε
Si l'erreur dans la matrice jacobienne n'est pas trop grande, les itérations de Newton-Raphson convergeront. Pour une analyse théorique détaillée, voir le chapitre 25 de Précision et stabilité des algorithmes numériques de Nick Higham , ou l'article de Françoise Tisseur sur lequel il est basé.Df
Les bibliothèques s'occupent généralement de ces détails algorithmiques pour vous, et généralement, les implémentations de bibliothèque de l'algorithme de Newton-Raphson (ou des variantes de celui-ci) convergeront assez bien, mais de temps en temps, il y aura un problème qui causera des problèmes en raison des inconvénients au dessus. Dans le cas scalaire , j'utiliserais la méthode de Brent , en raison de sa robustesse et de son bon taux de convergence en pratique.(n=1)