You are on page 1of 4

I Mthode Horner

Le principe
Prenons lexemple de P (x) = 3x5 2x4 + 7x3 + 2x2 + 5x 3.
Pour calculer P(x) le calcul classique ncessite . . . . . . multiplications et . . . . . . additions.
De mme si on gnralise Pour calculer P (x) = an xn + an1 xn1 + + a1 x + a0
il faut . . . . . . . . . . . . . . . . . . multiplications et . . . . . . . . . . . . . . . additions.
Dem :

On peut faire de nombreuses conomies de calcul en suivant le schma suivant :


P (x) = an xn + + a2 x2 + a1 x +a0
|

{z

on met x en facteur

= an xn1 + + a3 x + a2 +a1 x + a0
|

= ......

{z

on met x en facteur

= (. . . (((an x + an1 )x + an2 )x + an3 ) . . . )x + a0


Ici cela donneP (x) = 3x5 2x4 + 7x3 + 2x2 + 5x 3

= (3x4 2x3 + 7x2 + 2x + 5)x 3

=
=
=
=

Avec cette forme de P (x) il y a . . . . . . multiplications et . . . . . . additions.


Dans le cas gnral P (x) = (. . . (((an x + an1 )x + an2 )x + an3 ) . . . )x + a0
Il y a au maximum . . . . . . . . . . . . multiplications et . . . . . . . . . . . . additions (voir moins avec les zros).
Appliquer cet algorithme avec les polynmes suivants.
f (x) = 4x3 8x2 7x 1

g(x) = 4x4 23x2 15x 2

1
2
3
4
5
6
7
8

Entres : Les coefficients ai dans lordre dcroissant des exposants des monmes, le monme x
dbut
n :=degr du polynme P.
Q :=an
pour k allant de 1 n faire
Q := Q x + ank
fin
Sorties : Q qui est gal P(x) sous la forme dun polynme de Horner
Algorithme 1 : Algorithme de Horner
1

Pour faire les calculs la main il est plus facile de le prsenter autrement. Par exemple
f (x) = 4x3 8x2 7x 1
4
-8
-7
-1

x
4x
(4x

8)x
((4x

8)x
7)x

4 (4x 8) (4x 8)x 7 ((4x 8)x 7)x 1
Par exemple pour calculer f(2). Calculer de mme pour f (3), P (2).
4 -8 -7
-1
4
-8
-7
-1
3
-2
7
2
5
f
f
P
8
0 14
... ... ...
... ... ... ...
2
3
2
4 0 7 15
... ... ... ...
... ... ... ... ...
Donc f (2) = 15.
Donc f (3) = . . . . . .
Donc P (2) = . . . . . .

pour

-3
...
...

Dmonstration
Soit P un polynme de degr n, x0 un rel.
On cherche dterminer un polynme Q(x) tel que P (x) = (x x0 )Q(x) + P (x0 ).
Q est forcment un polynme de degr n 1 et on a :

P (x) = an xn + + a1 x + a0

Q(x) = bn1 xn1 + + b1 x + b0 .

P (x) = (x x0 )Q(x) + P (x0 ).

Exprimer les coefficients de Q en fonction des coefficients de P et de P (x0 )


(x x0 )Q(x) + P (x0 ) = (x x0 )(bn1 xn1 + bn2 xn2 + + b1 x + b0 )
=

= an xn + (

) xn1 + + (

) x2 + (

)x + (

Soit en identifiant les coefficients avec P (x) on obtient

bn1 = . . . . . .

bn2 = . . . . . .

P
an
an1 . . . a2 a1
a0

............
...............
x
.
.
.
.
.
.
.
.
.
.
.
.
.
..

a2 = . . . . . .
b1 = . . . . . .

bn1 bn2 . . .
b1 b0 P (x0 )

a1 = . . . . . .
b0 = . . . . . .

a0 = . . . . . .
P (x0 ) = . . . . . .
On retrouve bien par construction les coefficients (bk ) obtenus avec lalgorithme de Hrner et le dernier
coefficient est bien P (x0 ). On a dmontr lexistence et lunicit du polynme Q(x).

an = . . . . . .

an1 = . . . . . .

Exprimentation 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 k de 1 jusque n faire
Q:=(Q*x)+C[k];
fpour;
retourne(Q)
}

Compiler ce programme (F9) et dans une autre entre tester le avec :


L:=[3,-2,7,2,5,-3]
Horner(L,2)
Horner(L,10000)
Horner(L,x)

Utilisation de cet algorithme

Nous avons dmontr que P (x) = (x x0 )Q(x) + P (x0 ) o Q(x) est le polynme obtenu avec lalgorithme de Hrner.
Si x0 est une racine de P alors On trouve p(x0 ) = . . . . . . et donc P (x) = . . . . . . . . .
Si on applique lalgorithme
on trouve P (x0 ) = 0, mais aussi les coefficients de Q(x).

 Hrner
1
en compltant le tableau ci dessous.
Par exemple calculer f
2
-8
-7
-1
4
1

...

...

...

... ... ... ...


Donner alors une premire factorisation de f (x). En dduire une factorisation complte de f (x).

Nous allons donc modifier le programme prcdent pour faire apparaitre tous les coefficients
Horner2(C,x):={
local Q,k,n;
n:=size(C)-1; // Le degr du polynome P
Q:=[];
// on cre une liste vide
Q[0]:=C[0];
pour k de 1 jusque n faire
Q[k]:=(Q[k-1]*x)+C[k];
fpour;
retourne(Q)
}

En utilisant cette
 le programme que nous avons cre calculer g(2) en dduire une factorisation
 fois
1
de P . Calculer Q . En dduire une factorisation de Q(x) puis de P (x).
2

Avec une calculatrice TI


PGRMNEW HORNER
Pour afficher seulement P (x0 ).

Pour afficher la liste des coefficients de Q et


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

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 deuxime 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 8 7 1.
Excuter le programme par exemple pour 0, 5. Horner2-0.5L1 et vous devez obtenir 0 pour le
premier programme et pour le deuxime la liste qui est en L6 = {4 10 2 0}.
On a donc P (0.5) = 0 et P (x) = (x + 0, 5)(4x2 10x 2).
On peut aussi modifier le programme pour faire afficher des fractions.
Remplacer Disp L6 par Disp L6Frac
Ce programme fonctionne aussi avec des complexes.

Avec python
def Horner(C,x):
n=len(C)
Q=C[0]
for k in range(1,n):
Q=Qx+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 k in range(1,n):
Q[k]=Q[k1]x+C[k]
return Q
P=[4,8,7,1]
print(Horner(P,0.5))

Correction de la dmonstration
Soit P un polynme de degr n, x0 un rel.
On cherche dterminer un polynme Q(x) tel que P (x) = (x x0 )Q(x) + P (x0 ).
Q est forcment un polynme de degr n 1 et on a :

P (x) = an xn + + a1 x + a0

Q(x) = bn1 xn1 + + b1 x + b0 .

P (x) = (x x0 )Q(x) + P (x0 ).

(x x0 )Q(x) + P (x0 ) = (x x0 ) bn1 xn1 + + b1 x + b0 + P (x0 )

= bn1 xn + + b1 x2 + b0 x x0 bn1 xn1 x0 b1 x x0 b0 + P (x0 )

= bn1 xn + (bn2 x0 bn1 )n1 + + (b1 x0 b2 )x2 + (b0 x0 b1 )x x0 b0 + P (x0 )


On
a donc par identification
bn1 = an

bn1 = an

x
b
=
a
b
n2
0
n1
n1
n2 = x0 bn1 + an1

...
...

b1 x0 b2 = a2
b1 = x0 b2 + a2

x
b
=
a
b

0
0 1
1
0 = x0 b1 + a1

x0 b0 + P (x0 ) = a0
P (x0 ) = x0 b0 + a0
On retrouve bien les coefficients (bk ) obtenus avec lalgorithme de Hrner et le dernier coefficient est
bien P (x0 ).
Pour la programmation nous avons utilis les listes [an an1 . . . a1 a0 ] qui sont numrotes [p0 p1 p2 . . . pn1 pn ]
car les listes commencent 0 (ou 1 pour la TI).

You might also like