ChronoMath, une chronologie des MATHÉMATIQUES
à l'usage des professeurs de mathématiques, des étudiants et des élèves des lycées & collèges

Calcul approché d'un nombre dérivé selon d'Alembert   
 
» calcul approché de f ''(x) , utiliser le programme on line

Dérivée première :      

Soit f une fonction numérique dérivable au voisinage d'un réel x. Notons (c) la courbe représentative de f dans un repère orthogonal.

On note y = f(x) et yh = f(x + h) où h désigne un réel "proche de zéro" (h <0 sur le dessin). Le nombre dérivé de f en x est alors :

f '(x) =

f' est la fonction dérivée première de f. Sur le dessin, c'est le coefficient directeur de la tangente (T) en M(x,y), position limite de la sécante (s), et on peut écrire, pour h suffisamment petit :

Dans le cas où f n'est dérivable qu'à droite (resp. gauche) en x, on devra s'obliger à faire tendre h vers zéro par valeurs supérieures (resp. inférieures).

Dans le cas de bonnes fonctions, régulières, pour des raisons qu'il est aisé de vérifier géométriquement, une meilleure approximation de f '(x) est donnée par la formule dite, improprement, de dérivée symétrique :

 

      (ds)

Notre souci est ici d'évaluer une valeur optimale de h afin d'obtenir sur calculatrice ou ordinateur une bonne approximation du nombre dérivé f '(x). Choisir h trop petit risque de conduire à f '(x) = 0 car en soustraction, l'ordinateur fait de grosses erreurs si les opérandes sont sensiblement égaux : pertes de chiffres significatifs .

L'erreur absolue commise par la machine sur le calcul de (ds) est sensiblement : | 2e.f(x)|/h où e désigne l'erreur d'arrondi due au calcul et au stockage en mémoire de f(x). Appelons T l'approximation de f '(x) donnée par (ds) et Tm l'approximation de ce nombre obtenue par la machine.

Il s'agit d'estimer l'erreur absolue maximale | Tm - f
'(x) |. Utilisant la formule de Taylor, en admettant que f soit dérivable jusqu'à l'ordre 3, nous pouvons écrire :

où e1 et e2 sont des fonctions de h, de limite nulle en 0.

On en déduit :

| Tm - f '(x) | ≤ | h2.f '''(x)/6+ h2.e3(h)/2 |    avec lim e3 = 0 lorsque si h tend vers 0

Par suite, en acceptant de négliger le terme "très petit" h2.e3(h) :

| Tm - f '(x) | ≤ | Tm - T | + | T - f '(x) | ≤ | 2e.f(x) |/h  + h2.|f '''(x) |/6

Soit M le plus grand des deux nombres | f(x) | et | f '''(x) |. On a alors :

| Tm - f '(x) | ≤ M(2e/h + h2/6)

 !  On constate, par la présence de la fraction 2e/h, qu'un h "trop petit", voisin de la précision de la machine, est à proscrire. La parenthèse est une fonction de h admettant un minimum d'environ 2Me2/3 pour h = (6e)1/3. Un bon choix pour h est 10-4. Ce choix est conforme aux problèmes d'arrondi sur une différence de nombres trop proches.

Dérivée seconde :     

f désignant ici une fonction numérique de classe C2 (deux fois continûment dérivable), on se propose maintenant de calculer une bonne approximation de la valeur de la fonction dérivée seconde en un point.

Un tel calcul s'avère utile dans de nombreux problèmes d'analyse numérique (longueur d'un arc de courbe, rayon de courbure, approximation de l'erreur dans des calculs approchés d'intégrale, etc.)

Selon la formule de Taylor, on a comme précédemment :

f(x + h) = f(x) + h.f'(x) + h2.f''(x)/2 + h2e(h)

où e(h) a pour limite 0 lorsque h tend vers 0. Il suffit alors de remplacer f '(x) par son expression approchée (ds) ci-dessus; on obtient alors :

Un calcul basé sur la formule de Taylor-Young et les erreurs d'arrondi des calculatrices ou des ordinateurs, semblable à celui fait sur la dérivée première, montre qu'il ne faut pas choisir h trop petit, sinon on obtient systématiquement f''(x) = 0. Le bon choix est généralement de l'ordre de 10-4.

Programmation de la méthode en JavaScript
 
<SCRIPT LANGUAGE=JavaScript>
var f;
var pi=3.141592653589793;
var e=2.7182818284590452;

function go()
{
h=0.0001;
 {
  with (Math)
  fonc="x*x" ; x=1.5;
  fonc=prompt("Entrez votre fonction :",fonc)
  x=eval(prompt("Entrez x :",x))
  h=eval(prompt("Entrez h :",h))
  fx=f(x);df = f(x+h)-f(x-h);
  deriv1 = df/2/h;
  deriv2=(f(x+h)+f(x-h)-2*f(x))/h/h;
  d1=arrondi(deriv1) ; d2=arrondi(deriv2)
  alert("x = "+x+"\n"+"f(x) = "+fx+"\n"+"f'(x) = "+d1+"\n"+"f''(x) = "+d2)
 }
}
function arrondi(x)
{
return Math.round(x*10000)/10000
}
function f(x)
{with(Math){y=eval(fonc) ; return y}}
</SCRIPT>
 

    L'instruction with (Math), placée en début de procédure, évite à l'utilisateur de préciser Math devant chaque fonction mathématique utilisée.

» fonctions mathématiques usuelles

function arrondi(x)
{
sgn=1;if (x<0) {sgn=-1}
ar=sgn*Math.floor(Math.abs(x)*10000+.5)/10000;
return ar
}





© Serge Mehl - www.chronomath.com