Méthode de Ruffini-Horner

De testwiki
Aller à la navigation Aller à la recherche

En mathématiques et algorithmique, la méthode de Ruffini-Horner, connue aussi sous les noms de méthode de Horner, algorithme de Ruffini-Horner ou règle de Ruffini, se décline sur plusieurs niveaux. Elle permet de calculer la valeur d'un polynôme en Modèle:Math. Elle présente un algorithme simple effectuant la division euclidienne d'un polynôme par Modèle:Math. Mais elle offre aussi une méthode de changement de variable Modèle:Math dans un polynôme. C'est sous cette forme qu'elle est utilisée pour déterminer une valeur approchée d'une racine d'un polynôme.

Histoire

La méthode de Ruffini-Horner de recherche d'une valeur approchée de racine d'un polynôme est publiée à quelques années d'intervalle par Paolo Ruffini (1804-1807-1813) et par William George Horner[1] (1819-1845 posthume) mais il semble bien que Horner n'ait pas eu connaissance des travaux de Ruffini. La méthode de Horner est ensuite popularisée par les mathématiciens Auguste De Morgan et Modèle:Lien. Dans leurs premières publications, ces deux auteurs utilisent des méthodes de dérivations pour effectuer le changement de variable Modèle:Math. Par la suite, ils présentent des versions ne faisant appel qu'à des techniques algébriques. La méthode de Ruffini-Horner est difficilement exploitable si le polynôme possède deux racines trop proches. Ruffini n'évoque pas ce problème mais Horner propose une procédure spéciale pour ce cas-là[2].

En tant que technique de changement de variable, on retrouve des algorithmes analogues, en Chine, pour l'extraction de racine n-ième, dans les Neuf Chapitres (263 Modèle:Ap JC)[3] et dans le monde arabe, dans l'œuvre de Al Samaw'al (Modèle:S-)[4]. Mais il semble bien que le Perse, Sharaf al-Dīn al-Tūsī (Modèle:S-) soit le premier à l'utiliser dans le cas général d'une équation de degré 3[5].

Valeur d'un polynôme en un point

Soit

P=anXn+an1Xn1++a0

un polynôme[6] et Modèle:Math un nombre[7]. Le calcul de Modèle:Math

P(x0)=anx0n+an1x0n1++a0

laisse à penser qu'il faut calculer chacune des puissances de Modèle:Math, multiplier celle-ci par son coefficient Modèle:Mvar puis faire la somme de ce que l'on a trouvé.

Si on calcule les puissances de Modèle:Math en multipliant successivement Modèle:Math par lui-même, le nombre nécessaire de produits est alors de Modèle:Nobr, quantité qui croît comme le carré du degré du polynôme. On peut améliorer la vitesse du calcul de Modèle:Math par une méthode d'exponentiation rapide, permettant de réduire le temps du calcul de Modèle:Math à une quantité qui croît comme Modèle:Math. Ou plus efficacement encore, on peut commencer par calculer toutes les puissances de Modèle:Math, ce qui nécessite Modèle:Nobr multiplications, puis multiplier par les coefficients, ce qui nécessite n nouvelles multiplications : le nombre total de produit est alors Modèle:Nobr. La méthode de Horner consiste à combiner les deux itérations précédentes en une seule en effectuant le calcul comme suit :

P(x0)=((((anx0+an1)x0+an2)x0+)x0+a1)x0+a0.

Le nombre de produits est alors réduit à n et l'on peut montrer que ce nombre est minimal : il n'est pas possible d'évaluer une fonction polynomiale en moins de n produits en toute généralité[8].

La méthode consiste donc à multiplier le premier coefficient par Modèle:Math et à lui ajouter le deuxième coefficient. On multiplie alors le nombre obtenu par Modèle:Math et on lui ajoute le troisième coefficient, etc. Elle s'organise très bien à l'aide d'un tableau dans lequel chaque case de la seconde ligne est obtenue en multipliant le coefficient de la case de gauche par Modèle:Math et en lui ajoutant le coefficient de la case du dessus.

Coefficients de Modèle:Mvar Modèle:Mvar Modèle:Math Modèle:Math Modèle:Math Modèle:Math
Facteur Modèle:Math Modèle:Mvar Modèle:Math Modèle:Math Modèle:Math Modèle:Math

Exemple pratique : Calcul de Modèle:Math pour Modèle:Math

Coefficients de Modèle:Mvar 4 −7 3 −5
Facteur 2 4 8 − 7 = 1 2 + 3 = 5 P(2) = 10 − 5 = 5

Outre la réduction du nombre d'opérations, cette méthode peut éviter dans certains cas de manipuler des nombres très grands, et donc peut éviter les dépassements de capacité pour les calculs sur ordinateur. Si l'on prend par exemple le polynôme Modèle:Math, alors avec la méthode « classique », pour évaluer Modèle:Math, on doit calculer 10010 = 1020 auquel on retranche 99×1018, donnant un résultat erroné sur des logiciels calculant avec 15 chiffres significatifs. Avec la méthode de Ruffini-Horner, on a

P(100)=(10099)×1009

conduisant au résultat correct 1009 = 1018 puisque le calcul de la mantisse n'a utilisé que trois chiffres significatifs.

Conversion de base de numération

Cette méthode permet aussi d'effectuer une conversion rapide d'un nombre écrit en base Modèle:Math en écriture en base 10. En effet, si un nombre s'écrit, en base Modèle:Math,

n=anan1a0,

ce nombre vaut

n=anx0n+an1x0n1++a0.

Il s'agit donc de l'évaluation d'un polynôme.

Exemple pratique : écriture en base 10 du nombre hexadécimal DA78

Coefficients D (13) A (10) 7 8
Facteur 16 13 13 × 16 + 10 = 218 218 ×16+ 7 = 3 495 DA78 = 3 495 × 16 + 8 = 55 928

Quotient d'un polynôme par Modèle:Math

Modèle:Article connexe Cette même méthode permet aussi d'obtenir la division d'un polynôme par Modèle:Math. Soit P=anXn+an1Xn1+...+a0.

La division euclidienne de Modèle:Mvar par Modèle:Math donne

P=(Xx0)Q+P(x0)

où Q est un polynôme de degré n - 1.

Si on écrit Q=qn1Xn1+qn2Xn2+...+q1X+q0 et si on identifie les coefficients de même degré dans les deux membres, on obtient :

qn1=an
qk1qkx0=ak pour tout k tel que 0 < k < n

Soit encore

qk1=qkx0+ak pour tout k tel que 0 < k < n

Les n valeurs de la suite q calculées ici sont précisément les n valeurs successives calculées dans le paragraphe précédent pour évaluer Modèle:Math. La mémorisation de ces valeurs successives donne donc les coefficients du polynôme quotient, la dernière valeur étant celle du reste.

Application pratique : division euclidienne de Modèle:Math par Modèle:Math

Il suffit de reprendre le tableau précédemment construit et de lire dans les cases de la seconde ligne les coefficients de Modèle:Mvar.

Coefficients de Modèle:Mvar 4 − 7 3 − 5
Coefficients de Modèle:Mvar 4 8 − 7 = 1 2 + 3 = 5 Reste = 10 − 5 = 5

Donc

4X37X2+3X5=(X2)(4X2+X+5)+5

Changement de variable

L'algorithme précédent permet donc d'effectuer la division euclidienne du polynôme Modèle:Mvar par Modèle:Math. On peut alors écrire, en posant Modèle:Math.

P(X)=YP1(X)+b0

En utilisant de nouveau l'algorithme pour Modèle:Math, Modèle:Math, ... Modèle:Mvar, on obtient successivement

P(X)=Y(YP2(X)+b1)+b0

...

P(X)=Y(Y(...Y(Ybn+bn1)...)+b1)+b0

Les nombres Modèle:Math, Modèle:Math, ... Modèle:Mvar sont donc les coefficients du polynôme Modèle:Mvar tel que Modèle:Math

Illustration pratique : Si Modèle:Math et que l'on cherche à écrire Modèle:Math, on applique 4 fois la méthode de division euclidienne par Modèle:Math :

Coefficients de Modèle:Mvar 4 − 7 3 − 5
Coefficients de Modèle:Math 4 8 − 7 = 1 2 + 3 = 5 10 − 5 = 5
Coefficients de Modèle:Math 4 8 + 1 =9 18 + 5 = 23
Coefficients de Modèle:Math 4 8 + 9 =17
Coefficients de Modèle:Math 4

Donc

P(2+Y)=4Y3+17Y2+23Y+5

Valeur approchée d'une racine

Pour chercher la valeur approchée x d'une racine d'un polynôme Modèle:Mvar, on cherche un entier Modèle:Math tel que Modèle:Math et Modèle:Math soient de signe contraire. On sait alors, d'après le théorème des valeurs intermédiaires, qu'il existe une racine entre Modèle:Math et Modèle:Math. On pose alors Modèle:Math. Le nombre Modèle:Mvar est racine de Modèle:Math si et seulement si le nombre Modèle:Math est racine de Modèle:Math. Ce polynôme Modèle:Mvar se détermine grâce à la méthode de Horner. Enfin Modèle:Mvar est racine de P(X) si et seulement Modèle:Mvar est racine d'un polynôme Modèle:Math obtenu en multipliant les coefficients Modèle:Mvar de Modèle:Mvar par 10nk.

Il s'agit alors de chercher une racine de Modèle:Mvar comprise entre 0 et 10 en utilisant un processus analogue : on cherche un entier Modèle:Math compris entre 0 et 9 tels que Modèle:Math et Modèle:Math soient de signe contraire. On sait alors qu'il existe une racine Modèle:Mvar de Modèle:Mvar comprise entre Modèle:Math et Modèle:Math...

On détermine ainsi les décimales successives du développement décimal de Modèle:Mvar.

Exemple : algorithme de Ruffini-Horner pour l'extraction de la racine cubique de 18.

Il s'agit de trouver un réel Modèle:Mvar, racine du polynôme Modèle:Math. On sait immédiatement que Modèle:Math et Modèle:Math, Modèle:Mvar est donc compris entre 2 et 3. On pose alors Modèle:Math et on cherche le polynôme Modèle:Mvar tel que Modèle:Math.

Coefficients de Modèle:Mvar 1 0 0 - 18
Coefficients de Modèle:Math 1 2 4 - 10
Coefficients de Modèle:Math 1 4 12
Coefficients de Modèle:Math 1 6
Coefficients de Modèle:Math 1

Le réel Modèle:Mvar est racine cubique de 18 si Modèle:MathModèle:Mvar est racine de Modèle:Math. La racine Modèle:Mvar est comprise entre 6 et 7 (pour éviter de balayer tous les nombres, il suffit de remarquer que Modèle:Math et 10000 doivent être très proches avec Modèle:Math). On pose alors Modèle:Math et on cherche le polynôme Modèle:Mvar tel que Modèle:Math.

Coefficients de Modèle:Mvar 1 60 1200 -10000
Coefficients de Modèle:Math 1 66 1596 -424
Coefficients de Modèle:Math 1 72 2028
Coefficients de Modèle:Math 1 78
Coefficients de Modèle:Math 1

Le réel Modèle:Mvar est racine de Modèle:Mvar si Modèle:MathModèle:Mvar est racine de Modèle:Math. La racine Modèle:Mvar est comprise entre 2 et 3. Donc Modèle:Mvar est compris entre 6,2 et 6,3 et Modèle:Mvar est compris entre 2,62 et 2,63.

Dérivées successives de Modèle:Mvar en Modèle:Math

Cette propriété apparaît ici en dernière position alors qu'elle est la propriété initiale mise en évidence par Ruffini et Horner. Cependant, comme une démarche purement algébrique est possible, celle-ci, plus simple, a été présentée d'abord. Le même algorithme permet de déterminer aussi la valeur de Modèle:Math. En effet, le développement de Taylor de Modèle:Math donne

P(x0+Y)=P(x0)+P(x0)Y+P(2)(x0)2Y2++P(k)(x0)k!Yk+

Si on note Modèle:Math, les coefficients Modèle:Mvar de Modèle:Mvar, trouvés par la méthode de Ruffini-Horner vérifient l'égalité

k!bk=P(k)(x0)

Annexes

Notes et références

Modèle:Références

Modèle:Palette Modèle:Portail

  1. Modèle:Ouvrage.
  2. Florian Cajori, « Horner's method of approximation anticipated by Ruffini », BAMS, vol. 17, Modèle:N°, 1911, Modèle:P..
  3. Modèle:ChemlaShuchun, introduction au chapitre 4.
  4. Hélène Bellosta, « À propos de l'histoire des sciences arabes », Gazette des mathématiciens, Modèle:N°, octobre 1999.
  5. Modèle:En J. L. Berggren, « Innovation and Tradition in Sharaf al-Din al-Tusi's Muadalat », JAOS, vol. 110, Modèle:N°, 1990, p. 304-309.
  6. On peut travailler sur R ou sur un anneau commutatif A quelconque
  7. ou un élément de l'anneau A
  8. Pan, V. Ia (1966). Methods of computing values of polynomials. Russian Math. Surveys. 21: 105–136.