Transcript Document
ALGORYTMY i STRUKTURY DANYCH WYKŁAD 04 dr Marek Siłuszyk WSFiZ Plan wykładu: Pierwiastek funkcji Metoda Bisekcji Wielomiany Algorytm Hornera Zastosowanie schematu Hornera ... Przypomnienie z Analizy Matematycznej... Twierdzenie Bolzano-Cauchy`ego: Jeżeli funkcja ciągła f(x) ma na końcach przedziału domkniętego wartości różnych znaków, to wewnątrz tego przedziału, istnieje co najmniej jeden pierwiastek równania f(x) = 0. f(a) f(b) < 0 PIERWIASTEK FUNKCJI Metody znajdowania miejsc zerowych funkcji Dla każdej z metod określić trzeba warunki początkowe, które muszą być spełnione, aby funkcja miała miejsce zerowe. Określamy przedział poszukiwań pierwiastka. Początek przedziału oznaczamy jako xp, a koniec jako xk, przy czym wartości te powinny spełniać zależność: xp < xk •Badana funkcja musi być w tym przedziale określona oraz ciągła. •Znak wartości funkcji na krańcach określonego przedziału musi być przeciwny. Ciągłość funkcji oraz twierdzenie o wartościach pośrednich gwarantują w takim przypadku, iż w przedziale <xp, xk> istnieje taki punkt x0, iż wartość funkcji w tym punkcie wynosi f(xo) = 0. •Dodatkowo dla metody stycznych Newtona musi być zagwarantowane, iż w przedziale tym pierwsza pochodna funkcji nie zeruje się - czyli funkcja nie posiada minimum ani maksimum lokalnego, w których to punktach styczna do wykresu jest równoległa do osi OX, a więc nie istnieje punkt przecięcia xo. Metoda bisekcji: Polega na podziale przedziału na dwie równe części i sprawdzeniu, czy w środku funkcja osiąga wartość zero. Jeśli nie, to dalej dzielimy tą z połówek, w której funkcja zmienia znak na krańcach - na rysunku po prawej stronie będzie to prawa połówka. Operacja podziałów jest dotąd kontynuowana, aż znajdziemy dostatecznie dokładny pierwiastek funkcji. Metoda bisekcji jest najwolniej zbieżną metodą poszukiwań pierwiastka, chociaż istnieją funkcje, dla których znajduje ona pierwiastek szybciej od pozostałych metod Metoda równego podziału (metoda połowienia, metoda bisekcji) — jedna z metod rozwiązywania równań nieliniowych. Aby można było zastosować metodę równego podziału, muszą być spełnione założenia: 1.funkcja f(x) jest ciągła w przedziale domkniętym [a;b] 2.funkcja przyjmuje różne znaki na końcach przedziału: f(a)f(b) < 0 Przebieg algorytmu: 1.Sprawdzamy, czy pierwiastkiem równania jest punkt czyli czy f(x1) = 0. 2.Jeżeli tak jest, algorytm kończy się. W przeciwnym razie x1 dzieli przedział [a,b] na dwa mniejsze przedziały [a,x1] i [x1,b]. 3.Następnie wybierany jest ten przedział, dla którego spełnione jest drugie założenie, tzn. albo f(x1)f(a) < 0 albo f(x1)f(b) < 0. 4.Cały proces powtarzany jest dla wybranego przedziału. Algorytm kończy się albo w punkcie 2, albo jest przerywany, gdy przedział będzie dostatecznie wąski. xi xi 1 Schemat blokowy metody BISEKCJI A B Program w Pascalu oraz schemat pochodzą z: Fortuna Z. Macukow B. Wąsowski J. Metody Numeryczne, WNT, Warszawa 1993 Co się dzieje z brzegami przedziału <a, b> ? Lewe brzegi przedziału oznaczmy przez: a1, a2, a3, ... , an zaś, prawe brzegi przedziału przez : b1, b2, b3, ... , bn Spełnione będą nierówności: a a0 a1 a2 a3 ...an ... ..?. ... bn ... b3 b2 b1 b0 b an – ciąg niemalejący bn – ciąg nierosnący Co się dzieje z długością przedziału <a, b>? Długość przedziału można określić na podstawie wzoru: bn a n ba 2 n Przechodząc z tą równością do granicy otrzymujemy: lim bn an lim n ba n 2n lim bn lim an ? n n Przykład Wyznaczyć pierwiastek równania: x3 − x + 1 = 0 w przedziale [ − 2;2]. Rozwiązanie: •Obliczamy wartości funkcji na końcach przedziału: f( − 2) = − 5, a f(2) = 7. •Dzielimy przedział na połowy: i obliczamy wartość f(x1) = 1. •Ponieważ wartość funkcji dla x1 jest różna od zera, algorytm jest kontynuowany. Mamy teraz dwa przedziały [ − 2,0] i [0,2]. Wybieramy ten, na którego końcach znaki funkcji są różne: lub (prawda) (nieprawda). •Zatem wybieramy przedział [ − 2,0] •Dzielimy przedział na połowy: i obliczamy wartość funkcji f( − 1) = 1 — liczba x2 nie jest zatem pierwiastkiem. •Znowu dzielimy przedział na dwa podprzedziały, wybieramy jeden z nich itd. UWAGA: teoretycznie można uzyskać dokładne rozwiązanie, jednak w praktycznych zastosowaniach uzyskuje się tylko przybliżone rozwiązanie równania, a jego dokładność zależy od tego, ile razy zastosujemy powyższą metodę. Schemat Hornera Schemat, o którym mowa dotyczy obliczania wartości wielomianu o ogólnym zapisie: Na czym polega ta metoda? Rozważmy wielomian stopnia drugiego: (1) znany Ci jako równanie kwadratowe. Te same równanie można zapisać w następujący sposób: (2) I po co sobie głowę zawracać przekształceniami? Zwróć uwagę na fakt, że aby obliczyć wielomian (1) musisz podnieść do kwadratu (pomnożyć przez siebie), następnie dwa razy pomnożyć i na koniec dwa razy dodać - uff... Ostatecznie trzeba wykonać trzykrotnie mnożenie i dwukrotnie dodawanie. Natomiast jeżeli skorzystamy ze wzoru (2), to mnożymy już tylko dwa razy i tyleż samo dodajemy. Wydawać by się mogło, że po co nam tyle zachodu skoro zyskujemy tylko jedno działanie mniej. Otóż był to wielomian drugiego stopnia. Na pewno interesuje Cię ile będzie działań przy wielomianie wyższego stopnia niż dwa. Spróbujmy teraz to przeanalizować. Wielomian trzeciego stopnia sposobem (1) obliczymy aż pięć razy mnożąc i trzy razy dodając. Natomiast sposobem (2) wykonujemy jedynie trzy razy mnożenie i trzy razy dodawanie. A ile trzeba wykonać działań, jeżeli wielomian jest stopnia 7, 10 albo n - stopnia dla wzoru (1)? A tak wygląda wielomian n stopnia wyznaczony sposobem (2): Przypuśćmy, że chcemy obliczyć wartość wielomianu wn(s) dla x = s, czyli wartość równą y. Wówczas korzystając z powyższego zapisu wielomianu wn(x) otrzymujemy: Wyprowadzenie Schematu ALGORYTMU Hornera Tablica, kreda i . . . jedziemy V x x P x b0 x n 1 b1 x n 2 ... bn 2 x bn 1 Przypuśćmy, że chcemy obliczyć wartość wielomianu wn(s) dla x = s, czyli wartość równą y. Wówczas korzystając z powyższego zapisu wielomianu wn(x) otrzymujemy: Stąd wnioskujemy, że wielomian stopnia n wymaga wykonania n mnożeń i n dodawań. Stosowanie schematu Hornera umożliwia nam zmniejszenie liczby działań, także zwiększenie dokładności otrzymywanego wyniku. Dla wielomianu Wn(x) określonego wzorem: Wykonujemy M=n mnożeń; D=n dodawań W tym przypadku D=n dodawań M n 1 n 2 mnożeń; n Horner klasycznie 1 1 1 2 2 3 3 3 6 4 4 10 5 5 15 6 6 21 7 7 28 8 8 36 9 9 45 10 10 55 15 15 120 20 20 210 25 25 325 30 30 465 35 35 630 40 40 820 45 45 1035 50 50 1275 75 75 2850 100 100 5050 200 200 20100 250 250 31375 500 500 125250 1000 1000 500500 10000 10000 50005000 Porównanie ilości wykonywanych działań [mnożenia] klasycznie oraz za pomocą schematu Hornera M n 1 n 2 ? Schemat blokowy Jak działa Schemat Hornera? Schemat Hornera w Turbo Pascalu Częstym zadaniem rachunkowym jest obliczanie w danym punkcie x0 wartości wielomianu rozpatrzmy przypadek wielomianu 3-go stopnia, w(x)=a0x3+ a1x2+ a2x+ a3 Tę sumę można napisać inaczej, w postaci w(x)=(( a0x+ a1)x+ a2)x+ a3 a stąd wynika schemat Hornera, który dla obliczeń można sformułować tak: Przykład 5 Niech W(x)=2x3+x+7 Obliczyć W(8)=? Przykład 6 Niech W(x)=3x3+2x2+7 Obliczyć W(3)=? Wyprowadzenie Schematu Hornera II Analogicznie V x x 2 bx c P x b0 x n2 b1 x n 3 ... bn 3 x bn 2 Uogólniony Schemat Hornera Px a0 x n a1 x n 1 ... a n 1 x a n x y P y a0 y n a1 y n 1 ... a n 1 y a n P y A0 y A1 y n P n i Ai n i ! n 1 ... An 1 y An Px x P1 x P Zadanie domowe Oblicz wartość wielomianów we wskazanych punktach. • W(x)=x3-2x2+3x-1 dla x0=2 • W(x)= x4+x2+2 x0=1,25 dla • W(x)= 3x2+11x+28 dla •... x0=3 Dziękuję za Uwagę Zapraszam na następny Wykład