Schemat Hornera to wygodny sposób na dzielenie wielomianu przez dwumian. Działanie to można zapisać przy pomocy układu równań, a sama implementacja algorytmu jest bardzo krótka.
Algorytm Hornera pozwala na szybkie obliczenie wielomianu w'(x) jeśli w(x)=w'(x)p(x), gdzie p(x) = (x - c). Na początek weźmy dowolny wielomian stopnia n-tego. Następnie przyrównajmy obydwie strony.
anxn + an - 1xn - 1 + .. + a1x + a0 = (x - c)(bn - 1xn - 1 + bn - 2xn - 2 + .. + b1x + b0) + R
Teraz należy wymnożyć prawą stronę równania. Wielomiany są takie same, gdy ich odpowiednie współczynniki mają tą samą wartość. Oznacza to, że po pomnożeniu należy sprawdzić co się znajduje obok xi.
anxn + an - 1xn - 1 + .. + a1x + a0 = bn - 1xn + (bn - 2 - c·bn - 1)xn - 1 + .. + (b0 - c·b1)x + R - c·b0
Porównując pary współczynników obu wielomianów oraz przekształcając równania tak, aby po jednej stronie samo bi otrzymujemy:
Oznacza to, że każdy następny wyraz jest zależny od wyniku poprzedniego wyrazu. Reguła jest zawsze taka sama: pobierz następny współczynnik wielomianu w(x) i dodaj iloczyn c i ostatni wyliczonego współczynnika bi.
Dany jest wielomian w(x) = x4 - 2x3 - 2x2 + 5x + 1. Zadanie polega na podzieleniu go przez dwumian p(x) = (x - 2). Tu należy zwrócić uwagę, że c = 2. Wyliczanie kolejnych współczynników odbywa się wtedy następująco:
Wyraz | Wzór | Obliczenia |
---|---|---|
b3 | a4 | 1 |
b2 | a3 + c·b3 | -2 + 2·1 = 0 |
b1 | a2 + c·b2 | -2 + 2·0 = -2 |
b0 | a1 + c·b1 | 5 + 2·(-2) = 1 |
R | a0 + c·b0 | 1 + 2·1 = 3 |
Z tego wynika, że w(x) = (x - 2)(x3 - 2x + 1) + 3
Napisz program, który wczyta od użytkownika współczynniki wielomianu w(x) oraz wartość c z dwumianu p(x) = x - c przez który ma zostać podzielony wielomian w(x). Zakładamy, że wielomian w(x) jest co najmniej stopnia n = 1. Wypisz na ekran wynik w postaci pokazane poniżej:
Program będzie wykorzystywać funkcje napisane w bibliotece wielomiany.h, które zawiera podstawowe funkcje do wczytywania i wypisywania wielomianów.
Funkcja dzielPrzezDwumian() przyjmuje dwa argumenty, którymi są: wielomian w - do podzielenia przez dwumian oraz c - wartość z dwumianu p(x) = x - c. W wyniku działania funkcji wielomian w zostaje zmodyfikowany, a funkcja zwraca resztę z dzielenia R.
(2.) Pobierz stopień wielomianu i (3.) przygotuj tablicę pod nowe współczynniki. (3. - 7.) Oblicz w pętli kolejne współczynniki bi oraz (8.) resztę z dzielenia. Na koniec (9. - 10.) zaktualizuj wielomian i (11.) zwróć obliczoną reszte.
W celu przetestowania napisanej funkcji jak również spełnieniu wymagań zadania poniższy fragment kodu wczytuje potrzebne dane i wypisuje wynik: