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 
ba
2
n
Przechodząc z tą równością do granicy otrzymujemy:
lim bn  an   lim
n 
ba
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
n2
 b1 x
n 3
 ...  bn  3 x  bn  2
Uogólniony Schemat Hornera
Px   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
Px  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
