IMéthode Horner
1 Le principe
Prenons l’exemple de P(x) = 3x52x4+ 7x3+ 2x2+ 5x3.
Pour calculer P(x) le calcul classique nécessite . . . . . . multiplications et . . . . . . additions.
De même si on généralise Pour calculer P(x) = anxn+an1xn1+···+a1x+a0
il faut . . . . . . . . . . . . . . . . . . multiplications et . . . . . . . . . . . . . . . additions.
Dem :
On peut faire de nombreuses économies de calcul en suivant le schéma suivant :
P(x) = anxn+···+a2x2+a1x
|{z }
on met xen facteur
+a0
=
anxn1+···+a3x+a2
|{z }
on met xen facteur
+a1
x+a0
=......
= (...(((anx+an1)x+an2)x+an3)...)x+a0
Ici cela donneP(x) = 3x52x4+ 7x3+ 2x2+ 5x3
= (3x42x3+ 7x2+ 2x+ 5)x3
=
=
=
=
Avec cette forme de P(x) il y a . . . . . . multiplications et . . . . . . additions.
Dans le cas général P(x) = (...(((anx+an1)x+an2)x+an3)...)x+a0
Il y a au maximum . . . . . . . . . . . . multiplications et . . . . . . . . . . . . additions (voir moins avec les zéros).
Appliquer cet algorithme avec les polynômes suivants.
f(x) = 4x38x27x1g(x) = 4x423x215x2
= =
= =
= =
Entrées : Les coefficients aidans l’ordre décroissant des exposants des monômes, le monôme x1
début2
n :=degré du polynôme P.3
Q :=an
4
pour k allant de 1 à n faire5
Q:= Qx+ank
6
fin7
Sorties : Q qui est égal à P(x) sous la forme d’un polynôme de Horner8
Algorithme 1 : Algorithme de Horner
1
Pour faire les calculs «à la main» il est plus facile de le présenter autrement. Par exemple pour
f(x) = 4x38x27x1
4 -8 -7 -1
x 4x(4x8)x((4x8)x7)x
4 (4x8) (4x8)x7 ((4x8)x7)x1
Par exemple pour calculer f(2). Calculer de même pour f(3), P (2).
f4 -8 -7 -1
2 8 0 14
4 0 715
Donc f(2) = 15.
f4 -8 -7 -1
3 . . . . . . . . .
... ... ... ...
Donc f(3) = ......
P3 -2 7 2 5 -3
2 . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
Donc P(2) = ......
2 Démonstration
Soit Pun polynôme de degré n,x0un réel.
On cherche à déterminer un polynôme Q(x) tel que P(x) = (xx0)Q(x) + P(x0).
Qest forcément un polynôme de degré n1 et on a :
P(x) = anxn+···+a1x+a0
Q(x) = bn1xn1+···+b1x+b0.
P(x) = (xx0)Q(x) + P(x0).
Exprimer les coefficients de Qen fonction des coefficients de Pet de P(x0)
(xx0)Q(x) + P(x0) = (xx0)(bn1xn1+bn2xn2+···+b1x+b0)
=
=anxn+ ( ) xn1+···+ ( ) x2+ ( ) x+ ( )
Soit en identifiant les coefficients avec P(x) on obtient
an=......
an1=......
............
a2=......
a1=......
a0=......
bn1=......
bn2=......
...............
b1 = ......
b0=......
P(x0) = ......
P anan1. . . a2a1a0
x0. . . . . . . . . . . . . . .
bn1bn2. . . b1b0P(x0)
On retrouve bien par construction les coefficients (bk) obtenus avec l’algorithme de Hörner et le dernier
coefficient est bien P(x0). On a démontré l’existence et l’unicité du polynôme Q(x).
3 Expérimentation avec xcas
Ouvrer xcas et dans un environnement de programme (Alt+p) taper :
Horner(C,x):={
local Q,k,n; //les variables locales
n:=size(C)-1; // Le degré du polynome P
Q:=C[0];
pour kde 1jusque nfaire
Q:=(Q*x)+C[k];
fpour;
retourne(Q)
}
Compiler ce programme (F9) et dans une autre entrée tester le avec :
L:=[3,-2,7,2,5,-3]
Horner(L,2)
Horner(L,10000)
Horner(L,x)
2
4 Utilisation de cet algorithme
Nous avons démontré que P(x) = (xx0)Q(x) + P(x0) où Q(x) est le polynôme obtenu avec l’algo-
rithme de Hörner.
Si x0est une racine de Palors On trouve p(x0) = ...... et donc P(x) = .........
Si on applique l’algorithme Hörner on trouve P(x0) = 0, mais aussi les coefficients de Q(x).
Par exemple calculer f1
2en complétant le tableau ci dessous.
4 -8 -7 -1
1
2. . . . . . . . .
. . . . . . . . . . . .
Donner alors une première factorisation de f(x). En déduire une factorisation «complète» de f(x).
Nous allons donc modifier le programme précédent pour faire apparaitre tous les coefficients
Horner2(C,x):={
local Q,k,n;
n:=size(C)-1; // Le degré du polynome P
Q:=[]; // on crée une liste vide
Q[0]:=C[0];
pour kde 1jusque nfaire
Q[k]:=(Q[k-1]*x)+C[k];
fpour;
retourne(Q)
}
En utilisant cette fois le programme que nous avons crée calculer g(2) en déduire une factorisation
de P. Calculer Q1
2. En déduire une factorisation de Q(x) puis de P(x).
5 Avec une calculatrice TI
PGRMNEW HORNER
Pour afficher seulement P(x0).
Prompt X
ClrList L6
Disp ``{AN,...,A0}''
Input L6
dim(L6)-1->N
L6(1)->Q
For(K,1,N,1)
Q*X+L6(K+1)->Q
End
Disp Q
Pour afficher la liste des coefficients de Qet
P(x0).
Prompt X
ClrList L6
Disp ``{AN,...,A0}''
Input L6
dim(L6)-1->N
For(K,1,N,1)
L6(K)*X+L6(K+1)->L6(K+1)
End
Disp L6
On écrira seulement le deuxième programme car il donne la liste des coefficients de Q(x).
Pour tester plus facilement le programme écrire dans la liste L1 les coefficients 4 871.
Exécuter le programme par exemple pour 0,5. Horner2-0.5L1 et vous devez obtenir 0 pour le
premier programme et pour le deuxième la liste qui est en L6 = {410 2 0}.
On a donc P(0.5) = 0 et P(x) = (x+ 0,5)(4x210x2).
On peut aussi modifier le programme pour faire afficher des fractions.
Remplacer Disp L6 par Disp L6Frac
Ce programme fonctionne aussi avec des complexes.
3
6 Avec python
def Horner(C,x):
n=len(C)
Q=C[0]
for kin range(1,n):
Q=Q∗x+C[k]
return Q
P=[4,8,7,1]
print(Horner(P,0))
def Horner(C,x):
n=len(C)
Q=[0]∗n;
Q[0]=C[0];
for kin range(1,n):
Q[k]=Q[k1]∗x+C[k]
return Q
P=[4,8,7,1]
print(Horner(P,0.5))
7 Correction de la démonstration
Soit Pun polynôme de degré n,x0un réel.
On cherche à déterminer un polynôme Q(x) tel que P(x) = (xx0)Q(x) + P(x0).
Qest forcément un polynôme de degré n1 et on a :
P(x) = anxn+···+a1x+a0
Q(x) = bn1xn1+···+b1x+b0.
P(x) = (xx0)Q(x) + P(x0).
(xx0)Q(x) + P(x0) = (xx0)bn1xn1+···+b1x+b0+P(x0)
=bn1xn+···+b1x2+b0xx0bn1xn1− ··· − x0b1xx0b0+P(x0)
=bn1xn+ (bn2x0bn1)n1+···+ (b1x0b2)x2+ (b0x0b1)xx0b0+P(x0)
On a donc par identification
bn1=an
bn2x0bn1=an1
...
b1x0b2=a2
b0x0b1=a1
x0b0+P(x0) = a0
bn1=an
bn2=x0bn1+an1
...
b1=x0b2+a2
b0=x0b1+a1
P(x0) = x0b0+a0
On retrouve bien les coefficients (bk) obtenus avec l’algorithme de Hörner et le dernier coefficient est
bien P(x0).
Pour la programmation nous avons utilisé les listes [anan1. . . a1a0] qui sont numérotées [p0p1p2. . . pn1pn]
car les listes commencent à 0 (ou 1 pour la TI).
4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !