Przeczytaj
Jak już wiemy, schemat HorneraHornera jest wykorzystywany do obliczania wartości wielomianówwielomianów. Wykorzystamy tę metodę w czasie bieżącej lekcji.
Za przykład posłuży nam wielomian trzeciego stopnia. Obliczymy jego wartość dla wybranych argumentów. Zrobimy to na dwa sposoby: najpierw metodą tradycyjną wykonamy wszystkie operacje, a następnie skorzystamy ze schematu Hornera. Ostatecznie porównamy ilości wykonywanych operacji.
Ogólna postać wielomianu trzeciego stopnia to:
Możemy zapisać równanie obliczające jego wartość za pomocą wzoru:
Wielomian, którego stopień jest równy n, składa się z n + 1 składników.
A oto przykładowy wielomian trzeciego stopnia:
Dla x = 2
jego wartość wynosi:
Aby obliczyć wynik, trzeba sześć razy wykonać operację mnożenia oraz trzykrotnie operacje dodawania:
Zapiszemy algorytm tradycyjny, dzięki któremu będziemy mogli obliczyć wartość takiego wielomianu. Ponieważ użyjemy pętli for x in range(n+1)
, której wartość zmiennej sterującej x
zwiększa się od 0 do n
, więc współczynniki podamy jako listę elementów w kolejności od najmniejszego do największego wykładnika potęgi (od aIndeks dolny 33 do aIndeks dolny 00).
Zdefiniujmy funkcję, która wykorzystując ten algorytm obliczy wartość wielomianu. Współczynniki towarzyszące poszczególnym jednomianom (czyli czynniki aIndeks dolny nn w wyrażeniach aIndeks dolny nnxIndeks górny nn) podamy w kolejności od najmniejszego do największego wykładnika potęgi (od aIndeks dolny 33 do aIndeks dolny 00):
Zmodyfikujmy zapisaną funkcję w taki sposób, by obliczyć, ile operacji podstawowych było niezbędnych podczas wyznaczania wartości wielomianu. Sprawdźmy, czy uzyskany wynik zgadza się z wartością obliczoną na początku lekcji (powinien on wynosić 9).
Obliczanie wartości wielomianu z zastosowaniem schematu Hornera
Schemat Hornera optymalizuje ilość operacji arytmetycznych niezbędnych do obliczenia wartości wielomianu.
Wykorzystując go otrzymujemy wzór:
Kolejne współczynniki:
są mnożnikami potęg zmiennej x, zapisanymi od lewej do prawej strony wielomianu. Poszczególne wyrazy wielomianu (jednomiany) są zapisane od najwyższej potęgi zmiennej x do najniższej.
Po przekształceniu przykładowego wielomianu z wykorzystaniem schematu Hornera okazuje się, że w celu wyznaczenia wartości całego wyrażenia konieczne jest wykonanie trzech operacji mnożenia i trzech operacji dodawania:
Zapiszemy algorytm obliczania wartości wielomianu za pomocą wersji iteracyjnej schematu Hornera. W liście, która jest jednym z parametrów funkcji, współczynniki podajemy w kolejności od najmniejszego stopnia do największego, a przy niewystępujących potęgach w wielomianie uzupełniamy zerami.
Zdefiniujmy funkcję, która wykorzystując ten algorytm pozwoli nam obliczyć wartość wielomianu. Stopień wielomianu to najwyższa potęga x'a
w tym wielomianie. W liście, która jest jednym z parametrów, współczynniki przy niewystępujących potęgach w wielomianie uzupełniamy zerami. Wówczas możemy pominąć podawanie stopnia jako parametru funkcji, gdyż będziemy mogli obliczyć go ze wzoru stopien = liczba współczynników -1
.
Możemy również sprawdzić, ile operacji podstawowych wykonujemy w tej funkcji:
Definiując funkcję rekurencyjną, będziemy musieli podać następujące dane wejściowe:
stopień wielomianu,
współczynniki kolejnych wyrazów wielomianu,
argument, dla którego obliczamy wartość wielomian.
Wzór rekurencyjny obliczania wartości wielomianu za pomocą schematu Hornera możemy zapisać w następujący sposób:
Zapiszemy algorytm rekurencyjny, który pozwala obliczyć wartość wielomianu z zastosowaniem schematu Hornera:
Zdefiniujmy funkcję, która wykorzystując algorytm rekurencyjny obliczy wartość wielomianu. Współczynniki towarzyszące poszczególnym jednomianom (czyli czynniki aIndeks dolny nn w wyrażeniach aIndeks dolny nnxIndeks górny nn) podamy w kolejności od największego do najmniejszego wykładnika potęgi (od aIndeks dolny 00 do aIndeks dolny 33):
Sprawdźmy, ile operacji podstawowych trzeba wykonać w celu obliczenia wartości wielomianu z zastosowaniem metody rekurencyjnej.
Funkcja rekurencyjna wywołuje wielokrotnie siebie samą; w celu sprawdzenia liczby wykonywanych przez nią operacji musimy posłużyć się zmienną, która istnieje w przestrzeni nazwprzestrzeni nazw poza funkcją. Do tego celu użyjemy zmiennej typu integer, który jest typem niezmiennymniezmiennym. Aby zmieniać wartość takiej zmiennej z wnętrza funkcji, musimy zadeklarować dostęp do niej za pomocą słowa kluczowego global
. Dzięki temu będziemy mogli zmieniać wartość zmiennej, która istnieje „poza” funkcją, a jest niezmiennaniezmienna.
Zdefiniujemy funkcję, która poda liczbę wykonanych operacji arytmetycznych podczas wyznaczania wartości wielomianu z zastosowaniem metody rekurencyjnej:
Spróbujmy uruchomić funkcję; pamiętajmy o wcześniejszym zadeklarowaniu zmiennej zlicz
oraz o wyświetleniu jej wartości po zakończeniu działania funkcji:
Bazując na postaci rekurencyjnej funkcji obliczającej wartość wielomianu, spróbujmy zapisać ją używając wyrażenia trójargumentowego.
Dla języka Python opracowano moduł o nazwie SymPy – pozwala on na zapisywanie wyrażeń algebraicznych i obliczanie ich wartości.
Słownik
brytyjski matematyk żyjący w latach 1786–1837; w wieku 14 lat został asystentem nauczyciela w szkole w Bristolu, a w 1809 roku założył własną szkołę w Bath; podał sposób wyznaczania wartości wielomianu z wykorzystaniem minimalnej liczby operacji możenia
wyrażenie algebraiczne będące sumą jednomianów, czyli wyrażeń postaci aIndeks dolny nnxIndeks górny nn
najwyższa potęga przy zmiennej, która nie jest równa zero
przepis postępowania prowadzący do rozwiązania ustalonego problemu, określający ciąg czynności elementarnych, które należy w tym celu wykonać
technika programowania polegająca na powtarzaniu tych samych operacji w pętli określoną liczbę razy lub do momentu, aż zostanie spełniony zadany warunek
technika programowania polegająca na odwoływaniu się procedur lub funkcji do samych siebie, aż do momentu spełnienia warunku podstawowego
przypadek, dla którego funkcja rekurencyjna nie wywołuje samej siebie, a zamiast tego zwraca z góry określoną wartość
moment, gdy funkcja rekurencyjna zwraca konkretną wartość zamiast kolejnego wywołania rekurencyjnego
(ang. namespace) - miejsce w pamięci operacyjnej, w której przechowywana jest dana zmienna; najczęściej przestrzeń nazw związana jest z funkcją, a zmienne używane w niej są widoczne tylko w obrębie tej przestrzeni - jest to „zakres obowiązywania” tych zmiennych
(ang. immutable) sekwencja lub zmienna, która jest niemodyfikowalna „w miejscu”, a więc nie można zmienić żadnego z jej elementów wewnątrz, trzeba stworzyć nowy obiekt, który zawiera zmienione elementy