Hornerschema

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

Het Hornerschema, algoritme van Horner of rekenschema van Horner is een algoritme om op een efficiënte manier een polynoom te evalueren. Het algoritme is genoemd naar William George Horner die het in 1819 beschreef.

In de geschiedenis hebben vele wiskundigen zich beziggehouden met methoden om een polynoom te evalueren. De eerste bekende beschrijving van een algoritme zoals het Hornerschema in 1303 is van de Chinese wiskundige Ch'in Chiu-Shao die zijn methode, die hij fan fa noemde, gebruikte voor het oplossen van vergelijkingen. Het algoritme was al in 1619 aan Newton bekend. Dat de naam van Horner toch bekend gebleven is, is vooral te danken aan De Morgan, die in tal van publicaties Horners naam aan deze methode gaf. In Italië publiceerde Paolo Ruffini 15 jaar voor Horner een overeenkomstige methode, reden waarom men ook wel van de Regola di Ruffini spreekt.

Het Hornerschema schrijft de polynoom:

p(x)=a_0 + a_1 x + a_2 x^2 + ... + a_n x^n\,

als:

p(x)=\left(\ldots\left(\left(a_nx+a_{n-1}\right)x+a_{n-2}\right)x+\ldots \right)x+a_0

en berekent p(x0) successievelijk door:

c_{n-1}=a_n\,
c_{n-2}=c_{n-1}x_0+a_{n-1}\,
c_{n-3}=c_{n-2}x_0+a_{n-2}\,
\cdots\,
c_0=c_1x_0+a_1\,
p(x_0)=c_0x_0+a_0\,

Dit komt neer op herhaaldelijk het resultaat van de vorige stap vermenigvuldigen met x0 en de volgende coëfficiënt er bij optellen. In totaal n vermenigvuldigingen en n optellingen. Directe berekening zou minimaal 2n vermenigvuldigingen en n optellingen vergen.

De berekening laat zich overzichtelijk in een schema, het eigenlijke Hornerschema, onderbrengen, zoals in een volgend voorbeeld getoond wordt.

Uit de bovenstaande berekening ziet men eenvoudig dat het Hornerschema ook gebruikt kan worden om een polynoom te delen door de lineaire polynoom x - x0. Er geldt immers:

p(x)=p(x_0)+(x-x_0)(c_0 + c_1 x + c_2 x^2 + ... + c_{n-1} x^{n-1})\,

Ook blijkt daaruit dat het Hornerschema het omgekeerde is van het successievelijk uitdelen van x0. Immers bij gegeven x0 en de waarde p(x0) van de polynoom p(x) worden de coëfficiënten (ak) bepaald door het Hornerschema in omgekeerde volgorde te doorlopen.

Voorbeeld[bewerken]

We evalueren de polynoom:

p(x)=5x^4-4 x^3+3x^2-2x+1\,

in het punt x = 5. We kunnen door directe berekening gemakkelijk nagaan dat de uitkomst p(5)=2691\, moet zijn:

 p(x) = (((((5)x-4)x+3)x-2)x+1)

Hierin staan 5 paar haakjes. Met elk paar haakjes correspondeert 1 stap van de berekening. Men kan p(x) opbouwen in 5 stappen waarbij elke volgende stap bouwt op het resultaat van de vorige stap.

 (5)
 ((5)x-4)
 (((5)x-4)x+3)
 ((((5)x-4)x+3)x-2)
 (((((5)x-4)x+3)x-2)x+1)

Het volstaat nu x te vervangen door 5 om de evaluatie na vijf stappen te verkrijgen.

\!c_3=5
\!c_2=5\times 5-4=21
\!c_1=21\times 5+3=108
\!c_0=108\times 5-2=538
\!p(5)=538\times 5+1=2691

Schema[bewerken]

De bovenstaande berekening laat zich kort in het volgende schema weergeven:

   5  |   5   -4    3   -2    1
      |       25  105  540 2690 
  ------------------------------
      |   5   21  108  538 2691

Daarin zijn de stappen goed te herkennen. Vooraan, voor de streep, staat het argument 5. Achter de streep staan de coëfficiënten van de polynoom. Op de tweede rij staan de successievelijke tussenresultaten, die ontstaan door vermenigvuldiging van het argument met het totaal op de derde rij van de optelling van de eerste en tweede rij van de vorige kolom. Het gezochte eindresultaat, 2691, staat als laatste in de derde rij. De getallen daarvoor zijn de coëfficiënten van de deling van de polynoom door x-5:

\!p(x)=(x-5)(5 x^3 + 21 x^2 + 108 x+538)+2691

Afgeleide[bewerken]

De bovenstaande polynoom neemt voor x = 5 de waarde aan van de afgeleide van p in x = 5, immers:

\!p'(x_0)=\lim_{x \to 5}\frac{p(x)-p(5)}{x-5}=\left[5 x^3 + 21 x^2 + 108 x+ 538\right]_{x=5}

Dat betekent dat door nogmaals het Hornerschema toe te passen op de ontstane derde regel, de waarde van de afgeleide van p berekend wordt:

   5  |   5   -4    3   -2     1
      |       25  105  540  2690 
  ------------------------------
   5  |   5   21  108  538 (2691)
      |       25  230 1690
  ------------------------------
          5   46  338 2228

Resultaat:

\!p'(5)=2228

Controle met het Hornerschema, met de coëfficiënten van de afgeleide van p:

p'(x)=\frac{d(5x^4-4x^3+3x^2-2x+1)}{dx} = 20x^3-12x^2+6x-2\,
   5  |  20  -12    6   -2  
      |      100  440 2230  
  -------------------------
      |  20   88  446 2228 

Uitbreidingen[bewerken]

Om in het schema het werken met grote getallen te vermijden, zijn er uitbreidingen ontwikkeld met meer rijen voor eenheden, tientallen enz. Ook zijn er schema's voor polynoomdelingen, die in essentie verkorte en verdichte schrijfwijzen zijn van staartdelingen.

Talstelsels[bewerken]

Bij het omrekenen van de voorstelling van een getal van het ene talstelsel in een ander, maakt men gebruik van het Hornerschema of de omkering, het successievelijk uitdelen, zoals uit de volgende voorbeelden blijkt.

We bepalen de decimale voorstelling van het getal 3217 in het 7-tallig stelsel, dus de waarde p(7) van de polynoom

\!p(x)=3x^2+2x+1

Met het Hornerschema:

\!c_1=3
\!c_0=3\times 7+2=23
\!p(7)=23\times 7+1=162

Met het echte schema:

   7  |   3    2    1
      |       21  161
  --------------------
      |   3   23  162

Om omgekeerd de voorstelling van p(7)=162 in het 7-tallig stelsel te bepalen, moeten we de coëfficiënten van p(x) weten. Dit doen we gewoonlijk door successievelijk door 7 te delen.

\!p(7)=162=23\times 7+1=
\!23=3\times 7+2
\!3=0\times 7+3

De resttermen zijn de gezochte coëfficiënten, dus: p(7) = 3217. We zien dat deze berekening juist de omgekeerde volgorde is van het Hornerschema.

We kunnen natuurlijk ook het Hornerschema volgen voor deze laatste berekening, maar dan moeten we in het 7-tallig stelsel rekenen.

\!c_1=1
\!c_0=1\times 13_7+6=22_7
\!p(7)=22_7\times 13_7+2=321_7