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

  Méthode des tangentes pour l'équation f(x) = 0      programme JavaScript 
        @ Pas de théorie, je veux utiliser le programme  |  @ Version tableur | Autres méthodes

Cette méthode de résolution d'une équation du type f(x) = 0 est due à Isaac Newton; elle fut complétée par Raphson.

Conditions de validité de la méthode :    

On se place dans un voisinage V isolant une solution α de l'équation f(x) = 0 sur lequel f est continue et deux fois dérivable, de nombres dérivés premier et second non nuls : pour tout x de V, f '(x) et f ''(x) sont non nuls.

La condition sur f'' exprime que la restriction à V de la courbe (C) représentative de f garde une même concavité.

Étude :    

Notons xo une valeur approchée initiale de α dans V. La tangente To en Mo(xo,yo) à (C) coupe l'axe des abscisses en x1 que nous rappelons en M1 sur (C). La tangente à (C) en M1 coupe l'axe des abscisses en x2 , entre α et x1 , etc.

Graphiquement et du fait de la concavité constante de la courbe, on constate que la suite (xn) converge vers α. Prouvons ce résultat :

Utilisant l'équation de la tangente en un point M(x,y) de (C), on obtient successivement :

x1 = xo - yo/y'o     ,    x2 = x1 - y1/y'1

et, plus généralement : si xo est donné dans V :

xn+1 = xn - yn/y'n   avec  yn = f(xn)   et   y'n = f '(xn)          (recur)

Posons h(x) = x - f(x)/f '(x) . Nous avons xn+1 = h(xn). Nos hypothèses permettent d'écrire :

h'(x) = f(x).f "(x)/[f '(x)]2         (*)

Le critère du point fixe indique qu'il y a convergence de (xn) vers α tel que h(α) = α, d'où f(α) = 0 à condition que, pour tout x de V, nous ayons : 0 < | h'(x) | < M < 1, le réel M étant indépendant de x.

Or si nous choisissons xo assez voisin de α, f(x) sera voisin de zéro et la relation (*) ci-dessus assure l'encadrement 0 < |h'(x)|< 1 petit à condition que ni f '(x), ni f ''(x) ne soient pas proches de zéro : la fonction dérivée seconde ne doit donc pas s'annuler : (C) doit garder la même concavité sur V.

Cas de zéros d'ordre p > 1 :    

La méthode ne devrait donc pas converger au voisinage de zéros multiples : qui annulent simultanément la fonction f et sa dérivée f'. Par exemple f(x) = x3 - 2x2 - 4x + 8 = (x + 2)(x - 2)2. Qu'en est-il de tels zéros dans le cas général ?

Supposons la fonction f de classe Cp (p fois continûment dérivable, p > 2) et admettant une dérivée d'ordre p + 1 sur le voisinage V du zéro α. Les fonctions f' et f'' admettent le même zéro d'ordre p - 1 et p - 2 respectivement et f, f' et f'' admettent alors des développements de Taylor-Lagrange d'ordre p + 1 sur l'intervalle ]x,α[ ou ]α,x[ inclus dans V.

Vu que f(k)(α) = 0 pour k élément de {0,1,..., p-1}, on peut écrire :

où cx, c'x et c"x sont éléments de ]x,α[ . Ainsi h'(x) s'écrira pour x élément de V :

Par suite pour x suffisamment voisin de α, ce qui est le cas dans V, on aura f (p)(cx), f (p)(c'x) et f (p)(c"x) sensiblement égaux et, par là :

h'(x) ≅ 1 - 1/p < 1

Ce qui assure la convergence du procédé vers α en vertu du critère du point fixe.

En remarquant que xn+1 - xn = -yn/y'n , on voit, dans les conditions licites d'utilisation, que la suite (xn) est soit croissante, soit décroissante. Cette propriété permet de combiner cette méthode des tangentes à celle de Lagrange, dite des sécantes.

Programmation de la méthode en JavaScript :         » version tableur
 

Dans ce programme, plutôt que de calculer la dérivée de f, on fournit à l'ordinateur une approximation très fiable qui n'altère pas la convergence :
 

et il est encore plus efficace d'utiliser la formule dite de la dérivée symétrique, utilisée dans ce programme :

Cette méthode d'interpolation est parfois dite regula falsi : » règle de fausse position.

     

<SCRIPT LANGUAGE=JavaScript>
var fonc;
var pi=3.141592653589793 ;
var e=2.7182818284590452;

function meth_tg()
{
with (Math)
{
h=1e-4; n=0;
fonc="sin(x)-x/2";xo=1.5;h=1e-4; nd=10;fonc=prompt("Votre fonction f(x) = ",fonc)
xo=eval(prompt("x initial = ",xo))
nd=prompt("nombre de decimales = ",nd);if (nd==null) {return} else {nd=eval(nd)}
x=xo+1;
while (abs(x-xo)>pow(10,-nd))
{
y=f(xo);if (y==0) {fin();return};
d=(f(xo+h)-f(xo-h))/2/h;if(d==0) {alert("df/dx=0 !");return}
x=xo;xo=xo-y/d;n++;if (!confirm("X"+n+"= "+x+"\n"+"f(x)="+y+"\n"+"Ok pour continuer")) return
}
fin()
}
}

function fin()
{alert("x="+x+"\n"+"fin d'algorithme")}

function f(x)
{with(Math) {y=eval(fonc) ; return y}}
</SCRIPT>


Commentaires :    

Pour tester ce programme vous devez entrer votre fonction en utilisant une syntaxe comprise par le langage JavaScript. 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. Les opérations et fonctions usuelles sont les suivantes :

»   fonctions mathématiques usuelles

Discussion :    

Exemple d'exécution :    

  L'équation résolue est sin(x) - x/2 = 0 au voisinage de x = 1.5 :

Autres méthodes :  »


© Serge Mehl - www.chronomath.com