next up previous contents index
suivant: Savoir si le polynôme monter: Les programmes d'arithmétique précédent: La correction   Table des matières   Index


Traduction Xcas de l'algorithme de Hörner

Soit un polynôme P donné sous la forme d'une liste l formée par les coefficients de P selon les puissances décroissantes.
hornerl(l,a) renvoie une liste formée par la valeur val du polynôme en x = a et par la liste lq des coefficients selon les puissances décroissantes du quotient Q(x) de P(x) par (x - a).
On a :
$ \tt P(a)=l[0]*a^p+l[1]*a^{p-1}+...+l[p]=$
$ \tt l[p]+a*(l[p-1]+a*(l[p-2]+...+a*(l[1]+a*l[0])))$
$ \tt P(x)=l[0]*x^p+l[1]*x^{p-1}+...+l[p]=$
$ \tt (x-a)*(lq[0]*x^{p-1}+...lq[p-1])+val$
donc $ \tt val=P(a)$ et p=s-1 si s est la longueur de la liste l donc :
lq[0]=l[0]
lq[1]=a*lq[0]+l[1]
lq[j]=a*lq[j-1]+l[j]
....
val=a*lq[p-1]+l[p]
hornerl(l,a):={
local s,val,lq,j;
s:=size(l);
//on traite les polys constants (de degre=0) 
if (s==1) {return [l[0],[0]]};
// si s>1
lq:=[];
val:=0;
for (j:=0;j<s-1;j++) {
val:=val*a+l[j];
lq:=append(lq,val);
}
val:=val*a+l[s-1];
return([val,lq]);
};
On tape :
hornerl([1,2,4],12)
On obtient :
[172,[1,14]]
ce qui veut dire que :
x2 + 2x + 4 = (x + 14)(x - 12) + 172
Si le polynôme est donné avec son écriture habituelle.
Pour utiliser la fonction précédente on a alors besoin des deux fonctions :
symb2poly qui transforme un polynôme en la liste de ses coefficients selon les puissances décroissantes.
poly2symb qui transforme une liste en l'écriture habituelle du polynôme ayant cette pour coefficients selon les puissances décroissantes.
hornerp(p,a,x):={
//ne marche pas pour les polys constants (de degre=0) 
local l,val,lh;
l:=symb2poly(p,x);
lh:=hornerl(l,a);
p:=poly2symb(lh[1],x);
val:=lh[0];
return([val,p]);
};
On tape :
hornerp(x^2+2x+4,12,x)
On obtient :
172,x+14
On tape :
hornerp(y^2+2y+4,12,y)
On obtient :
172,y+14
Dans Xcas, il existe la fonction horner qui calcule selon la méthode de Hörner la valeur d'un polynôme (donné sous forme de liste ou par son expression) en un point :
On tape :
horner(x^2+2x+4,12)
On obtient :
172
On tape :
horner(y^2+2y+4,12,y)
On obtient :
172
On tape :
horner([1,2,4],12)
On obtient :
172
next up previous contents index
suivant: Savoir si le polynôme monter: Les programmes d'arithmétique précédent: La correction   Table des matières   Index
Documentation de giac écrite par Renée De Graeve