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 sécantes pour l'équation f(x) = 0
       @  Tester le programme en ligne  |  Autres méthodes

On se propose ici de résoudre une équation du type f(x) = 0 par la méthode de Lagrange, dite aussi des sécantes ou par interpolation linéaire que l'on peut qualifier de complémentaire vis à vis de la méthode des tangentes de Newton, car elle permet un encadrement de la solution : si la méthode de Newton approche le zéro par défaut, alors la méthode de Lagrange l'approche par excès et vice versa. Cependant, comme pour la méthode dichotomique, le zéro doit être d'ordre impair.

Étude :   

Soit α la solution isolée et encadrée par a et b (selon les deux cas convexes illustrés). Dans un premier temps, la méthode consiste à remplacer l'arc de courbe AB par la corde [AB] qui coupe l'axe des abscisses en xo.

                    

Soit alors No le point de la courbe d'abscisse xo. Remplaçons maintenant l'arc ANo par la corde [ANo] qui coupe l'axe des abscisses en x1 (tout se passe comme si B devenait No). Il apparaît immédiatement que x1 est une meilleure approximation de α que xo. Et ainsi de suite : on obtient une suite (xn) de valeurs tendant vers le zéro cherché (preuve ci-après).

Remarques :     

1.  Dans le cas de la figure 2, on constate que f(a) garde le signe de f(xn) : dans ces conditions, il faudra échanger les rôles de A et B.

2.  On pourra faire des dessins dans le cas d'une courbe concave afin de constater que

 !   Mais, attention, s'il y a changement de concavité, l'encadrement peut être détruit et la méthode en défaut (faire un dessin).

D'une façon générale, l'intersection de la corde [ANn] avec l'axe des abscisses fournira xn+1 et on peut prouver, en vertu du théorème du point fixe, que la suite (xn) converge vers la solution cherchée α. Dans le cas de la figure 1 et avec des notations évidentes, on montre aisément que :

et plus généralement :

Le programme ci-après possède un test d'arrêt si | xn+1- xn | < 10-10.

En conclusion : L'intérêt principal de la méthode est dans le couplage avec celle de Newton afin de s'assurer un encadrement d'un zéro (d'ordre impair) et par là une estimation de l'erreur dans des cas douteux. Noter d'ailleurs que le calcul approché de la fonction dérivée dans la méthode des tangentes revient à remplacer la tangente par une sécante "proche" :

Méthode de Newton, dite des tangentes  :  »

Programmation de la méthode en JavaScript

    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

On peut tester le programme au moyen de x → sin x - x/2 dont le zéro est unique entre 1 et 2 :

D'une façon générale, la méthode de Newton (dite aussi des tangentes) est, de loin, la plus rapide : essayez donc de résoudre x10 =10 par les deux méthodes. En 9 itérations, Newton fournit 1,258925412 : c'est la valeur fournie par l'ordinateur si on lui demande d'afficher 10^(1/10); or pour 100 itérations, la méthode de Lagrange n'en est qu'à 1,2157694174...

Notons cependant que la méthode est généralement plus efficace que la méthode dichotomique (l'exception se produit si la "pente" de l'arc de courbe situé sous l'axe des abscisses est faible : dérivée voisine de 0 ; là encore, faire un dessin pour s'en persuader).



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

function meth_sec()
{
with (Math)
{
f="sin(x)-x/2"; a=1; b=2 ; s=1;
f=prompt("Votre fonction f(x) = ",f)
while (s>=0)
{
a=eval(prompt("borne inf. = ",a))
b=prompt("borne sup. = ",b)
if (b==null) {return} else {b=eval(b)}
x=a ; ya=eval(f) ; x=b; yb=eval(f);
s=sgn(ya*yb)
if (s==0) {alert("Cas trivial : une borne est solution");return}
if (s>0) {alert("Mauvais encadrement")}
}
xo=iter();y=eval(f);
if (y*ya > 0) {a=b;ya=yb}
n=0;xo=x+1
while (abs(x-xo)>1E-15)
{
xo=x ; x=iter();
if (!confirm("X"+n+"= "+x+"\n"+"test : f(x)="+y)) return
n++
}
alert("X"+n+"= "+x+"\n"+"fin de l'algorithme")
}
}function iter()
{
with (Math)
{y=eval(f)
x = (a*y-x*ya)/(y-ya)
return x
}
}
function sgn(y)
{return (y>0)-(y< 0)}
</SCRIPT

Autres méthodes :  »


© Serge Mehl - www.chronomath.com