Théorie de base utile
Un petit fait que vous pouvez utiliser pour comprendre si une dérivée numérique est correctement calculée ou non est le reste de Cauchy de l'expansion de Taylor. C'est,
f(x+h)=f(x)+hf′(x)+h22f′′(ξ)pour certainsξ∈[x,x+h]
Ceci est utile, car vous avez probablement approximé votre première dérivée en
f′(x)≈f(x+h)−f(x−h)2h
avec quelques petits (j'utilise généralement , mais je suis sûr qu'un jour je vais rencontrer un cas où ce n'est pas approprié).h10−4
Après un peu d'algèbre, nous pouvons utiliser le reste de Cauchy pour voir que notre approximation numérique devrait théoriquement être dans de .hf′′(ξ),ξ∈[x−h,x+h]f′(x)
En fait, vous pouvez réellement le délimiter par , où et ... ce qui équivaut à , .h(f′′(ξ1)−f′′(ξ2))ξ1∈[x−h,x]ξ2∈[x,x+h]h2f′′′(ξ)ξ∈[x−h,x+h]
Problèmes dans la pratique
D'accord, nous avons une belle théorie qui limite l'erreur de la dérivée numérique. Mais il y a deux trous à essayer directement d'utiliser ces résultats:
1.) Nous ne savons pas (et nous ne voulons probablement pas passer le temps à l'approcher)f′′′(x)
2.) comme , souffre d'instabilité numériqueh→0f(x+h)−f(x−h)2h
Donc, en utilisant ce que nous savons de la façon dont je vérifie mes dérivés analytiques (ce qui n'est peut-être pas le meilleur moyen), j'écris la fonction dérivée numérique en fonction de . Si je ne peux pas dire si la différence entre les dérivés numériques et analytiques est due à une erreur de codage ou simplement à une approximation numérique, je peux réduire et voir si ma dérivée numérique s'approche de ma dérivée analytique avant de souffrir d'instabilité numérique (lorsque cela se produit, vos approximations numériques deviendront moins cohérentes à mesure que diminue). Notez que le terme devrait disparaître de façon quadratique, donc si mon erreur est d'environ avechhhf′′′(ξ)0.01h=10−4 , il devrait être d'environ avec supposant que l'instabilité numérique ne s'est pas encore déclenchée .0.0001h=10−5
Malheureusement, il n'y a pas de ligne directrice stricte et rapide pour toujours déterminer ces choses; cela dépend beaucoup de la stabilité de la fonction (et je veux dire à la fois en termes de stabilité numérique et de dérivés supérieurs). Mais dans mes expériences, je n'ai jamais vu un cas où l'erreur de n'allait pas définitivement à 0 (c'est-à-dire que l'utilisation de donnait pratiquement la même réponse que ) au moment où l'instabilité numérique de déclenchée.h2f′′′(ξ)h=10−4h=10−5h→0