Schemat Hornera

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Schemat Hornera – wspólna nazwa dwóch algorytmów:

  1. obliczania wartości dowolnego wielomianu o jednej zmiennej:
    w(x)=w0+w1x+w2x2++wn1xn1+wnxn;
  2. dzielenia takiego wielomianu przez dwumian liniowy i moniczny, tj. postaci xa – znajdowania wielomianu q(x) i liczby r w tożsamości[1]:
    w(x)=q(x)(xa)+r.

Schemat Hornera wykorzystuje minimalną liczbę mnożeńSzablon:Fakt. Dzięki jego rekurencyjnej postaci łatwo go zaimplementować w językach programowania, które umożliwiają stosowanie funkcji rekurencyjnych.

Nazwa tego algorytmu upamiętnia Williama Hornera, który opisał go w 1819 roku[1]. Znali go już jednak matematycy chińscy w XIII wieku, a na początku XIX wieku także Paolo Ruffini[2]. Nazwa upamiętniająca Hornera upowszechniła się jeszcze w XIX wieku[3], do czego przyczynił się Augustus De Morgan[2].

Dla dzielenia wielomianu przez dwumian 3x6 można stosować schemat Hornera, jeżeli najpierw podzieli się dwumian i wielomian przez 3. Nie dotyczy on jednak dzielenia przez dwumiany stopni wyższych niż jeden, np. przez 4x21. Schemat Hornera obliczania wartości wielomianu uogólniono na wielomiany wielu zmiennych[4].

Obliczanie wartości

Wstęp

Jeśli dany jest wielomian w(x)=w0+w1x+w2x2++wn1xn1+wnxn, to obliczając jego wartość dla zadanego x bezpośrednio z podanego wzoru, należy wykonać:

1+2+3++(n1)+n=n(n+1)2.

Wielomian ten można jednak przekształcić, korzystając z rozdzielności mnożenia względem dodawania:

w(x)=w0+x(w1+x(w2++x(wn1+xwn))).

Sprawia to, że wystarczy jedynie n mnożeń i n dodawańSzablon:Odn.

Przykład

Obliczanie wartości w(2) wielomianu opisanego wzorem w(x)=4x35x2+7x20Szablon:Odn:

w(x)=x(4x25x+7)20==x(x(4x5)+7)20,w(2)=2(2(425)+7)20==2(2(85)+7)20==2(23+7)20==2(6+7)20==21320==2620=6.

Obliczenia te można też zapisać w tabeli, ograniczając powtórzenia współczynników wielomianu, jego argumentu, nawiasów, znaków działań i równościSzablon:Odn:

współczynniki

wielomianu

4 −5 7 −20
iloczyny 2×4 = 8 2×3 = 6 2×13 = 26
sumy −5+8 = 3 7+6 = 13 −20 + 26 = 6

Algorytm

Dany wielomian

w(x)=a0+a1x+a2x2+a3x3++an2xn2+an1xn1+anxn

przekształcamy do postaci

w(x)=a0+x(a1+x(a2++x(an2+x(an1+xan)))).

Następnie definiujemy:

bn:=an,bn1:=an1+bnx,bn2:=an2+bn1xb0:=a0+b1x.

Tak otrzymane b0 będzie równe w(x)Szablon:Odn. Rzeczywiście, jeśli podstawimy kolejno bn, , b0 do tego wielomianu, otrzymamy

w(x)=a0+x(a1+x(a2+x(an2+x(an1+bnx))))==a0+x(a1+x(a2+x(an2+bn1x)))==a0+xb1==b0.

Dzielenie wielomianu przez dwumian

Schemat

Dowolny wielomian w można podzielić z resztą przez dwumian xa. Innymi słowy, jeśli:

w(x)=anxn+an1xn1++a1x+a0,

to istnieją wielomian B stopnia n1 i liczba r takie, że:

w(x)=(xa)B(x)+r,w(x)=anxn+an1xn1++a1x+a0==(xa)(bn1xn1+bn2xn2++b1x+b0)+r.

Po wymnożeniu i porównaniu współczynników obu stron mamy[5]:

bn1=anbn2=an1+abn1,bn3=an2+abn2,,b0=a1+ab1,r=a0+ab0.

Przykład

Niech w(x)=5x37x2+3x3. Dzielenie tego wielomianu przez dwumian x2 można zapisać w tabeli:

  • pierwszy wiersz zawiera wszystkie – również zerowe – współczynniki wielomianu w;
  • dolny wiersz zawiera wyniki obliczeń według reguły danej wyżej:
współczynniki

licznika w

5 −7 3 −3
iloczyny 10 6 18
współczynniki

ilorazu B

5 3 9 15

Prawie wszystkie elementy dolnego wiersza – oprócz ostatniego – to współczynniki wielomianu B, a ostatni element, czyli skrajnie prawy, to reszta z dzieleniaSzablon:Odn:

w(x)=(x2)(5x2+3x+9)+15.

Przy okazji można zauważyć, że jest to dowód wniosku z twierdzenia Bézouta o tym, że reszta r równa się w(2).

Inne zastosowania

Rozkład względem potęg dwumianu

Rozpatrzmy, co będzie, jeżeli wielomian w(x) będziemy dzielić wielokrotnie przez xa, otrzymując za każdym razem pewien wielomian Bj i resztę rj:

w(x)=(xa)B(x)+r==(xa)((xa)B1(x)+r1)+r==(xa)2B1(x)+r1(xa)+r==(xa)2((xa)B2(x)+r2)+r1(xa)+r==(xa)3B2(x)+r2(xa)2+r1(xa)+r,w(x)=rn(xa)n+rn1(xa)n1++r2(xa)2+r1(xa)+r.

Otrzymaliśmy więc rozkład wielomianu w(x) względem potęg dwumianu xa. Taki rozkład można otrzymać, stosując schemat Hornera kolejno do w(x), B(x), B1(x), , Bn1(x) i biorąc reszty jako współczynniki (im później jest otrzymana reszta, tym przy większej potędze jest ona współczynnikiem).

Obliczanie wartości znormalizowanych pochodnych w punkcie

Dany wielomian

w(x)=(xα)jv(x)+r(x),

gdzie r(x) jest stopnia mniejszego niż j. Po j-krotnym zróżniczkowaniu i podstawieniu α:

w(j)(α)=j!v(α).

Z tego wynika, że v(α) jest j-tą znormalizowaną pochodną wielomianu W(x) w punkcie α:

v(α)=w(j)(α)j!.

Współczynniki wielomianu v i wartości v w punkcie α obliczamy dzieląc wielomian W i kolejno otrzymywane ilorazy przez dwumian xα:

w(x)(xα)k dla k=1,,j1.

Algorytm Hornera dla obliczania początkowych mn elementów w(j)(x)j! wymaga (m+1)(nmn) dodawań i mnożeń.

Uogólnienie na abstrakcyjny pierścień wielomianów

Schematy podane wyżej można uogólnić na przypadek abstrakcyjnego pierścienia wielomianówSzablon:Fakt. Niech K będzie dowolnym ciałem, a K[x] będzie jego pierścieniem wielomianów. Jeśli

f(x)=anxn+an1xn1++a1x+a0K[x],

to współczynniki ilorazu

bn1xn1++b1x+b0,

otrzymanego z dzielenia f przez xa,aK spełniają zależność:

bn1=an,bk=ak+1+cbk+1

dla k=0,1,,n2; reszta z tego dzielenia – równa f(a) – wynosi

a0+ab0.

Zobacz też

Przypisy

Szablon:Przypisy

Bibliografia

Linki zewnętrzne

Szablon:Wielomiany

Szablon:Kontrola autorytatywna

  1. 1,0 1,1 Szablon:Encyklopedia PWN
  2. 2,0 2,1 Szablon:MacTutor [dostęp 2024-05-22].
  3. Szablon:Otwarty dostęp Jeff Miller, Horner's method [w:] Earliest Known Uses of Some of the Words of Mathematics (H) Szablon:Lang, MacTutor History of Mathematics archive, University of St Andrews, mathshistory.st-andrews.ac.uk [dostęp 2024-05-22].
  4. Szablon:Otwarty dostęp Juna Manuel Peña, Thomas Sauer, On the multivariate Horner scheme Szablon:Lang, SIAM Journal on Numerical Analysis 37(4), czerwiec 1998, ResearchGate, researchgate.net [dostęp 2024-05-22].
  5. Szablon:Otwarty dostęp Michał Niedźwiedź, Schemat Hornera, Zintegrowana Platforma Edukacyjna, zpe.gov.pl [dostęp 2024-05-22].