x - Politechnika Poznańska

Transkrypt

x - Politechnika Poznańska
Strona 1 z 246
Metody Numeryczne i Programowanie
Rozdział 1.
Metody numeryczne i programowanie
dr hab. inż. Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
e-mail: [email protected]
www.fct.put.poznan.pl/cv23.htm
Poznań 2008
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 1
2008-02-21
Strona 2 z 246
Metody Numeryczne i Programowanie
Rozdział 1.
Spis treści
1.
Wstęp. Po co nam metody numeryczne?
2.
Podstawowe pojęcia związane z obliczeniami numerycznymi
2.1. Numeryczna reprezentacja liczb
2.1.1. Dziesiętny system pozycyjny
2.1.2. Dwójkowy system pozycyjny
2.2. Zmiennopozycyjne działania arytmetyczne
2.3. Uwarunkowanie zadania i stabilność algorytmów
2.4. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
3.
Wielomianowa interpolacja i aproksymacja
3.1. Aproksymacja wielomianami Taylora
3.2. Interpolacja wielomianami Lagrange’a
3.3. Interpolacja wielomianami sklejanymi (funkcjami spline) stopnia trzeciego
3.4. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
4.
Numeryczne rozwiązywanie równań nieliniowych
4.1. Metoda połowienia (metoda bisekcji)
4.2. Metoda interpolacji liniowej (metoda Regula Falsi)
4.3. Metoda Newtona – Raphsona (metoda stycznych)
4.4. Metoda siecznych
4.5. Metoda iteracji prostej
4.6. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
5.
Numeryczne różniczkowanie i całkowanie
5.1. Metody numerycznego różniczkowania funkcji
5.1.1. Metody numeryczne obliczania wartości pierwszej pochodnej funkcji
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 2
2008-02-21
Strona 3 z 246
Metody Numeryczne i Programowanie
Rozdział 1.
5.1.2. Metody numeryczne obliczania wartości wyższych pochodnych funkcji
5.2. Metoda ekstrapolacji Richardsona
5.3. Metody numerycznego całkowania funkcji
5.3.1. Metoda Trapezów
5.3.2. Metoda Simpsona
5.3.3. Uwagi o zamkniętych i otwartych metodach Newtona - Cotesa
5.3.4. Metody kompozycyjne numerycznego całkowania
5.4. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
6.
Rozwiązywanie układów równań liniowych
6.1. Metody dokładne rozwiązywania układów równań liniowych
6.2. Metody iteracyjne rozwiązywania układów równań liniowych
6.3. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
7.
Metody rozwiązywania zagadnień początkowych dla równań różniczkowych zwyczajnych
7.1 Metody Taylora
7.2 Metody Rungego – Kutty
7.3 Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
8.
Poszukiwanie minimów funkcji jednej zmiennej
9.
Programowanie w programie MathCad
10. Dodatki
10.1. Alfabet grecki
10.2. Znajdowanie rozwinięć dwójkowych liczb dziesiętnych
10.3. Dodawanie i mnożenie liczb w układzie dwójkowym
10.4. Sposoby kodowania znaku liczby w binarnej reprezentacji maszynowej
10.5. Heksagonalny system pozycyjny
10.6. Ważne definicje i twierdzenia rachunku różniczkowego
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 3
2008-02-21
Strona 4 z 246
Metody Numeryczne i Programowanie
Rozdział 1.
10.7. Normy wektorowe i macierzowe
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 4
2008-02-21
Strona 5 z 246
Metody Numeryczne i Programowanie
Rozdział 1.
Literatura zalecana
1.
Jankowscy, J. i M., Przegląd metod i algorytmów numerycznych. Część 1. Wyd. Naukowo-Techniczne, Warszawa, 1981.
2.
Dryja, M., Jankowscy J. i M., Przegląd metod i algorytmów numerycznych. Część 2.
Wyd. Naukowo-Techniczne, Warszawa, 1982.
3.
Fortuna, Z., Macukow, B., Wącowski, J., Metody numeryczne, Seria Podręczniki Akademickie: Elektronika, Informatyka Telekomunikacja, Wyd. IV, Wyd. NaukowoTechniczne, Warszawa, 1998.
4.
Fausett, L., Numerical Methods Using MathCad, Prentice Hall, Upper Saddle River, new
Jersey, USA, 2002.
5.
Burden, R. L., Faires, J. D., Numerical Analysis. Third Edition, PWS – KENT Publishing
Company, Boston, USA, 1985.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 5
2008-02-21
Strona 6 z 246
Metody Numeryczne i Programowanie
Rozdział 1.
1. Wstęp. Po co nam metody numeryczne?
Metody numeryczne stanowią ważny obszar badań w różnych dziedzinach i to zarówno
uznawanych za nauki podstawowe, czyli takie jak fizyka, geofizyka lub chemia jak też w zastosowaniach praktycznych związanych z różnymi etapami projektowania inżynierskiego.
Wymienić tutaj można zastosowania w telekomunikacji, inżynierii materiałowej, w badaniach
związanych z wykorzystaniem plazmy, w dynamice płynów i wielu, wielu innych dziedzinach. Również duże znaczenie ma zastosowanie metod numerycznych w chemii i inżynierii
chemicznej.
Tradycyjne metody analizy problemu i projektowania inżynierskiego wykorzystywały
dwa podstawowe źródła informacji: wykonanie odpowiednich eksperymentów pozwalających
na scharakteryzowanie badanego zjawiska (procesu), a następnie na poszukiwaniu rozwiązań
analitycznych modelu proces ten opisującego. Wprowadzane obecnie do zastosowań symulacje komputerowe, wykorzystujące metody numeryczne stanowią nową, o dużych potencjalnych możliwościach, dziedzinę wykorzystania komputerów. Symulacje takie traktować należy jako źródło dodatkowych informacji o naturze badanego procesu czy zjawiska. Przy czym
istotnym jest to, że nie mają one zastąpić badań eksperymentalnych czy poszukiwań analitycznych rozwiązań, a stanowić ich uzupełnienie.
Metody symulacji komputerowej scharakteryzować można kilkoma ważnymi cechami:
1. W porównaniu do metod analitycznych pozwalają one na rozwiązywanie bardziej realistycznych modeli. Rozwiązania analityczne znajdować można dla stosunkowo prostych
modeli, to znaczy takich, w których przyjęto szereg założeń upraszczających. Modele wykorzystywane w symulacjach komputerowych mogą być zdecydowanie bardziej złożone.
Jedynym ograniczeniem, jakie napotykamy, to możliwości wykorzystywanego do obliczeń sprzętu komputerowego.
2. Czas realizacji symulacji komputerowej jest zdecydowanie krótszy od czasu, jaki należy
poświęcić na badania eksperymentalne. Dzięki temu prześledzić możemy zarówno wpływ
większej liczby czynników oddziaływujących na badany proces jak też ich dużo większy
zakres zmian.
3. Metody symulacyjne pozwalają na redukcję zarówno kosztów badań jak też czasu ich
realizacji. W badaniach eksperymentalnych liczba koniecznych do wykonania doświad-
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 6
2008-02-21
Strona 7 z 246
Metody Numeryczne i Programowanie
Rozdział 1.
czeń rośnie najczęściej wykładniczo wraz ze wzrostem liczby badanych czynników
wpływających na proces. Ponieważ zarówno koszty badań eksperymentalnych jak i czas
badań rośnie proporcjonalnie do liczby wykonywanych doświadczeń oznacza to, że
zwiększenie liczby uwzględnianych w badaniach czynników w sposób dramatyczny
zwiększa koszty badań. Natomiast koszt symulacji komputerowej jest zdecydowanie niższy od kosztu eksperymentu, w związku z tym można ich wykonać zdecydowanie więcej.
Dodatkowo symulacje komputerowe pozwolić mogą na wskazanie takich obszarów zmian
czynników, w których nawet ich niewielkie zmiany powodują duże zmiany badanego procesu. W takich wcześniej wytypowanych obszarach możemy, a nawet powinniśmy przeprowadzić badania eksperymentalne. Jest to dodatkowy czynnik wpływający na obniżenie
kosztów badań oraz redukujący czas ich realizacji.
Zastosowanie metod obliczeniowych z wykorzystaniem komputerów wymaga połączenia w jedną całość trzech elementów: (i) wiedzy związanej z badanym procesem lub zjawiskiem, w naszym przypadku wiedzy związanej z szeroko rozumianą chemią i inżynierią chemiczną, (ii) wiedzy matematycznej, a w szczególności z algebry liniowej (obliczenia macierzowe), analizy matematycznej (analiza stabilności i zbieżności procesów obliczeniowych)
oraz metod numerycznych ze szczególnym zwróceniem uwagi na ograniczenie tych metod,
(iii) wiedzy informatycznej związanej z językami programowania, systemami operacyjnymi
oraz budową komputerów. Ta ostatnia dziedzina jest konieczna do tego, aby maksymalnie
wykorzystać dostępne zasoby komputerowe, oraz co jest równie istotne określić maksymalną
wielkość rozwiązywanego problemu
Wykorzystanie symulacji komputerowych jako narzędzia pracy w badaniu różnorodnych procesów lub zjawisk wymaga uwzględnienia dwóch bardzo istotnych elementów:
1. Wskazania obszaru badań, w jakim prowadzone są symulacje komputerowe. Chodzi tu
przede wszystkim o precyzyjne zdefiniowanie badanego problemu oraz o wskazanie
ograniczonego zbioru funkcji, jakie możemy uwzględnić w symulacjach. Przyjąć należy
również pewien ograniczony czasu badań. Przyjęte ograniczenia, jak też określenie obszaru, który pozostanie poza zasięgiem badań ma istotny wpływ na stabilność oraz dokładność stosowanych algorytmów numerycznych.
2. Przyjęcie odpowiednich zasad dla dyskretyzacji problemu. Dyskretyzacja ma za zadanie
zmniejszenie wymiarowości problemu z najczęściej nieskończenie dużej liczby wymiarów do problemu skończenie wymiarowego. Uzyskuje się to poprzez odpowiednie próbMariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 7
2008-02-21
Strona 8 z 246
Metody Numeryczne i Programowanie
Rozdział 1.
kowanie, obcinanie rozwinięć funkcji i tym podobne. Z drugiej strony pamiętać należy, że
dyskretyzacja wprowadza błędy obliczeniowe, szumy i tak zwane artefakty.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 8
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 1 z 246
2. Podstawowe pojęcia związane z obliczeniami numerycznymi
2.1. Numeryczna reprezentacja liczb
Zgodnie z Neumanowską architekturą komputera, pamięć zbudowana jest z elementów
przyjmujących wartości 0 (zero) oraz 1 (jeden) zwanych bitami. Te najmniejsze elementy
pamięci zorganizowane są w większe jednostki – bajty złożone z 8 bitów oraz słowa maszynowe będące złożeniem 2, 4 lub 8 bajtów. Jednym z podstawowych ograniczeń, z jakim spotyka się prowadząc symulacje komputerowe, jest skończona wielkość pamięci komputera. Z
tego powodu na zapamiętanie poszczególnych wyników przeznaczyć możemy jedynie skończoną i najczęściej stosunkowo niewielką liczbę komórek pamięci. Oznacza to, że wszystkie
liczby reprezentowane są w maszynie cyfrowej przez skończoną liczbę cyfr ich rozwinięcia
pozycyjnego.
Cechą charakterystyczną wszystkich systemów pozycyjnych jest to, że wartość cyfry
zależy od pozycji, na której w zapisywanej liczbie cyfra ta się znajduje. Oznacza to, że ta sama cyfra w liczbie zapisanej w systemie na przykład dziesiętnym oznaczać może liczbę jednostek, dziesiątek, setek i tak dalej. W obliczeniach z zastosowaniem urządzeń elektronicznych najczęściej stosowanymi podstawami rozwinięć pozycyjnych są 2, 8 lub 16.
Ponieważ nie zmienia to w niczym ogólności rozważań, problem reprezentacji maszynowej liczb oraz prowadzenia na nich obliczeń arytmetycznych przedstawiony zostanie na
przykładzie dwóch systemów pozycyjnych: dziesiętnym systemie pozycyjnym, który intuicyjnie jest nam najbliższy oraz na dwójkowym systemie pozycyjnym, który jest szczególni
ważny w obliczeniach komputerowych.
2.1.1. Dziesiętny system pozycyjny
Jednym z najlepiej znanych nam systemów kodowania informacji zawartej w liczbach
jest kodowanie w dziesiętnym systemie pozycyjnym zwanym również układem dziesiętnym. W systemie tym do przedstawienia liczb naturalnych wykorzystywane jest dziesięć różnych znaków - cyfry od 1 do 9 oraz cyfra 0, a do przedstawienia liczb wymiernych dwunastu
znaków: dziesięciu cyfr ze zbioru {0,1,...,9}, znak "-" (minus), oraz znaku kropki lub przecinka oddzielającego część całkowitą od części ułamkowej.
Dowolną n cyfrową liczbę naturalną x zapisaną w układzie dziesiętnym w postaci:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 1
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
x 10 = d n −1 d n − 2 K d 1 d 0
Strona 2 z 246
(2.1)
10
gdzie d n −1 , d n −2 , K , d1 , d 0 są cyframi dziesiętnymi ze zbioru {0,1,...,9}, interpretujemy w ten
sposób, że d0 jest liczbą jednostek, d1 liczbą dziesiątek, d2 liczbą setek i tak dalej (rysunek
2.1.).
Słowo maszynowe
Nr cyfry
n-1
n-2
…
2
1
0
Cyfra
dn-1
dn-2
…
d2
d1
d0
Mnożnik
10n-1
10n-2
…
102 = 100
101 = 10
100 = 1
Rysunek 2.1. Reprezentacja liczby naturalnej wraz z wartościami poszczególnych cyfr w
dziesiętnym układzie pozycyjnym.
Celem określenia wartości tak zapisanej liczby naturalnej należy wykonać następujące
obliczenia:
x 10 = d n −1 d n − 2 K d1 d 0
10
=
n −1
= d n −1 × 10 n −1 + d n − 2 × 10 n − 2 + K + d1 × 101 + d 0 × 10 0 = ∑ d i × 10 i .
(2.2)
i =0
Zdecydowanie większy problem stanowi zapisanie liczby rzeczywistej zawierającej zarówno część całkowitą jak też ułamkową. W zależności od tego jak wydzielimy te dwie części liczby mówić możemy o dwóch sposobach zapisu: stałopozycyjnym oraz zmiennopozycyjnym. Różnica pomiędzy tymi dwoma sposobami zapisu liczby polega na sposobie trakto-
wania poszczególnych cyfr na nią się składających. W przypadku reprezentacji stałopozycyjnej zakładamy, że zapis liczby odbywa się z przyjęciem ustalonej liczby cyfr części całkowitej oraz ułamkowej, co oznacza, że pozycja kropki (przecinka) oddzielającej część ułamkową
od całkowitej jest stała. W przypadku zapisu zmiennopozycyjnego zakładamy, że zapis operuje ustaloną całkowitą liczbą cyfr, zwanych cyframi istotnymi. W tym przypadku pozycja
kropki dziesiętnej nie jest stała i zależy od wielkości czynnika skalującego, tak zwanej cechy
liczby.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 2
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 3 z 246
W przypadku stałopozycyjnej reprezentacji liczby rzeczywistej, słowo maszynowe,
w którym zapisywana jest liczba podzielone jest na trzy części: (i) część ułamkową złożoną z
t cyfr, (ii) część całkowitą złożoną z e cyfr oraz (iii) części zawierającej znak liczby (rysunek
2.2).
Słowo maszynowe
Nr cyfry
n
n-1
n-2
…
t+1
t
t-1
t-2
…
1
0
Cyfra
dn
dn-1
dn-2
…
dt+1
dt
dt-1
dt-2
…
d1
d0
Bit znaku
±
Znak
Mnożnik
Część całkowita liczby – e cyfr
Część ułamkowa liczby – t cyfr
ce-1
ce-2
…
c1
c0
m-1
m-2
…
m-t+1
m-t
10e-1 10e-2
…
101
1
10-1
10-2
…
10-t+1
10-t
Rysunek 2.2. Reprezentacja liczby rzeczywistej wraz z wartościami poszczególnych cyfr w
stałopozycyjnym zapisie maszynowym.
Wartość liczby rzeczywistej zapisanej w sposób stałopozycyjny wynika z następującego
wzoru:
x 10 = d n −1 d n − 2 K d1 d 0 .d −1 d − 2 K d1−t d −t
10
=
= d n −1 × 10 n −1 + d n − 2 × 10 n − 2 + K + d 1 × 101 + d 0 × 10 0 +
+ d −1 × 10 −1 + d − 2 × 10 − 2 + K + d1−t × 101−t + d −t × 10 −t =
n −1
t
i =0
j =1
(2.3)
= ∑ d i × 10 i + ∑ d − j × 10 − j .
Sposób interpretacji liczb przedstawionych w zapisie stałopozycyjnym pokazano w
przykładzie 2.1.
Przykład 2.1.
Przedstawić w zapisie stałopozycyjnym liczbę a = 654.3141561 oraz jej iloczyny z kolejnymi (od -1 do –7) ujemnymi potęgami liczby 10, czyli liczby a×10-1, a×10-2 i tak dalej aż
do a×10-7. Obliczyć: a+(a×10-5), a+a oraz (a×10-7)+(a×10-7). Założyć, że na część całkowitą
przeznaczone są e = 3 cyfry, a na część ułamkową t = 4 cyfry.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 3
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 4 z 246
Rozwiązanie
Kolejne liczby z zachowaniem wszystkich cyfr oraz ich zapis w systemie stałopozycyjnym przedstawiono w tabeli 2.1. Człon 10-x jest tu członem skalującym poszczególne liczby,
a jego obecność powoduje przesunięcie kropki dziesiętnej w prawo lub lewo.
Jak można zauważyć dla małych liczb w części ułamkowej po kropce dziesiętnej pojawiają się zera. Ponieważ położenie kropki dziesiętnej jest stałe, a liczba cyfr części ułamkowej jest niezmienna prowadzi to do tego, że poszczególne liczby w zapisie stałopozycyjnym
przedstawiane będą z coraz mniejszą liczbą cyfr znaczących (coraz mniejszą precyzją). W
efekcie liczba a×10-7 zostanie zapamiętana jako zero.
Tabela 2.1. Stałopozycyjny zapis liczb z przykładu 2.1. wraz z ich interpretacją.
Liczba
Część całkowita
c2
c1
c0
Część ułamkowa
m-1 m-2 m-3
Reszta
m-4
a=
641.3141561
6
4
1
3
1
4
1
561
a×10-1 =
64.13141561
0
6
4
1
3
1
4
1561
a×10-2 =
6.413141561
0
0
6
4
1
3
1
41561
a×10-3 =
0.6413141561
0
0
0
6
4
1
3
14156
a×10-4 =
0.06413141561
0
0
0
0
6
2
1
314156
a×10-5 =
0.006413141561
0
0
0
0
0
6
2
1314156
a×10-6 =
0.0006413141561
0
0
0
0
0
0
6
21314156
a×10-7 =
0.0000653141561
0
0
0
0
0
0
0
621314156
W kolejnych tabelach 2.2 – 2.4 przedstawiono interpretację stałopozycyjnych obliczeń
wyrażeń algebraicznych. W przypadku wartości wyrażenia a+(a×10-5), drugi człon tej sumy
zapamiętywany jest jako liczba z dwiema cyframi znaczącymi (tabela 2.2). Reszta tej liczby
odrzucana jest jako jej mniej znacząca część. Jako wynik dodawania otrzymujemy liczbą będącą przybliżeniem wyniku dokładnego. To jak dużym błędem będzie obarczony jest ten wy-
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 4
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 5 z 246
nik zależy od sposobu, w jaki otrzymaliśmy tak zwaną stałopozycyjną reprezentację maszynową liczby rzeczywistej.
Tabela 2.2. Stałopozycyjne działania arytmetyczne. Interpretacja sumy wyrażenia a+(a×10-5).
Liczba
Część całkowita
Część ułamkowa
a
6
4
1
3
1
4
1
5
61
(a×10-5)
0
0
0
0
0
6
4
1
31…
Suma
6
4
1
3
2
0
5
6
92…
W tym przypadku obliczania wartości wyrażenia a+a część całkowita wyniku nie mieści się w przeznaczonej na jej zapis liczbie bitów (tabela 2,3). Celem jej zapisania konieczne
są 4 a nie jak założono 3 bity. W tej sytuacji zostanie wygenerowany komunikat o nadmiarze
stałopozycyjnym, a obliczenia zostaną przerwane.
Tabela 2.3. Stałopozycyjne działania arytmetyczne. Interpretacja sumy wyrażenia a+a.
Liczba
Część całkowita
Część ułamkowa
a
6
4
1
3
1
4
1
5
61
a
6
4
1
3
1
4
1
5
61
Suma
(1)2
8
2
6
2
8
2
(1)1
22
Odmienny problem powstanie w przypadku obliczania wartości wyrażenia (a×107
)+(a×10-7). Każda z tych liczb jest liczbą małą, która w stałopozycyjnym zapisie maszyno-
wym zapamiętywana jest jako „zero”. W efekcie ich suma w obliczeniach maszynowych również wyniesie 0, pomimo tego, że gdyby obliczenia wykonywać na liczbach dokładnych to na
czwartym miejscu po przecinku powinna pojawić się jedynka. W takiej sytuacji obliczenia
będą kontynuowane, a uzyskany wynik sumowania może doprowadzić do znacznych błędów
obliczeniowych.
Tabela 2.4. Stałopozycyjna interpretacja sumy wyrażenia (a×10-7)+(a×10-7).
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 5
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 6 z 246
Liczba
Część całkowita
Część ułamkowa
(a×10-7)
0
0
0
0
0
0
0
6
54…
(a×10-7)
0
0
0
0
0
0
0
6
54…
Suma
0
0
0
0
0
0
0
(1)3 08…
Powyższy przykład pokazuje, że jeżeli zapisywana w reprezentacji stałopozycyjnej
liczba będzie dostatecznie mała (jej rząd będzie mniejszy od liczby pamiętanych cyfr części
ułamkowej) to liczba taka zostanie zapamiętana jako 0, co oznaczać może powstanie dowolnie dużego błędu w trakcie obliczeń.
■
Powyższy przykład pokazuje problemy, jakie napotkać możemy realizując obliczenia w
zapisie stałopozycyjnym. Pokazane trudności wynikają z właściwości stałopozycyjnego zapisu, w którym każda z części liczby rzeczywistej złożona jest z stałej liczby cyfr. Wziąwszy
pod uwagę, że długość słowa maszynowego jest stała, a liczba cyfr przeznaczonych na część
całkowitą i ułamkową nie zmienia się oznacza to, że wszystkie liczby rzeczywiste skraca się
do t cyfr części ułamkowej. W efekcie, jeżeli zapisywana w reprezentacji stałopozycyjnej
liczba będzie dostatecznie mała (jej rząd będzie mniejszy od liczby pamiętanych cyfr części
ułamkowej) to liczba taka zostanie zapamiętana jako 0. Dodatkowo, z takiego sposobu zapisu
wynika, że wszystkie liczby rzeczywiste zapisane jako liczby stałopozycyjne muszą należeć
do przedziału I = (-10e, 10e). Wszystkie te ograniczenia mogą być źródłem powstawania
istotnych błędów w trakcie obliczeń. Z tych względów ten sposób zapisu liczb rzeczywistych
jest stosunkowo rzadko stosowany w komputerach. Najczęściej spotkać się z nim można w
prostych kalkulatorach.
Podstawowym sposobem zapamiętywania liczb rzeczywistych w pamięci komputerów
jest tak zwana reprezentacja zmiennopozycyjna. W tym przypadku dowolną liczbę rzeczywistą x≠0 przedstawiamy w znormalizowanej postaci:
x 10 = sgn( x ) ⋅ m ⋅ 10 c ,
(2.4)
gdzie funkcja
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 6
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
⎧ 1,
⎪
sign( x ) = ⎨ 0,
⎪− 1,
⎩
Strona 7 z 246
gdy x > 0,
gdy x = 0,
gdy x < 0.
(2.5)
gdzie sign(x) (czytaj: „signum x”) oznacza znak liczby x; czynnik m nazywany jest mantysą
liczby x; natomiast wykładnik c, nazywany jest cechą liczby x.
Najczęściej przyjmuje się, że mantysa jest ułamkiem takim, że pierwsza cyfra po kropce dziesiętnej jest różna od zera, co oznacza, że zachodzi 0.1 ≤ m < 1 . Cecha tak zapisanej liczby jest
natomiast najmniejszą liczbą całkowitą większą od logarytmu dziesiętnego z danej liczby x,
co zapisujemy:
c = ⎡log10 x ⎤ .
(2.6)
Zapis ⎡ a ⎤ oznacza najmniejszą liczbę całkowitą większą niż a. Na przykład dla 2.76
mamy ⎡ 2.76⎤ = 3, natomiast dla -2.76 mamy ⎡− 2.76⎤ = −2 . W programie MathCad funkcja ta
występuje pod nazwą ceil(•).
Zapis zmiennopozycyjny liczb rzeczywistych nazywany jest również zapisem wykładniczym lub naukowym i poza komputerami wykorzystywany jest on również w kalkulato-
rach.
Podobnie jak w zapisie stałopozycyjnym, w zmiennopozycyjnym zapisie liczba rzeczywista przedstawiana jest za pomocą słowa maszynowego podzielonego na trzy części: (i) t
cyfrowa grupa zawiera cyfry mantysy; (ii) e cyfrowa grupa zawierająca cyfry cechy; (iii) znak
liczby (rysunek 2.3).
Słowo maszynowe
Nr cyfry
n
n-1
n-2
…
t+1
t
t-1
t-2
…
1
0
Cyfra
dn
dn-1
dn-2
…
dt+1
dt
dt-1
dt-2
…
d1
d0
Bit znaku
e cyfr cechy c
t cyfr mantysy m
Cyfra
±
ce-1
ce-2
…
c1
c0
m-1
m-2
…
m-t+1
m-t
Mnożnik
-
10e-1
10e-2
…
101
100
10-1
10-2
…
10-t+1
10-t
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 7
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 8 z 246
Rysunek 2.3. Interpretacja poszczególnych cyfr liczby rzeczywistej zapisanej w zmiennopozycyjnym reprezentacji maszynowej.
Zgodnie z przedstawioną na rysunku 2.3 interpretacją, w zapisie tym t cyfr mantysy
traktowane jest jako część ułamkowa liczby. Druga grupa, tworząca wykładnik c (cechę liczby), jest interpretowana jako liczba całkowita. Zakres liczb zapisywanych jako cecha c decyduje o zakresie liczb rzeczywistych dopuszczalnych w danej maszynie. Natomiast liczba cyfr
mantysy decyduje o precyzji, z jaką zapamiętywana jest liczba. Cyfry te traktuje się jako tak
zwane cyfry znaczące liczby. W przypadku programu MathCad mantysa zapamiętywana jest z
dokładnością 14 – 15 cyfr dziesiętnych, natomiast liczby rzeczywiste mogą być z zakresu I =
(-10307, 10307).
Przykład 2.2.
Korzystając z zmiennopozycyjnej reprezentacji liczb rzeczywistych przedstawić następujące liczby 5420, 0.0038126 oraz 0.000054114. Założyć, że na cechę przewidujemy e = 2
cyfry, a na mantysę t = 4 cyfry.
Rozwiązanie
Zgodnie z zmiennopozycyjną konwencją zapisu liczby rzeczywistej liczby te przedstawione zostaną w sposób następujący:
Tabela 2.5. Interpretacja liczb rzeczywistych z przykładu 2.2 podanych w zapisie zmiennopozycyjnym.
Liczba w zapisie
Cecha
Mantysa
Reszta
Stałopozycyjnym
Naukowym
c1
c0
m-1
m-2
m-3
m-4
-
5420
0.540*1004
0
4
5
4
2
0
0
0.0038126
0.38126*10-2
-
2
3
8
1
2
6
0.000054114 0.54114*10-4
-
4
5
4
1
1
4
Jak z zapisu przedstawionego w tabeli 2.5 wynika, wszystkie interesujące nas liczby zostaną zapisane z dokładnością 4 cyfr znaczących.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 8
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 9 z 246
■
Z uwagi na ograniczoną wielkość pamięci w komputerze, liczba bitów przeznaczonych
na zapisanie w pamięci komputera cechy i mantysy jest skończona i stosunkowo niewielka.,
Wynika stąd, że w pamięci komputera nie można zapisać wszystkich liczb rzeczywistych,
których jest nieskończenie wiele, a jedynie ich skończony podzbiór. Liczby te nazywa się
reprezentacjami maszynowymi liczb zmiennopozycyjnych (ang. floating-point representation). Powstaje pytanie, co zrobić, aby ten skończony zbiór reprezentacji maszynowych
użyć do zapisu wszystkich liczb rzeczywistych.
Chcąc przybliżyć ten problem przyjmijmy, że mamy zmiennopozycyjną liczbę rzeczywistą:
y 10 = ±0.d1 d 2 L d t d t +1 L × 10 n ,
1 ≤ d1 ≤ 9,
0 ≤ d i ≤ 9,
i = 2,3, K .
(2.7)
Załóżmy, że wykładnik potęgowy n mieści się w zakresie przewidzianym dla cechy reprezentacji maszynowej liczby. Natomiast liczba cyfr w rozwinięciu mantysy jest zdecydowanie za duża. Celem uzyskania reprezentacji maszynowej liczby y należy pozbyć się nadmiarowych cyfr. Uzyskać to można na dwa sposoby. W pierwszym przypadku po prostu odrzucamy zbyteczne cyfry uzyskując w ten sposób jej reprezentację maszynową:
~
y 10 = ±0.d 1 d 2 L d t × 10 n
(2.8)
Sposób ten nazywa się urywaniem (ang. chopping) i jest wykorzystywany przez większość kompilatorów FORTRANU.
Drugim sposobem jest zaokrąglenie liczby zgodnie z powszechnie znanymi regułami.
Formalnie zaokrąglenie liczby przeprowadzić można na dwa sposoby. W pierwszym dodajemy 5×10-(t+1) do zaokrąglanej liczby y (czyli dodajemy 5 do bezpośrednio następnej cyfry w
stosunku do cyfry, która ma zostać), a następnie urywamy wszystkie cyfry począwszy od
t+1. Drugi sposób postępowania wygląda następująco: jeśli t+1 cyfra jest większa lub równa
od 5 (dt+1 ≥ 5), to dodajemy 1 do cyfry dt znajdującej się na ostatniej pozycji mantysy t, jeśli
natomiast dt+1 < 5 to nic nie zmieniamy, następnie od uzyskanej w ten sposób liczby urywamy zbyteczne cyfry. Ten sposób nazywa się zaokrąglaniem liczby (ang. rounding) i można
je formalnie zapisać w sposób następujący:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 9
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 10 z 246
⎧⎪0.d1 d 2 L d t × 10 n ,
jesli 0 ≤ d t +1 ≤ 4,
rd ( y ) = ⎨
n
−t
⎪⎩ 0.d1 d 2 L d t + 10 × 10 , jesli d t +1 ≥ 5,
(
)
⎧⎪0.d1 d 2 L d t × 10 n ,
=⎨
⎪⎩(0.d1 d 2 L (d t + 1)) × 10 n ,
(2.9)
jesli 0 ≤ d t +1 ≤ 4,
jesli d t +1 ≥ 5.
Przykład 2.3.
Stosując różne sposoby zaokrąglania liczb, podać w pięciocyfrowej zmiennopozycyjnej
reprezentacji maszynowej liczbę π.
Rozwiązanie
Liczba π posiada nieskończone rozwinięcie dziesiętne:
π = 3.14159265K = 0.314159265K × 101
Stosując urywanie nadmiarowych cyfr uzyskujemy jej reprezentację maszynową:
π~ = 0.31415 × 101 = 3.1415
Natomiast stosując zaokrąglenie otrzymamy:
(
)
rd (π ) = 0.314159264K + 5 × 10 −(5+1) × 101 = 0.314164264 K × 101
urywanie
= 3.1416
lub
rd (π ) = (0.314159264K + 0.00001) × 101 = 0.314169264K × 101
urywanie
= 3.1416
W przypadku zaokrąglania, ponieważ szósta cyfra rozwinięcia dziesiętnego wynosi 9,
to w zmiennopozycyjnej reprezentacji maszynowej do piątej cyfry dodaliśmy jeden. Porównując uzyskane reprezentacje maszynowe stwierdzić należy, że w zależności od zastosowanej
metody otrzymujemy różne liczby.
■
Jak z powyższego przykładu wynika, niezależnie od zastosowanej metody otrzymywania reprezentacji maszynowej liczby zmiennopozycyjnej, liczba ta obarczona jest pewnym
błędem zaokrąglenia (ang. round-off error). Następująca definicja pozwala na określenie
wielkości obserwowanego błędu.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 10
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 11 z 246
Definicja 2.1.
Niech liczba y* będzie przybliżeniem liczby y. Różnicę
δ = y − y*
(2.10)
nazywamy błędem bezwzględnym przybliżenia y* liczby y. Natomiast iloraz
ε=
δ
y
=
y − y*
y
,
gdzie y ≠ 0
(2.11)
nazywamy błędem względnym.
■
Przykład 2.4.
Dane są pewne liczby y oraz ich zmiennopozycyjne przybliżenia y* (tabela 2.6). Porównać odpowiadające im błędy bezwzględne oraz względne
Rozwiązanie
Odpowiednie błędy bezwzględne oraz względne obliczamy ze wzorów (2.10) oraz
(2.11). Wyniki obliczeń podano w tabeli 2.6.
Tabela 2.6. Błąd bezwzględny oraz błąd względny zmiennopozycyjnego przybliżenia różnych
liczb.
y
y*
δ = y − y*
0.3000×101
0.3100×101
0.1
0.3333×10-1
0.3000×10-3
0.3100×10-3
0.1×10-4
0.3333×10-1
0.3000×104
0.3100×104
0.1×103
0.3333×10-1
ε =
y − y*
y
Porównując poszczególne błędy zauważyć należy, że błąd bezwzględny zmienia się
wraz z wielkością (wartością bezwzględną) liczb, dla których był wyznaczony. Można tu zauważyć pełną zgodność rzędu wielkości tego błędu z rzędem wielkości liczb. W przypadku
błędów względnych nie zależy on od rzędu wielkości przybliżanej liczby i w prezentowanym
przykładzie jest on stały.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 11
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 12 z 246
■
Przykład 2.4 pokazuje, że błędy bezwzględne przybliżenia bardzo silnie zależą od rzędu
wielkości zaokrąglanej liczby. W tej sytuacji, ponieważ wielkość błędów bezwzględnych w
silnym stopniu zależy od rzędu wielkości zaokrąglanej liczby, natomiast błędy względne nie
zależą od wielkości zaokrąglanych liczb, to w praktyce do oceny błędów najczęściej stosuje
się błędy względne. Należy jednakże pamiętać o tym, że do wyznaczenia wartości błędu
względnego konieczna jest znajomość wartości błędu bezwzględnego.
Prowadząc obliczenia maszynowe, bardzo ważną kwestią jest oszacowanie błędów, jakie powstają przy zaokrąglaniu liczb. Wziąwszy pod uwagę różne sposoby uzyskiwania liczb
w reprezentacji maszynowej oczekiwać należy, że liczby te obarczone będą błędami o różnej
wielkości.
Załóżmy, że dana jest k cyfrowa liczba rzeczywista, którą w zapisie zmiennopozycyjnym przedstawić można w następujący sposób:
⎛ k
⎞
x 10 = ±0.d 1 d 2 L d t d t +1 L d k × 10 n = ± ⎜ ∑ d i 10 −i ⎟ × 10 n .
⎝ i =1
⎠
(2.12)
Naszym celem jest podanie jej t cyfrowej reprezentacji maszynowej. Reprezentację maszynową zmiennopozycyjnej liczby rzeczywistej fl(x) zapisaną z t – cyfrową mantysą uzyskać
można na drodze albo odrywanie zbytecznych cyfr:
( )
⎛ t
⎞
fl x 10 = ~
x = ±0.d1d 2 L d t d t +1 L d t × 10 n = ± ⎜ ∑ d i 10 −i ⎟ × 10 n ,
⎝ i =1
⎠
(2.13)
albo poprzez zaokrąglenie:
( )
( )
fl x 10 = rd x 10 =
⎧⎪± 0.d1 d 2 L d t d t +1 L d t × 10 n ,
=⎨
⎪⎩± 0.d1 d 2 L d t d t +1 L d t + 10 −t × 10 n ,
⎧ ⎛ t
−i ⎞
n
⎪± ⎜ ∑ d i 10 ⎟ × 10 ,
⎠
⎪ ⎝ i =1
=⎨
t
⎪± ⎛⎜ d 10 −i + 10 −t ⎞⎟ × 10 n ,
∑
⎪ ⎝ i =1 i
⎠
⎩
(
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
)
Strona 12
jesli 0 ≤ d t +1 ≤ 4,
jesli d t +1≥ 5,
(2.14)
jesli 0 ≤ d t +1 ≤ 4,
jesli d t +1≥ 5.
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 13 z 246
W jednym i drugim przypadku popełniany jest błąd zaokrąglenia związany z pominięciem części cyfr rozwinięcia dziesiętnego. Oszacowanie tego błędu zależeć będzie od metody,
jaką zastosujemy celem uzyskania reprezentacji maszynowej.
W przypadku zastosowania metody odrywania otrzymamy następujące oszacowanie
błędu bezwzględnego:
δ ( fl ( x )) = x − fl ( x ) = x − ~x =
= 0.d 1 d 2 L d t d t +1 L d k × 10 n − 0.d1 d 2 L d t × 10 n =
⎛ k
⎞
⎛ t
⎞
= ⎜ ∑ d i 10 −i ⎟ × 10 n − ⎜ ∑ d i 10 −i ⎟ × 10 n =
⎝ i =1
⎠
⎝ i =1
⎠
⎛ k
⎞
= ⎜ ∑ d i 10 −i ⎟ × 10 n =
⎝ i =t +1
⎠
=
k
∑ d 10
i = t +1
−i
i
× 10 n =
d t +1 × 10 −(t +1) + d t + 2 × 10 −(t + 2 ) + K +
+ d k −1 × 10
− ( k −1)
+ d k × 10
−(k )
(2.15)
× 10 n =
⎛ d t +1 × 10 −1 + d t + 2 × 10 − 2 + K + ⎞
⎟ × 10 −t × 10 n =
=⎜
⎜ + d × 10 −(k −t +1) + d × 10 −(k −t ) ⎟
k
⎝ k −1
⎠
= 0.d t +1 d t + 2 L d k −1 d k × 10 −t × 10 n ≤ 1 × 10 −t × 10 n = 1 × 10 n −t .
Natomiast stosując metodę zaokrąglenia przeanalizować należy dwa możliwe przypadki
w zależności od tego czy zaokrąglenie prowadzić będzie do powstania liczby mniejszej czy
większej od danej liczby.
W pierwszym przypadku, gdy pierwsza odrzucana cyfra jest mniejsza od 4
( 0 ≤ d t +1 ≤ 4 ) otrzymamy następujące oszacowanie błędu bezwzględnego:
δ ( fl ( x )) = x − fl ( x ) = x − rd ( x ) =
= 0.d1 d 2 L d t d t +1 L d k × 10 n − 0.d1 d 2 L d t × 10 n =
⎛ k
⎞
⎛ t
⎞
= ⎜ ∑ d i 10 −i ⎟ × 10 n − ⎜ ∑ d i 10 −i ⎟ × 10 n =
⎝ i =1
⎠
⎝ i =1
⎠
⎛ k
⎞
= ⎜ ∑ d i 10 −i ⎟ × 10 n =
⎝ i =t +1
⎠
k
∑ d 10
i =t +1
i
−i
(2.16)
× 10 n =
= 0.d t +1 d t + 2 L d k −1 d k × 10 −t × 10 n ≤ 0.5 × 10 −t × 10 n = 0.5 × 10 n −t .
W drugim przypadku, gdy d t +1 ≥ 5 uzyskamy identyczne oszacowanie. Stąd dla zaokrąglenia liczby otrzymamy następujące oszacowanie błędu bezwzględnego:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 13
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 14 z 246
δ ( fl ( x )) = x − fl ( x ) = x − rd ( x ) ≤ 0.5 × 10 − t × 10 n = 0.5 × 10 n −t .
(2.17)
Wykorzystując powyższe oszacowania błędów bezwzględnych znaleźć można oszacowania błędów względnych reprezentacji maszynowej liczby zmiennopozycyjnej fl(x). W
przypadku liczby maszynowej uzyskanej na drodze urywania otrzymamy:
ε ( fl ( x )) =
=
≤
x−~
x
x
=
0.d1 d 2 L d t d t +1 L × 10 n − 0.d1 d 2 L d t × 10 n
0.d1 d 2 L d t d t +1 L × 10 n
0.d t +1 d t + 2 L × 10 n −t
0.d1 d 2 L d t d t +1 L × 10
n
=
0.d t +1 d t + 2 L
0.d1 d 2 L d t d t +1 L
=
× 10 −t ≤
(2.18)
1
× 10 −t = 10 × 10 −t = 10 −t +1.
0.1
Ponieważ pierwsza cyfra przybliżanej liczby d1 ≠ 0, to minimalna wartość mianownika
wynosi 0.1. Natomiast licznik ograniczony jest z góry przez 1. Konsekwencją tych dwóch
ograniczeń jest uzyskane oszacowanie.
Przeprowadzając podobne rozumowanie pokazać można, że w przypadku zaokrąglania
liczb błąd względny reprezentacji maszynowej liczby zmiennopozycyjnej wynosi:
ε=
y − rd ( y )
y
≤
0.5
× 10 − t = 0.5 × 10 − t +1 = 5 × 10 − t .
0 .1
(2.19)
Jak stąd wynika błąd reprezentacji maszynowej liczby uzyskanej na drodze zaokrąglenia jest dwukrotnie mniejszy od błędu, jakim obarczona jest reprezentacja maszynowa uzyskana na drodze odrywania zbytecznych cyfr.
Należy w tym momencie jeszcze raz mocno podkreślić fakt, że błąd względny zmiennopozycyjnej reprezentacji maszynowej dowolnej liczby rzeczywistej nie zależy od rzędu
wielkości tej liczby, a jedynie od liczby cyfr w reprezentacji jej mantysy. Zastosowanie wykładniczego sposobu zapisu oznacza, że te same liczby (mantysy) służyć mogą do opisu dowolnego przedziału [0.1, 1], [1, 10], [10, 100], ..., [10n, 10n+1] dla dowolnego całkowitego n
będącego cechą zapisywanej liczby.
Przykład 2.5.
Dana jest w systemie dziesiętnym liczba x = 0.4568956. Przedstawić jej reprezentację
maszynową uzyskaną na drodze odrzucenia zbytecznych cyfr oraz poprzez zaokrąglenie. Za-
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 14
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 15 z 246
łożyć, że mantysa zapisywana jest z dokładnością pięciu cyfr dziesiętnych. Podać oszacowania błędów bezwzględnych i względnych.
Rozwiązanie
Zgodnie z wzorami (2.18) oraz (2.19) dla pięciocyfrowej reprezentacji maszynowej
oszacowanie błędu bezwzględnego wynosi 1×10-5 oraz 0.5×10-5 odpowiednio dla metody
urywania i metody zaokrąglenia. Odpowiednie oszacowania obłędów względnych wynoszą
natomiast 10×10-5 oraz 5×10-5.
Tabela 2.7. Porównanie rzeczywistych błędów bezwzględnych oraz względnych w dwóch
sposobach otrzymywania pięciocyfrowej reprezentacji maszynowej zmiennopozycyjnej liczby rzeczywistej. Uwaga: zapis 1E-5 oznacza 1×10-5.
fl ( x ) = ~
x
fl ( x ) = rd ( x )
Reprezentacja maszynowa
0.45689
0.45690
Błąd bezwzględny
0.56E-5
0.44E-5
Błąd względny
1.226E-5
0.963E-5
Jak z przestawionego w tabeli 2.7 porównania błędów wynika obliczone rzeczywiste
błędy reprezentacji maszynowych są mniejsze od ich oszacowań wynikających z liczby cyfr
w mantysie.
■
W analizie działań maszynowych na liczbach zmiennopozycyjnych użyteczna jest następująca definicja mówiąca o sposobie potraktowania reprezentacji maszynowej liczb:
Definicja 2.2.
Reprezentację maszynową dowolnej liczby fl(y) potraktować możemy jako dokładną
liczbę y zaburzoną niewielkim błędem względnym ε, co zapisujemy:
fl ( y ) = y (1 + ε )
(2.20)
■
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 15
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 16 z 246
Ważnym i często stosowanym pojęciem jest tak zwana liczba cyfr znaczących albo
istotnych. Wiąże się ona z oszacowaniem błędu względnego, jakim obarczona jest reprezen-
tacja maszynowa liczby zmiennopozycyjnej.
Definicja 2.3.
Mówimy, że liczba y* przybliża liczbę y z dokładnością t cyfr znaczących (istotnych),
jeżeli t jest największą nieujemną liczbą całkowitą, dla której zachodzi następująca relacja:
y − y∗
y
< 5 × 10 − t
(2.21)
■
Z powyższej definicji wynika, że w przypadku zastosowania metody zaokrąglania
otrzymywania reprezentacji maszynowej liczb rzeczywistych, rząd błędu względnego tak
uzyskanej liczby wskazuje na liczbę cyfr znaczących.
Przykład 2.6.
Dane są następujące liczby: 0.1, 0.5, 1.0, 5.0, 100, 500, 1000, 5000, 9990, 10000. Wyznaczyć, w których znajdują się ich przybliżenia z czterema cyframi znaczącymi.
Rozwiązanie
Z definicji 2.3. wynika (równanie 2.21), że przybliżenie z czterema cyframi znaczącymi
y* danej liczby y spełniać powinno następującą zależność:
y∗ − y
y
< 5 × 10 − 4
Z wyrażenia tego obliczyć można błąd bezwzględny, jakim obarczone będą kolejne
przybliżenia oraz przedział, w jakim ono się znajduje. Wyniki tych obliczeń podano w tabeli
2.8.
Tabela 2.8. Błąd maksymalny oraz przedziały, w których znajdują się ich czterocyfrowe
przybliżenia.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 16
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 17 z 246
p
max p − p ∗
Przedział
0.1
0.00005
0.09995<p*<0.10005
0.5
0.00025
0.49925<p*<0.50025
1
0.0005
0.9995<p*<1.0005
5
0.0025
4.9975<p*<5.0025
100
0.05
99.95<p*<100.05
500
0.25
499.75<p*<500.25
1000
0.5
999.5<p*<1000.5
5000
2.5
4997.5<p*<5002.5
9990
4.995
9985.005<p*<9994.995
10000
5.0
9995<p*<10005
Intuicyjnie cyfry znaczące interpretujemy jako cyfry dokładne. Pokazane w tabeli 2.8
wyniki wskazują, że nie w każdym przypadku nasza intuicja podpowiada nam poprawne rozumienie tej wielkości. Jedynie dla kolejnych całkowitych potęg liczby 10 reprezentacja z
czterema cyframi znaczącymi odpowiada naszej intuicji. W pozostałych przypadkach przedziały, w jakich znajduje się oszacowanie liczby są zdecydowanie większe od oczekiwań.
■
2.1.2. Dwójkowy system pozycyjny
W pozycyjnym układzie dwójkowym dowolna liczba przedstawiona jest jako ciąg cyfr
0 (zero) oraz 1 (jeden). Wartość, którą reprezentuje dana cyfra w ciągu znaków tworzących
liczbę w zapisie dwójkowym zależy od pozycji, na jakiej została ona zapisana. Ponieważ podstawą tego układu jest liczba 2, to wartości poszczególnych cyfr obliczamy jako jej wielokrotności. Oznacza to, że każdej cyfrze n – cyfrowej liczby naturalnej x przedstawionej w
zapisie dwójkowym przypisujemy odpowiednią wartość w następujący sposób:
x 2 = c n −1 c n − 2 K c1 c 0 c n −1 2 = 2 n −1 + c n − 2 2 n − 2 + K + c1 2 1 + c 0 2 0 = d 10 .
(2.22)
gdzie cn−1 , cn− 2 ,K , c1 , c0 są cyframi 0 lub 1.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 17
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 18 z 246
Interpretację graficzną tego sposobu postępowania przedstawiono na rysunku 2.4.
Słowo maszynowe
Nr bitu
n-1
n-2
…
2
1
0
Bit
dn-1
dn-2
…
d2
d1
d0
Mnożnik
2n-1
2n-2
…
22 = 4
21 = 2
20 = 1
Rysunek 2.4. Interpretacja wartości liczby naturalnej zapisanej w dwójkowym układzie pozycyjnym
W podobny sposób przedstawiamy w postaci rozwinięcia dwójkowego dodatnie ułamki
właściwe (rysunek 2.5).
Słowo maszynowe
Nr bitu
n-1
n-2
…
2
1
0
Bit
d-1
d-2
d-3
…
d-n+1
d-n
2-3 = 1
8
…
2-n+1
2-n
Mnożnik
2-1 = 1
2
2-2 = 1
4
Rysunek 2.5. Interpretacja wartości ułamka właściwego zapisanego w dwójkowym układzie
pozycyjnym.
W tym przypadku chcąc otrzymać wartość dziesiętną rozwinięcia dwójkowego, poszczególne cyfry rozwinięcia należy mnożyć przez dwa podniesione do ujemnych potęg. Wykładnik potęgowy wynika z pozycji, na jakiej znajduje się dana cyfra. Jak stąd wynika wartość dziesiętną ułamka właściwego zapisanego w układzie binarnym obliczamy z następującej
zależności:
x 2 = c −1c − 2 L c − n
n
2
= c −1 2 −1 + c − 2 2 − 2 + K + c − n 2 − n = ∑ c −i 2 −i = x 10 ,
(2.23)
i =1
gdzie c−1 , c−2 ,K są cyframi 0 lub 1.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 18
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 19 z 246
Przykład 2.7.
Obliczyć wartość dziesiętną liczby całkowitej 100101 oraz ułamka właściwego 10101
zapisanych w systemie dwójkowym.
Rozwiązanie
Celem obliczenia wartości dziesiętnej liczby zapisanej w układzie dwójkowym w zależności od tego czy jest to liczba całkowita czy ułamek właściwy korzystamy odpowiednio z
wzoru (2.22) lub (2.23) otrzymując:
dla liczby całkowitej
100101 2 = 1 ⋅ 2 5 + 0 ⋅ 2 4 + 0 ⋅ 2 3 + 1 ⋅ 2 2 + 0 ⋅ 21 + 1 ⋅ 2 0 = 37 10
dla ułamka właściwego
1001012 = 1 ⋅ 2 −1 + 0 ⋅ 2 −2 + 1 ⋅ 2 −3 + 0 ⋅ 2 −4 + 1 ⋅ 2 −5 = 0.65625 10 .
■
Jak z powyższego przykładu wynika, to czy dany ciąg cyfr 0 i 1 traktować należy jako
zapis liczby naturalnej czy też ułamka właściwego zależy tylko i wyłącznie od przyjętej przez
nas konwencji zapisu.
Należy w tym miejscu zwrócić uwagę na to, że z skończoności rozwinięcia dziesiętnego
ułamka właściwego nie wynika skończoność rozwinięcia dwójkowego tego ułamka. Np. ułamek dziesiętny 0.35 ma rozwinięcie dwójkowe w postaci 0101100110011... . Innym przykładem ułamka o nieskończonym rozwinięciu dwójkowym jest 0.2. Oznacza to powstanie dodatkowego błędu wynikającego z zastosowania binarnej reprezentacji maszynowej. Musimy
oczekiwać, że obok błędu zaokrągleń wynikającego z t – bitowego słowa maszynowego pojawia się błąd związany z nieskończonym rozwinięciem dwójkowym.
Chcąc zapisać w układzie binarnym liczby rzeczywiste złożone z części całkowitej i
ułamkowej zastosować możemy podobnie jak w przypadku liczb w układzie dziesiętnym zapis stałopozycyjny oraz zmiennopozycyjny. W przypadku stałopozycyjnej reprezentacji
liczby rzeczywistej słowo maszynowe dzielimy na trzy części: jedną zawierającą bity części
całkowitej, drugą zawierającą bity części ułamkowej oraz w trzeciej części kodowany jest
znak liczby (rysunek 2.6).
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 19
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 20 z 246
Słowo maszynowe
Nr bitu
m+1
m
m-1
…
k+2 k+1
k
k-1
…
1
0
Bit
dm+1
dm
dm-1
…
dk+2 dk+1
dk
dk -1
…
d1
d0
Znak
Mnożnik
Część całkowita
Część ułamkowa
cn+1
cn
cn-1
…
c1
c0
c-1
c-2
…
s
2n
2n-1
…
21
20
2-1
2-2
-k+1
2-k
… 2
c-k+1
c-k
Rysunek 2.6. Dwójkowy zapis liczby rzeczywistej w reprezentacji stałopozycyjnej wraz z
interpretacją wartości poszczególnych bitów.
W stałopozycyjnym zapisie liczb rzeczywistych przyjmuje się, że część całkowita liczby rzeczywistej zajmuje łącznie z bitem znaku n+1 bitów natomiast część ułamkowa k bitów.
Wartość dziesiętną jej binarnej reprezentacji obliczamy w sposób następujący:
x 2 = c n +1c n c n −1 K c1c 0 c −1 K c − k +1c − k
2
=
⎞
⎛ c n ⋅ 2 n + c n −1 ⋅ 2 n −1 + K
⎟
⎜
= s ⋅ ⎜ + c1 ⋅ 21 + c0 ⋅ 2 0 + c −1 ⋅ 2 −1 + K⎟ =
⎟
⎜
⎟
⎜ + c − k +1 ⋅ 2 − k +1 + c − k ⋅ 2 − k
⎠
⎝
k
⎛ n
⎞
= s ⋅ ⎜⎜ ∑ ci 2 i + ∑ c − j 2 − j ⎟⎟ = x 10 .
j =1
⎝ i =0
⎠
(2.24)
gdzie: cn+1 - jest bitem znaku; cn cn−1 K c1c0 - są kolejnymi cyframi binarnego rozwinięcia części całkowitej liczby; c−1 K c− k +1c− k - są kolejnymi cyframi binarnego rozwinięcia części
ułamkowej liczby.
Znak liczby kodować można na różne sposoby. Najprościej w tak zwanym kodzie znak
– moduł prosty przyjmuje się, że jeżeli bit znaku ustawiony jest na 1, to liczba jest ujemna
natomiast, gdy bit znaku ustawiony jest na 0 to liczba jest dodatnia. W tym systemie do nadania liczbie odpowiedniego znaku służyć może zależność:
⎧− 1,
s = −2 ⋅ c n +1 + 1 = ⎨
⎩ 1,
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
gdy c n +1 = 1,
gdy c n +1 = 0.
Strona 20
(2.25)
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 21 z 246
Przykład 2.8.
Załóżmy, że na część całkowitą i ułamkową liczby przeznaczono po osiem bitów.
Przedstawić w rozwinięciu binarnym następujące liczby: 12.625 oraz –127.3125
Rozwiązanie
Dodając z lewej strony bit znaku obie liczby zapisać można w sposób następujący:
12.625 10 = 0 00001100 10100000 2
− 127.3125 10 = 1 01111111 01010000 2
Celem wyraźnego podkreślenia, która część liczby odpowiada poszczególnym częściom
w powyższym zapisie poszczególne części liczby binarnej oddzielono odstępami. Pierwsza
cyfra jest bitem znaku. Ponieważ w pierwszym przypadku szukaliśmy rozwinięcia dwójkowego liczby dodatniej, na pozycji tej znajduje się 0. W przypadku drugiej liczby, która jest
ujemna bit ten ustawiony jest na 1. Następny ciąg bitów jest częścią całkowitą zapisywanej
liczby. Trzeci ciąg bitów jest częścią ułamkową szukanego rozwinięcia dwójkowego.
■
Jak już wcześniej wspomniano, stałopozycyjna reprezentacja rzadko jest stosowana do
zapisu liczb rzeczywistych. Najczęściej tego typu reprezentację stosuje się do zapisu liczb
typu całkowitego. Reprezentacja liczb całkowitych jest dokładna o ile są one z zakresu [2d+1, 2d-1] gdzie d jest liczbą cyfr stosowanych w zapisie dwójkowym. Jeżeli liczba całkowita jest większa i nie mieści się w podanym zakresie, to bardzo często przeprowadzana jest
jej automatyczna konwersja do liczby rzeczywistej. Jeśli założyć, że liczba bitów, na których
zapisywana jest liczba, łącznie z bitem znaku, wynosi d=16, a taka długość słowa maszynowego stosowana jest często w komputerach osobistych, to w komputerze kodować możemy
liczby całkowite z zakresu [-32767, 32767].
Innym sposobem zapisu liczb jest tak zwana reprezentacja zmiennopozycyjna. W tym
przypadku dowolną liczbę rzeczywistą zapisujemy również w trzech blokach bitów, z tym, że
w jednym z nich jest część ułamkowa (mantysa), w drugim natomiast wykładnik potęgowy
(cecha) (rysunek 2.7). W zapisie tym dowolną liczbę rzeczywistą x≠0 możemy przedstawić w
następującej znormalizowanej postaci:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 21
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 22 z 246
x 2 = sgn( x ) ⋅ m ⋅ 2 c ,
(2.26)
gdzie mantysa m jest liczbą z przedziału
1
≤ m < 1 , natomiast cecha c = ⎡ log 2 x ⎤ jest naj2
mniejszą liczbą całkowitą większą od logarytmu o podstawie 2 z x.
Słowo maszynowe
Nr bitu
n
n-1
n-2
…
t+1
t
t-1
t-2
…
1
0
Bit
dn
dn-1
dn-2
…
dt+1
dt
dt-1
dt -2
…
d1
d0
Bit znaku
e cyfr cechy c
t cyfr mantysy m
Bit
ce
ce-1
ce-2
…
c1
c0
m-1
m-2
…
m-t+1
m-t
Mnożnik
Znak
2e
2e-2
…
21
20
2-1
2-2
…
2-t+1
2-t
Rysunek 2.7. Reprezentacja binarnej liczby rzeczywistej w zmiennopozycyjnym zapisie maszynowym.
Porównując zmiennopozycyjny zapis liczb w układzie dziesiętnym i dwójkowym należy zwrócić uwagę na dwie istotne różnice. W przypadku układu dziesiętnego mantysa
m∈[0.1, 1) i najmniejsza jej wartość wynosi m = 0.1, natomiast w układzie dwójkowym
m∈[½, 1) i najmniejsza wartość mantysy wynosi 0.5. Druga różnica związana jest z podstawą
stosowanego układu pozycyjnego i wpływa na wartość czynnika skalującego, który w przypadku zapisu dziesiętnego wynosi 10n w binarnym natomiast 2n. Ponieważ nie można znaleźć
całkowitego wykładnika potęgowego takiego, że dwa podniesione do tej potęgi wynosiłoby
dokładnie 10, to należy oczekiwać, że wiele liczb mających skończone rozwinięcie dziesiętne
nie ma skończonego rozwinięcia dwójkowego.
Minimalna wartość mantysy w przypadku układu dziesiętnego jest intuicyjnie oczywista. Na pierwszym miejscu po kropce dziesiętnej ma wystąpić cyfra różna od zera, a ponieważ
najmniejszą cyfrą jest 1, to najmniejsza mantysa przyjmie wartość 0.1. W przypadku układu
dwójkowego pierwszy bit części ułamkowej też musi być różny od zera, czyli przyjąć wartość
1. Jednakże przy obliczaniu wartości tej cyfry w układzie dziesiętnym należy pomnożyć ją
przez 2-1, co oznacza, że jego wartość dziesiętna wynosi 0.5.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 22
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 23 z 246
Z przedstawionymi tutaj sposobami reprezentacji liczb w komputerze związane są pewne niedogodności. Podstawowym problemem jest to, że na mantysę przeznaczona jest skończona liczba bitów - t. Tymczasem, najczęściej dwójkowe rozwinięcie mantysy wymaga albo
bardzo dużej liczby bitów, albo jest nieskończone, co powoduje, że z mantysy zapamiętywane
jest tylko t początkowych cyfr dwójkowych. Dokładniej mówiąc, zakładamy, że mantysa jest
poprawnie zaokrąglona do t cyfr. Oznacza to, że w pamięci komputera zamiast dokładnej
liczby x zapisana zostanie jej wartość przybliżona określana mianem reprezentacji maszynowej liczby zmiennopozycyjnej x, którą zapisujemy w postaci:
( )
fl x 2 = sign( x ) ⋅ m ⋅ 2 c ,
(2.27)
gdzie m jest reprezentacją maszynową mantysy m uzyskaną przez obcięcie lub zaokrąglenie
jej do t cyfr.
Załóżmy, że zmiennopozycyjna liczba rzeczywista x zapisywana jest w układzie dwójkowym przy pomocy k cyfr. Wtedy jej reprezentacja maszynowa będzie miała postać:
⎛ k
⎞
fl x 2 = sign( x ) × d1 d 2 L d t d t +1 L d k × 2 n = sign( x ) × ⎜ ∑ d i 2 −i ⎟ × 2 n .
⎝ i =1
⎠
( )
(2.28)
Stosując metodę urywania t - cyfrową reprezentację maszynową fl(x) zmiennopozycyjnej liczby rzeczywistej zapisanej w układzie dwójkowym otrzymujemy przez odrzucenie zbytecznych cyfr od t+1 cyfry począwszy
( )
(
)
fl x 2 = fl sign( x ) × d1 d 2 L d t d t +1 L d k × 2 n = ~
x2=
⎛ t
⎞
= sign( x ) × d1 d 2 L d t × 2 n = sign( x ) × ⎜ ∑ d i 2 −i ⎟ × 2 n = x 10 .
⎝ i =1
⎠
(2.29)
W przypadku zastosowania metody zaokrąglania reprezentacja maszynowa wynika z
zależności:
( )
(
)
( )
fl x 2 = fl sign( x ) × d1 d 2 L d t d t +1 L d k × 2 n = rd x 2 =
= sign( x ) × d1 d 2 L (d t + d t +1 ) × 2 n =
(2.30)
⎛ t
⎞
= sign( x ) × ⎜ ∑ d i 2 −i + d t +1 × 2 −t ⎟ × 2 n = x 10 .
⎝ i =1
⎠
Podobnie jak w przypadku liczb zapisywanych w układzie dziesiętnym również dla
liczb zapisywanych w układzie dwójkowym oszacować można błędy bezwzględny oraz
względny ich reprezentacji maszynowych.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 23
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 24 z 246
Załóżmy dla uproszczenia rozważań, że reprezentacja maszynowa uzyskana jest na drodze zaokrąglenia. W takim przypadku uzyskamy następujące oszacowanie błędu bezwzględnego
δ [ fl ( x )] = x − fl (x ) = x − rd ( x ) =
= 0.d1 d 2 L d t d t +1 L d k × 2 n − 0.d1 d 2 L (d t + d t +1 ) × 2 n =
⎛ t
⎞
⎛ k
⎞
= ⎜ ∑ d i × 2 −i ⎟ × 2 n − ⎜ ∑ d i × 2 −i + d t +1 × 2 −t ⎟ × 2 n =
⎝ i =1
⎠
⎝ i =1
⎠
(2.31)
⎛ t
⎞
⎛ k
−i ⎞
= ⎜ ∑ d i × 2 ⎟ − ⎜ ∑ d i × 2 −i + d t +1 × 2 −t ⎟ × 2 n ≤
⎠
⎝ i =1
⎠ ⎝ i =1
(
)
≤ d t +1 × 2 −t × 2 n ≤ 12 × 2 −t × 2 n.
Korzystając z oszacowania błędu bezwzględnego oraz stąd, że w przypadku rozwinięcia
dwójkowego, mantysa liczby różnej od zera spełnia warunek 1 2 ≤ m < 1, otrzymamy następujące oszacowanie błędu względnego reprezentacji maszynowej liczby zmiennopozycyjnej:
1 −t n
1 −t n
⋅2 ⋅2
⋅2 ⋅2
x − fl ( x )
2
ε [ fl ( x )] =
≤ 2
≤
= 2 −t .
n
1
x
sign( x ) ⋅ m ⋅ 2
⋅ 2n
2
(2.32)
gdzie t jest liczbą bitów, na których zapamiętana jest mantysa liczby.
Powyższa zależność (równanie 2.32) jest prawdziwe przy założeniu, że reprezentacja
maszynowa uzyskana jest na drodze zaokrąglenia liczby.
W ten sposób otrzymaliśmy oszacowanie błędu względnego zaokrąglenia liczb w reprezentacji zmiennopozycyjnej określane czasami mianem względnej dokładności komputera. Powyższe oszacowanie błędu równoważne jest relacji:
fl ( x ) = x ⋅ (1 + ε ) ,
(2.33)
ε ≤ 2 −t .
(2.34)
gdzie
Powyższy zapis oznacza, że reprezentacja maszynowa zmiennopozycyjnej liczby rzeczywistej fl(x) jest równa nieco zniekształconej wartości dokładnej tej liczby x.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 24
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 25 z 246
Przykład 2.9.
Oszacować błąd bezwzględny siedmiocyfrowej reprezentacji maszynowej rozwinięcia
dwójkowego ułamka właściwego x 2 = 01011001 .
Rozwiązanie
Stosując metodę zaokrąglania siedmiocyfrowa reprezentacja maszynowa tej liczby wy-
( )
nosi fl x 2 = 0101101 .Stąd błąd bezwzględny
ε = 01011001 − 0101101 =
8
∑d
i =1
1
i
7
× 2 −i − ∑ d i2 × 2 −i =
i =1
= 2 −8 − 2 − 7 = 2 −8 − 2 × 2 − 8 = 2 −8 =
1
× 2 − 7 = 0 .5 × 2 − 7
2
■
Jak z przedstawionych powyżej rozważań wynika, reprezentacja maszynowa liczby rzeczywistej na ogół jest niedokładna. Jej błąd względny zależy przede wszystkim od liczby cyfr
t mantysy w liczbie zmiennopozycyjnej i jest nie większy od 2-t. Dlatego też często mówimy,
że obliczenia prowadzone są w arytmetyce t – cyfrowej.
Podstawowym sposobem zapisu liczb rzeczywistych w typowych komputerach jest wykorzystanie do tego celu 32 bitowego słowa maszynowego. Słowo to podzielone jest w ten
sposób, że jeden bit przeznaczony jest na znak, 8 bitów na wykładnik potęgowy (cechę liczby) przy podstawie 2 oraz 23 bity na mantysę (rysunek 2.8). Ponieważ 23 bitowa mantysa
pozwala na poprawne zapisanie liczby z 6, 7 cyframi dziesiętnymi, możemy założyć 6 cyfr
znaczących. Wykładnik potęgowy na 8 bitach pozwala na zapisanie liczb całkowitych bez
znaku z zakresu od 0 do 225. Jednakże z uwagi na zastosowanie sposobu kodowanie znaku
poprzez przesunięcie i automatyczne odejmowanie od tej liczby 127, rzeczywisty przedział
dla cechy wynosi od –127 do +128. W ten sposób kodowane na 32 bitowym słowie maszynowym liczby nazywa się liczbami rzeczywistymi o pojedynczej precyzji.
32 bitowe słowo maszynowe
Nr bitu
31
30
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
…
24
23
Strona 25
22
21
…
1
0
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Bit
d31
d30
Znak
Strona 26 z 246
…
d24
d23
d22
…
d21
Cecha
d1
d0
Mantysa
Bit
c8
c7
…
c1
c0
m-1
m-2
…
m-21
m-22
Mnożnik
sign
27
…
21
20
2-1
2-2
…
2-21
2-22
Rysunek 2.8. Kodowanie zmiennopozycyjnej liczby rzeczywistej o pojedynczej precyzji.
Przykład 2.10.
Przeprowadzić interpretację dziesiętną liczby
x = 0 - 1000 0110 - 10110011000 0010 0000 0000
oraz bezpośrednio większej i mniejszej od niej liczby(o jedną jednostkę binarną) zapisanych
w pojedynczej precyzji. W podanym zapisie poszczególne części liczby: znak, cechę i mantysę rozdzielono myślnikami.
Rozwiązanie
Ponieważ najbardziej wysunięty na lewo bit ustawiony jest na 0, liczba ta interpretowana będzie jako dodatnia. Następny 8 – bitowy człon będący cechą zapisanej liczby ma wartość:
c =10000110 2 = 1 ⋅ 2 7 + 0 ⋅ 2 6 + 0 ⋅ 2 5 + 0 ⋅ 2 4 + 0 ⋅ 2 3 + 1 ⋅ 2 2 + 1 ⋅ 21 + 0 ⋅ 2 0 = 134 10 .
Kolejne 23 bity interpretowane są jako mantysa:
m = 101100 11000 0010 0000 0000 2 =
= 1 ⋅ 2 −1 + 1 ⋅ 2 −3 + 1 ⋅ 2 − 4 + 1 ⋅ 2 −7 + 1 ⋅ 2 −8 + 1 ⋅ 2 −14 =
= 0.69927978515625 10 .
Biorąc pod uwagę, że cecha zapamiętywana jest z przesunięciem, rzeczywista wartość
tej liczby wynosi:
x 10 = (1 ⋅ 2 −1 + 1 ⋅ 2 −3 + 1 ⋅ 2 −4 + 1 ⋅ 2 −7 + 1 ⋅ 2 −8 + 1 ⋅ 2 −14 ) ⋅ 2134−127 =
= 89.5078125 10 .
Bezpośrednio mniejsza liczba zapisana na tym słowie maszynowym będzie miała wartość:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 26
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 27 z 246
x 10 = 10110011000 000111111111 2 = 89.5077972412109 10 .
natomiast bezpośrednio większa od niej liczba wartość:
x 10 = 10110011000 0010 0000 0001 2 = 89.5078277587891 10 .
Jak stąd wynika binarna liczba maszynowa, której wartość dziesiętna wynosi
89.5078125 reprezentuje nie tylko tę właśnie liczbę, ale wszystkie inne liczby rzeczywiste,
które znajdują się pomiędzy tą liczbą a jej najbliższymi sąsiadami.
■
Przykład 2.10 pokazuje jedną z najistotniejszych wad obliczeń komputerowych, mianowicie tę, że w pamięci komputera zapisać można jedynie niewielki podzbiór liczb rzeczywistych. W przypadku pojedynczej precyzji zapisu liczb rzeczywistych liczb, które można w
ten sposób zapisać jest około 231. Wynika to stąd, że lewy skrajny bit mantysy musi być równy jeden, co oznacza, że na takiej 23 bitowej mantysie zapisać można 222 różnych ułamków.
Uwzględniając
cechę
otrzymamy,
że
około
231
różnych
liczb
postaci
sign( x ) × d1 d 2 L d 23 × 2 c1c2 Lc8 będzie użyte w tym komputerze do reprezentowania wszystkich
liczb rzeczywistych.
Z przedstawionych tutaj rozważań wynika, że liczba cyfr mantysy decyduje o dokładności zmiennopozycyjnego przedstawienia liczb. Natomiast liczba cyfr przeznaczona na zapis
cechy określa zakres reprezentowalnych liczb. Ponieważ cecha zapisywana jest przy pomocy
d cyfr, to określić można najmniejszą i największą jej wartość. Zapisać to możemy w formie
⎡1 ⎞
c∈[cmin, cmax], gdzie cmax=-cmin=2d-1. Stąd, oraz z założenia, że m ∈ ⎢ ,1⎟ wynika, że w
⎣2 ⎠
arytmetyce zmiennopozycyjnej możemy reprezentować liczby x≠0 spełniające zależność:
1 cmin
⋅ 2 ≤ fl( x ) < 2 cmax .
2
(2.35)
Z równania (2.35) wynika kolejne ograniczenie obliczeń komputerowych. Mianowicie,
jeżeli wynik wykonania operacji arytmetycznej na liczbach zmiennopozycyjnych jest taki, że
pojawi się cecha większa od cmax to mówimy o powstaniu nadmiaru zmiennopozycyjnego.
Pojawienie się nadmiaru sygnalizowane jest przez komputer jako błąd i powoduje zatrzymanie wykonywania programu.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 27
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 28 z 246
Jeżeli natomiast w wyniku wykonania obliczeń pojawi się liczba, której cecha jest
mniejsza od cmin, to mówimy o powstaniu niedomiaru zmiennopozycyjnego. W tym przypadku działanie programu nie zostanie zatrzymane, a liczba taka reprezentowana jest jako
zero. Może to prowadzić do nagłej utraty dokładności obliczeń. Wynika stąd, że w zbiorze
liczb zmiennopozycyjnych, liczba zero nie jest reprezentowana jednoznacznie.
Wskazany tu problem oraz możliwy sposób jego rozwiązania pokazuje przykład (2.11).
Przykład 2.11.
Obliczyć z , gdzie z jest liczbą zespoloną z = a + b ⋅ i , i = − 1 a = 3.1×10156, b =
4.5×10158.
Rozwiązanie
Stosując klasyczny algorytm wykorzystujący wzór na moduł liczby zespolonej
z = a ⋅ a + b ⋅ b otrzymamy:
a × a = 9.61×10312 oraz b × b = 20.25×10316.
Jeżeli obliczenia wykonywać będziemy w programie MathCad, w którym maksymalna
wartość cechy musi być liczbą mniejszą od 307, to takie wyniki pośrednie spowodują wygenerowanie komunikatu o błędzie nadmiaru zmiennopozycyjnego.
Celem uniknięcia takiej sytuacji algorytm obliczania modułu liczby zespolonej przekształcić należy do postaci:
Jeśli
a >b
to
⎛b⎞
z = a ⋅ 1+ ⎜ ⎟
⎝a⎠
2
w przeciwnym razie
⎛a⎞
z = b ⋅ 1+ ⎜ ⎟
⎝b⎠
2
Powyższy algorytm pozwala na poprawne obliczenie z = 9.689E+198.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 28
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 29 z 246
■
Bardzo często w komputerach zakres reprezentowanych liczb rzeczywistych jest zdecydowanie większy. Wynika to stąd, że zmiennopozycyjne liczby rzeczywiste nie są zapisywane w podanej poprzednio pojedynczej precyzji a w tak zwanej podwójnej precyzji. W tym
przypadku do zapisu liczby wykorzystuje się dwa 32 bitowe słowa maszynowe. W pierwszym
słowie maszynowym zapisuje się bit znaku, 11 bitową cechę oraz pierwsze 20 tak zwanych
wyższych bitów mantysy. W drugim słowie maszynowym zapisuje się pozostałe 32 tak zwane niższe bity mantysy (rysunek 2.9).
Pierwsze 32 bitowe słowo maszynowe
Nr bitu
31
30
…
21
20
19
18
…
1
0
Bit
d31
d30
…
d21
d20
d19
d18
…
d1
d0
Znak
Cecha
Mantysa
Bit
c11
c10
…
c1
c0
m-1
m-2
…
m-19
m-20
Mnożnik
sign
210
…
21
20
2-1
2-2
…
2-19
2-20
Drugie 32 bitowe słowo maszynowe
Nr bitu
31
30
…
21
20
19
18
…
1
0
Bit
d31
d30
…
d21
d20
d19
d18
…
d1
d0
Mantysa
Bit
m-21
m-22
Mnożnik
2-21
2-22
…
m-31
m-32
m-33
m-34
…
m-51
m-52
2-31
2-32
2-33
2-34
…
2-51
2-52
Rysunek 2.9. Kodowanie zmiennopozycyjnej liczby rzeczywistej o podwójnej precyzji.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 29
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 30 z 246
Zapis liczby w podwójnej precyzji pozwala na uzyskanie poprawnych 15 cyfr rozwinięcia dziesiętnego. Tak zdefiniowana 11 bitowa cecha pozwala na korzystanie na przykład w
programie MathCad z liczb rzeczywistych z zakresu 10 −306 ≤ x ≤ 10 306 (rysunek 2.10).
Na
Na
Ni
-1.00E+307 -1.00E-307
0
1.00E-307
Liczby rzeczywiste
1.00E+307
Rysunek 2.10. Liczby rzeczywiste i ich zmiennopozycyjna reprezentacja maszynowa w podwójnej precyzji.
2.2. Zmiennopozycyjne działania arytmetyczne
Z przedstawionych powyżej rozważań wynika, że liczby rzeczywiste w pamięci komputera na ogół reprezentowane są niedokładnie. Błąd ten wynika z obcięcia (zaokrąglenia) mantysy do t cyfr. Związany z tym błąd zwany jest błędem zaokrąglenia. Prowadząc obliczenia
maszynowe poza błędem zaokrąglenia spotykamy się jeszcze z dwoma innymi rodzajami
błędów, są to błędy danych wejściowych oraz tak zwane błędy obcięcia.
Błędy danych wejściowych lub krócej błędy wejściowe pojawiają się wtedy, gdy dane
liczbowe wprowadzane do pamięci komputer odbiegają od ich rzeczywistych (dokładnych)
wartości. Sytuacja taka pojawia się wtedy, gdy dane wejściowe są wynikiem pomiarów wielkości fizycznych. Pomiary takie najczęściej wykonywane są z pewnym błędem pomiarowym. Zagadnienia związane z oszacowaniem tych błędów oraz omówienie metod prowadzą-
cych do ich minimalizacji przedstawione zostaną w ramach przedmiotu Chemometria i w tej
sytuacji problem ten zostanie tu pominięty. Nie mniej błędy danych to jest bardzo poważny
problem i należy o nim pamiętać.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 30
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 31 z 246
Błędy obcięcia powstają podczas obliczeń numerycznych na skutek zmniejszenia liczby
działań. Typowym przykładem jest obliczanie sum częściowych nieskończonych szeregów.
Problem ten ilustruje przykład 2.12.
Przykład 2.12.
Obliczyć wartość wyrażenia ex dla x = 0.6 korzystając z różnej liczby członów rozwinięcia tej funkcji w szereg Taylora. Wartość wyrażenia e0.6 z dokładnością 15 cyfr wynosi
1.82211880039051
Rozwiązanie
Rozwinięcie funkcji ex w szereg Taylora ma następującą postać:
ex =1+ x +
∞
1 2
1 N
1
x +K+
x + K = ∑ xi .
N!
2
i = 0 i!
W obliczeniach numerycznych szereg zastępowany jest przez sumę częściową o odpowiednio dobranej liczbie członów N. Jeżeli N będzie dostatecznie duże, to uzyskane w ten
sposób przybliżenie wartości liczbowej ex będzie bliskie jej wartości dokładnej. Jednakże na
ogół, ze względu na długi czas obliczania tego rodzaju sum uwzględnia się niewielką liczbę
składników szeregu, co powoduje pojawienie się dodatkowego błędu – błędu obcięcia.
W tabeli 2.10 podano wyniki obliczeń dla różnej liczby członów w sumie częściowej
oraz podano rzeczywisty błąd względny dla każdego z oszacowań.
Tabela 2.10. Porównanie dokładności oszacowania rozwinięcia funkcji exp(x) w szereg Taylora w zależności od liczby użytych członów sumy częściowej.
Liczba członów w
sumie częściowej
Oszacowanie
ε
1
1.6
1.2×10-1
2
1.78
2.3×10-2
3
1.816
3.36×10-3
4
1.8214
3.95×10-4
5
1.822048
3.89×10-5
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 31
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 32 z 246
6
1.8221128
3.29×10-6
7
1.82211835428571
2.45×10-7
Przedstawione w tabeli 2.10 porównanie, wskazuje, że dodanie kolejnych członów w
sumie częściowej pozwala na uzyskanie coraz lepszego przybliżenia poszukiwanej wartości
wyrażenia.
■
W wielu przypadkach pomimo tego, że uniknęliśmy popełnienia błędów danych wejściowych i błędów obcięcia, uzyskane wyniki obarczone są błędami zaokrągleń. Wynik to
stąd, że wszystkie obliczenia arytmetyczne prowadzone są na liczbach mających jedynie swoje reprezentacje maszynowe. Również wszystkie wyniki zarówno końcowe jak i pośrednie
zapisywane są w ten sposób. Oznacza to, że błędów zaokrągleń nie można w żaden sposób
uniknąć, można je jednakże zminimalizować ustalając odpowiedni sposób oraz kolejność
wykonywania działań. Problem ten ilustruje kolejny przykład 2.13.
Przykład 2.13.
Obliczyć sumę trzech liczb a = 0.48, b = 0.24 oraz c = 0.12 zapisanych w układzie
dwójkowym. Założyć, że ich zmiennopozycyjna reprezentacja maszynowa zapisana jest na 5
bitach łącznie z bitem znaku i została uzyskana przez odrzucenie (urywanie) zbędnych bitów.
Sumowanie wykonać na dwa sposoby: (i) (a+b)+c oraz (ii) a+(b+c). Dokładna wartość sumy
a+b+c = 0.84.
Rozwiązanie
Każda z sumowanych liczb ma nieskończone rozwinięcie dwójkowe. W przyjętym zapisie zmiennopozycyjnym otrzymamy:
(
)
(
)
(
)
fl 0.48 10 = fl (0.111101011100001L 2 × 2 -1 ) = 0.1111 2 × 2 -1 = 0.46875 10 ,
fl 0.24 10 = fl (0.111101011100001L 2 × 2 -2 ) = 0.1111 2 × 2 -2 = 0.234375 10 ,
fl 0.12 10 = fl (0.111101011100001L 2 × 2 -3 ) = 0.1111 2 × 2 -3 = 0.1171875 10 .
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 32
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 33 z 246
Chcąc przeprowadzić sumowanie należy liczby te sprowadzić do wspólnego wykładnika. Oznacza to konieczność dodatkowego zaokrąglenia reprezentacji maszynowych liczb 0.24
oraz 0.12. Sumowanie wykonamy na dwa sposoby: (i) (a+b)+c oraz (ii) a+(b+c). Dokładna
wartość sumy a+b+c = 0.84.
Ad (i). Obliczmy (a+b)+c
Obliczamy a+b. W tym celu należy przeskalować (przesunąć o jeden bit w prawo) liczbę b, a
następnie zsumować liczby i ponownie przeskalować wynik celem zapisania go w przyjętej
arytmetyce:
fl (0.1111 × 2 −1 + 0.1111 × 2 −2 ) = fl (0.1111 × 2 −1 + 0.0111 × 2 −1 ) = 0.1010 × 2 0 .
Obliczamy (a+b)+c. Liczbę c przesuwamy o trzy bity w prawo, a następnie dodajemy ją do
wcześniej otrzymanego wyniku pośredniego:
fl (0.1010 × 2 0 + 0.1111 × 2 −3 ) = fl (0.1010 × 2 0 + 0.0001 × 2 0 ) = 0.1011 × 2 0 = 0.6875 10
Ad (ii). Obliczmy a+(b+c)
Obliczmy b+c. Liczbę c musimy przeskalować, a następnie dodać do liczby b. Wynik ponownie przeskalowujemy celem zapisu jej w przyjętej arytmetyce:
(
)
(
)
fl 0.1111 × 2 −2 + 0.1111 × 2 −3 = fl 0.1111 × 2 −2 + 0.0111 × 2 −2 = 0.1010 × 2 −1 .
Obliczamy a+(b+c): Ponieważ poprzednio uzyskany wynik przejściowy jest tego samego
rzędu, co liczba a, nie ma potrzeby przeskalowywania liczb. Dzięki temu uzyskujemy dokładniejszy wynik końcowy aniżeli w poprzednim sumowaniu:
fl (0.1111 × 2 −1 + 0.1010 × 2 −1 ) == 0.1100 × 2 0 = 0.75 10 .
W zależności od kolejności sumowania uzyskaliśmy dwa różne wyniki. W pierwszym
przypadku błąd względny wynosi 18.2%, w drugim jest on mniejszy i wynosi 7.4%.
■
Powyższy przykład pokazuje dwie bardzo istotne cechy obliczeń maszynowych. Po
pierwsze zmiennopozycyjne działania arytmetyczne obarczone są błędami zaokrągleń
związanych z przeskalowaniem składników oraz po drugie, co może stanowić duże zasko-
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 33
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 34 z 246
czenie w arytmetyce maszynowej zwykłe prawa łączności oraz rozdzielności działań nie
działają!.
Jak już wspomniano zmiennopozycyjne działania arytmetyczne obarczone są błędami
zaokrągleń związanych z przeskalowaniem składników. Zamiast interpretować powstały błąd
jako wynik zaokrąglenia, które powstało podczas przeskalowania składników przyjąć można,
że liczby są prawidłowo zaokrąglone do t początkowych cyfr dwójkowych (w wielu maszynach cyfrowych działania arytmetyczne wykonywane są na rejestrach podwójnej długości,
tzn. na 2t bitach), oraz że działania zostały wykonane dokładnie (bez błędu), ale na nieco
zmienionych składnikach. To podejście do zmiennopozycyjnych działań arytmetycznych w
sposób formalny podaje Lemat Wilkinsona.
Lemat Wilkinsona
Błędy zaokrągleń powstające podczas wykonywania arytmetycznych działań zmiennopozycyjnych są równoważne zastępczemu zaburzeniu liczb, na których wykonujemy działania. W przypadku pojedynczych działań arytmetycznych otrzymujemy:
fl (a + b ) = a ⋅ (1 + ρ1 ) + b ⋅ (1 + ρ 2 ) ,
(2.36)
fl (a ⋅ b ) = a ⋅ (1 + ρ 3 ) ⋅ b = a ⋅ b ⋅ (1 + ρ 3 ) ,
(2.37)
fl (a / b ) = a ⋅ (1 + ρ 4 ) / b = a / (b ⋅ (1 + ρ 5 )) ,
(2.38)
gdzie ρ i ≤ 2 − t , i = 1,2,3,4,5 są niewiększe, co do modułu od parametru ε charakteryzującego dokładność maszyny.
■
Zgodnie z Lematem Wilkinsona wynik zmiennopozycyjnych działań arytmetycznych
jest równy wynikowi odpowiedniego dokładnego działania pomnożonego przez pewien czynnik zniekształcający. Ze wzorów tych łatwo można wyprowadzić następujące wyrażenia definiujące błędy względne działań arytmetycznych.
W przypadku mnożenia liczb otrzymujemy następujące oszacowanie błędu względnego:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 34
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
ε [ fl (a ⋅ b )] =
Strona 35 z 246
a ⋅ b − fl (a ⋅ b ) a ⋅ b − a ⋅ b ⋅ (1 + ρ1 )
=
=
a ⋅b
a ⋅b
(2.39)
= 1 − 1 + ρ1 = ρ1 ≤ ε = 5 ⋅ 2 .
−t
Analogicznie otrzymujemy wyrażenie będące oszacowaniem błędu względnego zmiennopozycyjnego dzielenia:
ε [ fl (a / b )] =
a / b − fl (a / b )
= ρ 2 ≤ ε = 5 ⋅ 2 −t .
a/b
(2.40)
Natomiast w przypadku dodawania jako oszacowanie błędu względnego otrzymujemy:
ε [ fl (a + b )] =
=
≤
(a + b ) − fl (a + b ) =
(a + b )
(a + b ) − (a ⋅ (1 + ρ 3 ) + b ⋅ (1 + ρ 4 ))
(a + b )
a ⋅ ρ3 + b ⋅ ρ4
a+b
≤
a+b
a+b
⋅ε =
=
a ⋅ ρ3 + b ⋅ ρ4
≤.
a+b
a+b
a+b
(2.41)
⋅ 5 ⋅ 2 −t .
gdzie ε = 5×10-t jest dokładnością maszynową.
Analizując powyższe wzory stwierdzić można, że:
1.
Operacje mnożenia i dzielenia wprowadzają błędy względne nie przewyższające
względnej dokładności komputera (równania 2.39 i 2.40).
2.
Dodawanie liczb o różnych znakach (lub ich odejmowanie) może wprowadzić bardzo
duży błąd względny w przypadku, gdy wartości bezwzględne liczb a oraz b są porównywalne, inaczej mówiąc, gdy a+b jest małą liczbą. Wtedy zgodnie z równaniem 2.41
iloraz występujący w oszacowaniu błędu względnego może być bardzo duży. W efekcie
prowadzi to do utraty dokładności obliczeń.
Tak sytuacja jak opisana w punkcie 2. stanowi szczególnie duży problem. Jest ona okre-
ślana mianem redukcji cyfr znaczących. Problem ten ilustruje kolejny przykład 2.14.
Przykład 2.14.
Obliczyć różnicę dwóch liczb a=13.128327726 oraz b=13.128327789. Oszacować błąd
względny uzyskanego wyniku. Założyć, że liczby te zapisujemy jako zmiennopozycyjne z
dziesięciocyfrową mantysą.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 35
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 36 z 246
Rozwiązanie
a = 13.128327726,
fl (a ) = 0.1312832773 ⋅ 10 2 ,
b = 13.128327789,
fl (b ) = 0.1312832779 ⋅ 10 2 .
Różnica tych dwóch liczb wynosi:
fl (b − a ) = fl (13.128327789 − 13.128327726 ) =
= 0.1312832779 ⋅ 10 2 − 0.1312832773 ⋅ 10 2 =
= 0.0000000006 ⋅ 10 2 = 0.6 ⋅ 10 −7
Błędy względne ich reprezentacji maszynowych wynoszą:
δ [ fl( a ) ] =
a − fl( a )
4 ⋅ 10 −11 ⋅ 10 2
=
≤ 4 ⋅ 10 −10 ,
a
13128327726
.
δ [ fl( b) ] =
10 −11 ⋅ 10 2
b − fl( b)
=
≤ 10 −10
13128327789
.
b
i są mniejsze od błędu maszynowego wynoszącego 5×10-10. Błąd względny różnicy zmiennopozycyjnej spełnia nierówność:
δ [ fl (b − a )] =
(b − a ) − fl (b − a ) =
b−a
6.3 ⋅ 10 −10 ⋅ 10 2 − 6 ⋅ 10 −10 ⋅ 10 2
> 4 ⋅ 10 − 2 .
−10
2
6.3 ⋅ 10 ⋅ 10
■
Jak z powyższego przykładu wynika przy odejmowaniu liczb mało różniących się między sobą występuje znaczny wzrost błędu względnego. Mówimy wtedy o jego kumulacji.
Fakt ten należy mieć na uwadze wykonując obliczenia numeryczne.
Pozornie mogłoby się wydawać, że niewielkie (rzędu 2-t) względne błędy wytworzone
w poszczególnych działaniach arytmetycznych nie powinny przysparzać kłopotów w obliczeniach numerycznych. Nie jest to jednak prawdą nawet dla prostych zadań. Kolejny przykład
2.15 pokazuje niebezpieczeństwa, jakie spotykamy w tego rodzaju obliczeniach.
Przykład 2.15.
Przeanalizować dokładność obliczania różnicy kwadratów dwóch liczb realizowanych z
wykorzystaniem dwóch różnych algorytmów:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 36
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 37 z 246
A1 ( a , b) = a 2 − b 2 ,
A2 ( a , b) = ( a − b) ⋅ ( a + b) .
Rozwiązanie
Realizując pierwszy z tych algorytmów w arytmetyce zmiennopozycyjnej otrzymujemy:
(
)
fl ( A1 (a, b )) = fl a 2 − b 2 =
= (a ⋅ a ⋅ (1 + ε 1 ) − b ⋅ b ⋅ (1 + ε 2 )) ⋅ (1 + ε 3 ) =
⎛ a 2 ⋅ ε1 − b2 ⋅ ε 2
= a − b ⋅ ⎜⎜1 +
a2 − b2
⎝
= a 2 − b 2 ⋅ (1 + δ ( A1 )),
(
2
2
(
)
)
⎞
⎟⎟ ⋅ (1 + ε 3 ) =
⎠
gdzie
a 2 ⋅ ε1 − b2 ⋅ ε 2
δ ( A1 ) =
⋅ (1 + ε 3 ) + ε 3 ,
a 2 − b2
a liczby ε 1 , ε 2 , ε 3 są błędami wytworzonymi w poszczególnych działaniach arytmetycznych
takimi, że ε i ≤ 2 − t , i = 1,2,3.
Jak z powyższego wyrażenia wynika, jeśli a2 jest odpowiednio bliskie b2, a błędy ε1 i ε2
mają przeciwne znaki, to błąd względny δ wyniku otrzymanego algorytmem A1 może być
dowolnie duży. Tego rodzaju sytuacja nie powstanie w przypadku drugiego algorytmu, ponieważ:
fl ( A2 (a, b )) = fl ((a − b ) ⋅ (a + b )) =
= ((a − b ) ⋅ (1 + ε 1 ) ⋅ (a + b ) ⋅ (1 + ε 2 )) ⋅ (1 + ε 3 ) =
(
)
= a 2 − b 2 ⋅ (1 + δ ( A2 )),
gdzie
δ ( A2 ) ≤ ε 1 + ε 2 + ε 3 ≤ 3 ⋅ 2 − t ,
Co oznacza, że niezależnie od wartości bezwzględnych liczb a i b błąd względny δ jest zawsze stały i nie większy od 3×2-t.
■
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 37
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 38 z 246
Przytoczony wyżej przykład pokazuje, jak istotnie różne właściwości numeryczne mogą
mieć algorytmy równoważne w sensie klasycznej arytmetyki. Pokazuje również, że utrata
dokładności wyniku nie musi wiązać się z wielką liczbą zaokrągleń w trakcie obliczeń.
Z przedstawionych tutaj rozważań wynika inne spostrzeżenie. Mianowicie wykonując
w t - cyfrowej arytmetyce zmiennopozycyjnej dodawanie, w przypadku, gdy liczby a oraz b
spełniają warunek b ≤
1
⋅ a ⋅ 2 −t , to zachodzi zależność:
2
(
fl( a + b) = 2 ca ⋅ ma + mb ⋅ 2
− ( ca + cb )
)≡a
(2.42)
Konsekwencje tego faktu mogą być dość zaskakujące, co pokazuje przykład 2.16.
Przykład 2.16.
Korzystając z oszacowania wartości pochodnej funkcji w postaci ilorazu różnicowego,
obliczyć dla różnych wartości kroku h wartości pochodnej funkcji f ( x ) = e x w punkcie x = 1.
Rozwiązanie
Pochodną funkcji f(x) w punkcie x = 1 przybliżyć można za pomocą ilorazu różnicowego:
f ′( x = 1) ≈
f (1 + h ) − f (1)
h
Korzystając z arytmetyki dokładnej, oczekiwać będziemy, że z powyższego wzoru dla
malejących h otrzymujemy coraz lepsze przybliżenia pochodnej f'(1). Obliczając powyższe
wyrażenie w t – cyfrowej arytmetyce zmiennopozycyjnej mamy:
⎛ f (1 + h ) − f (1) ⎞
⎛ f ( fl (1 + h )) − f (1) ⎞
fl ( f ′(1)) ≈ fl ⎜
⎟ = fl ⎜
⎟=
h
h
⎝
⎠
⎝
⎠
⎛ fl ( f ( fl (1 + h ))) − fl ( f (1)) ⎞
= fl ⎜
⎟,
h
⎝
⎠
skąd wynika, że dla 0 < h <
1 −t
⋅ 2 dostajemy dokładnie zero, gdyż dla tych wartości
2
fl(1+h)≡fl(1). Oznacza to, że zamiast coraz lepszych przybliżeń pochodnej dla malejących h,
obliczając iloraz różnicowy numerycznie, otrzymujemy od pewnej wartości h te same wartoMariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 38
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 39 z 246
ści, nie mające żadnego związku z aproksymowaną wielkością a nawet z funkcją f(x). W
przeciwieństwie do arytmetyki klasycznej nie możemy zatem dowolnie blisko aproksymować
pochodnej ilorazem różnicowym !
W tabeli 2.11 pokazano wyniki obliczeń wartości pierwszej pochodnej oraz błędu
względnego otrzymanego oszacowania dla zmieniającego się kroku h. jak można zauważyć,
od pewnej wartości h błąd względny nie tylko nie maleje, ale wręcz rośnie!
Tabela 2.11. Oszacowanie wartości pochodnej funkcji f ( x ) = e x za pomocą ilorazu różnicowego z różnym krokiem różniczkowania.
h
f ′(1) =
f (1 + h ) − f (1)
h
ε
0.01
2.731918655787124
5.02e-3
1e-3
2.719641422533225
5.00e-4
1e-4
2.718417747078483
5.00e-5
1e-5
2.718295419912308
5.00e-6
1e-6
2.718283187430615
5.00e-7
1e-7
2.718281963964841
4.99e-8
1e-8
2.718281821856294
2.43e-9
1e-9
2.718282043900899
7.93e-8
1e-10
2.718283376168529
5.69e-7
1e-11
2.718270053492233
4.33e-6
1e-12
2.718714142702083
1.59e-4
1e-13
2.717825964282383
1.68e-4
■
Z Lematu Wilkinsona wynika, że wszystkie działania arytmetyczne realizowane w maszynowej arytmetyce zmiennopozycyjnej obciążone są błędem zaokrągleń. Można więc oczekiwać, że realizując ciąg kolejnych działań błąd ten będzie się kumulował. Problem ten pokazuje kolejny przykład 2.17.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 39
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 40 z 246
Przykład 2.17
Oszacować błąd, jakim obciążony będzie wynik sumowania n liczb rzeczywistych x1,
x2, ..., xn.
Rozwiązanie
Zwykle sumowanie takie realizowane jest w pętli iteracyjnej, której przebieg można zapisać w formie algorytmu:
1. S:= 0;
2. Dla i zmieniającego się od 1 do n wykonaj
2.1. S := S + xi;
3. Podaj S jako wynik
Oznacza to, że w kolejnych krokach iteracyjnych uzyskujemy sumy częściowe, które
można oznaczyć jako s1, s2, …, sn. Przyjmijmy oznaczenia:
s1 = fl ( x1 ) = x1 (1 + ε 1 ) ≤ x1 (1 + ε ) ,
s 2 = fl (s1 + x 2 ) = ( x1 (1 + ε 1 ) + x 2 )(1 + ε 2 ) =
= x1 (1 + ε 1 )(1 + ε 2 ) + x 2 (1 + ε 2 ) ≤ x1 (1 + ε ) + x 2 (1 + ε ),
2
s 3 = fl (s 2 + x3 ) = (s 2 + x3 )(1 + ε 3 ) = (( x1 (1 + ε 1 ) + x 2 )(1 + ε 2 ) + x3 )(1 + ε 3 ) =
= x1 (1 + ε 1 )(1 + ε 2 )(1 + ε 3 ) + x 2 (1 + ε 2 )(1 + ε 3 ) + x3 (1 + ε 3 ) ≤
≤ x1 (1 + ε ) + x 2 (1 + ε ) + x3 (1 + ε ),
3
2
i tak dalej aż do
s n = fl (s n −1 + x n ) = (s n −1 + x n )(1 + ε n ) =
= x1 (1 + ε 1 )(1 + ε 2 )(1 + ε 3 )K (1 + ε n ) + x 2 (1 + ε 2 )(1 + ε 3 )K (1 + ε n ) +
+ x3 (1 + ε 3 )K (1 + ε n ) + K + x n −1 (1 + ε n −1 )(1 + ε n ) + x n (1 + ε n ) ≤
≤ x1 (1 + ε ) + x 2 (1 + ε )
n
n −1
+ x3 (1 + ε )
n −3
+ K + x n −1 (1 + ε ) + x n (1 + ε ),
2
gdzie ε = max (ε i ) .
i =1, 2 ,Kn
Powyższy wynik można interpretować w ten sposób, że obliczona suma s jest dokładną
sumą zaburzonych składników, przy czym wielkość zaburzenia zależy od kolejności sumowania w ten sposób, że x1 zaburzony jest przez czynnik (1 + ε ) , x2 zaburzony jest przez
n
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 40
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
czynnik (1 + ε )
n −1
Strona 41 z 246
i tak dalej, aż do ostatniego składnika xn, który zaburzony jest przez czyn-
nik (1 + ε ) . Jak stąd wynika najmniej zaburzony jest składnik ostatni, a najbardziej zaburzony
składnik pierwszy. Powyższe oszacowanie stanowić może wskazanie, że liczby sumować
należy w kolejności ich wzrastającej wartości bezwzględnej.
■
2.3. Uwarunkowanie zadania i stabilność algorytmów
Z zastosowania przybliżonej reprezentacji maszynowej liczb wynika szereg konsekwencji. Przede wszystkim przystępując do numerycznego rozwiązania jakiegokolwiek zadania musimy zdawać sobie sprawę z tego, że zamiast dokładnych danych d1 , d 2 , K , d n ,
(d i ∈ ℜ,
i = 1,2 K , n ) dysponujemy tylko ich reprezentacjami fl( d 1 ) , fl( d 2 ) ,K , fl( d n ) . Jak
wynika z Lematu Wilkinsona każda zapisana w pamięci komputerowej liczba jest zaburzona
zgodnie z równaniem fl (d i ) = d i (1 + δ i ), δ i ≤ 2 − t dla i = 1,2, K , n . Jak pokazano w przykładach 2.15 oraz 2.16 nawet taka niewielka względna zmiana danych może jednak powodować duże zmiany względne uzyskiwanego rozwiązania. Kolejny przykład 2.18 pokazuje, że
efekt takich zaburzeń może w sposób niezwykle dramatyczny zmienić wynik końcowy.
Przykład 2.18.
Wyznaczyć zera wielomianu:
20
w( x ) = a0 + a1 x + a 2 x 2 + K + a 20 x 20 = ( x − 1) × (x − 2) × L × (x − 20) = ∏ ( x − k ) ,
k =1
w którym współczynnik a19 = 210 został zaburzony o niewielki czynnik zaburzający δ
= 2-23, to znaczy jego wartość wynosi: a19 (δ ) = − (210 + 2 −23 ) .
Rozwiązanie
Zerami tego wielomianu wyjściowego są liczby naturalne 1, 2, …, 20. Zaburzając jeden
z danych współczynników (współczynnik a19 = 210) o niewielki czynnik zaburzający δ = 2-23,
otrzymujemy nowy wielomian wδ ( x ) = w( x ) − 2 −23 x 19 . Zgodnie z przyjętą konwencją
(
a19 (ε ) = a19 (1 − ε ) gdzie ε = 2 23 ⋅ 210
)
−1
< 2 −30 . Okazuje się jednak, że ta niewielka względna
zmiana tylko jednego współczynnika wielomianu powoduje duże zmiany jego zer. O ile
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 41
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 42 z 246
pierwiastkami wielomianu w(x) były liczby naturalne, to wielomian wδ(x) ma już pierwiastki
zespolone
i
np.
najbliższe
pierwiastkowi
15
wielomianu
w(x)
są
pierwiastki
13.992358137±2.518830070i.
■
Definicja 2.4.
Jeśli niewielkie względne zmiany danych zadania powodują duże względne zmiany jego rozwiązania to zadanie takie nazywamy źle uwarunkowanym. Wielkość charakteryzującą
wpływ zaburzeń danych na zaburzenia rozwiązania nazywamy wskaźnikiem uwarunkowania
zadania.
■
Zgodnie z definicją 2.4. zadanie rozwiązywane w przykładzie 1.8. jest zadaniem źle
uwarunkowanym. Wyznaczenie wskaźnika uwarunkowanie zadania jest dość trudnym zadaniem. Sposób postępowanie zależy od charakteru rozwiązywanego zadania. Przykładowy
sposób postępowanie pokazano w przykładzie 2.19.
Przykład 2.19.
Zbadać uwarunkowanie zadania obliczania wartości iloczynu skalarnego
n
S = ∑ ai bi ≠ 0
i =1
Rozwiązanie
Celem przeprowadzenia analizy uwarunkowania zadania obliczania wartości iloczynu
skalarnego zaburzmy dane wejściowe a = ( a1 , a 2 ,K , a n ) oraz b = ( b1 , b2 ,K , bn ) mnożąc ich
współrzędne odpowiednio przez 1 + α i oraz 1 + β i ( i = 1,2,K , n) . Zakładamy, że αi i βi są na
tyle małe, aby ich iloczyny można było zaniedbać. Szacując względną zmianę wyniku otrzymamy:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 42
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
n
Strona 43 z 246
n
n
∑ ai (1 + α i )bi (1 + βi ) − ∑ aibi
i =1
=
i =1
n
∑a b
n
∑ aibi (1 + α i + βi + α i βi ) − ∑ aibi
i =1
i =1
n
∑a b
i i
i =1
n
≈
i i
i =1
∑ a b (1 + α
i =1
i i
n
n
+ β i ) − ∑ aibi
i
i =1
n
∑a b
=
∑ a b (α
i =1
i i
i =1
≈
i i
i
+ βi )
n
∑a b
i =1
≤
i i
n
≤ max α i + β i
i
∑ ab
i =1
n
i i
∑a b
i =1
.
i i
Analizując uzyskane oszacowanie błędu względnego stwierdzić możemy, że czynnikiem powodującym ewentualne zwiększenie lub zmniejszenie oszacowania maksymalnego
błędu jest wyrażenie:
n
cond ( a , b) =
∑ab
i =1
n
i i
∑a b
i =1
.
i i
Wyrażenie to można uznać za wskaźnik uwarunkowania zadania, gdyż maksymalne zaburzenie względne danych może się przenieść na zaburzenie względne wyniku co najwyżej z
takim mnożnikiem. W przypadku, w którym wszystkie sumowane składniki aibi byłyby tego
samego znaku, to cond(a,b) = 1, i zadanie takie uważamy za bardzo dobrze uwarunkowane
(mało wrażliwe na zaburzenia danych). Natomiast, jeżeli cond(a,b) >> 1, to zadanie obliczania iloczynu skalarnego uznamy za źle uwarunkowane.
■
2.4. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
Zadanie 2.1.
Napisać w programie MathCad cztery różne procedury (funkcje) obliczające sumę kolejnych wyrazów następującego szeregu:
SN =1 −
1 1 1 1
1
1
1
+ − + −K+
−
+K+ .
2 3 4 5
9999 10000
N
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 43
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 44 z 246
Przyjąć, że sumowanie odbywa się na następujące sposoby:
1.
Wyrazy szeregu dodawane są z lewa na prawo;
2.
Wyrazy szeregu dodawane są z prawa na lewo;
3.
Oddzielnie z lewa na prawo dodawane są składniki dodatnie oraz ujemne, a następnie
obliczana jest różnica tych sum częściowych;
4.
Oddzielnie z prawa na lewo dodawane są składniki dodatnie oraz ujemne, a następnie
obliczana jest różnica tych sum częściowych;
Porównać otrzymane z komputera wyniki i objaśnić różnice. Przedyskutować wady i
zalety każdego ze sposobów obliczania sumy.
UWAGA: Suma tego szeregu z dokładnością do 30 cyfr dziesiętnych wynosi:
0.693097183059945296917232371362.
Zadanie 2.2.
Opracować w programie MathCad procedurę (funkcję), która wielokrotnie mnoży
zmienną zespoloną
z = x + y ⋅i
przez stałą zespoloną
c = 0.6 + 0.8 ⋅ i .
Jeśli jako wartość początkową liczby z weźmie się liczbę o module równym jeden, na
przykład:
z0 =
5
12
+
,
13 13 ⋅ i
to po n mnożeniach wartością liczby z będzie:
zn = z0 ⋅ c n .
Moduł liczby zn wynosi:
z n = x n2 + y n2 = 1 .
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 44
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 2.
Strona 45 z 246
Pokazać na wykresie jak zmienia się błąd względny modułu liczby zn wraz ze wzrostem
liczby wykonanych mnożeń n.
Zadanie 2.3.
Obliczyć dwa pierwiastki x1 i x2 równania kwadratowego
a ⋅ x 2 + b ⋅ x + c = 0,
a ≠0,
stosując czterocyfrową arytmetykę dziesiętną. Przyjąć dla współczynników równania wartości: a = 1.000, b = -200.0 oraz c = 1.000. Obliczenia wykonać na dwa sposoby:
1) Bezpośrednio z znanej formuły:
x1, 2 =
− b ± b 2 − 4ac
.
2a
2) Obliczając z powyższego wzoru ten pierwiastek, który ma większą wartość bezwzględną, natomiast drugi pierwiastek obliczyć z wzoru Vieta:
x1 ⋅ x 2 =
c
.
a
Przedyskutować zaobserwowane różnice
UWAGA. Wyniki dokładne w przyjętej czterocyfrowej arytmetyce wynoszą: x1 = 200.0 oraz
x2 = 0.005.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 45
2008-02-21
Strona 46 z 246
Metody Numeryczne i Programowanie
Rozdział 2.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 46
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 47 z 246
Rozdział 3. Wielomianowa interpolacja i aproksymacja
Wiele zjawiska zarówno fizycznych jak chemicznych opisywanych jest przez funkcje,
których nie znamy. Potrafimy jednakże mierzyć wartości tych funkcji lub ich pochodnych dla
określonych wartości argumentów. Przykładowo, w określonych chwilach czasu możemy
mierzyć ciśnienie, temperaturę, stężenie. W takich przypadkach mamy dane informacje o
funkcji f w postaci wartości funkcji lub jej pochodnych w oddzielnych punktach. Informacja
taka określana jest mianem dyskretnej, natomiast punkty, w których dana jest informacja o
funkcji nazywamy węzłami interpolacyjnymi.
ciągła funkcja f dana w formie dyskretnej
ciągła funkcja g
a
b
Rysunek 3.1. Funkcja f dana w formie dyskretnej oraz aproksymująca ją funkcja g. ♦ - węzły
interpolacji.
Inna sytuacja występuje wtedy, gdy z różnych rozważań najczęściej właściwości fizyko
– chemicznych znany jest przybliżony charakter funkcji f: na przykład wiemy, że jest to funkcja wykładnicza, wielomian niskiego stopnia, funkcja okresowa itp. Zadanie interpolacyjne w
tym przypadku polega na znalezieniu w ustalonej klasie funkcji „przybliżenia” g nieznanej
funkcji f, dla której spełnione zostanie odpowiednie kryterium zgodności. O takiej funkcji g
mówimy, że aproksymuje lub przybliża funkcję f.
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 47
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 48 z 246
Jedną z bardziej użytecznych i równocześnie dobrze poznanych funkcji pozwalających
przedstawiać (aproksymować) dane liczbowe są wielomiany algebraiczne, czyli funkcje dane w postaci:
n
Pn ( x ) = a 0 + a1 x + a 2 x 2 + K + a n x n = ∑ a i x i ,
(3.1)
i =0
gdzie n jest liczbą całkowitą dodatnią zwaną stopniem wielomianu oraz a 0 , a1 , a 2 , K a n są
współczynnikami wielomianu o wartościach rzeczywistych.
Głównym powodem ważności wielomianów jest to, że za ich pomocą można jednoznacznie aproksymować dowolną ciągłą funkcję rzeczywistą. Mówi o tym Twierdzenie We-
ierstrassa o aproksymacji.
f+eps
P
f
f-eps
a
b
Rysunek 3.2. Interpretacja geometryczna Twierdzenia Weierstrassa o aproksymacji. f – dana
funkcja; P – wielomian aproksymujący, eps – błąd aproksymacji.
Twierdzenie 3.1. Weierstrassa o aproksymacji
Jeżeli mamy dowolną zdefiniowaną funkcję f, ciągłą na przedziale domkniętym [a, b]
oraz daną pewną liczbę ε > 0, to istnieje wielomian P zdefiniowany na przedziale [a, b] taki,
że jest on zgodny z tą funkcją z określoną dokładnością ε, co zapisujemy:
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 48
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
f (x ) − P(x ) < ε ,
Strona 49 z 246
dla wszystkich x ∈ [a , b]
(3.2)
■
Jak z interpretacji geometrycznej twierdzenia Weierstrassa przedstawionej na rysunku
3.2. wynika, wielomian P aproksymujący daną funkcję f musi „zmieścić” się w pasie ograniczonym przez pewną małą liczbę ε będącą błędem aproksymacji.
Ważną cechą powodującą duże zainteresowanie wielomianami jako funkcjami aproksymującymi jest również to, że zarówno pochodne jak i całki z wielomianów są również wielomianami oraz są łatwe do wyznaczenia. Jest to ważne, ponieważ pozwala to na ich wykorzystanie do przybliżonego (numerycznego) różniczkowania, obliczania całek, rozwiązywania
zagadnień różniczkowych zwyczajnych oraz znajdowania zer równań nieliniowych.
3.1. Aproksymacja wielomianami Taylora
Rozdział ten poświęcony jest sposobowi znajdowania wielomianu określonego stopnia,
który zgodny jest z daną funkcją w zadanym punkcie x0. O takim wielomianie będziemy mówić, że jest wielomianem aproksymującym zadaną funkcję f. Przede wszystkim należy się
zastanowić, co to znaczy, że wielomian jest zgodny z daną funkcją w punkcie.
O wielomianie P będziemy mówić, że jest zgodny z zadaną funkcją f w punkcie x0, jeżeli zachodzi P(x0) = f(x0). Dodatkowo oczekiwać będziemy, że wielomian P będzie w zadanym
punkcie zachowywać się dokładnie tak samo jak funkcja w punkcie (x0, f(x0)). Oznacza to, że
wielomian będzie rosnący, jeżeli funkcja f jest rosnąca i malejący, jeżeli funkcja f jest malejąca, czyli spełniony będzie warunek P’(x0) = f’(x0). Kontynuując takie rozważania dojdziemy
do wniosku, że wielomian n – tego stopnia, który najlepiej aproksymuje zadaną funkcję f w
punkcie x0 powinien posiadać wszystkie pochodne zgodne z odpowiednimi pochodnymi
funkcji f. Takimi właściwościami charakteryzuje się wielomian Taylora n – tego stopnia
aproksymujący zadaną funkcję f w punkcie x0:
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 49
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 50 z 246
2
(
x − x0 )
+
Pn ( x ) = f ( x0 ) + f ′( x0 )( x − x0 ) + f ′′(x0 )
2!
(x − x0 ) + K + f (n ) (x ) (x − x0 )n =
+ f ′′′( x0 )
0
n!
3!
k
n
(x − x0 ) .
= ∑ f (k ) ( x0 )
k!
k =0
3
(3.3)
Błąd tej aproksymacji (nazywany również resztą wielomianu Taylora) dany jest równaniem:
f ( x ) − Pn ( x ) = Rn ( x ) = f
n +1
(ξ ( x ))
( x − x 0 )n +1
.
(n + 1)!
(3.4)
gdzie ξ(x) jest liczbą leżącą pomiędzy x a x0.
W szczególnym przypadku, gdy x0 = 0 mówimy o wielomianie lub szeregu Maclauri-
na.
Przykład 3.1.
Wyznaczyć wielomian Taylora trzeciego – stopnia w punkcie x0 = 0 aproksymujący
funkcję f ( x ) = (1 + x ) 2 .
1
a)
Wykorzystać otrzymany wielomian do obliczenia
1.1 oraz znaleźć oszacowanie błę-
du, jakim ta aproksymacja jest obarczona. Wartość dokładna z dokładnością do 8 cyfr
wynosi 1.1 = 1.0488088 .
b)
Wykorzystać otrzymany wielomian do obliczenia wartości całki
∫ (1 + x )
0.1
0
1
2
dx . Osza-
cować błąd tej aproksymacji. Wartość dokładna z dokładnością do 9 cyfr wynosi
∫ (1 + x )
0.1
0
1
2
dx = 0.102459822 .
Rozwiązanie
Konieczne do wyznaczenia wielomianu Taylora pochodne mają następującą postać:
f
(0 )
( x ) = f ( x ) = (1 + x )
f ′( x ) =
1
(1 + x )− 12 ,
2
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
1
2
,
oraz f (0) = 1 ,
oraz f ′(0) =
1
,
2
Strona 50
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
f ′′( x ) = −
f ′′′( x ) =
3
1
(1 + x )− 2 ,
4
5
3
(1 + x )− 2 ,
8
f (iv ) ( x ) = −
Strona 51 z 246
oraz f ′′(0) = −
oraz f ′′′(0) =
7
15
(1 + x )− 2 ,
16
1
,
4
3
,
8
oraz f (iv ) (ξ ) = −
7
15
(1 + ξ )− 2 .
16
gdzie ξ jest liczbą pomiędzy zero a x. Podstawiając do równania (3.3) poszczególne pochodne
otrzymamy następujący wielomian Taylora trzeciego stopnia:
x2
x3
′
′
′
+ f (0 ) =
2!
3!
1
1
1
1
1 1
3 1
= 1 + x − ⋅ x 2 + ⋅ x3 = 1 + x − x 2 + x3.
2
8
16
2
4 2!
8 3!
P3 ( x ) = f (0 ) + f ′(0 )x + f ′′(0)
Ad a) Obliczamy pierwiastek kwadratowy 1.1 :
1.1 = f (0.1) ≈ P3 (0.1) = 1 +
1
1
1
2
3
⋅ 0.1 − ⋅ (0.1) + ⋅ (0.1) = 1.0488125 .
2
8
16
Oszacowanie błędu związanego z tą aproksymacją wynika z wzoru na resztę wielomianu Taylora (równanie 3.4) i jest następujące:
15
−7
⋅ (1 + ξ ) 8
16
−7
(0.1)4 ≤ 15 (0.1)4 ⋅ ξmax
(
R3 (0.1) =
1+ ξ ) 8 =
∈[0 , 0.1]
16 ⋅ 24
4!
0.0005
=
⋅ (1) ≤ 3.91 × 10− 6.
128
−
Wziąwszy pod uwagę wartość dokładną, rzeczywisty błąd bezwzględny otrzymanego
oszacowania wynosi 1.0488125 − 1.048088 = 3.7 × 10 −6 , czyli jest porównywalny z otrzymanym oszacowaniem.
Ad b) Obliczamy wartość całki
0.1
∫ (1 + x )
0
1
0.1
2
dx =
∫ (1 + x )
0.1
0
1
2
dx :
0.1
1 2 1 3⎞
⎛ 1
∫0 P3 (x )dx = ∫0 ⎜⎝1 + 2 x − 8 x + 16 x ⎟⎠dx =
0.1
1
1 3 1 4⎤
⎡
x +
x
= 0.1024598958.
= ⎢ x + x2 −
4
24
64 ⎥⎦ 0
⎣
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 51
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 52 z 246
Oszacowanie błędu wynikające z wzoru na resztę wielomianu Taylora (równanie 3.4.)
jest następujące:
0.1
0.1
15
5
−7
4
∫0 R3 (x )dx = 16 ⋅ 4! ∫0 (1 + ξ ) 2 x dx ≤ 128
0.1
(1 + ξ )
∫ ξmax
[
]
0
−72
∈ 0 , 0.1
x 4 dx =
0.1
5 ⎡ x5 ⎤
−8
=
⎢ ⎥ = 7.82 × 10 .
128 ⎣ 5 ⎦ 0
Należy zwrócić uwagę na to, że reszta w tym przypadku jest ujemna (czwarta pochodna
0.1
∫ R (x )dx
ma znak minus) w związku, z czym błąd
3
jest również ujemny, co pociąga za sobą,
0
że rzeczywista wartość całki nie może być większa od jej aproksymacji. Stąd:
0.1
∫ P3 (x )dx −
0
0.1
∫
R3 ( x ) dx ≤
0
0.1
−
∫ (1 + ξ )
0
7
0.1
2
dx ≤ ∫ P3 ( x )dx .
0
Wykorzystując wcześniej uzyskane oszacowanie otrzymamy:
0.1
0.1024598176 ≤
∫ (1 + ξ )
− 12
≤ 0.1024598958 .
0
Natomiast rzeczywisty błąd bezwzględny wynosi 7.4×10-8.
■
Aproksymacja z zastosowaniem wielomianu Taylora, jest bardzo wygodnym narzędziem często stosowanym w trakcie rozwiązywania złożonych problemów obliczeniowych.
W takich przypadkach, celem uzyskania prostszych wyrażeń stosuje się rozwinięcia w szereg
Taylora, a następnie pomijane są wyrazy wyższego stopnia. Najczęściej przyjmuje się, że
stosowanie wielomianów odpowiednio wysokiego stopnie gwarantuje właściwą dokładność
obliczeń. Istnieje tu jednakże pewne niebezpieczeństwo związane głównie z doborem punktu,
wokół którego rozwijamy funkcję. Problem ten ilustruje kolejny przykład 3.2.
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 52
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 53 z 246
Przykład 3.2.
Wykorzystując otrzymaną w przykładzie 3.1 aproksymację funkcji f ( x ) = (1 + x ) 2 wie1
lomianem Taylora trzeciego stopnia przeprowadzić obliczenia dla wartości funkcji f(x) w różnych punktach x.
Rozwiązanie
Wyniki obliczeń wraz z błędami dla poszczególnych przybliżeń podano w tabeli 3.1.
Tabela 3.1. Aproksymacja funkcji f ( x ) = (1 + x ) 2 za pomocą wielomianu Taylora trzeciego
1
stopnia P3(x) dla różnych wartości x.
0.1
0.5
1
2
10
P3(x)
1.049913
1.2266
1.438
2.00
56.00
f(x)
1.048809
1.2247
1.414
1.73
3.32
P3 ( x ) − f ( x )
0.000004
0.0019
0.024
0.27
52.68
x
Wyprowadzona w przykładzie aproksymacja funkcji f(x) otrzymana została w otoczeniu punktu x0 = 0. Jak można zauważyć w miarę jak wartość zmiennej rośnie (oddala się od
punktu, w którym przeprowadzona została aproksymacja) błąd aproksymacji wzrasta.
■
W takim przypadku jak pokazany w przykładzie 3.2 bardzo często dokładność aproksymacji próbuje się poprawić zwiększając stopień wielomianu aproksymującego. Nie jest to
jednakże zawsze takie proste i nie w każdym przypadku zastosowanie wielomianu wyższego
stopnia daje poprawę aproksymacji. Pokazuje to kolejny przykład 3.3.
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 53
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 54 z 246
Przykład 3.3.
Zastosować aproksymację wielomianami Taylora różnego stopnia do funkcji f ( x ) =
1
x
w otoczeniu punktu x0 = 1. Korzystając z tej aproksymacji obliczyć wartość funkcji f(x) w
punkcie x = 3, czyli obliczyć f (3) =
1
3
Rozwiązanie
Obliczamy kolejne pochodne:
f
0
(x ) = f (x ) = 1 = (− 1)0 ⋅ x −1 ,
x
f ′( x ) = −
1
1
= (− 1) ⋅ x − 2 ,
2
x
f ′′( x ) = (− 1) ⋅ 2 ⋅
2
1
2
= (− 1) ⋅ 2 ⋅ x − 3 ,
3
x
f ′′′( x ) = (− 1) ⋅ 2 ⋅ 3 ⋅
3
1
2
= (− 1) ⋅ 3!⋅ x − 4 ,
4
x
i tak dalej aż do n – tej pochodnej
f
(n )
(x ) = (− 1)n ⋅ 2 ⋅ 3 ⋅ K ⋅ n ⋅
1
n
= (− 1) ⋅ n!⋅ x − n −1 .
n
x
Stąd wielomian Taylora aproksymujący funkcję f ( x ) =
1
dla n ≥ 1 przedstawić można
x
w następujący sposób:
n
Pn ( x ) = ∑ f
(k )
(1) (x − 1)
k =0
k!
k
n
= ∑ (− 1) ( x − 1)
k
k
k =0
Zgodnie z powyższym równaniem, kolejne trzy wielomiany Taylora mają postać:
P1 ( x ) = 2 − x ,
P2 ( x ) = 3 − 3x + x 2 ,
P3 ( x ) = 4 − 6 x + 4 x 2 − x 3 .
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 54
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 55 z 246
Wyniki aproksymowania wartości funkcji f (3) =
1
za pomocą wielomianów Taylora
3
Pn(x) dla kolejnych wartości stopnia wielomianu n podano w tabeli 3.2.
Tabela 3.2. Wyniki aproksymacji funkcji f (3) =
1
wielomianami Taylora Pn(x) dla kolejnych
3
wartości stopnia wielomianu n.
n
0
1
2
3
4
5
6
7
Pn(x)
1
-1
3
-5
11
-21
43
-85
4
3
P2(x)
2
1
f(x)
0
0
1
2
P3(x)
-1
3
4
P1(x)
Rysunek 3.3.Interpretacja geometryczna poszczególnych aproksymacji funkcji f ( x ) =
1
za
x
pomocą wielomianów Taylora Pn(x) stopnia n = 1, 2, 3.
Podane w tabeli 3.2 wyniki pokazują jak bardzo zastosowana do obliczeń aproksymacja
wielomianami Taylora odbiega od poprawnych obliczeń. Różnice te wynikają stąd, że wyraz
przedstawiający błąd (resztę) wielomianu Taylora ma postać:
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 55
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
R3
n +1
n +1
(
− 1) ( x − 1)
(x ) =
,
ξ n+2
Strona 56 z 246
gdzie 1 < ξ < x .
Jak z równania tego wynika błąd rośnie co do wartości bezwzględnej wraz z wzrostem
n. Związane jest to z tym, że wielomian aproksymujący wyprowadzony został w otoczeniu
punktu x0 = 1, natomiast obliczenia prowadzone są dla punktu x = 3, i ponieważ x0 – x jest
dużo większe od jeden, to kolejne potęgi tego wyrażenia rosną i to wykładniczo. W efekcie
im bardziej oddalamy się od punktu, wokół którego wyznaczono wielomian Taylora, tym
większe odchylenia obserwujemy (rysunek 3.3).
■
Ponieważ wielomiany Taylora tworzone są w taki sposób, że całość koniecznych do
uzyskania informacji podana jest dla jednego punktu x0, to problemy związane z ich użyciem, a pokazane w przykładach 3.2 oraz 3.3 są typowe i często spotykane. Wynika stąd generalne ograniczenie, które sprowadza się do tego, że aproksymacje wielomianami Taylora
wykorzystywane mogą być jedynie w bardzo niewielkim otoczeniu punktu x0. Z tych względów zastosowanie wielomianów Taylora jest nie zalecane do aproksymacji innych funkcji i w
zasadzie ograniczone do wyprowadzania różnorodnych metod numerycznych.
Rozwiązanie problemu aproksymacji wielomianowej można rozwiązać poprzez zastosowanie do konstrukcji wielomianów informacji zawartych w różnych punktach. Wymagać to
będzie zastosowania bardziej rozbudowanych metod obliczeniowych. Jednakże wziąwszy pod
uwagę możliwości współczesnych komputerów jako narzędzia pracy nie powinno stwarzać to
dużych problemów, natomiast oczekiwać należy zdecydowanie większych korzyści, gdy do
konstrukcji wielomianów wykorzystane zostaną informacje zawarte w różnych punktach.
3.2. Interpolacja wielomianami Lagrange’a
Zastosowanie wielomianów Taylora w praktyce jest niewielkie. Wynika to z ich ograniczonych zastosowań gdyż wykorzystać je można jedynie w bardzo małych przedziałach będących otoczeniem punktu, wokół którego wyprowadzony został wielomian. Dodatkowym
ograniczeniem jest to, że rozwijana funkcja musi mieć w tym obszarze pochodne i muszą być
one łatwe do wyznaczenia.
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 56
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 57 z 246
Jak pokazały przykłady z poprzedniego rozdziału wzrost stopnia wielomianów aproksymujących również nie rozwiązuje problemu dokładności aproksymacji. Sposobem na rozwiązanie tego problemu może być zastosowanie wielomianów wykorzystujących informacje
o aproksymowanej funkcji nie z jednego a kilku różnych punktów. Celem wprowadzenia
przeanalizujmy następujący przykład 3.4.
Przykład 3.4.
Dane są wartości standardowej entalpii tworzenia etanu w różnych temperaturach (tabela 3.3). Korzystając z powyższych danych należy obliczyć standardową entalpię tworzenia
etanu w temperaturze T = 440K.
Tabela 3.3. Wpływ temperatury na standardową entalpię tworzenia etanu.
Temp,
K
298
∆Hfo
300
400
500
600
700
800
900
1000
-20.24 -20.26 -21.42 -22.44 -23.29 -23.99 -24.54 -24.97 -25.28
Rozwiązanie
Celem obliczenia poszukiwanej wartości entalpii tworzenia etanu należy wyznaczyć
wielomian stopnia pierwszego przechodzący dokładnie przez dwa punkty (x0, y0) oraz (x1, y1),
pomiędzy którymi znajduje się poszukiwany wynik. Ponieważ interesuje nas entalpia w temperaturze t = 440 K, to jako punkty graniczne przyjmujemy x 0 = 400 oraz x1 = 500. Do obliczeń wykorzystujemy równanie prostej przechodzącej przez dwa zadane punkty:
P(x ) =
(x − x1 ) y + (x − x0 ) y = x − 500 ⋅ (−21.42) + x − 400 ⋅ (−22.44) =
(x0 − x1 ) 0 (x1 − x0 ) 1 400 − 500
500 − 400
= −1.02 × 10− 2 x − 17.34.
Można sprawdzić, przez proste podstawienie, że w punkcie x = x0 mamy:
P(x 0 ) =
(x − x 0 )
( x 0 − x1 )
y0 + 0
y = 1 ⋅ y 0 + 0 ⋅ y1 = y 0 ,
( x1 − x 0 ) 1
( x 0 − x1 )
oraz w punkcie x = x1 mamy:
P ( x1 ) =
(x − x 0 )
( x1 − x1 )
y0 + 1
y = 0 ⋅ y 0 + 1 ⋅ y1 = y1 .
( x1 − x 0 ) 1
( x 0 − x1 )
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 57
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 58 z 246
Oznacza to, że spełniony jest warunek nałożony na wielomian P(x) zgodnie, z którym
przechodzi on dokładnie przez dwa wyznaczone punkty.
Poszukiwaną przez nas odpowiedź obliczamy przez podstawienie:
P (440) = −1.02 × 10 −2 ⋅ 440 − 17.34 = −21.83 .
Jak stąd wynika standardowa entalpia tworzenia etanu w temperaturze T = 440 K wynosi ∆Hfo = -21.83 kcal/mol. Interpretację geometryczną pokazano na rysunku (3.4).
∆Hf, kcal/mol
-20
-22
-24
-26
200
400
600
800
1000
T, K
Rysunek 3.4. Zależność standardowej entalpii tworzenia etanu od temperatury (♦). Linia pogrubiona – prosta przechodząca przez punkty (x0, f(x0)) oraz (x1, f(x1)).
■
Przedstawiony w przykładzie (3.4) sposób postępowania jest często wykorzystywany w
pracy z tablicami zarówno matematycznymi jak też zawierającymi dane fizykochemiczne.
Najczęściej w takich przypadkach wykorzystuje się wielomiany stopnia pierwszego. Można
jednakże zastosować wielomiany wyższych stopni przechodzących przez trzy wybrane punkty (wielomiany stopnia drugiego), przez cztery wybrane punkty (wielomiany stopnia trzecieMariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 58
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 59 z 246
go) lub też ogólnie wielomiany stopnia n – tego przechodzące przez n+1 wybranych punktów. Tak zbudowane wielomiany przechodzące dokładnie przez wybrane punkty nazywa się
wielomianami interpolującymi, a metodę wykorzystującą tę technikę nazywa się interpolacją. Punkty, przez które wielomiany interpolacyjne przechodzą nazywane są węzłami interpolacji.
Równanie interpolacji liniowej (3.5) przechodzące dokładnie przez dwa punkty (x0,
f(x0)) oraz (x1, f(x1)) dane równaniem:
P(x ) =
(x − x 0 )
( x − x1 )
y0 +
y ,
( x1 − x 0 ) 1
( x 0 − x1 )
(3.5)
wykorzystuje dwa człony będące każdy wielomianem stopnia pierwszego:
L1,0 ( x ) =
( x − x1 )
,
( x 0 − x1 )
(3.6)
L1,1 ( x ) =
(x − x0 )
.
( x1 − x 0 )
(3.7)
oraz
Cechą charakterystyczną dla tych wielomianów jest to, że kiedy x = x0, to L1,0(x0) = 1
natomiast L1,1(x0) =0 oraz kiedy x = x1, to L1,0(x1) = 0 natomiast L1,1(x1) =1.
Każdy z powyższych wielomianów L ma dwa indeksy. Pierwszy indeks wskazuje na
stopień wielomianu (w tym przypadku jest to wielomian stopnia pierwszego). Drugi natomiast indeks wskazuje na to, w którym węźle interpolacji dany wielomian przyjmuje wartość
1. Czasami, gdy nie ma wątpliwości, co do stopnia wielomianu, pierwszy z tych indeksów
pomija się.
Korzystając z wielomianów (3.6) oraz (3.7) liniowy wielomian interpolujący funkcję f
zapisać można w następujący, równoważny do równania (3.5) sposób:
1
P1 ( x ) = f ( x 0 )L1,0 ( x ) + f ( x1 )L1,1 ( x ) = ∑ f ( x i )L1,i ( x ) .
(3.8)
i =0
Wielomian ten w węzłach interpolacji przyjmuje wartości: w punkcie x0 wartość f(x0)
oraz w punkcie x1 wartość f(x1).
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 59
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 60 z 246
W analogiczny sposób zdefiniować można wielomian interpolacyjny stopnia drugie-
go przechodzący dokładnie przez trzy punkty: (x0, f(x0)), (x1, f(x1)) oraz (x2, f(x2)). W tym
przypadku wyznaczyć należy trzy wielomiany stopnia drugiego postaci:
L2,0 ( x ) =
( x − x1 ) ⋅ ( x − x 2 )
,
( x 0 − x1 ) ⋅ ( x 0 − x 2 )
(3.9)
L2,1 ( x ) =
(x − x 0 ) ⋅ (x − x 2 )
,
( x 1 − x 0 ) ⋅ ( x1 − x 2 )
(3.10)
L2 , 2 ( x ) =
( x − x 0 ) ⋅ ( x − x1 )
.
( x 2 − x 0 ) ⋅ ( x 2 − x1 )
(3.11)
oraz
Każdy z tych wielomianów przyjmuje wartość 1 odpowiednio w punkcie x0 wielomian
L2,0(x0), w punkcie x1 wielomian L2,1(x1) oraz w punkcie x2 wielomian L2,2(x2). Natomiast w
pozostałych węzłach interpolacji wielomiany te przyjmują wartość 0. Analogicznie do wielomianu liniowego interpolującego funkcję f (równanie 3.8), podać można wielomian interpolacyjny stopnia drugiego interpolujący funkcję f:
2
P2 ( x ) = f ( x 0 )L2,0 ( x ) + f ( x1 )L2,1 ( x ) + f ( x1 )L2, 2 ( x ) = ∑ f ( x i )L2,i ( x ) .
(3.12)
i =0
Co łatwo sprawdzić, wielomian ten w węzłach interpolacji przyjmuje wartości: w punkcie x0 wartość f(x0), w punkcie x1 wartość f(x1) oraz w punkcie x2wartość f(x2).
Uogólniając powyższe rozważania możemy dla każdego z k = 0, 1, 2, ..., n węzłów interpolacji podać odpowiedni wielomian Ln,k(x) będący wielomianem n – tego stopnia posiadający takie właściwości, że:
Ln , k ( xi ) = 0,
Ln , k ( xk ) = 0,
dla kazdego i ≠ k ,
(3.13)
dla i = k .
Po to, aby spełnić warunek Ln,k(xi) = 0 dla każdego i ≠ k koniecznym jest, aby licznik
wielomianu Ln,k zawierał wyrażenie:
( x − x 0 )( x − x1 )L ( x − x k −1 )( x − x k +1 )L ( x − x n ) .
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 60
(3.14)
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 61 z 246
Natomiast po to, aby spełniony był warunek Ln,k(xk) = 1 mianownik Ln.k musi być równy
wyrażeniu (3.14) dla x = xk. Oznacza to, że poszukiwany wielomian n – tego stopnia mający
właściwości (3.13) będzie miał postać:
(x − x0 )(x − x1 )L(x − xk −1 )(x − xk +1 )L(x − xn ) =
(xk − x0 )(xk − x1 )L(xk − xk −1 )(xk − xk +1 )L(xk − xn )
n
(x − xi ) .
=∏
i = 0 ( xk − xi )
Ln , k ( x ) =
(3.15)
i≠k
Interpretację geometryczną wielomianów postaci (3.15) pokazano na rysunku (3.5).
6
Ln,k(x)
4
2
0
0
2
4
6
8
10
-2
x
Rysunek 3.5. Interpretacja geometryczna wielomianu interpolacyjnego Ln,k(x) w postaci danej
wzorem (3.15).
Wielomian n – tego stopnia interpolujący funkcję f i wykorzystujący wielomiany postaci (3.15) przedstawić można analogicznie do równania (3.8) oraz (3.12) w formie:
n
Pn ( x ) = f ( x 0 )Ln ,0 ( x ) + f ( x1 )Ln ,1 ( x ) + K + f ( xn )Ln ,n ( x ) = ∑ f ( x i )Ln ,i ( x i ) . (3.16)
i =0
Tak zdefiniowane wielomiany spełniają warunek Pn(xk) = f(xk) dla każdego k = 0, 1, 2,
..., n. Ich konstrukcja jest łatwa o ile znana jest postać wielomianów składowych Ln,k. WieloMariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 61
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 62 z 246
miany w formie podanej równaniem (3.16) gdzie Ln,k(x) dane jest równaniem (3.15) nazywane
są wielomianami interpolacyjnymi Lagrange’a. Ich praktyczne zastosowanie pokazano w
kolejnym przykładzie 3.5.
Przykład 3.5.
Dana jest funkcja f ( x ) = 1 . Wyznaczyć interpolacyjny wielomian Lagrange’a drux
giego stopnia interpolujący zadaną funkcję w węzłach x0 = 2, x1 = 2.5 oraz x2 = 4. Korzystając z wyznaczonego wielomianu oszacować wartość zadanej funkcji w punkcie x = 3. Porównać otrzymany wynik z wartością dokładną.
Rozwiązanie
Najpierw należy wyznaczyć wielomiany L2,0, L2,1 oraz L2,2:
L2 , 0 ( x ) =
( x − 2.5)( x − 4 ) = x 2 − 6.5 x + 10 ,
(2 − 2.5)(2 − 4)
L2,1 ( x ) =
( x − 2 )( x − 4 ) = 1 (− 4 x 2 + 24 x − 32) ,
(2.5 − 2 )(2.5 − 4 ) 3
L2 , 2 ( x ) =
( x − 2 )( x − 2.5) = 1 (x 2 − 4.5 x + 5) .
(4 − 2 )(4 − 2.5) 3
Stąd, ponieważ f(x0) = f(2) = 0.5, f(x1) = f(2.5) = 0.4 oraz f(x2) = f(4) = 0.25 mamy:
2
P2 ( x ) = ∑ f ( xi )L2,i ( x ) = f ( x0 )L2, 0 ( x ) + f (x1 )L2,1 ( x ) + f (x1 )L2, 2 ( x ) =
i =0
(
)
(
)
(
)
0.4
0.25 2
− 4 x 2 + 24 x − 32 +
x − 4.5 x + 5 =
3
3
= 0.05 x 2 − 0.425 x + 1.15 = (0.05 x − 0.425)x + 1.15.
= 0.5 x 2 − 6.5 x + 10 +
Przebieg funkcji f ( x ) = 1
x
oraz wielomianu Lagrange’a drugiego stopnia interpolują-
cego zadaną funkcję w węzłach x0 = 2, x1 = 2.5 oraz x2 = 4 przedstawiono na rysunku 3.6.
Jak można zauważyć w przedziale, na którym wyznaczony został wielomian interpolacyjny
obserwujemy dobrą zgodność zadanej funkcji z jej interpolantą. Odchylenia pomiędzy tymi
dwiema funkcjami obserwujemy jedynie poza przedziałem interpolacji. Przy czym odchylenia te są tym większe im bardziej oddalamy się od granic przedziału interpolacji.
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 62
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 63 z 246
4
f
f(x), P(x)
3
2
P
1
0
0
1
2
3
4
5
6
x
Rysunek 3.6. Przebieg funkcji f ( x ) = 1
x
oraz wielomianu Lagrange’a drugiego stopnia in-
terpolującego zadana funkcję w punktach x0 = 2, x1 = 2.5 oraz x2 = 4.
Przybliżona wartość funkcji f obliczana z wielomianu interpolacyjnego wynosi
f (3) ≈ P2 (3) = 0.325 . Uzyskane przybliżenie obarczone jest błędem bezwzględnym wynoszą-
cym f (3) − P2 (3) = 8.333 × 10 −3 . Błąd względny natomiast wynosi
f (3) − P2 (3)
f (3)
= 2.5 × 10− 2 ,
co wskazuje, że uzyskane oszacowanie ma dwie cyfry znaczące.
■
O oszacowaniu błędu, jaki związany jest z interpolacją wielomianami Lagrange’a mówi
następujące twierdzenie (3.2):
Twierdzenie 3.2.
Niech x0, x1, ..., xn będą różnymi liczbami z przedziału domkniętego [a, b] oraz niech
dana będzie funkcja ciągłą f ( x ) ∈ C n +1 [a, b] . Wtedy dla każdego x należącego do przedziału
domkniętego [a, b], ( x ∈ [a, b] ), istnieje taka liczba ξ ∈ (a, b ) , że
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 63
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
f (x ) = P(x ) +
Strona 64 z 246
(ξ ) ( x − x )( x − x )L ( x − x ) .
0
1
n
(n + 1)!
f
(n +1)
(3.17)
gdzie P jest wielomianem interpolacyjnym Lagrange’a danym równaniem (3.16)
■
Wyrażenie (3.17) podające oszacowanie błędu interpolacji z zastosowaniem wielomianów Lagrange’a jest bardzo ważnym rezultatem z uwagi na duże znaczenie tych wielomianów w analizie numerycznej, a w szczególności w zastosowaniach związanych z numerycznymi metodami różniczkowania i całkowania funkcji. Oszacowania błędów, jakie powstają w
tych obliczeniach wynikają właśnie z równania (3.17).
Analizując wyrażenie na oszacowanie błędu w interpolacji wielomianami Lagrange’a
zwrócić należy uwagę na duże podobieństwo tego wyrażenia do oszacowania błędu wielomianami Taylora (równanie 3.4):
(ξ ) ( x − x )n +1 .
0
(n + 1)!
f
f ( x ) − Pn ( x ) = R n ( x ) =
n +1
(3.4)
W przypadku wielomianów Taylora, do których wyznaczenia wykorzystuje się informację podaną tylko w jednym punkcie x0 reszta Rn zależy od członu ( x − x 0 )
n +1
. Natomiast
wielomiany Lagrange’a wykorzystują informację podaną w n+1 różnych punktach x0, x1, ...,
xn. W związku, z czym wyrażenie na resztę używa iloczynu ( x − x 0 )( x − x1 )L ( x − x n ) :
f ( x ) − P( x ) = Rn ( x ) =
(ξ ) ( x − x )( x − x )L ( x − x ) .
0
1
n
(n + 1)!
f
( n +1 )
(3.18)
Dodatkowo z wyrażenia na resztę wielomianu Lagrange’a (równanie 3.18) wynika, że
mogą być one stosowane jedynie w tych przypadkach, w których interpolowane funkcje posiadają ograniczone pochodne odpowiednio wysokiego stopnia.
Jednym z istotnych pytań, na jakie należy sobie odpowiedzieć stosując wielomiany interpolacyjne to pytanie o odległość pomiędzy poszczególnymi punktami interpolacji, i jej
wpływ na błąd bezwzględny (jak również względny) uzyskanego przybliżenia. Problem ten
przybliża kolejny przykład 3.6.
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 64
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 65 z 246
Przykład 3.6
Dana jest funkcja
f ( x ) = e x , którą należy stabelaryzować dla różnych wartości
x ∈ [0,1] . Załóżmy, że wartości tej funkcji dane są z dokładnością d cyfr po przecinku. Ozna-
cza to, że jeżeli d = 5, to f(1) = 2.71828. Załóżmy również, że poszczególne punkty, w których funkcja f jest stabelaryzowana dane są w jednakowej odległości jeden od drugiego z krokiem h.
(a) Zakładając, że d ≥ 6 określić, z jakim krokiem h należy przeprowadzić interpolację liniową (wyznaczyć wielomian interpolacyjny Lagrange’a stopnia pierwszego), aby oszacowanie błędu bezwzględnego było nie większe niż 10-6.
(b) Czy jeżeli d < 6 można znaleźć taki krok h w interpolacji liniowej, aby błąd bezwzględny
oszacowania był nie większy niż 10-6.
Rozwiązanie
Ad (a). Niech x ∈ [0,1] , oraz załóżmy, że mamy takie j, że x j ≤ x ≤ x j +1 . Z równania (3.18)
otrzymujemy następujące oszacowanie błędu w interpolacji liniowej:
f (x ) − P(x ) =
f
(ξ ) (x − x )(x − x ) =
j
j +1
(2 )!
(2 )
f
(2 )
(ξ )
2
x − x j x − x j +1 .
Krok, z jakim przeprowadzana jest interpolacja jest stały i wynosi h. W związku z tym
możemy zapisać xj = jh oraz xj+1 = (j+1)h. Stąd:
f (x ) − P(x ) ≤
f (2 ) (ξ )
2
(x − jh )(x − ( j + 1)h ) ≤
1
max f (2 ) (ξ ) max ( x − jh )(x − ( j + 1)h ) =
x j ≤ x ≤ x j +1
2 ξ ∈[0,1]
1
= max eξ max ( x − jh )( x − ( j + 1)h ) ≤
2 ξ ∈[0,1] x j ≤ x ≤ x j +1
1
≤ e max ( x − jh )( x − ( j + 1)h ) .
2 x j ≤ x ≤ x j +1
≤
Celem oszacowania występującego w powyższym wyrażeniu maksimum przeanalizujmy przebieg następującej funkcji:
g ( x ) = ( x − jh )( x − ( j + 1)h ),
dla x j ≤ x ≤ x j +1 .
Dla funkcji g można pokazać następujące oszacowanie:
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 65
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 66 z 246
1 ⎞ ⎞ h2
⎛⎛
.
max g ( x ) = g ⎜ ⎜ j + ⎟h ⎟ =
x j ≤ x ≤ x j +1
2⎠ ⎠
4
⎝⎝
W efekcie oszacowanie błędu w interpolacji liniowej wielomianami Lagrange’a ma następującą postać:
f (x ) − g (x ) ≤
eh 2
.
8
Chcąc odpowiedzieć na zadane w punkcie (a) pytanie przeprowadzić należy następujące
obliczenia:
eh 2
8
≤ 10− 6 , h 2 ≤ × 10− 6 , h 2 ≤ 2.944 × 10− 6 stąd h ≤ 1.72 × 10−3 .
8
e
Jak stąd wynika krok h = 0.001 całkowicie wyczerpuje przyjęte założenia.
Ad (b). Odpowiadając na pytanie zawarte w punkcie (b) należy sobie uświadomić, że
dysponując tablicami zawierającymi dane podane z dokładnością do pięciu cyfr dziesiętnych,
jest niemożliwe stosując metody interpolacji uzyskać dokładność sześciu cyfr dziesiętnych.
Wynika to stąd, że metody interpolacyjne nie są wstanie poprawić dokładności danych. Z
tego też względu nie można odpowiedzieć na zadane w punkcie (b) pytanie.
■
Oszacowanie błędu interpolacji wymaga, zgodnie z równaniem (3.18) znajomości odpowiedniej pochodnej interpolowanej funkcji, natomiast bardzo często występuje sytuacja, w
której nie dysponujemy taką informacją. Jeżeli jednakże musimy oszacować błąd interpolacji,
to typowym rozwiązaniem jest zastosowanie wielomianów interpolacyjnych różnego stopnia i
porównanie uzyskanych wyników. Problem ten ilustruje kolejny przykład 3.7.
Przykład 3.7
W tabeli 3.4 podano wartości pewnej funkcji f (w tym przypadku jest to funkcji Bessela
pierwszego rodzaju i zerowego rzędu) w różnych punktach. Stosując interpolację wielomianami Lagrange’a oszacować wartość funkcji f w punkcie x = 1.5. Podać błąd interpolacji.
Tabela 3.4. Wartości funkcji Bessela pierwszego rodzaju i zerowego rzędu w różnych punktach.
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 66
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 67 z 246
x
f(x)
1.0
0.7651977
1.3
0.6200860
1.6
0.4554022
1.9
0.2818186
2.2
0.1103623
Rozwiązanie
Ponieważ punkt x = 1.5 leży pomiędzy 1.3 a 1.6, to do wyznaczenia wielomianu liniowego wykorzystamy punkty x0 = 1.0 oraz x1 = 1.6. Wartość liniowego wielomianu interpolacyjnego w x = 1.5 obliczamy z następującego wyrażenia:
P1 (1.5) =
1.5 − 1.6
1.5 − 1.3
⋅ 0.6200860 +
⋅ 0.4554022 = 0.5102968 .
1.3 − 1.5
1.6 − 1.3
Do wskazanego oszacowania wartości funkcji użyć można dwóch wielomianów Lagrange’a stopnia drugiego. Jeden z nich zbudowany być może na węzłach interpolacji x0 =
1.3, x1 = 1.6 oraz x2 = 1.9 i prowadzi do uzyskania oszacowania:
(1.5 − 1.6)(1.5 − 1.9) ⋅ 0.6200860 + (1.5 − 1.3)(1.5 − 1.9) ⋅ 0.4554022 +
(1.3 − 1.5)(1.3 − 1.9)
(1.6 − 1.3)(1.6 − 1.9)
(1.5 − 1.3)(1.5 − 1.6) ⋅ 0.2818186 = 0.5112857.
+
(1.9 − 1.3)(1.9 − 1.6)
P2 (1.5) =
oraz drugi zbudowany na węzłach interpolacji x0 = 1.0, x1 = 1.3 oraz x2 = 1.6 i prowadzi do
uzyskania oszacowania:
Pˆ2 (1.5) = 0.5124715 .
Również w przypadku wielomianów Lagrange’a stopnia trzeciego wskazać można dwa
wielomiany. Jeden zbudowany na węzłach interpolacji x0 = 1.3, x1 = 1.6, x2 = 1.9 oraz x3 =
2.2 prowadzi do uzyskania oszacowania:
P3 (1.5) = 0.5118302 ,
oraz drugi zbudowany na węzłach interpolacji x0 = 1.0, x1 = 1.3, x2 = 1.6 oraz x3 = 1.9 prowadzi do uzyskania oszacowania:
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 67
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 68 z 246
Pˆ3 (1.5) = 0.5118127
W przypadku wielomianu Lagrange’a stopnia czwartego wyznaczyć można tylko jeden
wielomian zbudowany na węzłach interpolacji x0 = 1.0, x1 = 1.3, x2 = 1.6, x3 = 1.9 oraz x4 =
2.2 i prowadzi do uzyskania oszacowania:
P4 (1.5) = 0.5118200 .
Jak można zauważyć, analizując uzyskane dla wielomianów Lagrange’a różnego stopnia wyniki, aproksymacje P3 (1.5), P̂3 (1.5) oraz P4 (1.5) dają podobne wyniki. Różnice pomiędzy
nimi są nie większe od 2×10-5 jednostek. Z tego względu przyjąć możemy, że najlepsze oszacowanie uzyskuje się stosując wielomian P4(1.5), oraz że błąd tej aproksymacji jest niewiększy od 2×10-5 jednostek.
Jednakże znając prawdziwą wartość funkcji f(1.5) = 0.5118277 porównać możemy błędy poszczególnych aproksymacji:
P1 (1.5) − f (1.5) ≈ 1.53 × 10 −3 ,
P2 (1.5) − f (1.5) ≈ 5.42 × 10 −4 ,
Pˆ2 (1.5) − f (1.5) ≈ 6.44 × 10−4 ,
P3 (1.5) − f (1.5) ≈ 2.5 × 10 −6 ,
Pˆ3 (1.5) − f (1.5) ≈ 1.50 × 10−5 ,
P4 (1.5) − f (1.5) ≈ 7.7 × 10 −6 .
Porównując błędy bezwzględne dla poszczególnych wielomianów interpolacyjnych Lagrange’a stwierdzić możemy, że najlepsze (najdokładniejsze) oszacowanie daje wielomian
stopnia trzeciego P3. Musimy jednakże zdawać sobie sprawę z tego, że nie znając prawdziwej
wartości funkcji f(1.5) nie możemy w żaden sposób tego stwierdzić i musimy wobec tego
przyjąć do obliczeń wielomian P4. Dodatkowo musimy pamiętać o tym, że nie możemy
wspomóc się oszacowaniem błędu z równania (3.18) ponieważ nieznana jest nam postać
funkcji, którą interpolujemy i tym bardziej nie znane nam są pochodne tej funkcji. Problem w
tym, że taka sytuacja jest niezwykle częsta.
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 68
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 69 z 246
■
Jedną z istotnych niedogodności w zastosowaniu wielomianów Lagrange’a definiowanych w przedstawiony powyżej sposób, a wynikającej z trudności w wykorzystaniu oszacowania błędu interpolacji danego równaniem (3.18) jest to, że nie potrafimy z góry przewidzieć
najwyższego stopnia wielomianu, jaki należy użyć chcąc uzyskać jak najlepsze oszacowanie.
Jak przykład 3.7. pokazuje jedynym sposobem postępowania jest wyznaczenie wielomianów
różnego stopnia i porównanie wyników, jakie one generują. Problem ten rozwiązuje zastosowanie specjalnych algorytmów pozwalających na rekurencyjne wyznaczanie kolejnych wielomianów interpolacyjnych Lagrange’a. W literaturze znane są one jako algorytm Neville’a
oraz algorytm Newtona. Jest to problem do samodzielnego studiowania.
3.3. Interpolacja wielomianami sklejanymi (funkcjami spline) stopnia trzeciego
W dotychczas rozpatrywanych zadaniach interpolacyjnych zakładaliśmy, że dana funkcja f przybliżana jest jednym wielomianem na całym przedziale [a, b]. Przy takim założeniu
jedyną możliwością uzyskania lepszego przybliżenia jest zwiększenie stopnia wielomianu
interpolacyjnego. Taki sposób postępowania stwarza jednakże pewne problemy obliczeniowe
wynikające z właściwości wielomianów. Przede wszystkim wielomiany wyższego stopnia
charakteryzują się oscylacyjnym przebiegiem, co pokazuje rysunek 3.5. Drugą niedogodnością związaną z zastosowaniem wielomianów wysokiego stopnia jest to, że są one niezwykle
czułe na niewielkie nawet zaburzenia zarówno danych, z jakich się korzysta jak też wyznaczonych na tej podstawie współczynników. Zaburzenia te bardzo silnie przenoszą się na
otrzymywane wyniki, co pokazuje przykład 2.18.
Rozwiązaniem alternatywnym jest podział danego przedziału na mniejsze części – podprzedziały i wyznaczenie na każdym z nich innego wielomianu aproksymacyjnego. Tego typu
funkcje wielomianowe nazywa się wielomianami sklejanymi lub wielomianowymi funk-
cjami sklejanymi.
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 69
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 70 z 246
Najprostszym przykładem aproksymacji wielomianami sklejanymi jest interpolacja
funkcją kawałkami liniową. W tym przypadku, jeżeli mamy ciąg punktów dzielących dany
przedział [a, b] na n podprzedziałów w taki sposób, że:
a = x 0 < x1 < x 2 < K < x i −1 < x i < x i −1 < K < x n −1 < x n = b ,
(3.19)
oraz mamy dane wartości aproksymowanej funkcji f(xi) dla każdego węzła interpolacji xi, i =
0, 1,2, ..., n, to sklejana funkcja będąca kawałkami funkcją liniową wyznaczona jest w ten
sposób, że łączy ona parami każde kolejne i sąsiadujące ze sobą punkty. Ta metoda interpolacji jest bardzo często wykorzystywana wtedy, gdy korzystamy z tablic różnorodnych wartości, z których chcemy wyznaczyć wartości pośrednie. Podany w równaniu (3.19) podział
przedziału domkniętego [a, b] jest często nazywany siatką interpolacji.
Dużą niedogodnością tego sposobu postępowania jest to, że w każdym z punktów siatki
interpolacji zdefiniowana w ten sposób funkcja jakkolwiek jest ciągłą to nie jest ona w tych
punktach różniczkowalna. W interpretacji geometrycznej oznacza to, że funkcja taka nie jest
gładka w tych punktach. Wymóg gładkości funkcji jest bardzo często ważny w rozważaniach
fizykochemicznych i z tego względu wymagamy, aby funkcja aproksymująca miała ciągłą
pochodną.
Prostym sposobem skonstruowania funkcji będącej kawałkami funkcją wielomianową
oraz mającej ciągłą pochodną na całym przedziale [a, b] jest zastosowanie wielomianu stopnia drugiego na każdych z kolejnych, sąsiadujących ze sobą węzłach interpolacji. Oznacza to,
że na przedziale [x0, x1] konstruujemy funkcję kwadratową, która w węźle x1 jest „zgodna” z
kolejną funkcją kwadratową zbudowaną na węzłach [x1, x2], która to funkcja jest „zgodna” w
węzłach x1 oraz x2 z funkcjami sąsiadującymi, które to ..., i tak dalej i tak dalej.
f ( x ) = a + bx + cx 2 .
(3.20)
Ponieważ wielomiany kwadratowe mają trzy współczynniki (równanie 3.20): wyraz
wolny, współczynnik przy x oraz współczynnik przy x2, to wystarczą dwa warunki do ich
wyznaczenia.
Zdecydowanie bardziej użyteczne okazują się wielomianowe funkcje sklejane stopnia
trzeciego:
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 70
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 71 z 246
Definicja 3.1. wielomianowej funkcji sklejanej stopnia trzeciego
Dana jest funkcja f określona w przedziale domkniętym [a, b] oraz zbiór punktów (węzłów) xi, i = 0, 1, 2, ..., n takich, że dzielą one przedział [a, b] na n podprzedziałów:
a = x 0 < x1 < x 2 < K < x i −1 < x i < x i −1 < K < x n −1 < x n = b .
(3.21)
Funkcję S spełniającą warunki:
(i)
S jest wielomianem interpolacyjnym stopnia trzeciego wyznaczonymi na każdym podprzedziale [xi, xi+1], i = 0, 1, 2, ..., n-1, co zapisujemy Si.
(ii)
S w całym przedziale [a, b] ma ciągłą drugą pochodną.
nazywamy wielomianową interpolacyjną funkcją sklejaną stopnia trzeciego.
■
Z warunku (i) definicji funkcji spline wynika, że w węzłach zachodzi:
S ( xi ) = f ( xi ) dla każdego i = 0,1,K, n .
(3.22)
Natomiast warunek ciągłości drugiej pochodnej w punktach sklejania (warunek (ii) definicji), co zapisujemy:
Si′′( xi +1 ) = Si′′+1 (xi +1 ) dla każdego i = 0,1,K, n
(3.23)
oznacza ciągłość w punktach sklejania zarówno pierwszej pochodnej
S ′j (x j +1 ) = S ′j +1 (x j +1 ) dla każdego i = 0,1,K, n
(3.24)
jak i samej funkcji spline:
S j (x j +1 ) = S j +1 (x j +1 ) dla każdego i = 0,1,K, n .
(3.25)
Drugie pochodne wielomianowej funkcji spline stopnia trzeciego bardzo często w
literaturze oznacza się dużą literą M i nazywa momentami funkcji spline.
Korzystając z warunków (i) oraz (ii) definicji funkcji spline stwierdzić możemy, że druga pochodna funkcji spline na każdym z podprzedziałów jest funkcją liniową, co zapisać możemy w postaci równania:
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 71
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
S ′′( x ) =
Strona 72 z 246
xi − x
x − xi −1
M i −1 +
M i dla każdego i = 0,1,K, n ,
xi − xi −1
xi − xi −1
(3.26)
gdzie
M i = S ′′( xi ) dla każdego i = 0,1,K, n .
(3.27)
Całkując wyrażenie (3.26) stronami, otrzymujemy dla x ∈ [x i −1 , x i ]
S ′( x ) =
( x − x i −1 )2
( x i − x )2
M i −1 +
M i + Ai ,
2( x i − x i −1 )
2( x i − x i −1 )
(3.28)
oraz
( x − x i −1 )3
( x i − x )3
S (x ) =
M i −1 +
M i + A i ( x − x i −1 ) + Bi ,
6( x i − x i −1 )
6( x i − x i −1 )
(3.29)
gdzie Ai oraz Bi są stałymi. Nakładając na (3.28) oraz (3.29) warunki interpolacji (warunek (i)
definicji 3.1) otrzymamy:
hi2
S ( x i −1 ) =
M i −1 + Bi = f i −1 ,
6
S (x i ) =
(3.30)
hi2
M 1 + Ai hi + Bi = f i ,
6
(3.31)
i obliczamy stałe całkowania dla każdego podprzedziału [xi-1, xi], i = 1, 2, ..., n:
Ai =
f i − f i −1 hi
− (M i − M i −1 ) ,
hi
6
Bi = f i −1 −
(3.32)
hi2
Mi ,
6
(3.33)
gdzie hi = xi − xi −1 , f i = f ( xi ) , i = 1,2, K n .
Podstawiając wyznaczone stałe do równania (3.29) otrzymamy następujące wyrażenie
definiujące wielomianową funkcję sklejaną stopnia trzeciego:
3
(
xi − x )
S (x ) =
M
6hi
i −1
3
(
x − xi −1 )
M
+
6hi
i
+
(x − x ) ⎛⎜ f
+ i
6hi
⎞ ( x − xi −1 ) ⎛
⎞
hi2
hi2
⎟
⎜
−
+
−
M
f
M i ⎟⎟.
i
⎜ i −1 6 i −1 ⎟
⎜
6hi ⎝
6
⎝
⎠
⎠
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 72
(3.34)
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 73 z 246
Momenty Mi funkcji spline wyznaczamy z warunku ciągłości pierwszej pochodnej w
punktach sklejania (równanie 3.24). Porównując odpowiednie pochodne w punktach sklejania:
S i′−1 ( x i ) =
hi
h
f − f i −1
,
M i −1 + i M i + i
6
3
hi
(3.35)
S i′ ( x i ) = −
hi +1
h
f − fi
,
M i − i +1 M i +1 + i +1
6
3
hi +1
(3.36)
otrzymamy następujący układ n – 1 niezależnych liniowo równań z n + 1 niewiadomymi:
hi
h + hi +1
h
f − fi
f − f i −1
M i −1 + i
M i + i +1 M i +1 = i +1
− i
,
6
3
6
hi +1
hi
i = 1,2, K n − 1 . (3.37)
Równanie to wygodniej jest zapisać w postaci:
µ i M i −1 + 2 M i + λi M i +1 = d i ,
i = 1,2 K , n − 1 ,
(3.38)
gdzie:
λi =
hi +1
,
hi + hi +1
(3.39)
µ i = 1 − λi ,
di =
6
hi + hi +1
(3.40)
⎛ f i +1 − f i
f − f i −1 ⎞
⎜⎜
⎟⎟ .
− i
hi
⎝ hi +1
⎠
(3.41)
Jeżeli Mi spełnia powyższy układ równań, to funkcja S(x) określona wzorem (3.34) na
każdym podprzedziale [xi-1, xi], i = 1, 2, ..., n, jest interpolacyjną funkcją sklejaną (funkcją
spline) stopnia trzeciego.
Chcąc zapewnić jednoznaczność rozwiązania układu równań (3.38) należy dołączyć do
niego dwa dodatkowe równania, tak zwane warunki brzegowe. Są one źródłem dodatkowych informacji o analizowanej funkcji. Warunki brzegowe formułuje się w różny sposób.
Jednakże najczęściej jako warunki brzegowe przyjmuje się:
S ′′(a ) = M 0 = f ′′( x 0 ),
S ′′(b ) = M n = f ′′( x n ) ,
(3.42a)
lub
S ′(a ) = f ′(a ),
S ′(b ) = f ′(b ) .
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
(3.42b)
Strona 73
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 74 z 246
Pierwszy warunek określany jest czasami warunkiem swobodnym, a funkcję spline
spełniającą ten warunek nazywa się swobodną funkcją spline. Dość często, gdy nie znamy
rzeczywistych wartości drugich pochodnych interpolowanej funkcji przyjmuje się M0 = Mn =
0. Swobodna funkcja spline spełniająca ten warunek, nazywana jest również naturalną funk-
cją spline. Geometrycznie funkcję tę wyobrazić sobie można jako długi giętki pręt przechodzący przez wszystkie węzły interpolacji.
Zastosowanie warunku (3.42a) prowadzi do układu równań:
2M 1 + λ1M 2 = d1 − µ1M 0 ,
µi M i −1 + 2M i + λi M i +1 = di , i = 1,2K, n − 2,
µ n −1M n − 2 + 2M n −1 = d n −1 − λn −1M n ,
M 0 = f ′′(x0 ),
(3.43)
M n = f ′′( xn ).
Korzystając natomiast z warunku (3.42b) otrzymamy układ równań:
⎞
6 ⎛ f1 − f 0
⎜⎜
− f 0′ ⎟⎟,
h1 ⎝ h1
⎠
µi M i −1 + 2M i + λi M i +1 = di , i = 1,2K, n − 1,
2 M 1 + λ1M 2 =
µ n M n −1 + 2 M n =
(3.44)
6⎛
f − f n −1 ⎞
⎟⎟.
⎜⎜ f n′ − n
hn ⎝
hn
⎠
Powyższe układy równań (3.43) oraz (3.44) wygodniej jest zapisać w postaci macierzowej. Równanie (3.44) przybierze postać układu n+1 równań z trójdiagonalną macierzą:
⎛2
⎜
⎜ µ1
⎜0
⎜
⎜ M
⎜0
⎜
⎜0
⎝
1
0
2
λ1 K 0
µ2
K 0
2
K 0
M
M
O M
0
0
K 2
0
0
K 1
0 ⎞ ⎛ M 0 ⎞ ⎛ d0 ⎞
⎟ ⎜
⎟
⎟ ⎜
0 ⎟ ⎜ M 1 ⎟ ⎜ d1 ⎟
0 ⎟ ⎜ M 2 ⎟ ⎜ d2 ⎟
⎟=⎜
⎟,
⎟⋅⎜
M ⎟ ⎜ M ⎟ ⎜ M ⎟
λn −1 ⎟ ⎜ M n −1 ⎟ ⎜ d n −1 ⎟
⎟ ⎜
⎟
⎟ ⎜
2 ⎟⎠ ⎜⎝ M n ⎟⎠ ⎜⎝ d n ⎟⎠
(3.45)
gdzie
d0 =
6
h1
⎞
⎛ f1 − f 0
⎜⎜
− f 0′ ⎟⎟ ,
⎠
⎝ h1
(3.46)
dn =
6
hn
⎛
f − f n −1 ⎞
⎜⎜ f n′ − n
⎟⎟ .
hn
⎝
⎠
(3.47)
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 74
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 75 z 246
Równanie (3.43) również przyjmie postać układu równań z macierzą trójdiagonalną.
Równań będzie jednakże n-1:
⎛ 2
⎜
⎜ µ2
⎜ 0
⎜
⎜ M
⎜ 0
⎜
⎜ 0
⎝
1
2
µ2
0
K 0
2λ1 K 0
2
K 0
M
M
O M
0
0
K 2
0
0
K 1
0 ⎞ ⎛ M 1 ⎞ ⎛ d1 ⎞
⎟ ⎜
⎟
⎟ ⎜
0 ⎟ ⎜ M 2 ⎟ ⎜ d2 ⎟
0 ⎟ ⎜ M 3 ⎟ ⎜ d3 ⎟
⎟=⎜
⎟,
⎟⋅⎜
M ⎟ ⎜ M ⎟ ⎜ M ⎟
λn − 2 ⎟ ⎜ M n − 2 ⎟ ⎜ d n −3 ⎟
⎟ ⎜
⎟
⎟ ⎜
2 ⎟⎠ ⎜⎝ M n −1 ⎟⎠ ⎜⎝ d n −1 ⎟⎠
(3.48)
gdzie:
d 1 = d 1 − µ1 M 0 ,
(3.49)
d n −1 = d n −1 − λ n −1 M n .
(3.50)
Zarówno w jednym jak i drugim przypadku otrzymaliśmy układy równań liniowych z
macierzami trójdiagonalnymi z dominującymi elementami na diagonali głównej. Takie układy równań mają jednoznaczne rozwiązanie, co oznacza, że istnieje dokładnie jedna interpolacyjna funkcja sklejana stopnia trzeciego spełniająca jeden z warunków brzegowych (3.42a)
lub (3.42b). Do rozwiązywania takich układów równań stosowane są specjalne niezawodne
algorytmy numeryczne.
Przykład 3.8. Przykład Rungego
Dana jest funkcja f ( x ) = (1 + 25 x 2 ) . Wyznaczyć wielomianową interpolacyjną funk−1
cję sklejaną stopnia trzeciego aproksymujacą zadaną funkcję na przedziale domkniętym [-1,
1] podzielonym za pomocą n+1 punktów na równe podprzedziały [xi-1, xi], gdzie xi = ih - 1, i
= 0, 1, ..., n oraz h = 2/n. Przyjmując, że n = 6, 10, 14 oraz 20 oszacować wartość funkcji
oraz jej pochodnej w punkcie x = 0.75. Obliczyć błąd bezwzględny oraz względny każdego z
tych oszacowań. Przyjąć, że f(0.75) = 6.63900×10-2 oraz f’(0.75) = -1.65286×10-1.
Rozwiązanie
Analizując zebrane w tabeli 3.5 wyniki obliczeń stwierdzić można, że w miarę wzrostu
liczby węzłów interpolacji rośnie dokładność z jaką aproksymowane są wartości funkcji
f(x).Już przy zastosowaniu 14 węzłów sklejania aproksymacja funkcjami spline daje oszacowanie wartości funkcji z dokładnością do 4 cyfr znaczących. Co charakterystyczne dla wie-
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 75
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 76 z 246
lomianowych funkcji sklejanych błąd aproksymacji pierwszej pochodnej jest o rząd mniejszy
od błędu aproksymacji samej funkcji.
Tabela 3.5. Wyniki obliczeń z zastosowaniem wielomianowej funkcji sklejanej do aproksymowania funkcji
f ( x ) = (1 + 25 x 2 ) . Porównanie błędów bezwzględnych i
−1
względnych w aproksymacji funkcji oraz jej pochodnej w punkcie x = 0.75.
n=6
n = 10
n = 14
n = 20
S(0.75)
8.25897E-2
6.59051E-2
6.63781E-2
6.63941E-2
S (x ) − f (x )
1.61997E-2
4.84951E-4
1.19662E-5
4.01189E-6
S (x ) − f (x )
f (x )
2.44007E-1
7.30457E-3
1.80241E-4
6.04291E-5
S’(x)
-6.28791E-2
-1.56349E-1
-1.66153E-1
-1.65244E-1
S ′( x ) − f ′( x )
1.02407E-1
8.93758E-3
8.66631E-4
4.27987E-5
S ′( x ) − f ′( x )
f ′( x )
6.19575E-1
5.40733E-2
5.24321E-3
2.58937E-4
■
Niewielkie błędy, jakie obserwuje się w aproksymacji wielomianowymi funkcjami sklejanymi wynikają wysokiego rzędu zbieżności tej metody interpolacyjnej. W przypadku wielomianowej funkcji sklejanej stopnia trzeciego z warunkami brzegowymi w postaci zadanych
pierwszych pochodnych pokazać można następujące oszacowanie błędu (twierdzenie 3.2):
Twierdzenie 3.2.
Niech funkcja f będzie funkcją ciągłą mającą ciągłe pochodne aż do czwartego rzędu
f ∈ C 4 [a, b] , oraz niech max f
a ≤ x ≤b
(4 )
( x ) ≤ M . Jeżeli S jest wielomianową funkcja sklejaną stop-
nia trzeciego interpolującą funkcję f w węzłach sklejania
a = x 0 < x1 < x 2 < K < x i −1 < x i < x i −1 < K < x n −1 < x n = b ,
oraz spełnia warunek brzegowy S ′(a ) = f ′(a ),
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
S ′(b ) = f ′(b ) , to
Strona 76
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
max f ( x ) − S ( x ) ≤
a ≤ x ≤b
Strona 77 z 246
5M
4
max (x j +1 − x j ) .
384 0≤ j ≤ n −1
(3.51)
■
Jak z twierdzenia (3.2) wynika wielomianowa funkcja sklejana jest zbieżna do interpolowanej funkcji. Rząd zbieżności wynosi cztery. Pokazać można podobne twierdzenie dla
swobodnej funkcji spline. Dodatkowo pokazać można, że pochodna funkcji spline jest zbieżna do pochodnej funkcji interpolowanej. Rząd zbieżności w tym przypadku wynosi trzy.
3.4. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
1.
Dana jest funkcja f ( x ) = ln (1 + x ) . Znaleźć wielomian Taylora czwartego stopnia będący rozwinięciem funkcji f w otoczeniu punktu x0 = 0, i wykorzystać go do obliczenia
ln(1.1). Oszacować błąd tej aproksymacji. Porównać uzyskany wynik z wartością dokładną ln(1.1).
2.
Dana jest funkcja f ( x ) = (1 + x ) . Znaleźć wielomian Taylora czwartego stopnia będą−1
cy rozwinięciem funkcji f w otoczeniu punktu x0 = 0, i wykorzystać go do obliczenia
(1.1)-1. Oszacować błąd tej aproksymacji. Porównać uzyskany wynik z wartością dokładną (1.1)-1.
3.
Znaleźć najmniejszą liczbę całkowitą n konieczną do aproksymowania funkcji
f (x ) = 1
x
w x = 1.25 z dokładnością 10-8, używając wielomianu Taylora stopnia n
uzyskanego jako rozwinięcie funkcji f w otoczeniu punktu x0 = 1.
x
4.
Dana
jest
funkcja
F ( x ) = ∫ (1 + t ) dt .
−1
Wykorzystując
rozwinięcie
funkcji
0
f ( x ) = (1 + x )
−1
w wielomian Taylora trzeciego stopnia w otoczeniu punktu x0 = 0, ob-
liczyć F(0.1). Oszacować błąd tej aproksymacji. Porównać uzyskany wynik z wartością
dokładną.
5.
Wyznaczyć wielomian interpolacyjny Lagrange’a stopnia drugiego, trzeciego oraz
czwartego aproksymującego:
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 77
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
a)
Strona 78 z 246
wartość funkcji f(0) znając jej wartości w węzłach: f(-0.30) = -0.20431, f(-0.1) = 0.08993, f(0.1) = 0.11007, f(0.3) = 0.39569 oraz f(0.5) = 0.79845.
b)
wartość funkcji f(2.5) znając jej wartości w węzłach: f(2.0) = 0.5103757, f(2.2) =
0.5207843, f(2.4) = 0.5104147, f(2.6) = 0.4813306 oraz f(2.8) = 0.4359160.
Przedyskutować uzyskane wyniki.
6.
Dana jest funkcja f ( x ) = 3xe x − e 2 x . Korzystając z wielomianów interpolacyjnych Lagrange’a stopnia drugiego i pierwszego wyznaczonych na węzłach interpolacji x0 = 1,
x1 = 1.05 oraz x2 = 1.07 oszacować wartość tej funkcji f(1.03). Porównać rzeczywiste
błędy bezwzględne z oszacowaniem uzyskanym z równania (3.18).
7.
Korzystając z wielomianów Lagrange’a stopnia trzeciego i niższych zastosowanych do
interpolowania funkcji cos(x) oszacować cos(0.750). Jako węzły przyjąć: cos(0.698) =
0.7661, cos(0.733) = 0.7432, cos(0.768) = 0.7193 oraz cos(0.903) =0.6946. Korzystając z równania (3.18) oszacować błąd dla każdego z wielomianów. Porównać uzyskane
oszacowania z rzeczywistym błędem. Przyjąć, że poprawna wartość wynosi cos(0.750)
= 0.7317. Przedyskutować zaobserwowane różnice.
8.
Dana jest funkcja f ( x ) =
4x − 7
oraz węzły interpolacji x0 = 1.7, x1 = 1.8, x2 = 1.9 oraz
x−2
x3 = 2.1.
a) Oszacować wartość funkcji f(1.75) używając wielomianów interpolacyjnych Lagrange’a stopnia nie większego od dwóch, wyznaczonych na węzłach interpolacji
x0, x1 oraz x2.
b) Znaleźć oszacowania f(1.75) oraz f(2.0) używając wielomianów interpolacyjnych
Lagrange’a wyznaczonych na węzłach interpolacji x0, x1, x2 oraz x3.
c) Czy można w przypadku a) oraz b) wykorzystać oszacowanie błędu interpolacji dane równaniem (3.18)? Uzasadnić odpowiedź.
9.
Wyznaczyć funkcję spline aproksymującą funkcję f ( x ) = cos(πx ) . Przyjąć naturalne
warunki brzegowe. Wykorzystać wartości funkcji f(x) w węzłach x = 0, 0.25, 0.5, 0.75 i
1.0. Obliczyć całkę funkcji spline na przedziale [0, 1] i porównań otrzymany wynik z
1
wartością dokładną
∫ cos(πx )dx = 0 . Korzystając z pochodnych funkcji spline obliczyć
0
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 78
2008-02-21
Metody Numeryczne i Programowanie
Rozdział 3.
Strona 79 z 246
f’(0.5) oraz f’’(0.5). Porównań te wyniki z wartościami dokładnymi. Przeprowadzić
dyskusję błędów.
10.
Wyznaczyć funkcję spline aproksymującą funkcję f ( x ) = e − x . Przyjąć naturalne warunki brzegowe. Wykorzystać wartości funkcji f(x) w węzłach x = 0, 0.25, 0.5, 0.75 i 1.0.
Obliczyć całkę funkcji spline na przedziale [0, 1] i porównań otrzymany wynik z war1
tością dokładną
∫e
−x
0
dx =
e −1
. Korzystając z pochodnych funkcji spline obliczyć
e
f’(0.5) oraz f’’(0.5). Porównań te wyniki z wartościami dokładnymi. Przeprowadzić
dyskusję
Mariusz B. Bogacki B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
błędów.
Strona 79
2008-02-21
Strona 80 z 246
Metody Numeryczne i Programowanie
Rozdział 4
Rozdział 4. Numeryczne rozwiązywanie równań nieliniowych
W rozdziale tym zajmiemy się znajdowaniem przybliżonych rozwiązań równań nieli-
niowych. Okazuje się, że w wielu przypadkach nie można równań nieliniowych rozwiązać
metodami analitycznymi prowadzącymi do rozwiązań dokładnych. Z drugiej strony wskazać
można dużą grupę zagadnień, w których wiadomo, że istnieje rozwiązanie analityczne, ale
rozwiązanie przybliżone uzyskać można szybciej i mniejszym kosztem aniżeli rozwiązanie
dokładne. Stąd duże praktyczne znaczenie metod przybliżonych rozwiązywania równań nieliniowych.
Zadanie rozwiązywania równania nieliniowego:
f (x ) = 0 ,
(4.1)
gdzie funkcja f(x) jest ciągła na pewnym przedziale [a ,b], polega na znajdowaniu takiej liczby ξ, dla której funkcja f przyjmuje wartość zero. Uzyskane rozwiązanie (liczbę ξ) określa się
mianem miejsca zerowego funkcji f lub pierwiastka równania f(x) = 0. Rozwiązanie to
może być dokładne, (f(ξ) = 0) lub przybliżone (f(ξ)≈ 0). Określenie rozwiązanie przybliżone
oznacza, że potrafimy określić je z żądaną dokładnością i podać oszacowanie błędu.
Metody przybliżonego rozwiązywania równań polegają na przyjęciu pewnego rozwiązania początkowego, a następnie w kolejnych tak zwanych krokach iteracyjnych sukcesywnym jego poprawianiu uzyskując coraz to lepsze przybliżenia pierwiastków.
W sposób formalny proces ten opisać można następująco:
1.
Definiujemy funkcję φ, nazywaną również funkcją iteracyjną zgodnie z regułą:
x i +1 = ϕ ( x i ),
i = 0,1,2, K ;
(4.2)
2.
Zakładamy przybliżenie początkowe – x0;
3.
Korzystając z funkcji iteracyjnej (4.2) wyznaczamy kolejne przybliżenia x1, x2, ...,
xn, ... pierwiastków rozwiązywanego równania f(x) = 0;
4.
Jeżeli zostanie spełnione kryterium poprawności dla uzyskanego przybliżonego
rozwiązania xn, to przerywamy proces iteracyjny podany w punkcie 3, przyjmując xn za
przybliżone rozwiązanie równania f(x) = 0.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 80
2008-02-21
Strona 81 z 246
Metody Numeryczne i Programowanie
Rozdział 4
Funkcja iteracyjna (4.2) generuje pewien ciąg xi, który może być zbieżny do granicy ξ.
Punkty ξ, dla których zachodzi:
ξ = ϕ (ξ ) ,
(4.3)
przy odpowiednim doborze funkcji iteracyjnej są zerami funkcji f(x) lub inaczej mówiąc poszukiwanymi rozwiązaniami równania f(x) = 0.
Problem przybliżonego rozwiązywania równań nieliniowych jest jednym z starszych
problemów numerycznych i doczekał się opisania całego szeregu różnorodnych procedur obliczeniowych. Niektóre z nich zostaną przedstawione w tym wykładzie.
4.1. Metoda połowienia (metoda bisekcji)
Metoda połowienia albo metoda bisekcji jest najprostszą metodą znajdowania pierwiastków równania. W metodzie tej zakładamy, że funkcja f(x), której pierwiastków poszukujemy jest funkcją ciągłą na przedziale domkniętym [xa, xb], co zapisujemy f ( x ) ∈ C [x a , x b ] .
Zakładamy również, że wewnątrz tego przedziału znajduje się dokładnie jeden pierwiastek
funkcji f(x) oraz, że funkcja f(x) przyjmuje na krańcach tego przedziału wartości o różnych
znakach (rysunek 4.1). Założenie to równoważne jest warunkowi:
f (x a ) ⋅ f (x b ) ≤ 0 .
(4.4)
Ze spełnienia warunku (4.4) wynika, że w przedziale [xa, xb] musi znajdować się co
najmniej jeden pierwiastek funkcji f(x). W metodzie bisekcji zakłada się, że w kolejnych krokach iteracyjnych będziemy zawężać przedział wyjściowy dzieląc go na pół oraz wybierając
tę jego część, w której położone jest poszukiwane rozwiązanie.
Załóżmy, że na początku procesu obliczeniowego mamy dane xa oraz xb. Zgodnie z
przyjętą zasadą znajdujemy punkt xc dzielący badany przedział na dwie równe części:
xc =
xa + xb
x − xa
= xa + b
.
2
2
(4.5)
Jeżeli zachodzi f(xc) = 0, to punkt xc jest poszukiwanym pierwiastkiem naszego równania, co kończy proces obliczeniowy. Jeżeli tak nie jest, to funkcja f ma w punkcie xc taki sam
znak jak f(xa) lub f(xb). W pierwszym przypadku, kiedy f(xc) ma taki sam znak jak f(xa) oznacza to, że poszukiwany pierwiastek leży w przedziale [xc, xb] i należy dokonać podstawienia
xa = xc W drugim przypadku, to znaczy, kiedy f(xc) ma taki sam znak jak f(xb) oznacza to, że
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 81
2008-02-21
Strona 82 z 246
Metody Numeryczne i Programowanie
Rozdział 4
poszukiwany pierwiastek leży w przedziale [xa, xc,] i należy dokonać podstawienia xb = xc.
Uzyskaliśmy w ten sposób nowy przedział [xa, xb], którego długość jest o połowę mniejsza od
przedziału wyjściowego. Należy teraz powtórzyć proces iteracyjny znajdując kolejny środek
przedziału i dokonać oceny, w której jego części znajduje się poszukiwane rozwiązanie. Proces ten prowadzimy tak długo aż stwierdzimy, że uzyskaliśmy f(xc) = 0 lub też, aż długość
kolejnego przedziału zawierającego poszukiwany pierwiastek będzie mniejsza od pewnej zadanej liczby ε, czyli spełniony zostanie tak zwany warunek (kryterium) zatrzymania pro-
cedury iteracyjnej:
xa − xb ≤ ε ,
(4.6)
gdzie ε > 0 jest pewną małą liczbą oznaczającą dokładność z jaką znajdowany jest pierwiastek równania (4.1).
f(xa)
f(xc)
xb
xd
xc
xa
f(xb)
Rysunek 4.1. Interpretacja geometryczna metody bisekcji. Pomiędzy punktami startowymi xa
oraz xb musi znajdować się poszukiwane rozwiązanie.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 82
2008-02-21
Strona 83 z 246
Metody Numeryczne i Programowanie
Rozdział 4
Start
Czytaj dane
xa, xb, eps
xa + xb
,
2
f a = f ( x a ),
xc =
f b = f ( xb ),
f c = f (xc )
Tak
fc = 0
Nie
Tak
Podaj xc
jako wynik
xb = xc ,
xa = xc ,
fb = fc ,
fa = fc ,
Tak
xa − xb ≤ eps
Nie
Nie
fa ⋅ fc < 0
Koniec
Schemat 4.1. Schemat blokowy algorytmu znajdowania pierwiastków równań nieliniowych
metodą bisekcji.
Przedstawiony powyżej sposób postępowania przedstawić można w formie algorytmu
słownego (algorytm 4.1) lub na schemacie blokowym (schemat 4.1).
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 83
2008-02-21
Strona 84 z 246
Metody Numeryczne i Programowanie
Rozdział 4
Algorytm 4.1. Metoda bisekcji
xa + xb
;
2
1.
Obliczyć x c =
2.
Jeżeli f(xc) = 0 lub x a − x b ≤ ε , to podaj xc jako rozwiązanie i zakończ obliczenia;
3.
W przeciwnym razie
3.1. Jeżeli f ( x a ) ⋅ f (x c ) ≤ 0 , to xb = xc;
3.2. W przeciwnym razie xa = xc;
4.
Wróć do punktu 1.
■
W zasadzie metody numerycznego rozwiązywania równań nieliniowych nie prowadzą
do znalezienia dokładnego rozwiązania, a jedynie do znalezienia jego przybliżenia (aproksymacji). Chcąc zabezpieczyć algorytm przed zbyt dużą liczbą wykonywanych kroków iteracyjnych, co prowadzić może do nieskończonego czasu jego realizacji, koniecznym jest określenie pewnych warunków, których spełnienie powoduje, że algorytm zakończy swoje działanie z sukcesem, albo też zostanie przerwane jego działanie z komunikatem o nie uzyskaniu
zadowalającego rozwiązania. Jest to tak zwane kryterium lub warunek zatrzymania algo-
rytmu. Warunek taki został zastosowany w punkcie 2 algorytmu 4.1.
W algorytmach numerycznych zastosować można różne warunki zatrzymania obliczeń.
Załóżmy, że dana jest pewna liczba ε > 0 będąca dokładnością obliczeń. Załóżmy również, że
stosowana metoda iteracyjna generuje ciąg kolejnych przybliżeń poszukiwanego rozwiązania
x0, x1, x2, ..., xn. Celem zatrzymania procedury obliczeniowej zastosować możemy jedno z
trzech następujących kryteriów:
x n − x n −1 < ε ,
x n − x n −1
xn
< ε,
(4.7)
xn ≠ 0 ,
(4.8)
lub warunek
f (x n ) < ε ,
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
(4.9)
Strona 84
2008-02-21
Strona 85 z 246
Metody Numeryczne i Programowanie
Rozdział 4
gdzie ε > 0 jest pewną małą liczbą dodatnią. Istotne jest to, że ε musi być większe od granicznej dokładności maszynowej. W przeciwnym razie, gdy ε jest od niej mniejsze, to otrzymać można wyniki jedynie z maksymalną dokładnością.
Z każdym z podanych powyżej kryteriów zatrzymania obliczeń związane są różnorodne
trudności wynikające z ich zastosowaniem. W przypadku warunku (4.7) należy liczyć się z
tym, że może istnieć ciąg xi, i = 0, 1, ... spełniający warunek, że różnice sąsiednich wyrazów
dążą do zera, ale ciąg xi będzie ciągiem rozbieżnym. Może również zaistnieć sytuacja taka, że
wartość funkcji f(xn) jest mała i bliska zero (spełniony będzie warunek 4.9), natomiast xn będzie mocno odbiegać od poszukiwanego rozwiązania. Generalnie przyjmuje się, że jeżeli nie
mamy dodatkowych informacji o rozwiązywanej funkcji f lub o ciągu kolejnych przybliżeń
poszukiwanego rozwiązania, to najbezpieczniej jest zastosować kryterium (4.8), które bada
błąd względny kolejnych przybliżeń.
Prowadząc obliczenia komputerowe dobrze jest, poza użyciem jednego z powyższych
kryteriów zatrzymania obliczeń, zastosować ograniczenie na maksymalną liczbę iteracji N0.
Ograniczenie takie zabezpiecza nas przed możliwością powstania nieskończonej pętli iteracyjnej.
Postępując zgodnie z metodą bisekcji w każdym kroku iteracyjnym zmieniamy przedział [xa, xb] na [xa, xc] lub [xc,xb] w taki sposób, aby przez cały czas zawarte było w nim poszukiwane rozwiązanie równania f(x) = 0. Równocześnie w każdym kroku iteracyjnym algorytm bisekcji skraca długość tego przedziału o połowę. Ponieważ poszukiwane rozwiązanie ξ
znajduje się wewnątrz tego przedziału, to błąd metody, rozumiany jako odchylenie bieżącego
oszacowania rozwiązania xn od wartości dokładnej ξ, oszacować można w sposób następujący:
po pierwszym kroku iteracyjnym:
e1 = x1 − ξ ≤
1
xa − xb ,
21
po drugim kroku iteracyjnym:
e2 = x 2 − ξ ≤
1
xa − xb ,
22
oraz ogólnie po n iteracjach
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 85
2008-02-21
Strona 86 z 246
Metody Numeryczne i Programowanie
Rozdział 4
en = x n − ξ ≤
gdzie x n =
1
xa − xb ,
2n
n ≥ 1,
(4.10)
1
(bn − a n ) jest ciągiem kolejnych przybliżeń pierwiastków równania f(x) = 0 ge2
nerowanych przez metodę bisekcji (równanie 4.5). Interpretację geometryczną przedstawiono
na rysunku (4.1).
W metodzie bisekcji błąd metody zmniejsza się w każdym kroku iteracyjnym o połowę
stąd prawa strona równania (4.10) dąży do zera, co oznacza, że xn jest zbieżne do pierwiastka
ξ równania f(x) = 0. Ponieważ w praktyce nie możemy wykonać nieskończenie wiele kroków
iteracyjnych, to zgodnie z metodą bisekcji postępujemy w ten sposób tak długo, aż uzyskamy
dokładne rozwiązanie lub też długość przedziału zawierającego rozwiązanie będzie mniejsza
od pewnej zadanej małej liczby ε.
Dodatkowo z zależności (4.10) wynika oszacowanie górnej granicy błędu, jakim obarczone jest otrzymane rozwiązanie po n krokach iteracyjnych. Wyrażenie to pozwala również
wyznaczyć liczbę kroków iteracyjnych, które należy wykonać celem uzyskania rozwiązania o
określonej dokładności (przykład 4.1).
W innym podejściu problem oszacowania błędu, z jakim wyznacza się pierwiastki równania metodą bisekcji przedstawić można w następujący sposób: ponieważ przedział domknięty [xa, xb] zawsze zawiera poszukiwane rozwiązanie (pierwiastek), to błąd, związany z
kolejnym oszacowaniem pierwiastka wynika z zależności:
en = x n − ξ ≤ x a − x b .
(4.11)
W kolejnych iteracjach przedział, w którym znajduje się poszukiwany pierwiastek jest o
połowę mniejszy. Wynika stąd, że błąd oszacowania rozwiązania w kolejnej iteracji też będzie o połowę mniejszy, czyli:
e n +1 =
1
en .
2
(4.12)
Takie wyrażenie, w którym błąd w kolejnej iteracji przedstawiony jest jako funkcja błędu uzyskanego w poprzedniej iteracji jest często wykorzystywany w analizie zbieżności metod iteracyjnych. W sposób ogólny zależność tę zapisuje się jako:
e n +1 = C ⋅ e np ,
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
(4.13)
Strona 86
2008-02-21
Strona 87 z 246
Metody Numeryczne i Programowanie
Rozdział 4
gdzie wykładnik potęgowy p nazywany jest rzędem zbieżności metody iteracyjnej.
Po to, aby analizowana metoda iteracyjna była zbieżna błąd en w kolejnych iteracjach
musi maleć. Dlatego też oczekiwać będziemy, że albo rząd zbieżności metody p będzie większy od 1, albo współczynnik proporcjonalności C będzie mniejszy od 1. Zdecydowanie większe znaczenie ma wartość wykładnika p. Duża jego wartość oznacza dużą szybkość zbieżności metody. Gdy p = 1 mówimy o metodzie liniowej natomiast, gdy p = 2 o metodzie kwa-
dratowej. W przypadku metody liniowej warunkiem zbieżności metody jest współczynnik
proporcjonalności C < 1. Znaczenie wpływu rzędu zbieżności na szybkość, z jaką uzyskuje
się poszukiwane rozwiązanie przedstawiono w przykładzie 4.1, w którym porównano dwie
hipotetyczne procedury iteracyjne: liniową i kwadratową.
Przykład 4.1.
Należy porównać dwie metody iteracyjnego rozwiązywania równań nieliniowych: liniową oraz kwadratową. Założyć, że współczynnik proporcjonalności jest jednakowy dla obydwóch metod i wynosi C = 0.5. Założyć również, że metody te zdefiniowane są na takim
samym przedziale domkniętym, co prowadzi do początkowego oszacowania e 0 = e~0 = 0.5 .
Rozwiązanie
W przypadku metody liniowej równanie (4.13) ma postać:
e n = 0.75 ⋅ e n −1 = (0.75) e n − 2 = K = (0.75)
2
n +1
e0 ,
natomiast w przypadku metody kwadratowej postać:
[
]
2
3
e~n = 0.75 ⋅ e~n2−1 = (0.75) ⋅ (0.75) ⋅ e~n2− 2 = (0.75) ⋅ e~n4− 2 =
4
2 n + 1 −1 ~ 2 n + 1
3
7
= (0.75) ⋅ (0.75) ⋅ e~n2− 3 = (0.75) ⋅ e~n8− 3 = K = (0.75)
⋅ e0 .
[
]
Celem przeprowadzenia porównania określić należy liczbę iteracji n, jakie należy wykonać jedną i drugą metodą celem uzyskania oszacowania z dokładnością 10-8. Przyjmując
jednakowy błąd początkowy e 0 = e~0 = 0.5 dla metody liniowej otrzymamy:
e n = (0.75) ⋅ 0.5 ≤ 10 −8 .
n
Stąd
n≥
log10 (2 ) − 8
≈ 62 .
log10 (0.75)
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 87
2008-02-21
Strona 88 z 246
Metody Numeryczne i Programowanie
Rozdział 4
Natomiast w przypadku metody kwadratowej
2
e~n = (0.75)
n +1
−1
⋅ (0.5)
2 n +1
= (0.75) ⋅ (0.375)
−1
2 n +1
≤ 10 −8 .
Po obustronnym logarytmowaniu otrzymamy:
2 n +1 log10 (0.375) ≤ log10 (0.75) − 8 ,
oraz po przekształceniach:
2 n +1 ≥
log10 (0.75) − 8
≈ 19 .
log10 (0.375)
Ostatecznie n ≥ 4 .
Z przeprowadzonych obliczeń wynika, że dla przyjętych wartości stałych metoda kwadratowa wymaga przeprowadzenia 4 iteracji, natomiast metoda liniowa w takich samych warunkach wymaga przeprowadzenia 62 iteracji.
■
W przypadku metody bisekcji na podstawie równania (4.12) możemy stwierdzić, ze jest
to metoda pierwszego rzędu (p = 1) z współczynnikiem proporcjonalności C = ½, a więc jest
to zbieżna metoda liniowa.
Sposób wykorzystania metody bisekcji wraz z analizą poprawności uzyskanych wyników przedstawiono w przykładzie 4.2.
Przykład 4.2.
Dana jest funkcja f ( x ) = x 3 + 4 x 2 − 10 mająca pierwiastki w przedziale [1, 2], gdzie
f(1) = -5 oraz f(2) = 14. Zastosować algorytm bisekcji do znalezienia pierwiastków tej funkcji. Jako kryterium zatrzymania przyjąć f ( x ) ≤ ε , ε = 10-5. Poprawne rozwiązanie z dokładnością do 15 cyfr ξ = 1.365230013414097. Określić liczbę kroków iteracyjnych, które należy
wykonać celem uzyskania rozwiązania z dokładnością pięciu cyfr znaczących.
Rozwiązanie
Łatwo pokazać (rysunek 4.2), że w przedziale [1, 2] badana funkcja ma tylko jeden
pierwiastek.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 88
2008-02-21
Strona 89 z 246
Metody Numeryczne i Programowanie
Rozdział 4
20
15
10
5
0
-1.5
-0.5
0.5
-5
1.5
2.5
-10
-15
Rysunek 4.2. Przebieg funkcji f ( x ) = x 3 + 4 x 2 − 10 .
Celem określenia liczby iteracji koniecznych do uzyskania założonej dokładności wykorzystać należy zależność (4.10), skąd możemy obliczyć n:
x n − ξ ≤ 2 − n (b − a ) = 2 − n ≤ ε = 5 ⋅ 10 −5 .
Tabela 4.1. Wyniki obliczeń pierwiastka równania f ( x ) = x 3 + 4 x 2 − 10 uzyskane metodą
bisekcji. xa oraz xb końce przedziału, w którym znajduje się poszukiwany pierwiastek; xn kolejne przybliżenia poszukiwanego rozwiązania; f(xn) wartość funkcji w
tym punkcie; e n = x n − ξ błąd bezwzględny; δ =
en
ξ
=
xn − ξ
ξ
błąd względny.
en
e n −1
δ
n
xa
xb
xn
f(xn)
en
1
1.0000000
2.0000000
1.5000000
2.37500
0.135
2
1.0000000
1.5000000
1.2500000
-1.79688
0.115
0.855
0.084
3
1.2500000
1.5000000
1.3750000
0.16211
9.770e-3
0.085
7.156e-3
4
1.2500000
1.3750000
1.3125000
-0.84839
0.053
5.397
0.039
5
1.3125000
1.3750000
1.3437500
-0.35098
0.021
0.407
0.016
6
1.3437500
1.3750000
1.3593750
-0.09641
5.855e-3
0.273
4.289e-3
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 89
0.099
2008-02-21
Strona 90 z 246
Metody Numeryczne i Programowanie
Rozdział 4
7
1.3593750
1.3750000
1.3671875
0.03236
1.957e-3
0.334
1.434e-3
8
1.3593750
1.3671875
1.3632813
-0.03215
1.949e-3
0.996
1.427e-3
9
1.3632813
1.3671875
1.3652344
7.20248e-5
4.362e-6
2.238e-3
3.195e-6
10
1.3632813
1.3652344
1.3642578
-0.01605
9.722e-4
222.901
7.121e-4
11
1.3642578
1.3652344
1.3647461
-7.98926e-3
4.839e-4
0.498
3.545e-4
12
1.3647461
1.3652344
1.3649902
-3.95910e-3
2.398e-4
0.495
1.756e-4
13
1.3649902
1.3652344
1.3651123
-1.94366e-3
1.177e-4
0.491
8.622e-5
14
1.3651123
1.3652344
1.3651733
-9.35847e-4
5.667e-5
0.481
4.151e-5
15
1.3651733
1.3652344
1.3652039
-4.31919e-4
2.616e-5
0.462
1.916e-5
16
1.3652039
1.3652344
1.3652191
-1.79949e-4
1.090e-5
0.417
7.982e-6
17
1.3652191
1.3652344
1.3652267
-5.39625e-5
3.268e-6
0.300
2.394e-6
18
1.3652267
1.3652344
1.3652306
9.03099e-6
5.469e-7
0.167
4.006e-7
Wyrażenie to obustronnie logarytmujemy otrzymując: − n log(2 ) ≤ −5 log(5) . Stąd
n≥
5 log(5) 3.495
=
= 11.6 .
log(2 ) 0.301
Co oznacza, że chcąc uzyskać pięciocyfrową dokładność oszacowania należy wykonać metodą bisekcji co najmniej 12 kroków iteracyjnych.
W tabeli (4.1) przedstawiono kolejne przybliżenia poszukiwanego rozwiązania xn, wartość funkcji w tym punkcie f(xn) oraz błąd bezwzględny oszacowania. Zgodnie z przeprowadzoną analizą błędów, metoda bisekcji jest metodą liniową z współczynnikiem proporcjonalności C = 0.5. Obliczany dla każdej iteracji stosunek błędów przyjmuje różne wartości. Można jednakże stwierdzić, że w dużym przybliżeniu wynosi on 0.5, czyli tyle ile wynika z teoretycznego oszacowania błędu metody obliczeniowej.
Po dwunastu iteracjach błąd względny uzyskanego oszacowanie pierwiastka równania
wynosi 9×10-5, co oznacza, że jest to wynik z dokładnością do 4 cyfr znaczących. Dopiero w
czternastej iteracji otrzymujemy zakładane 5 cyfr znaczących. Interesujące jest również to, że
w dziewiątej iteracji otrzymujemy zdecydowanie lepsze rozwiązanie aniżeli w iteracji czternastej.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 90
2008-02-21
Strona 91 z 246
Metody Numeryczne i Programowanie
Rozdział 4
■
Metoda bisekcji jest metodą intuicyjnie prostą. Ma ona jednakże pewne dość istotne
ograniczenia. Przede wszystkim jest ona bardzo wolno zbieżna (rząd zbieżności metody p =
1), co oznacza, że należy wykonać dużą liczbę kroków iteracyjnych n celem uzyskania rozwiązania o dużej dokładności. Drugą niedogodnością tej metody jest to, że rozwiązania częściowe będące lepsze od rozwiązania końcowego zostaną pominięte. Nie ma w tej metodzie
mechanizmu pozwalającego na wyłapanie takich rozwiązań.
Najkorzystniejszą cechą metody bisekcji, wynikającą z tego, że w każdym kolejnym
kroku iteracyjnym poszukiwane rozwiązanie znajduje się w badanym przedziale, jest to, że
jest ona zawsze zbieżna. Z tego też powodu metoda bisekcji jest często wykorzystywana jako
metoda startowa w innych metodach rozwiązywania równań nieliniowych.
4.2. Metoda interpolacji liniowej (metoda regula falsi)
W metodzie interpolacji liniowej zwanej również metodą regula falsi podobnie jak w
metodzie bisekcji wymagamy podania przedziału domkniętego [xa, xb] zawierającego poszukiwane rozwiązanie funkcji f(x) = 0 (rysunek 4.3). Stosując metodę regula falsi zakładamy, że
w rozpatrywanym przedziale znajduje się dokładnie jeden pierwiastek pojedynczy oraz, że
spełniony jest warunek (4.4):
f (x a ) ⋅ f (x b ) ≤ 0 .
(4.4)
Ponadto zakładamy, że funkcja f(x) jest ciągła na przedziale [xa, xb] oraz posiada ciągłe
pierwszą i drugą pochodną, co zapisujemy f ( x ) ∈ C 2 [x a , x b ] . Założenie o ciągłości pochodnych konieczne jest do oszacowania błędu.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 91
2008-02-21
Strona 92 z 246
Metody Numeryczne i Programowanie
Rozdział 4
f(xa)
x1
xb
x2
xa
f(xb)
Rysunek 4.3. Interpretacja geometryczna metody interpolacji liniowej (metody regula falsi).
Punkty startowe xa oraz xb wyznaczają przedział, w którym znajduje się poszukiwane rozwiązanie.
W metodzie regula falsi zakładamy, że rozwiązywaną funkcję można interpolować liniowo na zadanym przedziale [xa, xb]. Oznacza to, że przez punkty (xa, f(xa)) oraz (xb, f(xb))
prowadzimy cięciwę o równaniu:
x1 − x a
xb − xa
=
.
f ( x1 ) − f ( x a ) f ( x b ) − f ( x a )
(4.14)
Z równania tego wyznacza się x1 jako miejsce przecięcia się prostej (4.14) z osią OX.
Stąd w zależności od przyjętego punktu odniesienia podać można trzy różne zależności reku-
rencyjne na obliczenie kolejnego przybliżenia poszukiwanego rozwiązania:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 92
2008-02-21
Strona 93 z 246
Metody Numeryczne i Programowanie
Rozdział 4
x1 = xa +
xb − xa
f ( xa ) =
f ( xb ) − f ( xa )
= xb +
xb − xa
f ( xb ) =
f ( xb ) − f ( xa )
=
(4.15)
xa f ( xb ) − xb f ( xa )
.
f ( xb ) − f ( xa )
Jeżeli zachodzi f(x1) = 0, to jest to dokładne rozwiązanie i możemy zakończyć procedurę obliczeniową. W przeciwnym razie punkt x1 dzieli przedział [xa, xb] na dwie części: [xa, x1]
oraz [x1, xb] co, do których możemy stwierdzić, że albo w przedziale [xa, x1] albo w przedziale [x1, xb], znajduje się poszukiwane rozwiązanie. Kolejne przybliżone rozwiązanie x2 wyznaczamy z równania (4.15) przyjmując jako punkt wyjścia nowy mniejszy przedział [xa, xb], w
którym znajduje się poszukiwane rozwiązanie. W ten sposób postępujemy tak długo, aż uzyskamy punkt xn, dla którego f(xn) = 0 lub też zostanie spełnione jedno z kryteriów zatrzymania procedury iteracyjnej (równania 4.7 – 4.9). Ten tok postępowania przedstawiono jako algorytm (4.2).
Algorytm 4.2. Metoda regula falsi
1.
Obliczyć:
xc = xa +
xb − xa
xb − x a
x f ( xb ) − xb f ( x a )
;
f ( x a ) = xb +
f ( xb ) = a
f ( xb ) − f ( x a )
f ( xb ) − f ( x a )
f ( xb ) − f ( x a )
2.
Jeżeli f(xc) = 0 lub x a − x b ≤ ε , to podaj xc jako rozwiązanie i zakończ obliczenia;
3.
W przeciwnym razie:
3.1 Jeżeli f ( x a ) ⋅ f (x c ) ≤ 0 , to xb = xc;
3.2 W przeciwnym razie xa = xc;
4 Wróć do punktu 1.
■
Algorytm ten jest praktycznie identyczny z algorytmem bisekcji. Jedyna różnica występuje w punkcie 1, w którym oblicza się kolejne przybliżenia. Jako przykład zastosowania me-
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 93
2008-02-21
Strona 94 z 246
Metody Numeryczne i Programowanie
Rozdział 4
tody regula falsi przeprowadzono obliczenia dla identycznego jak poprzednio równania
(przykład 4.2).
Przykład 4.3.
Stosując metodę regula falsi znaleźć dla podanego w przykładzie (4.1) równania
f ( x ) = x 3 + 4 x 2 − 10 pierwiastek w przedziale [1, 2]. Oszacować błędy, jakimi obarczone są
kolejne rozwiązania.
Rozwiązanie
Wyniki obliczeń przedstawiono w tabeli (4.2). Cechą charakterystyczną przeprowadzonych obliczeń jest to, że jeden z końców przedziału (xb = 2) nie zmienia się i pozostaje stały.
Metoda regula falsi jest metodą liniową. Wyznaczony eksperymentalnie stosunek kolejnych błędów wynosi około C = 0.25, czyli jest dwukrotnie mniejszy aniżeli w metodzie
bisekcji. Dwukrotne zmniejszenie współczynnika proporcjonalności ma swoje odzwierciedlenie w szybkości, z jaką metoda ta jest zbieżna do poszukiwanego rozwiązania. W tym przypadku już w siódmej iteracji otrzymujemy przybliżenie pierwiastka równania z dokładnością
do 5 cyfr znaczących, natomiast w dziesiątej iteracji jest to dokładność 7 cyfr znaczących.
Tabela 4.2. Wyniki obliczeń pierwiastka równania f ( x ) = x 3 + 4 x 2 − 10 uzyskane metodą
regula falsi. Oznaczenia identyczne jak w przykładzie 4.1.
n
xa
xb
xn
f(xn)
en
en
e n −1
δ
1
1.0000000
2.000
1.2631579
-1.60227
0.102
-
0.075
2
1.2631579
2.000
1.3388278
-0.43036
0.026
0.259
0.019
3
1.3388278
2.000
1.3585463
-0.11001
6.684e-3
0.253
4.896e-3
4
1.3585463
2.000
1.3635474
-0.02776
1.683e-3
0.252
1.232e-3
5
1.3635474
2.000
1.3648070
-6.98342e-3
4.230e-4
0.251
3.098e-4
6
1.3648070
2.000
1.3651237
-1.75521e-3
1.063e-4
0.251
7.786e-5
7
1.3651237
2.000
1.3652033
-4.41063e-4
2.671e-5
0.251
1.956e-5
8
1.3652033
2.000
1.3652233
-1.10828e-4
6.711e-6
0.251
4.916e-6
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 94
2008-02-21
Strona 95 z 246
Metody Numeryczne i Programowanie
Rozdział 4
9
1.3652233
2.000
1.3652283
-2.78480e-5
1.686e-6
0.251
1.235e-6
10
1.3652283
2.000
1.3652296
-6.99739e-6
4.237e-7
0.251
3.104e-7
■
Podsumowując należy stwierdzić, że metoda regula falsi jest zbieżna dla dowolnej
funkcji ciągłej na przedziale domkniętym [xa, xb], jeżeli pierwsza pochodna tej funkcji jest
różna od zera w otoczeniu pierwiastka tego równania. Jeżeli druga pochodna nie zmienia znaku w rozpatrywanym przedziale, to ten koniec przedziału, w którym f’’f > 0, jest punktem
stałym iteracji (wszystkie cięciwy przechodzą przez ten punkt). Proces iteracyjny kończymy,
gdy dwa kolejne przybliżenia różnią się, co do modułu o mniej niż zadane ε. Zbieżność metody regula falsi jest pierwszego rzędu, co oznacza, że jest to metoda liniowa. Wadą metody
jest jej wolna zbieżność.
4.3. Metoda Newtona – Raphsona (metoda stycznych)
Metoda Newtona – Raphsona (metoda Newtona) zwana również metodą stycznych
jest jedną z najważniejszych i najlepiej poznanych metod znajdowania pierwiastków równań
nieliniowych f(x) = 0. Wynika to z trzech przyczyn. Po pierwsze metodę Newtona można w
stosunkowo prosty sposób wykorzystać do oszacowania wartości pierwiastków równania w
sposób graficzny. Po drugie jest to prosta metoda, w dodatku szybciej zbieżna od innych metod wykorzystujących obliczenia iteracyjne. I po trzecie można ją łatwo i intuicyjnie wyprowadzić z rozwinięcia w szereg Taylora.
Celem wyprowadzenia metody Newtona zakładamy, że funkcja f(x) jest ciągła na przedziale domkniętym [xa, xb] oraz, że ma ona w tym przedziale pierwszą i drugą pochodną ciągłą. Funkcje o takich właściwościach zapisujemy jako f ( x ) ∈ C 2 [x a , x b ] . Załóżmy również,
że x 0 ∈ [x a , x b ] jest przybliżeniem pierwiastka ξ równania f(x) takim, że f ′( x 0 ) ≠ 0 oraz
x 0 − ξ jest dostatecznie „małe”.
Metoda Newtona wynika z rozwinięcia rozwiązywanej funkcji f(x) w szereg Taylora w
otoczeniu pewnego punktu x0:
f ( x ) = f ( x0 ) + ( x − x0 ) f ′( x0 ) +
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
1
(x − x0 )2 f ′′(x0 ) + K .
2
Strona 95
(4.16)
2008-02-21
Strona 96 z 246
Metody Numeryczne i Programowanie
Rozdział 4
Odrzucając z tego rozwinięcia wyraz kwadratowy oraz wyższe uzyskujemy liniową
aproksymację funkcji f(x):
f ( x ) = f (x0 ) + ( x − x0 ) f ′( x0 ) .
(4.17)
Zakładając, że w punkcie x1 wartość funkcji f(x1) = 0 znajdujemy z równania (4.17)
nowe przybliżenie poszukiwanego rozwiązania:
x1 = x0 −
f ( x0 )
.
f ′(x0 )
(4.18)
Powtarzając ten proces dla kolejnych iteracji podać można ogólny wzór rekurencyjny:
xn +1 = x n −
f (xn )
.
f ′( x n )
(4.19)
Równanie (4.19) generuje ciąg liczb x0, x1, x2, ..., który jest zbieżny do rozwiązania ξ
równania f(x) = 0. Geometrycznie punkt xn+1 jest punktem, w którym styczna do funkcji f(x)
w punkcie (xn, f(xn)) przecina oś OX (rysunek 4.4).
W metodzie Newtona – Raphsona podać należy jeden punkt startowy – x0. W pierwszym przybliżeniu poszukiwanego pierwiastka ξ otrzymujemy punkt x1, w którym styczna do
funkcji f(x) w punkcie (x0, f(x0)) przecina oś OX. Jeżeli otrzymane rozwiązanie jest za mało
dokładne, to z punktu (x1, f(x1)) prowadzimy następną styczną. Punkt x2 przecięcia tej stycznej
z osią OX jest drugim przybliżeniem poszukiwanego pierwiastka. W ten sposób, w kolejnych
iteracjach z równania (4.19) obliczamy przybliżenia xn+1, n = 0, 1, 2, ... tak długo, aż znajdziemy takie xn, dla którego f(xn) = 0 lub też zostanie spełniony jeden z warunków przerwania
obliczeń (4.7 do 4.9). Stosując kryterium (4.7) tak, jak w punkcie 3 algorytmu 4.3, uzyskamy
rozwiązanie z założoną dokładnością ε. Geometryczną interpretację metody Newtona – Raphsona przedstawiono na rysunku (4.4).
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 96
2008-02-21
Strona 97 z 246
Metody Numeryczne i Programowanie
Rozdział 4
f(x0)
x1
x2
x0
Rysunek 4.4. Interpretacja geometryczna metody Newtona - Raphsona.
Powyższy proces obliczeniowy przedstawić można w postaci następującego algorytmu:
Algorytm 4.3 Metoda Newtona - Raphsona
1.
Weź i = 1; Załóż x0;;
2.
Oblicz x i = x i −1 −
3.
Jeżeli f ( x i ) = 0 lub x i − x i −1 ≤ ε to podaj xi jako rozwiązanie i zakończ obliczenia;
4.
Podstaw i = i +1;
5.
Wróć do punktu 2.
f ( x i −1 )
;
f ′( x i −1 )
■
Celem zbadania zbieżności metody Newtona – Raphsona oszacować należy błąd, jakim
obarczone jest rozwiązanie. Oszacowanie to przedstawić można następująco:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 97
2008-02-21
Strona 98 z 246
Metody Numeryczne i Programowanie
Rozdział 4
en +1 = xn +1 − ξ = xn −
f ( xn )
f ( xn )
f ( xn )
− ξ = xn − ξ −
= en −
=
f ′( xn )
f ′( xn )
f ′( xn )
1
en f ′(ξ ) + en2 f ′′(ξ ) + K
2
= en −
=
f ′(ξ ) + en f ′′(ξ ) + K
(4.20)
1
en f ′(ξ ) + en2 f ′′(ξ ) + K ⎛
⎞
f ′′(ξ )
2
⎜⎜1 − en
= en −
+ K⎟⎟ =
f ′(ξ )
f ′(ξ )
⎝
⎠
1 f ′′(ξ ) 2 f ′′(ξ )
1 f ′′(ξ )
= en − en − en2
+ en
+ K = en2
.
2 f ′(ξ )
2 f ′(ξ )
f ′(ξ )
W wyprowadzeniu równania (4.20) wykorzystane zostało rozwinięcie funkcji f(x) w
otoczeniu punktu ξ będącym pierwiastkiem równania f(x):
f ( x ) = f (ξ ) + ( x − ξ ) f ′(ξ ) +
1
(x − ξ )2 f ′′(ξ ) + K .
2
(4.21)
Jak z równania (4.20) wynika metoda Newtona – Raphsona jest metodą drugiego rzę-
du (kwadratową). Z uwagi na to, że w mianowniku tego wyrażenia występuje pierwsza pochodna rozwiązywanej funkcji stwierdzić należy, że istotnym warunkiem zbieżności tej metody jest różna od zera pierwsza pochodna w otoczeniu pierwiastka równania ξ. W przeciwnym razie metoda Newtona – Raphsona będzie rozbieżna.
Przykład 4.4.
Stosując metodę Newtona - Raphsona znaleźć dla podanego w przykładzie (4.1) równania f ( x ) = x 3 + 4 x 2 − 10 pierwiastek w przedziale [1, 2]. Jako punkt startowy przyjąć x0 =
1.5. Oszacować błędy, jakimi obarczone są kolejne rozwiązania.
Rozwiązanie
Wyniki obliczeń przedstawiono w tabeli 4.3.
Tabela 4.3. Wyniki obliczeń pierwiastka równania f ( x ) = x 3 + 4 x 2 − 10 uzyskane metodą
Newtona - Raphsona. Oznaczenia identyczne jak w przykładzie 4.1.
en
n
xn
f(xn)
en
en
e n −1
(en −1 )2
δ
0
1.5
2.375
0.135
-
-
0.099
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 98
2008-02-21
Strona 99 z 246
Metody Numeryczne i Programowanie
Rozdział 4
1
1.373333333
2
3
8.103E-3
0.06
0.446
5.935E-3
1.365262015 5.28461E-4
3.2E-5
3.949E-3
0.487
2.344E-5
1.365230014 8.29055E-9
5.02E-10
1.569e-5
0.49
3.677E-10
4
0.13435
Dokładność maszynowa
Metoda Newtona jest metodą kwadratową. Przekłada się to na dużą szybkość zbież-
ności. W tym przypadku dokładność pięciu cyfr znaczących uzyskujemy już w drugiej iteracji, w trzeciej iteracji otrzymaliśmy wynik z dokładnością 10 cyfr znaczących, natomiast w 4
iteracji otrzymany wynik byłby na poziomie dokładności maszynowej, czyli 15 cyfr znaczących.
Porównanie stosunków błędów wskazuje na metodę kwadratową z współczynnikiem
proporcjonalności C = 0.49. Z teoretycznej analizy błędów metody Newtona wynika, że
współczynnik proporcjonalności wynosi C =
f ′′(ξ )
≈ 0.49 , co łatwo sprawdzić podstawia2 ⋅ f ′(ξ )
jąc odpowiednie wartości do wzoru. Jak stąd wynika obserwujemy dużą zgodność wartości
eksperymentalnej z wyznaczoną teoretycznie
■
Wykorzystanie do wyprowadzenia metody Newtona rozwinięcia w szereg Taylora z
równoczesnym odrzuceniem wyrazu kwadratowego i wyższych nakłada duże wymagania
związane z oszacowaniem punktu startowego. Odrzucenie członu kwadratowego oznacza
przyjęcie założenia o liniowości rozwiązywanej funkcji f(x) w otoczeniu punkty x0. Założenie
takie jest prawdziwe jedynie w przypadku, gdy punkt x0 jest „dostatecznie blisko” położony w
stosunku do poszukiwanego pierwiastka ξ. Jeżeli tak nie jest i x0 nie jest „dostatecznie bliski”
ξ, to metoda Newtona – Raphsona może być rozbieżna. Sytuację taką przedstawiono na rysunku 4.6.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 99
2008-02-21
Strona 100 z 246
Metody Numeryczne i Programowanie
Rozdział 4
f(x0)
x1
x2
x0
Rysunek 4.6. Rozbieżność metody Newtona – Raphsona w przypadku, gdy punkt startowy
jest oddalony od poszukiwanego rozwiązania.
Podsumowując należy stwierdzić, że metoda Newtona – Raphsona jest metodą kwadratową, co oznacza, ze jest zdecydowanie szybciej zbieżna od metody bisekcji lub metody regula falsi. Warunkiem uzyskania rozwiązania jest dobre początkowe przybliżenie. Innym wymogiem jest to, aby pochodna funkcji f(x) nie przyjmowała wartości zero w otoczeniu pierwiastka oraz aby pomiędzy bieżącym przybliżeniem rozwiązania, a poszukiwanym pierwiastkiem pochodna ta nie była stała.
4.4. Metoda siecznych
Jednym z istotnych ograniczeń związanych z zastosowaniem metody Newtona – Raphsona jest konieczność obliczania wartości pierwszej pochodnej, które z reguły wymagają
większej ilości obliczeń aniżeli wyjściowa funkcja. Prostym sposobem rozwiązania tego problemu jest aproksymowanie pierwszej pochodnej za pomocą innych funkcji. Takie podejście
zastosowano w metodzie siecznych, w której pochodną funkcji f(x) zastąpiono aproksymacją
za pomocą różnic skończonych:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 100
2008-02-21
Strona 101 z 246
Metody Numeryczne i Programowanie
Rozdział 4
f ′( x n ) =
f ( x n ) − f ( x n −1 )
.
x n − x n −1
(4.22)
W aproksymacji tej wykorzystano dwa ostatnie oszacowania poszukiwanego rozwiązania. Podstawiając tę aproksymację do metody Newtona – Raphsona (4.19) otrzymujemy równanie iteracyjne – rekurencyjne:
xn +1 = x n −
xn − xn −1
f (xn ) .
f ( x n ) − f ′( xn −1 )
(4.23)
f(x0 )
x1
x2
x3
x0
f(x1 )
Rysunek 4.7. Interpretacja geometryczna metody siecznych.
Uzyskana formuła jest identyczna z równaniem wykorzystywanym w metodzie regula
falsi. Różnica polega na tym, że w metodzie regula falsi każdorazowo wybiera się tak dwa
punkty, aby pomiędzy nimi znajdowało się poszukiwane rozwiązanie. Natomiast w przypadku metody siecznych warunek ten nie musi być spełniony. Tak więc kolejne n + 1 przybliżenie wyznaczamy korzystając z punktów xn oraz xn-1 (rysunek 4.7). Z uwagi na powstawanie
problemów z uzyskaniem rozwiązania zaleca się w metodzie siecznych przyjmować wartości
startowe w taki sposób, aby przedział ten obejmował poszukiwany pierwiastek.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 101
2008-02-21
Strona 102 z 246
Metody Numeryczne i Programowanie
Rozdział 4
Sposób postępowania w metodzie siecznych jest podobny do sposobu postępowania w
innych metodach. Podać należy dwa oszacowania początkowe x0 oraz x1, przy czym wskazane jest, aby poszukiwane rozwiązanie znajdowało się w środku tego przedziału. Następnie z
równania (4.23) obliczamy nowe oszacowanie pierwiastka równania x2. Jeżeli zachodzi f(x2)
= 0, to x2 jest dokładnym rozwiązaniem równania. W przeciwnym razie, jeżeli x2 nie spełnia
nałożonych co do dokładności rozwiązania wymagań, z równania (4.23) wyznaczamy kolejne
przybliżenie x3. W ten sposób postępujemy tak długo, aż albo znajdziemy dokładne rozwiązanie, albo spełnione zostanie jedno z kryteriów zatrzymania obliczeń (4.7 – 4.9). Metodę tę
przedstawiono w kolejnym algorytmie (algorytm 4.4).
Algorytm 4.4. Metoda siecznych
1.
Weź n = 1; Załóż x0, oraz x1;
2.
Oblicz xn +1 = x n −
3.
Jeżeli f ( x n +1 ) = 0 lub x n +1 − x n ≤ ε to podaj xn+1 jako rozwiązanie i zakończ obli-
xn − xn −1
f (xn ) ;
f ( x n ) − f ′( xn −1 )
czenia;
4.
Podstaw n = n +1;
5.
Wróć do punktu 2.
■
Zbieżność metody siecznych można pokazać w podobny sposób jak zbieżność metody
Newtona – Raphsona. W tym celu obliczamy błąd metody wykorzystując formułę iteracyjną
(4.23) oraz rozwinięcie (4.24) funkcji f(x) w szereg Taylora w otoczeniu pierwiastka równania ξ:
f ( x ) = f (ξ ) + ( x − ξ ) f ′(ξ ) +
1
(x − ξ )2 f ′′(ξ ) + K .
2
(4.24)
Stąd w kolejnych przekształceniach otrzymujemy:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 102
2008-02-21
Strona 103 z 246
Metody Numeryczne i Programowanie
Rozdział 4
en +1 = xn +1 − ξ = xn − ξ −
f ( xn )
(xn − xn −1 ) =
f ( xn ) − f ( xn −1 )
1
en f ′(ξ ) + e 2n f ′′(ξ ) + K
2
(en − en −1 ) =
= en −
1 2
1 2
⎛
⎞
en f ′(ξ ) + e n f ′′(ξ ) + K − ⎜ en −1 f ′(ξ ) + e n −1 f ′′(ξ ) + K⎟
2
2
⎝
⎠
1
en f ′(ξ ) + e 2n f ′′(ξ ) + K
2
(en − en −1 ) =
= en −
(4.25)
⎡ 1
⎤
f ′′(ξ )
(en − en −1 ) f ′(ξ )⎢1 + (en + en −1 )
+ K⎥
f ′(ξ )
⎣ 2
⎦
⎡
⎤⎡ 1
⎤
1 f ′′(ξ )
f ′′(ξ )
= en − ⎢en + e 2n
+ K⎥ ⎢1 − (en + en −1 )
+ K⎥ =
2
f ′(ξ )
f ′(ξ )
⎣
⎦⎣ 2
⎦
1 f ′′(ξ ) 1
f ′′(ξ )
1 f ′′(ξ )
= en − en − e 2n
+ en (en + en −1 )
+K =
en en −1.
2
f ′(ξ )
2 f ′(ξ )
f ′(ξ ) 2
W końcowym oszacowaniu występuje iloczyn błędów en oraz en-1. Naszym celem natomiast jest wyrażenie błędu en+1 jedynie jako zależnego od en. Chcąc to zrobić zakładamy, że
błąd ten przedstawić można w następującej postaci wykładniczej:
⎛ 1 f ′′(ξ ) ⎞ α
= ⎜⎜
⎟⎟ e n .
⎝ 2 f ′(ξ ) ⎠
β
e n +1
(4.26)
Podstawiając równanie (4.26) do równania (4.25) po kolejnych przekształceniach otrzymujemy:
−β
en +1
1
1 f ′′(ξ )
1 f ′′(ξ ) ⎛ 1 f ′′(ξ ) ⎞ α α
⎟⎟ en =
=
en en +1 =
en ⎜⎜
2 f ′(ξ )
2 f ′(ξ ) ⎝ 2 f ′(ξ ) ⎠
⎛ 1 f ′′(ξ ) ⎞
⎟⎟
= ⎜⎜
⎝ 2 f ′(ξ ) ⎠
1−
β
α
(4.27)
α +1
α
en .
Porównując teraz równanie (4.27) z równaniem (4.26) otrzymamy następujące zależności na wykładniki potęgowe:
α=
1+α
,
α
α −β
β=
.
α
(4.28)
Jako rozwiązanie otrzymamy:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 103
2008-02-21
Strona 104 z 246
Metody Numeryczne i Programowanie
Rozdział 4
1+ 5
= 1.618034 K
2
.
2
β=
= 0.618034 K
1+ 5
α=
(4.29)
Jak stąd wynika metoda siecznych jest metodą o niecałkowitym rzędzie wynoszącym
1.618034... (jest to tak zwany złoty podział). Dodatkowo należy stwierdzić, że podobnie jak
metoda Newtona – Raphsona metoda ta jest rozbieżna, jeżeli w otoczeniu pierwiastka równania pierwsza pochodna jest bliska zero.
Przykład 4.5.
Stosując metodę siecznych znaleźć dla podanego w przykładzie (4.1) równania
f ( x ) = x 3 + 4 x 2 − 10 pierwiastek w przedziale [1, 2]. Oszacować błędy, jakimi obarczone są
kolejne rozwiązania.
Rozwiązanie
Wyniki obliczeń przedstawiono w tabeli 4.4. Rozwiązanie z dokładnością pięciu cyfr
znaczących uzyskuje się w czwartej iteracji. W szóstym kroku iteracyjnym osiągana jest dokładność 13 cyfr znaczących, natomiast w czternastym osiągnięta została dokładność maszynowa. Porównanie stosunków błędów wskazuje na metodę rzędu ~1.6 z stałą proporcjonalno1 ⎛ f ′′(ξ ) ⎞
ści około 0.7. Z obliczeń teoretycznych wynika, że C = ⎜⎜
⎟
2 ⎝ f ′(ξ ) ⎟⎠
0.618
= 0.644 .Jak stąd wyni-
ka metoda siecznych jest wolniejsza od metody Newtona, w której dokładność maszynową
osiągnięto w czwartej iteracji.
Tabela 4.4. Wyniki obliczeń pierwiastka równania f ( x ) = x 3 + 4 x 2 − 10 uzyskane metodą
siecznych. Oznaczenia identyczne jak w przykładzie 4.1.
en
n
xn
f(xn)
en
en
e n −1
(en −1 )1.618
δ
0
1
-5
0.365
-
-
-
0
2
14
0.635
-
-
-
1
1.2631579
-1.60227
0.102
-
-
0.075
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 104
2008-02-21
Strona 105 z 246
Metody Numeryczne i Programowanie
Rozdział 4
2
1.3388278
-0.43036
0.026
0.259
1.060
0.019
3
1.3666164
0.02291
1.386e-3
0.053
0.496
1.015e-3
4
1.3652119 -2.99068E-4 1.811e-5
0.013
0.763
1.327e-5
5
1.36523
-2.03168E-7 1.230e-8
6.793e-4
0.579
9.012e-9
6
1.36523
1.80478E-12
1.090e13
8.861e-6
0.685
7.986e-14
Dokładność maszynowa
7
■
Podsumowując należy stwierdzić, ze metoda siecznych jest szybsza od metody bisekcji
oraz metody regula falsi natomiast wolniejsza od metody Newtona – Raphsona. Jednakże niedogodnością metody siecznych jest to, że metoda ta nie zawsze jest zbieżna. Z tego względu
zaleca się, aby wartości startowe spełniały warunek zmiany znaku rozwiązywanej funkcji,
natomiast kolejne przybliżenia nie muszą go już spełniać. Dodatkowym warunkiem zbieżności jest to, aby pierwsza pochodna rozwiązywanej funkcji w otoczeniu pierwiastka równania
była różna od zera.
4.5. Metoda iteracji prostej
Metoda iteracji prostej jest jedną z prostszych i częściej używanych metod rozwiązy-
wania równań nieliniowych. Jej zastosowanie wymaga przekształcenia wyjściowego równania f(x) = 0 w równanie postaci:
x n +1 = g ( x n ),
i = 0,1,2, K .
(4.30)
Powyższe równanie rekurencyjne pozwala na znalezienie tak zwanego punktu stałego ξ, w
którym
ξ = g (ξ ) .
(4.31)
Dokonując przekształcenia (4.30) oczekujemy, że punkt stały równania jest rozwiązaniem wyjściowego równania f(x) = 0. Najprościej ujmując, równanie f(x) = 0 ma rozwiązanie
odpowiadające punktowi stałemu formuły x = g(x), jeżeli g(x) =x – f(x).
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 105
2008-02-21
Strona 106 z 246
Metody Numeryczne i Programowanie
Rozdział 4
Przykład 4.6.
Dana jest funkcja g ( x ) = x − sin (πx ) . Pokazać, że funkcja ta ma dokładnie dwa punkty
stałe w przedziale domkniętym [0, 1].
Rozwiązanie
Najprościej, chcąc pokazać istnienie punktów stałych należy na wykresie przedstawić
funkcję g(x) oraz funkcję y(x) = x.
2
1,5
1
0,5
0
0
0,5
1
1,5
-0,5
-1
Rysunek 4.8. Wykres funkcji g ( x ) = x − sin (πx ) oraz funkcji y(x) = x. Punkty stałe x = 0 oraz
x = 1.
Funkcje g(x) oraz y(x) = x mają dwa miejsca wspólne (rysunek 4.8). Są to punkty stałe
równania iteracyjnego x = x − sin(πx ) .
■
Porównując równanie rekurencyjne (4.30) z równaniami wyprowadzonymi dla wcześniej omawianych metod stwierdzić można, że niektóre z nich potraktować można jako przykłady metod iteracji prostej. Jest tak w przypadku metody Newtona – Raphsona, w której w
kolejnych iteracjach korzystamy z poprzedniego oszacowania. W przypadku metody siecz-
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 106
2008-02-21
Strona 107 z 246
Metody Numeryczne i Programowanie
Rozdział 4
nych sytuacja jest trochę odmienna, ponieważ w każdym kroku iteracyjnym konieczna jest
znajomość dwóch poprzednich oszacowań. Metody takie nazywa się metodami iteracyjnymi
dwupunktowymi.
W metodzie iteracji prostej zakłada się, że funkcja g(x) jest funkcją ciągłą na przedziale
domkniętym [xa, xb], czyli g ( x ) ∈ C [x a , x b ] oraz, że wartości funkcji g(x) należą do przedziału [xa, xb] co zapisujemy: g ( x ) ∈ [x a , x b ]. Ponadto zakładamy, że pochodna g’(x) istnieje na
przedziale otwartym (xa, xb) oraz, że:
g ′( x ) ≤ k < 1 , dla każdego x ∈ ( xa , xb ) .
(4.32)
Chcąc zastosować metodę iteracji prostej należy założyć punkt startowy x0 i generować
ciąg kolejnych przybliżeń x1, x2, x3, ... punktu stałego z zależności (4.30). Jeżeli ciąg kolejnych punktów xi jest zbieżny do granicy ξ, oraz jeżeli funkcja g(x) jest funkcją ciągłą, to z
zależności:
(
)
ξ = lim x i = lim g ( x i −1 ) = g lim x i −1 = g (ξ ) .
i →∞
i →∞
i →∞
(4.33)
wynika, że punkt ξ jest punktem stałym funkcji g(x).
Sposób, w jaki metoda iteracji prostej jest zbieżna zależy od znaku pochodnej. W przypadku, gdy pochodna jest dodatnia ciąg kolejnych przybliżeń może być monotonicznie rosnący lub malejący (rysunek 4.9). W przypadku, gdy pochodna jest ujemna kolejne przybli-
żenia są na przemian większe i mniejsze od punktu stałego (rysunek 4.10). W takim przypadku mówimy o oscylacyjnym procesie iteracyjnym.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 107
2008-02-21
Strona 108 z 246
Metody Numeryczne i Programowanie
Rozdział 4
x2
x1
x0
x0
x1
x2
Rysunek 4.9. Interpretacja geometryczna metody iteracji prostej. Pochodna g’(x) > 0, Zbieżność procesu iteracyjnego – monotoniczna.
y=g(x)
x2
x4
x3
x1
y=x
x1 x3
x4 x2 x0
Rysunek 4.10. Interpretacja geometryczna metody iteracji prostej. Pochodna g’(x) < 0,
Zbieżność procesu iteracyjnego – oscylacyjna.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 108
2008-02-21
Strona 109 z 246
Metody Numeryczne i Programowanie
Rozdział 4
Prowadząc obliczenia z wykorzystaniem metody iteracji prostej wychodzi się z punktu
startowego x0. Kolejne przybliżenia poszukiwanego pierwiastka oblicza się z równania iteracyjnego (4.30). Proces iteracyjny kończy się po spełnieniu jednego z kryteriów zakończenia
obliczeń (równania 4.7 – 4.9). Ten sposób prowadzenia obliczeń przedstawiony został w algorytmie (4.5).
Algorytm 4.5. Metoda iteracji prostej
1.
Dla i zmieniającego się od 1 do N wykonaj
1.1. Oblicz x i = g ( x i −1 ) ;
1.2. Jeżeli x i − x i −1 < ε to podaj xi jako wynik i zakończ obliczenia;
2.
Obliczenia zakończono po N krokach iteracyjnych nie uzyskując zadowalającego
rozwiązania;
■
Zbieżność metody iteracji prostej badamy w podobny sposób jak zbieżność pozostałych
metod. W tym celu rozwijamy funkcję g(x) w szereg Taylora:
g ( x n ) = g (ξ ) + e n g ′(ξ ) +
1 2
e n g ′′(ξ ) + K ,
2
(4.34)
a następnie szacujemy błąd metody:
en +1 = xn +1 − ξ = g ( xn ) − ξ =
1
= g (ξ ) + en g ′(ξ ) + en2 g ′′(ξ ) + K − ξ =
2
1
= en g ′(ξ ) + en2 g ′′(ξ ).
2
(4.35)
Jak z równania (4.35) wynika metoda iteracji prostej jest metodą pierwszego rzędu (liniową). Jest ona zbieżna pod warunkiem, że g ′(ξ ) < 1 w otoczeniu pierwiastka równania.
Istotny jest również znak pochodnej funkcji g(x). W przypadku dodatniej pochodnej metoda
jest monotonicznie zbieżna (rysunek 4.9) lub rozbieżna. W przypadku ujemnej pochodnej
metoda w sposób oscylacyjny albo zbiega do poszukiwanego rozwiązania (rysunek 4.10),
albo jest rozbieżna (rysunek 4.11).
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 109
2008-02-21
Strona 110 z 246
Metody Numeryczne i Programowanie
Rozdział 4
y=g(x)
y=x
x3
x1
x2
x2 x1
x0
Rysunek 4.11. Interpretacja geometryczna oscylacyjnie rozbieżnej metody iteracji prostej w
przypadku, gdy g’(x) < -1.
Analizując oszacowanie błędu w metodzie iteracji prostej (równanie 4.35) wyciągnąć
można pewne wnioski, co do sposobu konwersji zadania znajdowania pierwiastków równania
f(x) = 0 do wyrażenia (4.30). Przede wszystkim konwersji tej należy dokonać w taki sposób,
aby pochodna g’(x) w otoczeniu pierwiastka była, co do wartości bezwzględnej jak najmniejsza. Taki wybór funkcji g(x) gwarantuje maksymalną szybkość zbieżności. Dodatkowo, jeżeli
g’(ξ) = 0, to w wyrażeniu (4.32) znika pierwszy człon, co prowadzi do tego, że metoda iteracji prostej będzie metodą drugiego rzędu. Konwersję o takich właściwościach możemy
przeprowadzić wykorzystując następujące przekształcenie tożsamościowe:
f ( x ) = f ( x ) + ( x − x )h ( x ) = 0 .
(4.36)
Przekształcając równanie (4.36) w taki sposób, aby po jednej stronie znaku równości
uzyskać zmienną x a następnie wprowadzając różne zmienne dla kolejnych kroków iteracyjnych otrzymamy:
x n +1 = g ( x n ) = x n −
f (x n )
.
h(x n )
(4.37)
Jeżeli teraz funkcję h(x) wybierzemy w taki sposób, że h(x) = f’(x), to tak zdefiniowana
funkcja g(x) będzie miała w otoczeniu punktu ξ pierwszą pochodną równą zero. Z drugiej
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 110
2008-02-21
Strona 111 z 246
Metody Numeryczne i Programowanie
Rozdział 4
strony otrzymana formuła (4.37) jest formułą metody Newtona – Raphsona. Równanie (4.37)
daje nam dodatkowe możliwości przy tworzeniu funkcji iteracyjnej. Jest to szczególnie ważne
wtedy, gdy albo nie potrafimy wyznaczyć pochodnej funkcji f(x) lub też pochodna ta równa
jest zero w otoczeniu pierwiastka równania, co oznacza, że nie możemy zastosować metody
Newtona – Raphsona. W takich przypadkach możemy wykorzystać formułę (4.37) przyjmując jako funkcję h(x) funkcję aproksymującą funkcję f’(x), ale różną od zera w otoczeniu
pierwiastka uzyskując w ten sposób poszukiwane rozwiązanie równania. Kolejny przykład
(przykład 4.7) pokazuje jak duże znaczenie ma odpowiedni dobór funkcji iteracyjnej.
Przykład 4.7.
Stosując metodę iteracji prostej znaleźć dla podanego w przykładzie (4.1) równania
f ( x ) = x 3 + 4 x 2 − 10 pierwiastek w przedziale [1, 2]. Oszacować błędy, jakimi obarczone są
kolejne rozwiązania. Jako punkt startowy przyjąć x0 = 1.5.
Rozwiązanie
Funkcję f ( x ) = x 3 + 4 x 2 − 10 przedstawić należy w postaci x = g(x). W tym celu dokonać należy pewnych przekształceń tej funkcji, przy czym w zależności od sposobu podejścia do tego zagadnienia otrzymać możemy różne funkcje iteracyjne:
a)
x = g 1 ( x ) = x − x 3 − 4 x 2 + 10 , g 1′ ( x ) = 1 − 3x 2 − 8 x ,
b)
2
1 ⎛ 10
⎞⎛ 10
⎛ 10
⎞
⎞
x = g 2 ( x ) = ⎜ − 4 x ⎟ , g 2′ ( x ) = − ⎜ 2 + 4 ⎟⎜ − 4 x ⎟
2⎝x
⎠⎝ x
⎝ x
⎠
⎠
c)
x = g3 (x ) =
d)
2
−5
⎛ 10 ⎞
,
x = g 4 (x ) = ⎜
⎟ , g 4′ ( x ) =
3
⎝4+ x⎠
10 (4 + x ) 2
1
− 12
,
1
−1
3
1
(
10 − x 3 ) 2 , g 3′ ( x ) = − x 2 (10 − x 3 ) 2 ,
2
4
1
e)
x
x = g 5 (x ) = x −
3
x 3 + 4 x 2 − 10
+ 4 x 2 − 10
(
)
(6 x + 8) .
, g5 x =
2
2
3x 2 + 8 x
(3x + 8 x )
W tabeli 4.5 porównano generowane przez metodę iteracji prostej rozwiązania dla różnych postaci funkcji iteracyjnej. Natomiast w tabelach 4.6 – 4.8 przedstawiono wyniki obliczeń dla przypadków, w których metoda jest zbieżna.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 111
2008-02-21
Strona 112 z 246
Metody Numeryczne i Programowanie
Rozdział 4
Tabela 4.5. Porównanie wyników obliczeń metodą iteracji prostej dla różnych funkcji iteracyjnych. Oznaczenia (a), (b), ..., (e) odpowiadając funkcjom g1, g2 ..., g5.
(a)
(b)
(c)
(d)
(e)
0
1.5
1.5
1.5
1.5
1.5
1
-0.875
0.8164966 1.2869538 1.3483997 1.37333333
2
6.7324219
2.9969088 1.4025408 1.3673764 1.36526201
3
-469.720012
4
1.0275456E+8
2.9412351i 1.3454584
1.364957
1.36523001
1.3751703 1.3652647 1.36523001
5
1.3600942 1.3652256
6
1.3678470 1.3652306
7
1.3638870 1.3652299
8
1.3659167
9
1.3648782
10
1.3654101
11
1.3651378
12
1.3652772
13
1.3652059
14
1.3652424
15
1.3652237
16
1.3652333
17
1.3652284
18
1.3652309
19
1.3652296
20
1.3652302
Porównując wyniki uzyskane dla różnych przedstawień funkcji g(x) stwierdzić należy,
że zbieżność metody iteracji prostej uzyskano jedynie w przypadku (c), (d) oraz (e). Natomiast w przypadku (a) metoda iteracji prostej jest rozbieżna, a w przypadku (b) jest ona niezdefiniowana, ponieważ w trzeciej iteracji otrzymujemy pierwiastek kwadratowy z liczby
ujemnej. W wyjaśnieniu tych obserwacji wykorzystać należy analizę pochodnych odpowiednich funkcji iteracyjnych g(x).
W przypadku (a) w całym przedziale [1, 2] nie jest spełniony warunek g 1′ ( x ) < 1 . W
przypadku (b) funkcja g2(x) nie odwzorowuje przedziału [1, 2] w [1, 2]. Dodatkowo pochodMariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 112
2008-02-21
Strona 113 z 246
Metody Numeryczne i Programowanie
Rozdział 4
na nie spełnia warunku g 2′ ( x ) < 1 . W przypadku (c) pochodna g3′ (2) = −2.12 , co oznacza, że
nie jest spełniony warunek g 3′ ( x ) < 1 . Jednakże dalsza analiza zagadnienia wskazuje, że
zmiana przedziału z [1, 2] na [1, 1.5] rozwiązuje ten problem, ponieważ w tym przedziale
spełniony
jest
warunek
g 3′ ( x ) ≤ g 3′ (1.5) ≈ 0.66 .
Dodatkowo
zachodzi
1 < 1.29 ≈ g 3 (1.5) ≤ g 3 ( x ) ≤ g 3 (1) = 1.5 dla każdego x ∈ [1,1.5]. Oznacza to, że funkcja g3 odwzorowuje przedział [1, 1.5] w samego siebie. W przypadku (d) pochodna g 4′ ( x ) < 0.15 dla
wszystkich x ∈ [1,2] Ponieważ górne ograniczenie pochodnej dla funkcji g4 jest dużo mniejsze
od górnego ograniczenia pochodnej dla funkcji g3, to procedura iteracyjna jest zdecydowanie
szybsza aniżeli w poprzednim przypadku. Podobna sytuacja zachodzi w przypadku (e). Pochodna funkcji g5 spełnia warunek g 5′ ( x ) < 0.6 . Dodatkowo w otoczeniu punktu stacjonarnego mamy g 5′ (1.365230013) ≈ 4.1 × 10 −10 . Biorąc pod uwagę oszacowanie błędu (równanie
4.35) należy wnioskować, że rząd zbieżności metody iteracji prostej w tym przypadku będzie
bliski dwa. Z drugiej strony dokładniejsza analiza funkcji iteracyjnej g5 prowadzić będzie do
wniosku, że jest to metoda Newtona – Raphsona.
Przedstawione w tabeli 4.6 wyniki pokazują, że dla funkcji iteracyjnej (c) metoda itera-
cji prostej jest metodą pierwszego rzędu z współczynnikiem proporcjonalności C = 0.512.
Jest to więc metoda porównywalna z metodą bisekcji, w której współczynnik proporcjonalności wynosił 0.5. Jeżeli porównać liczbę iteracji konieczną do uzyskania pięciu cyfr znaczących, to jest ona praktyczni identyczna – 13 iteracji w metodzie bisekcji i 12 iteracji w meto-
dzie iteracji prostej.
Tabela 4.6. Wyniki obliczeń pierwiastka równania f ( x ) = x 3 + 4 x 2 − 10 uzyskane metodą
iteracji prostej. Zastosowano funkcję iteracyjną (c). Oznaczenia identyczne jak w
przykładzie 4.1.
n
xn
f(xn)
en
en
e n −1
δ
0
1.5000000
2.375
0.135
-
-
1
1.2869538
-1.243
0.078
0.581
0.057
2
1.4025408
0.627
0.037
0.477
0.027
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 113
2008-02-21
Strona 114 z 246
Metody Numeryczne i Programowanie
Rozdział 4
3
1.3454584
-0.323
0.020
0.530
0.014
4
1.3751703
0.165
9.940e-3
0.503
7.281e-3
5
1.3600942
-0.085
5.136e-3
0.517
3.762e-3
6
1.3678470
0.043
2.617e-3
0.510
1.917e-3
7
1.3638870
-0.022
1.343e-3
0.513
9.837e-4
8
1.3659167
0.011
6.867e-4
0.511
5.030e-4
9
1.3648782
-5.808e-3
3.518e-4
0.512
2.577e-4
10
1.3654101
2.973e-3
1.800e-4
0.512
1.319e-4
11
1.3651378
-1.522e-3
9.219e-5
0.512
6.753e-5
12
1.3652772
7.794e-4
4.720e-5
0.512
3.457e-5
13
1.3652059
-3.990e-4
2.416e-5
0.512
1.770e-5
14
1.3652424
2.043e-4
1.237e-5
0.512
9.061e-6
15
1.3652237
-1.046e-4
6.333e-6
0.512
4.639e-6
16
1.3652333
5.354e-5
3.242e-6
0.512
2.375e-6
17
1.3652284
-2.741e-5
1.660e-6
0.512
1.216e-6
18
1.3652309
1.403e-5
8.498e-7
0.512
6.225e-7
19
1.3652296
-7.185e-6
4.351e-7
0.512
3.187e-7
20
1.3652302
3.678e-6
2.227e-7
0.512
1.632e-7
W przypadku zastosowania funkcji iteracyjnej (d) otrzymujemy również metodę pierwszego rzędu (tabela 4.7). W tym przypadku współczynnik proporcjonalności C = 0.127. Jest
on mniejszy od tego, jaki uzyskano w przypadku metody iteracji prostej z funkcją (c), co
oznacza zdecydowanie szybszą zbieżność. W tym przypadku pięć cyfr znaczących uzyskuje
się już w czwartej iteracji. Jest to również szybsza metoda od metody regula falsi, w której
współczynnik proporcjonalności C= 0.25, w której pięć cyfr znaczących uzyskano po siedmiu
iteracjach.
Tabela 4.7. Wyniki obliczeń pierwiastka równania f ( x ) = x 3 + 4 x 2 − 10 uzyskane metodą
iteracji prostej. Zastosowano funkcję iteracyjną (d). Oznaczenia identyczne jak w
przykładzie 4.1.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 114
2008-02-21
Strona 115 z 246
Metody Numeryczne i Programowanie
Rozdział 4
n
xn
f(xn)
en
en
e n −1
δ
0
1.5
2.375
0.135
-
-
1
1.3483997
-0.276
0.017
0.125
0.012
2
1.3673764
0.035
2.146e-3
0.128
1.572E-3
3
1.364957
-4.508E-3
2.730e-4
0.127
2E-4
4
1.3652647
5.736E-4
3.473e-5
0.127
2.544E-5
5
1.3652256
-7.298E-5
4.419e-6
0.127
3.237E-6
6
1.3652306
9.285E-6
5.623e-7
0.127
4.118E-7
7
1.3652299
-1.181E-6
7.154e-8
0.127
5.24E-8
Tabela 4.8. Wyniki obliczeń pierwiastka równania f ( x ) = x 3 + 4 x 2 − 10 uzyskane metodą
iteracji prostej. Zastosowano funkcję iteracyjną (e). Oznaczenia identyczne jak w
przykładzie 4.1.
en
n
xn
f(xn)
en
en
e n −1
(en −1 )2
δ
0
1.5
2.375
0.135
-
-
-
1
1.37333333
0.134
8.103e-3
0.060
0.446
5.935E-3
2
1.36526201
5.285E-4
3.200e-5
3.949e-3
0.487
2.344E-5
3
1.36523001
8.291E-9
5.020e-10
1.569e-5
0.490
3.677E-10
4
1.36523001
Dokładność maszynowa
Funkcja iteracyjna w postaci (e) prowadzi do metody iteracji prostej drugiego rzędu
(tabela 4.8). Jest to więc metoda porównywalna z metodą Newtona – Raphsona, i podobnie
jak w tej metodzie pięć cyfr znaczących uzyskuje się w drugiej iteracji. Porównanie tej metody z metodą siecznych, pokazuje, że uzyskaliśmy metodę szybciej zbieżną, ponieważ w metodzie siecznych pięć cyfr znaczących uzyskuje się w czwartej iteracji.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 115
2008-02-21
Strona 116 z 246
Metody Numeryczne i Programowanie
Rozdział 4
■
Istotnym ograniczeniem metody iteracji prostej jest to, że aby rozwiązywana funkcja
posiadała w zadanym przedziale jedynie pierwiastki jednokrotne. Jeżeli tak nie jest to należy
wyeliminować znane wielokrotne pierwiastki i uprościć w ten sposób problem do poszukiwania pozostałych pierwiastków.
4.6. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
1.
Oszacować liczbę iteracji potrzebnych do osiągnięcia przybliżonego rozwiązania meto-
dą bisekcji z dokładnością 6 cyfr znaczących dla następujących zadań:
a) x − 2 − x = 0,
dla 0 ≤ x ≤ 1 ,
b) e x + 2 − x + 2 cos( x ) − 6 = 0
c) e x − x 2 + 3x − 2 = 0
2.
dla 1 ≤ x ≤ 2 ,
dla 0 ≤ x ≤ 1 .
Znaleźć przybliżoną wartość
3
25 z dokładnością 10-4 stosując metodę bisekcji. Osza-
cować liczbę koniecznych do uzyskania takiej dokładności liczby iteracji. Wskazówka:
założyć f(x) = x3 – 25.
3.
Zastosować
4x − 7
( x − 2 )2
metodę
bisekcji
do
znalezienia
rozwiązania
równania:
=0
Przyjąć, że poszukiwane rozwiązanie znajduje się w przedziale [1.2, 2.2] oraz [1.5,
2.5]. Omówić wyniki wykorzystując interpretację geometryczną.
4.
Stosując metodę regula falsi rozwiązać następujące równania:
a) x =
2 − ex + x2
,
3
b) 3x 2 − e x = 0 ,
c) e x + 2 − x − 2 cos( x ) − 6 = 0 ,
d) x 2 + 10 cos( x ) = 0 ,
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 116
2008-02-21
Strona 117 z 246
Metody Numeryczne i Programowanie
Rozdział 4
Początkowy przedział zawierający poszukiwane rozwiązanie znaleźć z interpretacji
geometrycznej.
5.
Stosując metoda Newtona – Raphsona rozwiązać równania z poprzednich zadań.
6.
Stosując metodą bisekcji znaleźć wartość zmiennej x, dla której przecinają się wykresy
funkcji y = 3x oraz y = ex. Przyjąć dokładność obliczeń 10-4.
7.
Znaleźć najmniejszy dodatni pierwiastek równań. Zastosować omawiane w rozdziale
metody obliczeniowe. Porównać otrzymane wyniki.
a) tg( x ) − x − 1 = 0 ,
b) x 3 − x 2 − 2 x + 1 = 0 ,
c) 2e − x − sin( x ) = 0 ,
8.
Korzystając z metody Newtona – Raphsona wyprowadzić wzór na obliczanie pierwiastka sześciennego z liczby dodatniej. Wykonać kilka kroków iteracyjnych i przeprowadzić dyskusję wyników.
9.
Korzystając z metody Newtona – Raphsona wyprowadzić wzór na obliczanie pierwiastka kwadratowego z liczby dodatniej. Wykonać kilka kroków iteracyjnych i przeprowadzić dyskusję wyników.
10.
Stosując metodę Newtona – Raphsona do równania x n − c = 0 , wyprowadzić wzór na
obliczanie n-tego pierwiastka z liczby dodatniej. Wykonać kilka kroków iteracyjnych i
przeprowadzić dyskusję wyników.
11.
Korzystając z metody Newtona – Raphsona do równania f ( x ) =
1
− N , wyprowadzić
x
wzór na obliczanie odwrotności liczby N. Wykonać kilka kroków iteracyjnych i przeprowadzić dyskusję wyników.
12.
Stosując metodę iteracji prostej znaleźć w przedziale [0.5, 1.52] pierwiastek równania
f ( x ) = x 4 + 2 x 2 − x − 3 . Jako punkt startowy przyjąć x0 = 1.0. Przyjąć następujące
funkcje iteracyjne:
a) g 1 ( x ) = (3 + x − 2 x 2 ) 4 ,
1
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 117
2008-02-21
Strona 118 z 246
Metody Numeryczne i Programowanie
Rozdział 4
⎛ x + 3 − x4
b) g 2 ( x ) = ⎜⎜
2
⎝
1
⎞
⎟⎟ ,
⎠
2
1
2
⎛ x+3 ⎞
c) g 3 ( x ) = ⎜ 2
⎟ ,
⎝ x + 2⎠
d) g 4 ( x ) =
3x 4 + 2 x 2 + 3
.
4x 3 + 4x − 1
Wskazać, która z podanych funkcji najlepiej nadaje się do rozwiązania postawionego
problemu. Uzasadnić przyjęte rozwiązania.
13.
Korzystając z metody iteracji prostej obliczyć
3 z dokładnością 10-4. Porównać wy-
nik i liczbę iteracji z odpowiednimi wynikami uzyskanymi innymi metodami.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 118
2008-02-21
Strona 119 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Rozdział 5. Numeryczne różniczkowanie i całkowanie
Często spotykanym w praktyce problemem jest konieczność obliczenia wartości pochodnej danej funkcji w punkcie. Jakkolwiek można policzyć pochodną funkcji analitycznie,
to bardzo często wymaga to dużego nakładu czasu. Często też zdarza się taka sytuacja, że
różniczkowana funkcja nie jest dana w postaci jawnej, czyli w postaci określonego wzoru
matematycznego, natomiast jest dana w formie numerycznej, jako zbiór wartości funkcji w
określonych punktach. W takich przypadkach konieczne jest zastosowanie metod pozwalających oszacować numerycznie poszukiwane wartości pochodnej funkcji w punkcie.
Również w przypadku całkowania funkcji zdarza się, że nie potrafimy wskazać funkcji
pierwotnej dla danej funkcji podcałkowej. Musimy w takim przypadku zastosować metody
aproksymacyjne.
W wcześniejszej części wykładu dotyczącej metod interpolacyjnych zasugerowane zostało zastosowanie wielomianów interpolacyjnych do numerycznego różniczkowania i całkowania zadanych funkcji. Wynika to stąd, że wielomiany są funkcjami bardzo łatwymi do wyznaczenia. Dodatkowo nie sprawia dużych problemów zarówno ich całkowanie jak też różniczkowanie. Z tego też względu wiele procedur numerycznego różniczkowania i całkowania
wykorzystuje funkcje wielomianowe. Przykłady takich zastosowań przedstawione zostaną w
tej części wykładu.
5.1. Metody numerycznego różniczkowania funkcji
Metody numerycznego różniczkowania wymagają od nas znalezienia wartości pochodnej lub nachylenia funkcji w punkcie mając do dyspozycji jedynie dany zbiór wartości zadanej funkcji w określonej liczbie punktów. Jako pierwsze w tym rozdziale podane zostaną formuły pozwalające aproksymować pierwszą pochodną. Przedstawione metody rozszerzone
zostaną na aproksymację drugich i wyższych pochodnych.
5.1.1. Metody numeryczne obliczania wartości pierwszej pochodnej funkcji
Najprostszym sposobem aproksymowania pierwszej pochodnej jest zastosowanie ilorazu różnicowego.
f ′( x 0 ) =
f (x 0 + h ) − f (x 0 )
.
h
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
(5.1)
Strona 119
2008-02-21
Strona 120 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Z uwagi na to, że do aproksymowania wartości pierwszej pochodnej funkcji f w zadanym punkcie x0 używa się informacji o funkcji z dwóch różnych punktów, metody wykorzystujące taki iloraz różnicowy nazywa się metodami dwu punktowymi.
Formalne wyprowadzenie tej metody przeprowadzić można na dwa sposoby, albo wykorzystując wielomiany interpolacyjne Lagrange’a, albo wychodząc z rozwinięcia funkcji f w
otoczeniu pewnego punktu w wielomian Taylora.
Formalne wyprowadzenie tej formuły wymaga poczynienia kilku założeń. Przede
wszystkim założyć należy, że dana jest na przedziale domkniętym [a, b] funkcja ciągła f mającą ciągłą pierwszą i drugą pochodną, co zapisujemy f ∈ C 2 [a, b] oraz dane są pewne punkty x i −1 , x i , x i +1 ∈ [a, b] takie, że x i − x i −1 = x i +1 − x i = h , gdzie h ≠ 0 jest pewną małą liczbą.
Naszym celem jest aproksymacja wartości pierwszej pochodnej funkcji f w punkcie xi, czyli
aproksymacja f’(xi). Do przeprowadzenia aproksymacji wykorzystać można przedział [xi,
xi+1] lub przedział [xi-1, xi]. W pierwszym przypadku, gdy x ∈ [x i , x i +1 ] na przedziale [xi,
xi+11] wyznaczamy wielomian interpolacyjny Lagrange’a pierwszego stopnia postaci:
Pi ,1 ( x ) =
x − x i +1
x − xi
f (x i ) +
f ( x i +1 ) =
x i − x i +1
x1 − x i
x − xi − h
x − xi
=
f (x i ) +
f ( x i + h ).
−h
h
(5.2)
Zgodnie z równaniem (3.18) uwzględniając wyrażenie na błąd obcięcia w interpolacji
wielomianami Lagrange’a możemy zapisać:
f ( x ) = Pi ,1 ( x ) +
(x − x i )(x − x i +1 )
2!
f ′′(ξ ( x )) =
(x − x i )(x − x i − h ) ′′
x − xi − h
x − xi
f (x i ) +
f (x i + h ) +
f (ξ ( x )),
=
h
2!
−h
(5.3)
gdzie ξ(x) jest pewną liczbą zależną od x taką, że ξ ( x ) ∈ [x i , x i +1 ] = [x i , x i + h ]. Różniczkując
wyrażenie (5.3) otrzymamy:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 120
2008-02-21
Strona 121 z 246
Metody Numeryczne i Programowanie
Rozdział 5
f ( x i + h ) − f ( x i ) d ⎡ ( x − x i )( x − x i − h )
⎤
+
f ′′(ξ ( x ))⎥ =
⎢
2!
h
dx ⎣
⎦
f ( x i + h ) − f ( x i ) 2( x − x i ) − h
=
+
f ′′(ξ ( x )) +
2
h
(x − x i )(x − x i − h ) d ′′
( f (ξ (x ))) =
.
+
2
dx
f ( x i + h ) − f ( x i ) 2( x − x i ) − h
=
+
f ′′(ξ ( x )) +
2
h
(x − x i )(x − x i − h ) ′′′
+
f (ξ ( x )) ⋅ ξ ′( x ).
2
f ′( x ) =
(5.4)
Problem z zastosowaniem wyrażenia (5.4) do aproksymowania wartości pierwszej pochodnej funkcji f w zadanym przedziale polega na tym, że nieznane jest nam wyrażenie
f ′′′(ξ ( x )) ⋅ ξ ′( x ) , co oznacza, że nie jesteśmy wstanie oszacować błędu tej aproksymacji. Jak
stąd wynika nie możemy wykorzystać tej aproksymacji do oszacowania wartości pochodnej
dla dowolnego x ∈ [x i , x i +1 ] . Natomiast, jeżeli przyjmiemy, że poszukujemy pochodnej w
węźle interpolacji, czyli x = xi, to ostatni człon równania (5.4) będzie równy zero, a całe wyrażenie uprości się do równania:
f ′( x i ) =
f (xi + h ) − f (xi ) h
− f ′′(ξ ( x )) .
2
h
(5.5)
Jak z równania (5.5) wynika błąd obcięcia w metodzie wykorzystującej iloraz różnicowy jest O(h). Oznacza to, że dla małych h taki iloraz różnicowy może być użyty do aproksymacji f’(xi) z błędem nie większym od
h
M gdzie M = max f ′′( x ) . Przy czym, w miarę jak
x∈[a ,b ]
2
będziemy aproksymowali wartości pierwszej pochodnej wykorzystując coraz mniejszy krok
h, aproksymacje będą zbieżne do wartości dokładnej z pierwszą potęgą przy h. Formuła (5.5)
w przypadku, gdy h > 0 nazywana jest ilorazem różnicowym progresywnym, natomiast
metoda go wykorzystująca nazywana jest metodą różnicową progresywną. W przypadku,
gdy h < 0 otrzymamy tak zwany iloraz różnicowy wsteczny. W tym przypadku otrzymamy
metodę różnicową wsteczną, a odpowiednia zależność przyjmie postać:
f ′( xi ) =
f ( xi −1 ) − f ( xi ) h
f ( xi ) − f ( xi −1 ) h
− f ′′(ξ ( x )) =
− f ′′(ξ ( x )) =
2
2
xi −1 − xi
xi − xi −1
f ( xi ) − f ( xi − h ) h
=
− f ′′(ξ ( x )).
h
2
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 121
,
(5.6)
2008-02-21
Strona 122 z 246
Metody Numeryczne i Programowanie
Rozdział 5
gdzie ξ(x) jest pewną liczbą zależną od x taką, że ξ ( x ) ∈ [x i −1 , x i ] = [x i − h, x i ] .
Przykład 5.1
Dana jest funkcja f ( x ) = ln ( x ) oraz punkt x0 = 1.8. Korzystając z równania (5.5) aproksymować wartość pierwszej pochodnej tej funkcji w zadanym punkcie oraz oszacować błąd
aproksymacji. W obliczeniach przyjąć różne długości kroku: h = 0.1, 0.01 oraz 0.001. Wartość dokładna f’(1.8) = 0.555555(6).
Rozwiązanie
Wyniki aproksymacji podano w tabeli 5.1. Pierwsza pochodna aproksymowanej funkcji
f dana jest wzorem f ′( x ) =
1
−1
natomiast druga pochodna wzorem f ′′( x ) = 2 . W związku z
x
x
powyższym oszacowanie błędu aproksymacji wynosi:
hf ′′(ξ )
2
=
h
2ξ 2
≤ max
1.8 ≤ξ ≤1.8 + h
h
2ξ 2
=
h
2(1.8)
2
.
Tabela 5.1. Wyniki aproksymacji pochodnej funkcji f ( x ) = ln ( x ) dla różnych wartości kroku
h. Błąd bezwzględny δ =
δ
f (1.8 + h ) − f (1.8)
− f ′(1.8) , względny ε =
.
h
f ′(1.8)
h
f (1.8 + h ) − f (1.8)
h
δ
ε
2(1.8)
0.1
0.5406722
1.4883343E-2
2.67900E-2
1.54321E-2
0.01
0.5540180
1.5375180E-3
2.76753E-3
1.54321E-3
0.001
0.5554013
1.5426386E-4
2.77675E-4
1.54321E-4
h
2
Jak z przedstawionego porównania wynika błąd aproksymacji pierwszej pochodnej maleje wraz z maleniem kroku h, co zresztą jest zgodne z przewidywaniami. Oszacowany błąd
obcięcia poszczególnych aproksymacji jest porównywalny z błędem bezwzględnym obliczonym przy wykorzystaniu poprawnej wartości pierwszej pochodnej. Porównanie błędów
względnych pozwala natomiast stwierdzić, ze liczba cyfr znaczących dla poszczególnych
aproksymacji rośnie z dwóch do czterech wraz z maleniem kroku h z 0.1 do 0.001.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 122
2008-02-21
Strona 123 z 246
Metody Numeryczne i Programowanie
Rozdział 5
■
Innym wariantem metody opartej na wykorzystaniu ilorazu różnicowego do aproksymacji wartości pierwszej pochodnej jest metoda różnicowa centralna. W tym przypadku do
aproksymacji wartości pochodnej w punkcie xi wykorzystuje się informację o funkcji w punktach xi-1 oraz xi+1. Formułę aproksymacyjną uzyskać można biorąc średnią z formuły różnic
wstecznych (równanie 5.6) i progresywnych (równanie 5.5), otrzymując:
f ′( x i ) =
f ( x i +1 ) − f ( x i −1 ) f ( x i + h ) − f ( x i − h )
=
.
x i +1 − x i −1
2h
(5.7)
Formalnie metodę różnicową centralną otrzymujemy korzystając z wielomianu Taylora
stopnia trzeciego. W tym celu korzystamy z rozwinięcia funkcji f w otoczeniu punktu xi i obliczmy wartość tej funkcji w punkcie xi+1:
f ( xi +1 ) = f (xi ) + ( xi +1 − xi ) f ′( xi ) +
(xi +1 − xi )2
2!
f ′′( xi ) +
(xi +1 − xi )3
3!
f ′′′(ξ1 ( x )) =
(5.8)
h2
h3
= f ( xi ) + hf ′( xi ) +
f ′′(xi ) +
f ′′′(ξ1 ( x )),
2!
3!
oraz punktu xi-1:
f ( xi −1 ) = f ( xi ) + ( xi −1 − xi ) f ′( xi ) +
(xi −1 − xi )2
2!
f ′′( xi ) +
h2
h3
= f ( xi ) − hf ′( xi ) +
f ′′(xi ) −
f ′′′(ξ 2 ( x )),
2!
3!
(xi −1 − xi )3
3!
f ′′′(ξ 2 ( x )) =
(5.9)
gdzie ξ 1 ( x ) ∈ [x i , x i +1 ] = [x i , x i + h ] oraz ξ 2 ( x ) ∈ [x i −1 , x i ] = [x i − h, x i ] , a następnie odejmujemy równanie (5.9) od równania (5.8). Zakładając, ze wyraz reprezentujący błąd obcięcia metody różnicowej centralnej zawiera trzecią pochodną funkcji f ciągłą na przedziale [xi-1, xi+1],
formułę definiującą metodę łącznie z wyrazem błędu obcięcia zapisać można w postaci:
f ′( x i ) =
f ( x i +1 ) − f (x i −1 ) h 2
f ′′′(ξ ( x )) =
+
6
x i +1 − x i −1
f (x i + h ) − f (xi − h ) h 2
f ′′′(ξ ( x )),
=
+
2h
6
(5.10)
gdzie ξ ( x ) ∈ [x i −1 , x i +1 ] = [x i − h, x i + h ] .
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 123
2008-02-21
Strona 124 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Z uwagi na to, że formułę metody różnicowej centralnej wyprowadzić można wykorzystując wielomiany interpolacyjne Lagrange’a wykorzystujące trzy punkty, metoda ta zaliczana jest do metod trzy punktowych. W jej przypadku błąd obcięcia jest O(h2), co oznacza, ze
jest to metoda zbieżna drugiego rzędu.
Interpretację geometryczną metod różnicowych przedstawiono na rysunku (5.1).
Rysunek 5.1. Interpretacja geometryczna trzech metod różnicowych. Linia ciągła – funkcja
f(x); – styczna f ′( x i ) ;
– metoda różnicowa centralna ♦ – metoda różni-
cowa progresywna; ▲ – metoda różnicowa wsteczna.
Porównanie trzech metod różnicowych przedstawiono w kolejnym przykładzie (5.2).
Przykład 5.2.
Dana jest funkcja f ( x ) = 2 x . Wykorzystując trzy różne metody różnicowe aproksymować wartość pierwszej pochodnej tej funkcji w punkcie x0 = 3. W obliczeniach przyjąć różne
długości kroku: h = 0.1, 00.1 oraz 0.001. Oszacować błąd obcięcia zakładając, że aproksymacja
wykonywana
jest
na
przedziale
domkniętym
[2.5, 3.5].
Wartość
dokładna
f ′( x 0 ) = 2 x0 ⋅ ln (2 ) = 2 3 ⋅ 0.693 = 5.545 .
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 124
2008-02-21
Strona 125 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Rozwiązanie
Wyniki aproksymacji podano w tabeli 5.2. Pierwsza pochodna aproksymowanej funkcji
f dana jest wzorem f ′( x ) = 2 x ⋅ ln (2 ) , druga pochodna wzorem f ′′( x ) = 2 x ⋅ (ln(2 )) natomiast
2
trzecia pochodna wzorem f ′′′( x ) = 2 x ⋅ (ln (2 )) W związku z powyższym oszacowanie błędu
3
obcięcia w metodach różnic progresywnych i różnic wstecznych wynosi:
h ⋅ f ′′(ξ )
2
⎞
⎛h
2
⋅ 2ξ ⋅ (ln (2)) ≤ max ⎜⎜ ⋅ 2ξ ⋅ (ln (2))⎟⎟ =
2.5 ≤ ξ ≤ 3.5 2
2
⎠ ,
⎝
23.5
=
⋅ (ln (2 )) ⋅ h = 2.718 ⋅ h ,
2
h
=
oraz w przypadku metody różnic centralnych
h 2 ⋅ f ′′′(ξ )
6
h
=
=
6
⋅ 2 ⋅ (ln (2))
ξ
3
⎛ h2 ξ
⎞
3
≤ max ⎜
⋅ 2 ⋅ (ln (2 )) ⎟ =
2.5 ≤ ξ ≤ 3.5⎜ 6
⎟
⎝
⎠ .
23.5
2
2
3
⋅ (ln (2 )) ⋅ h = 0.6280 ⋅ h .
6
Jak z wyprowadzonych powyżej oszacowań wynika błąd obcięcia w przypadku metod
różnic progresywnych i wstecznych maleje liniowo wraz z maleniem długości kroku. W ten
sam sposób zmieniają się również obliczone błędy bezwzględne. W przypadku metody różnic
centralnych błąd maleje z drugą potęgą. Porównanie metod różnic wstecznych i progresywnych wskazuje, ze dają one porównywalne wyniki z bardzo podobnymi błędami bezwzględnymi aproksymacji.
Tabela 5.2. Wyniki aproksymacji dla różnych kroków h pierwszej pochodnej funkcji
f ( x ) = 2 x w punkcie x0 = 3 z zastosowaniem trzech różnych metod aproksymacyjnych: różnicowej progresywnej, różnicowej wstecznej oraz różnicowej cen~
tralnej. Błąd bezwzględny aproksymacji δ = ~
f ′(3) − f ′(3) , gdzie f ′(3) jest
aproksymowaną wartością pierwszej pochodnej za pomocą jednej z badanych metod różnicowych.
h
Metoda różnic progresywnych
Pochodna
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
δ
Metoda różnic
wstecznych
Pochodna
Strona 125
δ
Metoda różnic centralnych
Pochodna
δ
2008-02-21
Strona 126 z 246
Metody Numeryczne i Programowanie
Rozdział 5
0.1
5.742
1.967E-1
5.357
1.878E-1
5.550
4.441E-3
0.01
5.564
1.926E-2
5.526
1.917E-2
5.545
4.44E-5
0.001
5.547
1.922E-3
5.543
1.921E-3
5.545
-4.44E-7
■
Wykorzystanie wielomianu wyższego stopnia zamiast równania liniowego w formułach
różnicowych wykorzystywanych do aproksymacji pochodnych prowadzi do uzyskania lepszych wyników. Wniosek taki wyciągnąć można chociażby z formuły różnic centralnych,
którą można wyprowadzić wykorzystując wielomiany Lagrange’a stopnia drugiego. Jednakże
w ogólnym przypadku aproksymacje takie wymagają większej liczby punktów aniżeli dwa.
W ogólnym przypadku wyprowadzając metodę różnicową zakładamy istnienie w pewnym przedziale [a, b] ciągu n+1 liczb {x 0 , x1 , K , x n }. Zakładamy również istnienie ciągłej na
tym przedziale funkcji f posiadającej ciągłe pochodne aż do n+1 włącznie, co zapisujemy
f ∈ C n +1 [a, b] . Z równania 3.18 mamy następujący wielomian interpolacyjny Lagrange’a:
n
f ( x ) = ∑ f ( x k ) ⋅ Lk ( x ) +
k =0
( x − x 0 ) ⋅ ( x − x1 ) ⋅ K ⋅ ( x − x n ) (n +1)
(ξ ( x )) ,
f
(n + 1)!
(5.11)
gdzie ξ jest pewną liczbą z przedziału[a, b] ξ ( x ) ∈ [a , b] , a Lk(x) oznacza k – ty współczynnik
wielomianowy w wielomianie Lagrange’a wyznaczony na siatce punktów x 0 , x1 , K , x n . Różniczkując to wyrażenie otrzymamy:
f ′( x ) =
⎞
d ⎛ (x − x ) ⋅ (x − x ) ⋅ K ⋅ (x − x ) ( )
(ξ (x ))⎟⎟ =
f
∑ f (x ) ⋅ L′ (x ) + dx ⎜⎜
(n + 1)!
n
k =0
=
k
0
n
1
n +1
⎝
⎠
d ⎛ (x − x ) ⋅ (x − x ) ⋅ K ⋅ (x − x ) ⎞
⎟⎟ + . (5.12)
∑ f (x ) ⋅ L′ (x ) + f ( ) (ξ (x )) ⋅ dx ⎜⎜
(n + 1)!
n
k =0
+
k
n +1
k
0
k
1
⎝
(x − x0 ) ⋅ (x − x1 ) ⋅ K ⋅ (x − xn ) ⋅ d ( f (n +1) (ξ (x ))).
(n + 1)!
dx
n
⎠
Podobnie jak poprzednio powstaje problem z oszacowaniem błędu obcięcia w przypadku, gdy x nie jest jednym z węzłów interpolacji. Natomiast, jeżeli x jest jednym z węzłów interpolacji xj, j = 0, 1, ..., n wtedy człon występujący przy pochodnej
d
(f
dx
(n +1)
(ξ ( x )))
jest
równy zero i całe wyrażenie przyjmuje postać:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 126
2008-02-21
Strona 127 z 246
Metody Numeryczne i Programowanie
Rozdział 5
f ′(x j ) = ∑ f ( x k ) ⋅ Lk′ (x j ) + f
n
( n +1)
(ξ (x )) ⋅ ∏ (x
n
j
k =0
k =0
k≠ j
j
− xk ) .
(5.13)
Równanie (5.13) nazywane jest (n+1) punktową formułą różnicową aproksymującą pochodną funkcji f w punkcie xj, czyli pozwalającej obliczyć f’(xj). Nazwa ta wynika stąd, że do
wyznaczenia wartości pochodnej funkcji f korzysta się z (n+1) wartości funkcji f(xk), k = 0, 1,
..., n.
Jak można z równania (5.13) wnosić, wykorzystując więcej punktów do aproksymowania wartości pochodnej uzyskujemy lepszą dokładność. Jednakże wzrost liczby punktów, w
których należy obliczyć wartość funkcji powoduje wzrost błędów zaokrągleń, co stanowić
może dość znaczne ograniczenie. Największe znaczenie z różnych metod wielopunktowych
mają metody różnicowe trzy i pięciopunktowe.
W przypadku metody trzypunktowej wykorzystującej punkty x0, x1 oraz x2 rozpatrzyć
musimy następujące człony wielomianowe Lagrange’a oraz ich pochodne:
L0 ( x ) =
( x − x1 )( x − x 2 )
,
( x 0 − x1 )( x 0 − x 2 )
L0′ ( x ) =
2 x − x1 − x 2
,
( x 0 − x1 )( x 0 − x 2 )
(5.14)
L1 ( x ) =
( x − x 0 )( x − x 2 )
,
( x1 − x 0 )( x1 − x 2 )
L0′ ( x ) =
2 x − x0 − x2
,
( x1 − x 0 )( x1 − x 2 )
(5.15)
L2 ( x ) =
(x − x 0 )( x − x1 )
,
( x 2 − x 0 )( x 2 − x1 )
L0′ ( x ) =
2 x − x 0 − x1
.
( x 2 − x 0 )( x 2 − x1 )
(5.16)
Stąd równanie (5.13) przyjmie postać:
f ′(x j ) = L0′ (x j ) f ( x0 ) + L1′(x j ) f ( x1 ) + L2′ (x j ) f ( x2 ) =
=
+
2 x j − x1 − x2
f ( x0 ) +
2 x j − x0 − x1
f ( x2 ) +
(x0 − x1 )(x0 − x2 )
(x2 − x0 )(x2 − x1 )
2 x j − x0 − x2
(x1 − x0 )(x1 − x2 )
f ( x1 ) +
(5.17)
2
1 (3 )
f (ξ j )∏ (x j − xi ),
6
i =0
i≠ j
dla każdego j = 0, 1,2 oraz gdzie ξ oznacza liczbę zależną od xj.
Korzystając z równania (5.17) podać można trzy różne wzory na różnicowe formuły
trzypunktowe służące do aproksymowania pierwszej pochodnej. Najprościej przyjąć, ze
wszystkie węzły interpolacji są równoodległe, to znaczy x1 = x0 + h oraz x2 = x1 + h = x0 +
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 127
2008-02-21
Strona 128 z 246
Metody Numeryczne i Programowanie
Rozdział 5
2h dla pewnej małej liczby h ≠ 0. Przyjmując za xj odpowiednio x0, x1 oraz x2 otrzymamy różne trzypunktowe formuły różnicowe: progresywną, centralną i wsteczną.
Przyjmując w równaniu (5.17), że xj = x0 otrzymamy następujące wyrażenie na trzypunktową metodę progresywną:
− 3 f ( x0 ) + 4 f ( x1 ) − f ( x 2 ) h 2
+
f ′′′(ξ 0 ) =
2h
3
− 3 f ( x 0 ) + 4 f ( x 0 + h ) − f ( x 0 + 2h ) h 2
=
+
f ′′′(ξ 0 ).
2h
3
f ′( x0 ) =
(5.18)
Przyjmując xj = x2 otrzymamy następujące wyrażenie na trzypunktową metodę
wsteczną:
f ( x0 ) − 4 f ( x1 ) + 3 f ( x 2 ) h 2
+
f ′′′(ξ 2 ) =
2h
3
f ( x 0 ) + 4 f ( x 0 + h ) + 3 f ( x 0 + 2h ) h 2
=
+
f ′′′(ξ 2 ).
2h
3
f ′( x 2 ) =
(5.19)
Natomiast podstawiając xj = x1 otrzymamy znane już następujące wyrażenie na trzypunktową metodę centralną:
− f (x0 ) + f ( x2 ) h 2
f ′( x1 ) =
−
f ′′′(ξ1 ) =
2h
3
− f (x0 ) + f ( x0 + 2h ) h 2
=
−
f ′′′(ξ1 ).
2h
6
(5.20)
Zgodnie z przyjętą konwencją zapisu równania różnicowe (5.19) oraz (5.20) zapisuje
się w taki sposób, aby pozwalały obliczyć pochodne w punkcie x0. W tym celu w równaniu
(5.19) dokonujemy formalnego podstawienia x0 = x0 + 2h otrzymując następujące wyrażenie
na metodę różnicową wsteczną:
f ′( x 0 ) =
f ( x 0 − 2h ) − 4 f ( x 0 − h ) + 3 f ( x 0 ) h 2
+
f ′′′(ξ 2 ) .
2h
3
(5.21)
Natomiast dokonując w równaniu (5.20) podstawienia x0 = x0 + h otrzymamy następujące równanie na metodę różnicową centralną:
f ′( x 0 ) =
− f (x 0 − h ) + f (x 0 + h ) h 2
f ′′′(ξ 1 ) .
−
2h
6
(5.22)
Analogiczne wyrażenie na metodę różnicową progresywną przyjmie postać:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 128
2008-02-21
Strona 129 z 246
Metody Numeryczne i Programowanie
Rozdział 5
f ′( x 0 ) =
− 3 f ( x 0 ) + 4 f ( x 0 + h ) − f ( x 0 + 2h ) h 2
f ′′′(ξ 0 ) .
+
2h
3
(5.23)
Wziąwszy pod uwagę, że równanie (5.21) otrzymać można z równania (5.23) zamieniając h na –h wystarczy podać dwa wyrażenia na trzypunktowe metody numerycznego różniczkowania. W przypadku metody centralnej ξ1 leży pomiędzy (x0 – h) a (x0+h), natomiast w
przypadku metody progresywnej lub wstecznej ξ0 leży pomiędzy (x0 ) a (x0+2h). Zastosowanie formuły (5.23) zaleca się w tych przypadkach, gdy obliczamy pochodną w pobliżu krańców przedziału, na którym dana jest różniczkowana funkcja. Porównując wyrażenie na błąd w
jednym i drugim przypadku zauważyć można, że w przypadku metody centralnej jest on dwa
razy mniejszy aniżeli w metodzie progresywnej lub wstecznej. Wynika to stąd, że w tej
pierwszej metodzie wykorzystywana jest informacja z dwóch stron punktu x0, natomiast w
drugim przypadku tylko z jednej strony. Dodatkowo w metodzie centralnej należy obliczyć
tylko dwie wartości funkcji. Oznacza to mniejszy koszt obliczeń.
Analogicznie do przedstawionych w równaniach (5.22) oraz (5.23) metod trzypunktowych, wyprowadzić można zależności na metody pięciopunktowe. Odpowiednie wzory wyprowadzić można z wzorów interpolacyjnych Lagrange’a zbudowanych na pięciu węzłach
interpolacji. Należy jednakże zwrócić uwagę na to, że różniczkowanie wielomianów interpolacyjnych Lagrange’a jest dość żmudnym zajęciem z tego też względu wykorzystać należy w
tym celu odpowiednie pakiety do obliczeń numerycznych lub odpowiednich rozwinięć funkcji f w wielomiany Taylora.
W ten sposób wyprowadzić można zarówno zależności na pięciopunktową metodę centralną:
f ′( x 0 ) =
1 ⎡ f (x − 2h ) − 8 f (x − h ) + ⎤ h 4
f
⎢
⎥+
12h ⎢⎣ + 8 f (x + h ) − f (x + 2h )⎥⎦ 30
(5 )
(ξ ) ,
(5.24)
gdzie ξ znajduje się w przedziale [x0 - 2h, x0 + 2h], jak też odpowiednie wzory na metody
wsteczne i progresywne. W każdym z tych przypadków uzyskujemy wyrażenie charakteryzujące się zbieżnością czwartego rzędu, oraz błędem O(h4).
Chcąc wyprowadzić powyższą zależność zakładamy, że funkcja f rozwinięta jest w wielomian Taylora stopnia czwartego:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 129
2008-02-21
Strona 130 z 246
Metody Numeryczne i Programowanie
Rozdział 5
1
1
2
3
f ′′(x0 )( x − x0 ) + f ′′′( x0 )( x − x0 ) +
2
6
1 (4 )
1 (5 )
5
4
+
f ( x0 )( x − x0 ) +
f (ξ )( x − x0 ) ,
24
120
f ( x ) = f ( x0 ) + f ′( x0 )(x − x0 ) +
(5.25)
gdzie ξ jest pewną liczbą z przedziału pomiędzy x a x0. Podstawiając w powyższym wzorze
zamiast x raz x0 + h oraz drugi raz x0 - h otrzymamy:
1
1
f ′′( x0 )h 2 + f ′′′( x0 )h3 +
2
6
1 (4 )
1 (5 )
+
f ( x0 )h 4 +
f (ξ1 )h5 ,
24
120
(5.26)
1
1
f ′′( x0 )h 2 − f ′′′( x0 )h3 +
2
6
1 (4 )
1 (5 )
+
f ( x0 )h 4 −
f (ξ 2 )h5 ,
24
120
(5.27)
f ( x0 + h ) = f ( x0 ) + f ′( x0 )h +
oraz
f ( x0 − h ) = f ( x0 ) − f ′( x0 )h +
gdzie x 0 + h < ξ 2 < x 0 < ξ 1 < x 0 − h .
Odejmując stronami równanie (5.27) od równania (5.26) otrzymamy:
f ( x 0 + h ) − f ( x 0 − h ) = 2hf ′( x 0 ) +
h3
h5
(f
f ′′′( x 0 ) +
3
120
(5 )
(ξ 2 ) +
f
(5 )
(ξ 2 )) .
(5.28)
Jeżeli f(5) jest ciągła w przedziale [x0 - h, x0 + h], to korzystając z twierdzenia o wartości
średniej możemy stwierdzić, że w przedziale (x0 - h, x0 + h) istnieje taka liczba ξ, że
f
(5 )
(ξ~ ) = 1 ( f (5) (ξ 1 ) + f (5) (ξ 2 )).
(5.29)
2
Ostatecznie równanie (5.28) rozwiązujemy celem wyznaczenia aproksymacji f’(x0) z
błędem obcięcia rzędu O(h2):
f ′( x 0 ) =
f (x 0 + h ) − f (x 0 − h ) h 2
h4
f ′′′( x 0 ) −
f
−
2h
6
120
(5 )
(ξ~ ) .
(5.30)
Jakkolwiek równanie (5.30) jest podobne do wcześniej otrzymanego równania na metodę trzypunktową centralną (5.22), to nieznane wyrażenie występuje tym razem przy pochodnej piątego stopnia, a nie jak poprzednio przy pochodnej stopnia trzeciego. Z równania (5.30)
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 130
2008-02-21
Strona 131 z 246
Metody Numeryczne i Programowanie
Rozdział 5
wyeliminować należy trzecią pochodna funkcji f. W tym celu zastępujemy w równaniu (5.30)
krok h nowym krokiem 2h otrzymując:
f ′( x 0 ) =
f ( x 0 + 2h ) − f ( x 0 − 2h ) 4h 2
16h 4
f ′′′( x 0 ) −
f
−
4h
6
120
(5 )
(ξˆ ),
(5.31)
gdzie ξˆ ∈ ( x 0 − 2h, x 0 + 2h ) .
Równanie (5.30) mnożymy przez 4 a następnie odejmujemy od niego równania (5.31)
otrzymując:
f ( x0 + h ) − f ( x0 − h ) f (x0 + 2h ) − f ( x0 − 2h )
−
−
h
4h
h 4 (5 ) ~ 2 h 4 (5 ) ˆ
−
f ξ +
f ξ.
30
15
3 f ′( x0 ) = 2
()
(5.32)
()
Jeżeli f(5) jest funkcją ciągłą w przedziale [x0 - 2h, x0 + 2h], to ponownie korzystając z
twierdzenia o wartości średniej możemy stwierdzić, że w przedziale (x0 - h, x0 + h) istnieje
taka liczba ξ, że zastąpić możemy pochodne f (5 ) (ξ~ ) oraz f (5 ) (ξˆ ) wspólną wartością f (5 ) (ξ ) .
Wykorzystując ten wynik oraz dzieląc równanie (5.32) przez 3 otrzymamy podane wcześniej
równanie na pięciopunktową różnicową metodę centralną:
f ′( x 0 ) =
1 ⎡ f (x − 2h ) − 8 f (x − h ) + ⎤ h 4
f
⎢
⎥+
12h ⎢⎣ + 8 f (x + h ) − f (x + 2h )⎥⎦ 30
(5 )
(ξ ) .
(5.24)
Inną interesującą pięciopunktową formułę uzyskać można wykorzystując wzory na interpolację wielomianami sklejanymi trzeciego stopnia. W tym przypadku uzyskuje się wyrażenie:
f ′( x 0 ) =
1 ⎡ − 25 f ( x 0 ) + 48 f ( x 0 + h ) − 36 f ( x 0 + 2h ) + ⎤ h 4
⎥+ 5 f
12 ⎢⎣ + 16 f ( x 0 + 3h ) − 3 f ( x 0 + 4h )
⎦
(5 )
(ξ ) ,
(5.33)
gdzie ξ znajduje się w przedziale [x0 , x0 + 4h].
Lewo stronną aproksymację otrzymujemy przyjmując h > 0. Natomiast prawostronną
aproksymację przyjmując h < 0. W tym przypadku otrzymana metoda charakteryzuje się błędem obcięcia O(h5), a zbieżność metody jest piątego rzędu.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 131
2008-02-21
Strona 132 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Przykład 5.3
Korzystając z różnych trzy- i pięciopunktowych formuł numerycznego różniczkowania
funkcji obliczyć wartość pierwszej pochodnej funkcji f ( x ) = x ⋅ e x w punkcie x0 = 2.0. Wartości funkcji w węzłach interpolacji podano w tabeli 5.3. Wartość pochodnej
f ′(2.0) = 22.167168 . Przeprowadzić dyskusję uzyskanych wyników.
Tabela 5.3. Wartości funkcji f ( x ) = x ⋅ e x w węzłach interpolacji
x
f(x)
1.8
10.889365
1.9
12.703199
2.0
14.778112
2.1
17.148957
2.2
19.855030
Rozwiązanie
Wyniki obliczeń oraz oszacowanie błędu bezwzględnego dla każdej z aproksymacji
przedstawiono w tabeli 5.4.
Tabela 5.4.Wyniki aproksymacji wartości pierwszej pochodnej funkcji f ( x ) = x ⋅ e x w punkcie x0 = 2.0 z zastosowaniem różnych trzy i pięciopunktowych formuł. δ - błąd
bezwzględny aproksymacji.
Metoda, nr
równania
f ′(2.0)
δ
5.23, h = 0.1
22.032310
1.35×10-1
5.23, h = -0.1
22.054525
1.13×10-1
5.22
22.228790
-6.16×10-2
5.24
22.166999
1.69×10-4
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 132
2008-02-21
Strona 133 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Porównując wyniki uzyskane z metody (5.23) oraz (5.22) zwrócić należy uwagę, że w
tym pierwszym przypadku błąd obcięcia jest około dwa razy większy aniżeli w drugim przypadku. Widać to wyraźnie z obliczonych błędów bezwzględnych. W przypadku natomiast
metody pięciopunktowej, której zbieżność jest czwartego rzędu uzyskujemy również niewielki błąd bezwzględny.
■
W każdej z przedstawionych powyżej metod występuje człon z błędem obcięcia wynikającego z przyjętej liczby członów w wielomianie Taylora, lub stopnia wielomianu interpolacyjnego Lagrange’a. Musimy jednakże pamiętać o tym, że wszystkie obliczenia prowadzone są w zmiennopozycyjnej arytmetyce maszynowej, co oznacza istnienie dodatkowego błędu
– błędu zaokrąglenia. Problem ten przedstawiony zostanie na przykładzie trzypunktowej formuły różnicowej centralnej (równanie 5.22):
− f (x 0 − h ) + f (x 0 + h ) h 2
f ′′′(ξ 1 ) .
f ′( x 0 ) =
−
2h
6
(5.22)
Przyjmijmy, że obliczając wartości funkcji f(x0 – h) oraz f(x0 + h) uzyskujemy błąd zaokrąglenia e(x0 – h) oraz e(x0 + h), co oznacza, że prawdziwe wartości tych funkcji związane
f ( x − h ) oraz ~
f ( x + h ) zależnościami:
są z ich wartościami obliczonymi ~
0
0
f (x 0 − h ) = ~
f ( x 0 − h ) + e( x 0 − h ) ,
(5.34)
f (x 0 + h ) = ~
f ( x 0 + h ) + e( x 0 + h ) .
(5.35)
oraz
Założenie to prowadzi do następującego oszacowania błędu aproksymacji:
f ′( x 0 ) −
~
f (x 0 + h ) − ~
f ( x 0 − h ) e( x 0 + h ) − e( x 0 − h ) h 2
f ′′′(ξ 1 ) .
=
−
2h
2h
6
(5.36)
Błąd ten składa się z dwóch części: błędu zaokrąglenia oraz błędu obcięcia. Jeżeli założymy, że błędy zaokrąglenia e(x0 – h) oraz e(x0 + h) ograniczone są z góry przez tę samą liczbę ε > 0 oraz, że trzecia pochodna funkcji f jest ograniczona za pomocą pewnej liczby M > 0,
to
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 133
2008-02-21
Strona 134 z 246
Metody Numeryczne i Programowanie
Rozdział 5
f ′( x 0 ) −
~
f (x 0 + h ) − ~
f (x 0 − h ) ε h 2
f ′′′(ξ 1 ) .
≤ +
2h
h 6
(5.37)
Z równania (5.37) wynika bardzo istotna informacja o wielkości kroku aproksymacji h.
Jeżeli h jest małe, to z uwagi na to, że krok aproksymacji występuje w mianowniku ułamka
ε/h wyrażenie to może być bardzo duże. W praktyce oznacza to, że h nie może być zbyt małe,
gdyż grozi to tym, że człon związany z błędem zaokrąglenia zacznie być istotnie duży i
wpływać na wyniki obliczeń. Problem związany z wyborem optymalnej długości kroku
aproksymacji pokazuje przykład 5.4.
Przykład 5.4.
W tabeli 5.5 podane zostały wartości funkcji f ( x ) = sin( x ) . Korzystając z tych wartości, oraz wykorzystując trzypunktową centralną formułę różnicową, aproksymować wartość
pierwszej pochodnej tej funkcji w punkcie x0 = 0.900. Wykorzystując równanie (5.29) określić optymalna długość kroku aproksymacji. Wartość dokładna pochodnej z dokładnością
pięciu cyfr f ′(0.900) = cos(0.900) = 0.62161 .
Tabela 5.5. Wartości funkcji f ( x ) = sin( x ) w różnych węzłach interpolacji.
x
sin(x)
x
sin(x)
0.800
0.71736
0.901
0.78395
0.850
0.75128
0.902
0.78457
0.880
0.77074
0.905
0.78643
0.890
0.77707
0.910
0.78950
0.895
0.78021
0.920
0.79560
0.898
0.78208
0.950
0.81342
0.899
0.78270
1.00
0.84147
Rozwiązanie
Wyniki obliczeń dla różnej długości kroku aproksymacji przedstawiono w tabeli 5.6.
Tabela 5.6. Wyniki aproksymacji wartości pierwszej pochodnej funkcji f ( x ) = sin( x ) w
punkcie x = 0.900 dla różnej długości kroku aproksymacji. δ - błąd bezwzględny.
h
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
f’(0.900)
Strona 134
δ
2008-02-21
Strona 135 z 246
Metody Numeryczne i Programowanie
Rozdział 5
0.100
0.62055
-0.00106
0.050
0.62140
-0.00021
0.020
0.62150
-0.00011
0.010
0.62150
-0.00011
0.005
0.62200
0.00039
0.002
0.62250
0.00089
0.001
0.62500
0.00339
Porównując uzyskane wyniki stwierdzić można, ze optymalny krok aproksymacji h leży
pomiędzy 0.05 a 0.005. Dokładną wartość obliczyć można wykorzystując człon błędu aproksymacji (równanie 5.29):
e(h ) =
ε
h
+
h2
M.
6
Można pokazać, że funkcja e(h) osiąga minimum dla h = 3
M=
max
x∈[0.800 ,1.00 ]
f ′′′( x ) =
max
x∈[0.800,1.00 ]
3ε
M
, gdzie
cos( x ) ≈ 0.69671 .
Podstawiając to oszacowanie, oraz uwzględniając, że wartości funkcji f podane zostały
z dokładnością do pięciu cyfr po przecinku, co sugeruje błąd zaokrąglenia ε = 5×10-6 otrzymamy, że optymalna długość kroku h wynosi:
(
)
3 ⋅ 5 × 10 −6
h=
≈ 0.028 .
0.69671
Wynik ten jest zgodny z wynikami obliczeń zebranymi w tabeli 5.6.
■
Problem z tego rodzaju oszacowaniami polega na tym, że w praktyce nie znana jest nam
trzecia pochodna różniczkowanej funkcji. W tej sytuacji niemożliwe jest oszacowanie optymalnej długości kroku aproksymacji.
Podobne problemy jak w przypadku trzypunktowej różnicowej formuły centralnej występują również, gdy podejmiemy próbę oszacowania błędu zaokrąglenia w przypadku innych
metod. Istota problemu w każdym z tych przypadków polega na tym, że musimy dzielić przez
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 135
2008-02-21
Strona 136 z 246
Metody Numeryczne i Programowanie
Rozdział 5
pewną potęgę h. A takie dzielenie jak pokazano w rozdziale poświęconym błędom maszynowym zawsze prowadzi do kumulowania błędów zaokrąglenia. Problemu tego w żaden sposób
nie można wyeliminować. Jedynym sposobem na poprawienie sytuacji jest zastosowanie metod wyższego rzędu.
5.1.2. Metody numeryczne obliczania wartości wyższych pochodnych funkcji
Aproksymacje wyższych pochodnych funkcji również uzyskuje się wykorzystując stabelaryzowane w różnych punktach wartości funkcji. Wzory na wyższe pochodne uzyskuje się
różniczkując kilkakrotnie wzory wykorzystujące interpolację wielomianową lub też korzystając z wielomianu Taylora. Sposób wyprowadzania odpowiednich wzorów różnicowych jest
żmudny i wymaga wielu przekształceń algebraicznych. Z tego względu przedstawiony tu zostanie tylko przykładowy sposób postępowania.
Załóżmy, że dana jest funkcja f(x) ciągła na przedziale domkniętym [a, b] i mająca na
tym przedziale ciągłe pochodne aż do czwartej, czyli f ( x ) ∈ C (4 ) [a, b]. Korzystając z wielomianu Taylora rozwijamy funkcję f(x) w otoczeniu punktu x0:
f ( x0 + h ) = f ( x0 ) + h ⋅ f ′(x0 ) +
1 2
h ⋅ f ′′( x0 ) +
2!
1
1
+ h3 ⋅ f ′′′( x0 ) + h 4 ⋅ f (4)(ξ1 ),
3!
4!
(5.38)
oraz
f ( x0 − h ) = f ( x0 ) − h ⋅ f ′( x0 ) +
1 2
h ⋅ f ′′( x0 ) +
2!
1
1
− h3 ⋅ f ′′′(x0 ) + h 4 ⋅ f (4)(ξ −1 ),
3!
4!
(5.39)
gdzie x 0 − h < ξ −1 < x 0 < ξ 1 < x 0 + h .
Dodając równania (5.38) oraz (5.39) stronami otrzymamy:
f ( x0 + h ) + f (x0 − h ) = 2 f ( x0 ) + h 2 ⋅ f ′′( x0 ) +
+
(5.40)
1 4
h ⋅ ( f (ξ1 ) + f (ξ −1 )).
24
Stąd
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 136
2008-02-21
Strona 137 z 246
Metody Numeryczne i Programowanie
Rozdział 5
f ′′( x 0 ) =
f (x 0 + h ) − 2 f (x 0 ) + f (x 0 − h ) 1 2
+
h ⋅ ( f (ξ 1 ) + f (ξ −1 )) .
24
h2
(5.41)
Jeżeli czwarta pochodna f(4) jest ciągła w przedziale [x0 – h, x0 + h], to korzystając z
twierdzenia o wartości średniej otrzymamy:
f ′′( x 0 ) =
f (x 0 + h ) − 2 f (x 0 ) + f (x 0 − h ) 1 2
+ h ⋅ f (ξ ) ,
12
h2
(5.42)
gdzie ξ jest pewną liczbą z przedziału [x0 – h, x0 + h].
Jak stąd wynika formuła na aproksymację drugiej pochodnej funkcji jest zbieżna z rzędem zbieżności wynoszącym dwa. Błąd obcięcia w tym przypadku wynosi O(h2).
Chcąc znaleźć wyrażenia na aproksymację trzeciej i czwartej pochodnej funkcji f, należy wykorzystać liniowe kombinacje wielomianów Taylora uzyskanych z rozwinięcia w otoczeniu punktów f(x0 + 2h), f(x0 + h), f(x0 - h) oraz f(x0 - 2h). Dzięki temu pozbywamy się w
wyprowadzanym wyrażeniu niższych pochodnych. W tabeli 5.7. przedstawiono wyrażenia na
formuły różnicowe centralne numerycznego różniczkowania. Wszystkie one mają błąd obcięcia O(h2).
Tabela 5.7. Formuły różnicowe centralne numerycznego różniczkowania funkcji f(x). Błąd
obcięcia dla wszystkich formuł – O(h2).
Równania różnicowe centralne na aproksymację pochodnych funkcji
f ′( x i ) =
f ′′( x i ) =
f ′′′( x i ) =
f (4 ) ( xi ) =
1
[ f (x i +1 ) − f (x i −1 )] + O (h 2 ) ,
2h
1
[ f (x i +1 ) − 2 f (x i ) + f (x i −1 )] + O (h 2 ) ,
2
h
1
[ f (x i + 2 ) − 2 f (x i +1 ) + 2 f (x i −1 ) + f (x i −2 )] + O (h 2 ) ,
3
2h
( )
1
[ f (xi + 2 ) − 4 f (xi +1 ) + 6 f (xi ) − 4 f (xi −1 ) + f (xi − 2 )] + O h2 .
h4
Przykład 5.5.
Wykorzystując dane podane w przykładzie 5.3. aproksymować kolejno pierwszą, drugą,
trzecia i czwartą pochodną funkcji f ( x ) = x ⋅ e x .
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 137
2008-02-21
Strona 138 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Rozwiązanie
Kolejne pochodne funkcji
f ( x ) = x ⋅ e x dane są równaniami
f (i ) ( x ) = ( x + i ) ⋅ e x ,
i = 1,2,3,4 .Wyniki obliczeń przedstawiono w tabeli 5.8.
Tabela 5.8. Wyniki aproksymowania kolejnych pochodnych funkcji f ( x ) = x ⋅ e x w punkcie
x0 = 2.0.
Pochodna
Wartość
dokładna
Aproksymacja
Błąd
bezwzględny
f ′(2.0)
22.167168
22.228787
-6.162E-2
f ′′(2.0)
29.556224
29.593186
-3.696E-2
f ′′(2.0)
36.94528
37.074755
-1.295E-1
f (4 )(2.0)
44.334337
44.43295
-9.861E-2
Błędy aproksymacji są rzędu 10-2. Jedynie w przypadku trzeciej pochodnej błąd jest
większy i wynosi –1.295×10-1.
■
Podsumowując należy stwierdzić, że aproksymacyjne metody numerycznego różniczkowania są metodami niestabilnymi. Wynika to stąd, że małe wartości kroku h prowadzą do
powstawania dużych błędów zaokrągleń. Jest to pierwsza z prezentowanych w tym wykładzie
metod charakteryzujących się taką właściwością. Problem w tym, że wyprowadzone tu zależności są bardzo ważne i konieczne w zastosowaniach związanych z aproksymowaniem rozwiązań zarówno równań różniczkowych zwyczajnych jak i cząstkowych.
5.2. Metoda ekstrapolacji Richardsona
Zastosowanie metod o wysokim rzędzie zbieżności z reguły wymaga przeprowadzenia
zdecydowanie większej ilości obliczeń wartości funkcji aniżeli jest to konieczne w przypadku
metod niskiego rzędu. Większa liczba obliczeń wpływa na wydłużenie czasu koniecznego do
uzyskania oczekiwanych wyników oraz na wzrost kosztów obliczeń. Dobrym rozwiązaniem
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 138
2008-02-21
Strona 139 z 246
Metody Numeryczne i Programowanie
Rozdział 5
jest zastosowanie tak zwanej ekstrapolacji Richardsona, która pozwala na zwiększenie dokładności wyników pomimo stosowania metod niskiego rzędu.\
Metoda Richardsona przedstawiona zostanie tutaj na przykładzie różniczkowania funkcji. Należy jednakże mieć pod uwagą, że jest to metoda ogólna i można ją zastosować do poprawiania zbieżności różnych metod numerycznych. Istotny jest schemat zastosowania metody.
Celem przedstawienia tej metody ekstrapolacyjnej załóżmy, że dana jest pewna metoda
N1(h), która z błędem rzędu O(h2) aproksymuje nieznaną wielkość M. Załóżmy dodatkowo,
że błąd metody N1(h) aproksymującej M przedstawić można w postaci wyrażenia:
M = N 1 (h ) + K 1 h 2 + O (h 4 ) ,
(5.43)
gdzie K1 jest pewną stałą nie zależną od długości kroku h. Podstawmy w równaniu (5.43) zamiast h wielkość h/2. Otrzymamy w ten sposób nowe, przypuszczalnie lepsze, wyrażenie
aproksymacyjne N(h/2) spełniające warunek:
⎛⎛ h ⎞4 ⎞
h2
⎛h⎞
M = N 1 ⎜ ⎟ + K1
+ O⎜ ⎜ ⎟ ⎟ .
⎜⎝ 2 ⎠ ⎟
2
4
⎝ ⎠
⎠
⎝
(5.44)
Mnożąc równanie (5.44) przez 4 i odejmując od niego stronami równanie (5.43) otrzymamy:
⎛h⎞
3M = 4 N 1 ⎜ ⎟ − N 1 (h ) + O (h 4 ) ,
⎝2⎠
(5.45)
w którym wyeliminowany został dominujący człon błędu obcięcia zależny od h2. Z równania
(5.45) ostatecznie otrzymać możemy nową metodę N2(h) aproksymującą M z błędem obcięcia
rzędu O(h4):
⎛h⎞
N 1 ⎜ ⎟ − N 1 (h )
2
M = N 2 (h ) = 4 ⎝ ⎠
+ O (h 4 ) .
3
(5.46)
W równaniu (5.46) wyeliminowany został człon błędu z h2, co uzyskane zostało przez
dwukrotne wykorzystanie metody rzędu O(h2). Pozostał jednakże człon O(h4). Wyeliminować
go można przez dwukrotne zastosowanie metody danej równaniem (5.46) raz przyjmując
krok h oraz drugi raz krok h/2. Formalnie, kontynuując proces ekstrapolacji, zakładając, że
istnieje stała K2 równanie (5.43) przedstawić można w postaci:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 139
2008-02-21
Strona 140 z 246
Metody Numeryczne i Programowanie
Rozdział 5
M = N 1 (h ) + K 1 h 2 + K 2 h 4 + O (h 6 ) ,
(5.47)
z którego w analogiczny sposób jak poprzednio wyprowadzić można metodę N3(h), której
błąd obcięcia jest rzędu O(h6):
⎛h⎞
⎛h⎞
4 2 N 2 ⎜ ⎟ − N 2 (h ) 16 ⋅ N 2 ⎜ ⎟ − N 2 (h )
⎝2⎠
⎝2⎠
N 3 (h ) =
+ O (h 6 ) .
=
2
15
4 −1
(5.48)
W wyprowadzeniu tego wzoru zakładamy, że kolejne aproksymacje (5.47) obliczamy
przyjmując krok h, h/2 oraz h/4. Przy czym krok h/4 odpowiada metodzie N2(h/2).
Ten sposób postępowania można kontynuować wprowadzając kolejno wyrazy z stałą
K3, K4 i tak dalej, uzyskując wyrażenie na błąd metody N(h) aproksymującej M rzędu O(h2m):
m −1
M = N (h ) + ∑ K i h 2i + O (h 2 m ) .
(5.49)
i =1
Przyjmując w tym wyrażeniu kolejno h, h/2, h/4, i tak dalej oraz odpowiednio odejmując stronami uzyskać można nową metodę Nm(h), która z błędem rzędu O(h2m) aproksymuje
M. Metodę tę wyrazić można przy pomocy rekurencyjnego wzoru w sposób następujący:
⎛h⎞
4 j −1 N j −1 ⎜ ⎟ − N j −1 (h )
⎝2⎠
N j (h ) =
,
4 j −1 − 1
j = 1,2, K m .
(5.50)
Tabela 5.9. Ciąg kolejnych ekstrapolacji Richardsona
N 1 (h )
⎛h⎞
N1 ⎜ ⎟
N 2 (h )
⎝2⎠
⎛ h ⎞
⎛h⎞
N1 ⎜ 2 ⎟
N2⎜ ⎟
N 3 (h )
⎝2 ⎠
⎝2⎠
⎛ h ⎞
⎛ h ⎞
⎛h⎞
N1 ⎜ 3 ⎟
N2⎜ 2 ⎟
N3⎜ ⎟
N 4 (h )
⎝2 ⎠
⎝2 ⎠
⎝2⎠
M
M
M
M
⎛ h ⎞
⎛ h ⎞
⎛ h ⎞
⎛ h
N 1 ⎜ m − 2 ⎟ N 2 ⎜ m − 3 ⎟ N 3 ⎜ m − 4 ⎟ N 4 ⎜ m −5
⎝2
⎠
⎝2 ⎠
⎝2
⎠
⎝2
⎛ h ⎞
⎛ h ⎞
⎛ h ⎞
⎛ h
N 1 ⎜ m −1 ⎟ N 2 ⎜ m − 2 ⎟ N 3 ⎜ m − 3 ⎟ N 4 ⎜ m − 4
⎝2 ⎠
⎝2
⎠
⎝2 ⎠
⎝2
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 140
O
⎞
⎟ L N m −1 (h )
⎠
⎞
⎛h⎞
⎟ L N m −1 ⎜ ⎟ N m (h )
⎠
⎝2⎠
2008-02-21
Strona 141 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Ciąg kolejnych metod wyrażonych równaniem (5.50) przedstawiono w tabeli5.9. Punktem wyjścia do kolejnych ekstrapolacji jest metoda N1(h) (kolumna pierwsza), w której w
kolejnych przybliżeniach krok metody h zmniejsza się o połowę otrzymując kolejne aprok⎛⎛ h ⎞2 ⎞
⎛ h ⎞
symacje N 1 ⎜ k ⎟ charakteryzujące się błędem rzędu O ⎜ ⎜ k ⎟ ⎟ . Te aproksymacje wykorzy⎜⎝ 2 ⎠ ⎟
⎝2 ⎠
⎠
⎝
⎛ h ⎞
stywane są przez metodę N2(h) (kolumna druga), której kolejne przybliżenia N 2 ⎜ k ⎟ mają
⎝2 ⎠
⎛⎛ h ⎞4 ⎞
błąd aproksymacji rzędu O ⎜ ⎜ k ⎟ ⎟ . W kolumnie trzeciej mamy metodę N3(h), której kolej⎜⎝ 2 ⎠ ⎟
⎠
⎝
⎛⎛ h ⎞6 ⎞
⎛ h ⎞
ne przybliżenia N 3 ⎜ k ⎟ mają błąd aproksymacji rzędu O ⎜ ⎜ k ⎟ ⎟ , i tak dalej aż do metody
⎜⎝ 2 ⎠ ⎟
⎝2 ⎠
⎠
⎝
Nm(h) charakteryzującej się błędem rzędu O(h2m). Sposób postępowania w przypadku zastosowania metody ekstrapolacji Richardsona do aproksymowania pochodnych funkcji przedstawiono w kolejnym przykładzie (5.6).
Przykład 5.6.
Dana jest funkcja f ( x ) = x ⋅ e x . Korzystając z trzypunktowej metody różnicowej centralnej należy aproksymować wartość pierwszej pochodnej tej funkcji w punkcie x0 = 2.0. Do
poprawienia wyników wykorzystać metodę ekstrapolacji Richardsona. Wartość pochodnej tej
funkcji z dokładnością do 6 cyfr po przecinku wynosi f ′( x 0 ) = x ⋅ e x0 + e x0 = 22.167168 .
Rozwiązanie
Błąd aproksymacji w trzypunktowej metodzie centralnej z zachowaniem kolejnych
członów dany jest następującą zależnością:
f ′( x 0 ) =
Używając
K2 = −
f (x 0 + h ) − f (x 0 − h ) h 2
h4
−
f ′′′( x 0 ) −
f
2h
6
120
wprowadzonej
1
f
120
(5 )
( x 0 ) oraz
wcześniej
N 1 (h ) =
notacji
mamy:
(5 )
( x 0 ) + O (h 6 ).
M = f ′( x 0 ) ,
K1 = −
1
f ′′′( x 0 ) ,
6
f (x 0 + h ) − f (x 0 − h )
.
2h
W punkcie x0 = 2.0 oraz wychodząc z h = 0.2 obliczamy kolejne aproksymacje generowane przez metodę N1(h). Natomiast wyniki ekstrapolacji przedstawiono w tabeli (5.10).
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 141
2008-02-21
Strona 142 z 246
Metody Numeryczne i Programowanie
Rozdział 5
N 1 (0.2 ) =
f (2.2 ) − f (1.8)
= 22.414160 ,
0.4
N 1 (0.1) =
f (2.1) − f (1.9 )
= 22.228786 ,
0.2
N 1 (0.05) =
f (2.05) − f (1.95)
= 22.182564 .
0.1
Tabela 5.10. Wyniki kolejnych ekstrapolacji Richardsona zastosowanych do aproksymowania wartości pierwszej pochodnej funkcji f ( x ) = x ⋅ e x w punkcie x0 = 2.0. Wyjściowy krok metody h = 0.2.
N 1 (0.2 ) = 22.414160
4 ⋅ N 1 (0.1) − N 1 (0.2)
N 1 (0.1) = 22.228786
3
= 22.166995
4 ⋅ N 1 (0.05) − N 1 (0.1)
16 ⋅ N 2 (0.1) − N 2 (0.2 )
N 2 (0.1) =
N 3 (0.2 ) =
N 1 (0.05) = 22.182564
3
15
= 22.167157
= 22.167168
N 2 (0.2 ) =
Jak można zauważyć trzecia ekstrapolacja daje nam wynik poprawny z dokładnością do
sześciu cyfr po przecinku.
■
Jak z przedstawionych powyżej rozważań dotyczących metody ekstrapolacji Richardsona wynika, kolejne ekstrapolacje (kolejne kolumny w tabeli ekstrapolacyjnej) uzyskuje się
licząc różnego rodzaju średnie z wcześniej uzyskanych aproksymacji. Nie ma natomiast konieczności wielokrotnego obliczania wartości funkcji w różnych punktach. Oznacza to, że
metoda generująca wyższego rzędu aproksymacje charakteryzuje się minimalnym kosztem
obliczeniowym oraz stosunkowo niewielkim błędem zaokrąglenia. Należy jednakże pamiętać,
⎛ h ⎞
że wraz z wzrostem k w wyrażeniu N 1 ⎜ k ⎟ oczekiwać należy wzrostu błędu zaokrąglenia,
⎝2 ⎠
jak to zostało zasygnalizowane w wcześniejszej części tego rozdziału.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 142
2008-02-21
Strona 143 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Przyjmuje się, że metoda interpolacji Richardsona zastosowana być może za każdym
razem, gdy tylko błąd obcięcia daje się przedstawić w postaci:
m −1
∑ K hα
i =1
i
i
( )
+ O h αm ,
(5.51)
gdzie Ki są pewnymi stałymi, natomiast dla wykładników potęgowych zachodzi α1 < α2 < α3
< ... < αm.
Jak wcześniej zasygnalizowano, metoda ekstrapolacji jest bardzo użyteczna nie tylko w
przypadku aproksymowania wartości pochodnych funkcji, ale również w przypadku przybliżonego obliczania całek oraz rozwiązywania równań różniczkowych.
5.3 Metody numerycznego całkowania funkcji
Metody numerycznego całkowania funkcji mają duże praktyczne znaczenie, ponieważ
nawet dla prostych funkcji podcałkowych bardzo często nie można znaleźć metodami analitycznymi funkcji pierwotnych. Równie często zdarza się, że jakkolwiek funkcja pierwotna
istnieje, to znalezienie jej przysparzać może znacznych problemów. W rozdziale tym przedstawione zostaną najpierw podstawy zastosowania metod numerycznego całkowania, a następnie wprowadzone zostaną bardziej rozbudowane oraz dokładniejsze metody.
Generalnie numeryczne metody całkowania mają za zadanie aproksymowanie wartości
całki oznaczonej. W tym celu wykorzystywana jest ważona suma wartości funkcji podcałkowej obliczonych w punktach znajdujących się wewnątrz przedziału całkowania. Oznacza to,
że ogólnie metodę numerycznego całkowania przedstawić można w postaci:
b
∫
a
n
f ( x )dx ≈ ∑ c i f ( x i ) ,
(5.52)
i =0
gdzie ci są współczynnikami (wagami), których wartości zależą od przyjętej metody, natomiast x i ∈ [a, b], dla i = 0,1, K , n . Tak zdefiniowane metody określa się mianem kwadratur.
W literaturze opisanych jest wiele różnych metod numerycznego całkowania. Można je pogrupować ze względu na sposób podejścia do rozwiązania tego problemu. Jedną z takich grup
są metody wykorzystujące interpolację wielomianami wyznaczanymi na siatkach równoodległych węzłów. Metody te w literaturze opisane są jako metody Newtona – Cotesa.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 143
2008-02-21
Strona 144 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Omówione w tym rozdziale kwadratury wykorzystują przy ich wyprowadzeniu przedstawione wcześniej wielomiany interpolacyjne Lagrange’a. . Załóżmy, że w przedziale domkniętym [a, b] danych jest n + 1 punktów siatli xi, i = 0, 1, 2, ..., n takich, że
a = x 0 < x1 < x 2 < K < x n − < x n = b .
(5.53)
Dany jest wielomian Lagrange’a
n
n
i =0
i =0
Pn ( x ) = ∑ f ( x i )Li ( x ) + ∏ ( x − x i ) ⋅
f
(ξ ( x )) ,
(n + 1)!
( n +1)
(5.54)
który interpoluje funkcję f(x) w zadanych punktach xi, i = 0, 1, 2, ..., n. Obliczając wartość
całki oznaczonej wykorzystać możemy ten wielomian otrzymując:
b
∫
f ( x )dx =
b
n
∫∑
a i =0
a
b
n
f ( xi )Li ( x ) + ∫ ∏ ( x − xi ) ⋅
a i =0
f (n +1) (ξ ( x ))
dx =
(n + 1)!
b
n
1
(x − xi ) ⋅ f (n +1) (ξ (x ))dx,
= ∑ ai f ( xi ) +
∏
∫
(n + 1)! a i = 0
i =0
n
(5.55)
gdzie ξ(x) jest pewną liczbą z przedziału [a, b] zależną od x oraz
b
ai = ∫ Li ( x )dx , dla każdego i = 0,1,2,K n .
(5.56)
a
Równanie (5.55) jest równaniem ogólnym powstałym z wykorzystania wielomianów interpolacyjnych Lagrange’a. Rozpatrując pewne szczególne przypadki, w których wykorzystujemy wielomiany Lagrange’a pierwszego i drugiego stopnia wyprowadzone na siatce równoodległych węzłów interpolacji, otrzymujemy różne metody o różnym stopniu dokładności.
Metody te znane są pod nazwami metody trapezów oraz metody Simpsona.
5.3.1. Metoda trapezów
Jedną z najprostszych metod aproksymowania wartości całki zadanej funkcji f jest
aproksymowanie jej za pomocą linii prostej przechodzącej przez punkty (a, f(a)) oraz (b,
f(b)), czyli punkty wyznaczające granice obszaru całkowania. Otrzymujemy w ten sposób
trapez, którego powierzchnię jest łatwo obliczyć (rysunek 5.3). Metodę całkowania, w której zakładamy, że funkcję podcałkową przedstawiamy za pomocą wielomianu Lagrange’a stopnia pierwszego nazywamy metodą trapezów.
Korzystając z wielomianu Lagrange’a stopnia pierwszego:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 144
2008-02-21
Strona 145 z 246
Metody Numeryczne i Programowanie
Rozdział 5
P1 ( x ) =
x − x0
x − x1
1
f (x 0 ) +
f ( x1 ) + ( x − x 0 )( x − x1 ) f ′′(ξ ( x )) ,
x 0 − x1
2
x1 − x 0
(5.57)
gdzie x0 = a, x1 = b natomiast ξ(x) jest pewną liczbą z przedziału [a, b], poszukiwaną całkę
przedstawić można w postaci:
b
b
a
a
∫ f (x )dx = ∫ P (x )dx =
1
b
⎡ x − x1
⎤
x − x0
1
= ∫⎢
f ( x1 ) + (x − x0 )( x − x1 ) f ′′(ξ ( x ))⎥ dx =
f (x0 ) +
2
x1 − x0
x − x1
⎦
a ⎣ 0
(5.58)
b
b
⎡ x − x1
⎤
x − x0
1
= ∫⎢
f (x0 ) +
f ( x1 )⎥ dx + ∫ [( x − x0 )(x − x1 ) f ′′(ξ (x ))]dx.
x − x1
x1 − x0
2a
⎦
a ⎣ 0
Ponieważ (x – x0)(x – x1) nie zmienia znaku w przedziale [a, b], to korzystając z twierdzenia o wartości średniej dla całek zastosowanego do członu z błędem obcięcia otrzymamy:
b
b
a
a
∫ [(x − x0 )(x − x1 ) f ′′(ξ (x ))]dx = f ′′(ξ )∫ (x − x0 )(x − x1 )dx =
x1
⎤
⎡ x 3 x1 + x0 2
h3
x + x0 x1 x ⎥ = −
f ′′(ξ ),
= f ′′(ξ )⎢ −
2
6
⎦ x0
⎣3
(5.59)
gdzie h = b – a. Wykorzystując oszacowanie błędu (5.59) w równaniu (5.58) otrzymamy:
b
∫
a
⎡ ( x − x1 )2
(x − x0 )2 f (x )⎤ − h3 f ′′(ξ ) =
f ( x0 ) +
f ( x )dx = ⎢
1 ⎥
2( x1 − x0 )
⎣ 2( x0 − x1 )
⎦ x0 12
x1
=
(5.60)
x1 − x0
[ f (x0 ) + f (x1 )] − h f ′′(ξ ).
2
12
3
Ostatecznie metodę trapezów zapisać można w postaci równania:
b
∫
a
f ( x )dx =
3
h
[ f (x 0 ) + f (x1 )] − h f ′′(ξ ) .
2
12
(5.61)
Nazwa tej metody wynika z interpretacji geometrycznej (rysunek 5.2), zgodnie, z którą
pole powierzchni funkcji f o wartościach dodatnich przybliżane jest polem powierzchni trapezu o wierzchołkach w punktach (a, 0), (a, f(a)), (b, f(b)) oraz (b, 0). Zastosowanie metody
trapezów pokazuje przykład 5.7.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 145
2008-02-21
Strona 146 z 246
Metody Numeryczne i Programowanie
Rozdział 5
f(x)
f(b)
P1(x)
f(a)
x1 = b
x0 = a
Rysunek 5.2. Interpretacja geometryczna metody trapezów.
Przykład 5.7.
Korzystając z metody trapezów obliczyć pole powierzchni pod krzywą daną równaniem
f ( x ) = exp(− x 2 ) ograniczoną punktami a = x0 = 0 oraz b = x1 = 2. Oszacowanie wartości
2
całki z dokładnością do sześciu cyfr po przecinku wynosi ∫ exp(− x 2 )dx =0.882081 .
0
Rozwiązanie
Ponieważ funkcja f ( x ) = exp(− x 2 ) nie posiada funkcji pierwotnej, to nie można do jej
całkowania wykorzystać metod analitycznych. Oznacza to, że jedynym sposobem jej scałkowania jest zastosowanie metod przybliżonych – numerycznych. Korzystając z metody trapezów otrzymamy:
2
b
h
∫ f (x )dx = ∫ exp(− x )dx ≈ 2 [ f (x ) + f (x )] =
2
0
1
0
a
=
[ ( )
)]
2−0
exp − 02 + exp − 22 = 1 + exp(− 4 ) = 1.018316.
2
(
Interpretację geometryczną pokazana na rysunku 5.3. Porównując pola powierzchni pod
krzywą f(x) oraz pod wielomianem P1(x) zauważyć można, że metoda trapezów podaje wynik
zawyżony
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 146
2008-02-21
Strona 147 z 246
Metody Numeryczne i Programowanie
Rozdział 5
1.2
f(x)
1
0.8
0.6
0.4
P1(x)
0.2
0
0
0.5
1
1.5
2
2.5
Rysunek 5.3. Funkcja f ( x ) = exp(− x 2 ) oraz liniowa interpolacja wykorzystywana do całkowania w metodzie trapezów.
Duże znaczenie w zastosowaniu metod aproksymacyjnych ma oszacowanie błędu obcięcia dla zastosowanej metody. W tym przypadku błąd obcięcia aproksymacji jest porównywalny z aproksymowaną wartością całki i wynosi:
(2 − 0) ⋅ 1 = 8 = 2 = 0.667 .
h3
h3
f ′′(ξ ) ≤
max f ′′(ξ ) =
≤
ξ
≤
0
2
12
12
12
12 3
3
Oszacowanie błędu względnego natomiast przedstawia się następująco:
ε=
~
x−x
x
=
1.018316 − 0.882081
0.882081
=
0.136235
= 0.1514 = 1.514 × 10 −1 .
0.882081
Jak z powyższego oszacowania błędu względnego wynika, aproksymowana wartość
całki jest obliczona z dokładnością do jednej cyfry znaczącej.
■
Na zakończenie omawiania metody trapezów należy zwrócić uwagę na to, że metoda ta
daje dokładne rozwiązania w przypadku, gdy druga pochodna funkcji podcałkowej jest tożsamościowo równa zero. Oznacza to, że funkcje będące wielomianami stopnia pierwszego lub
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 147
2008-02-21
Strona 148 z 246
Metody Numeryczne i Programowanie
Rozdział 5
niżej są całkowane z zastosowaniem metody trapezów dokładnie. O takiej metodzie całkowania mówimy, że jej stopień dokładności wynosi jeden.
5.3.2. Metoda Simpsona
Metoda Simpsona całkowania funkcji f na przedziale domkniętym [a, b] wykorzystuje
wielomiany interpolacyjne Lagrange’a stopnia drugiego wyznaczone na węzłach x0 = a, x2 =
b oraz x1 = a + h, gdzie h =
b−a
. Interpretację geometryczną tej metody przedstawiono na
2
rysunku 5.4.
f(x)
f(b)
P2(x)
f(a)
f(x1)
x0 = a
x1 = a + h
x2 = b
Rysunek 5.4. Interpretacja geometryczna metody całkowania funkcji f(x) metodą Simpsona.
Sposób postępowania, jaki należy przyjąć wyprowadzając metodę Simpsona jest podobny do tego przedstawionego w przypadku metody trapezów. Zakładamy, że dana jest
funkcja f(x) ciągła i różniczkowalna wraz z czwartą pochodną na przedziale domkniętym [a,
b]. Funkcje tę interpolujemy za pomocą wielomianu Lagrange’a stopnia drugiego wyznaczonego na węzłach x0, x1 oraz x2:
(x − x1 )(x − x2 ) f (x ) + (x − x0 )(x − x2 ) f (x ) +
(x0 − x1 )(x0 − x2 ) 0 (x1 − x0 )(x1 − x2 ) 1
(x − x0 )(x − x1 ) f (x ) + 1 (x − x )(x − x )(x − x ) f ′′′(ξ (x )).
+
0
1
2
(x2 − x0 )(x2 − x1 ) 2 6
P2 ( x ) =
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 148
(5.62)
2008-02-21
Strona 149 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Korzystając z tego wielomianu otrzymujemy następującą aproksymację wartości całki:
b
∫
a
(x − x0 )(x − x2 )
⎤
⎡ ( x − x1 )( x − x 2 )
⎢ ( x − x )( x − x ) f (x 0 ) + ( x − x )( x − x ) f ( x1 ) + ⎥
1
0
2
1
0
1
2
⎥
⎢ 0
x2
x2
⎥
⎢ ( x − x0 )(x − x1 )
f ( x )dx = ∫ P2 ( x )dx = ∫ ⎢+
f (x2 ) +
⎥ dx =
(x 2 − x0 )(x 2 − x1 )
x0
x0 ⎢
⎥
⎥
⎢ 1
⎥
⎢+ ( x − x 0 )(x − x1 )( x − x 2 ) f ′′′(ξ ( x ))
⎦
⎣ 6
2
2
⎡ ( x − x0 )( x − x 2 )
⎤
⎡ ( x − x1 )( x − x 2 )
⎤
f (x 0 )⎥ dx + ∫ ⎢
f (x1 )⎥ dx +
= ∫⎢
(x0 − x1 )(x0 − x2 )
(x − x0 )(x1 − x2 )
⎦
⎦
x0 ⎣
x0 ⎣ 1
x
x
(5.63)
2
⎡ (x − x0 )( x − x1 )
⎤
⎡1
⎤
+ ∫⎢
f ( x 2 )⎥ dx + ∫ ⎢ ( x − x0 )( x − x1 )( x − x 2 ) f ′′′(ξ ( x ))⎥ dx.
(x2 − x0 )(x2 − x1 )
6
⎦
⎦
x0 ⎣
x0 ⎣
x2
x
Całkując kolejne wyrażenia w równaniu (5.63) otrzymamy następującą aproksymację całki:
b
h
∫ f (x )dx = 3 [ f (x ) + 4 f (x ) + f (x )] + 0 × f ′′′(ξ ) .
0
1
(5.64)
2
a
Uzyskany wynik stanowić może spore zaskoczenia, ponieważ w równaniu (5.64) człon
błędu zanika. Chcąc oszacować ten błąd wykorzystać należy wielomiany Taylora stopnia
trzeciego otrzymane jako rozwinięcie funkcji f(x) w otoczeniu punktu x1.
Jeżeli funkcja f jest funkcją ciągłą i f ( x ) ∈ C (4 ) [x 0 , x 2 ] , to dla każdego x z przedziału
[x0, x1] istnieje taka liczba ξ(x) zależna od x z tego przedziału, że:
f ( x ) = f ( x1 ) + ( x − x1 ) f ′( x1 ) +
1
(x − x1 )2 f ′′(x1 ) +
2
(5.65)
1
1
3
4
+ ( x − x1 ) f ′′′( x1 ) + ( x − x1 ) f (4 ) (ξ ( x )).
6
24
Całkując powyższe wyrażenie w granicach od x0 do x2 otrzymamy:
x
x2
∫
x0
2
1
⎡1
⎤
2
3
⎢ 2 ( x − x1 ) f ′( x1 ) + 6 ( x − x1 ) f ′′( x1 ) + ⎥
f (x )dx = f (x1 )(x 2 − x0 ) + ⎢
⎥ +
⎢+ 1 (x − x )4 f ′′′(x )
⎥
1
1
⎢⎣ 24
⎥⎦ x0 (5.66)
x
1 2
(x − x1 )4 f (4 ) (ξ (x ))dx.
+
∫
24 x0
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 149
2008-02-21
Strona 150 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Ponieważ (x-x1)4 jest zawsze dodatnie w przedziale [x0, x2], to skorzystać możemy z
twierdzenia o wartości średniej dla całek, otrzymując następujące wyrażenie na człon błędu
obcięcia:
f (4 ) (ξ1 ) 2
f (4 ) (ξ1 )
1 2
4
4
(4 )
(x − x1 ) f (ξ (x ))dx =
(x − x1 ) dx =
(x − x1 )5
∫
∫
24 x0
24 x0
120
x
[
x
]
x2
x0
,
(5.67)
gdzie ξ1 jest pewną liczbą z przedziału (x0, x2).
Ponieważ h = x2 – x1 = x1 – x0, to
( x 2 − x1 ) 2 − ( x 0 − x1 ) 2 = ( x 2 − x1 ) 4 − ( x 0 − x1 ) 4 = 0 ,
(5.68)
( x 2 − x1 )3 − ( x 0 − x1 )3 = 2h 3 i ( x 2 − x1 )5 − ( x 0 − x1 )5 = 2h 5 ,
(5.69)
oraz
stąd, uwzględniając zależności (5.67), (5.68) oraz (5.69), wyrażenie (5.66) zapisać można
jako:
x2
∫
f ( x )dx = 2hf ( x1 ) +
x0
h3
h5
f ′′( x1 ) +
f
3
60
(4 )
(ξ 1 ) .
(5.70)
Korzystając z centralnej metody różnicowej zastosowanej do obliczania wartości drugich pochodnych funkcji f w równaniu (5.70) zastąpić możemy drugą pochodną f(2)(x) jej
aproksymacją otrzymując:
x2
∫
x0
h3
f (x )dx = 2hf ( x1 ) +
3
⎧1
⎨ 2
⎩h
⎫ h 5 (4 )
⎡ f ( x0 ) − 2 f ( x1 ) + ⎤ h 2 (4 )
f (ξ 2 )⎬ +
f (ξ1 ) =
⎢+ f (x )
⎥−
2
⎣
⎦ 12
⎭ 60
h
h 5 ⎡ 1 (4 )
1 (4 )
⎤
(
)
f
ξ
f (ξ1 )⎥.
= [ f ( x0 ) + 4 f ( x1 ) + f (x 2 )] −
−
2
⎢
3
12 ⎣ 3
5
⎦
(5.71)
Zastępując liczby ξ1 oraz ξ2 w tym wyrażeniu przez wspólną liczbę ξ z przedziału (x0,
x1) otrzymamy następującą formułę na metodę Simpsona:
b
∫
a
f ( x )dx =
5
h
[ f (x 0 ) + 4 f (x1 ) + f (x 2 )] − h f
3
90
(4 )
(ξ ) .
(5.72)
Analizując równanie (5.72) stwierdzić możemy, że: (i) metoda Simpsona jest metodą
piątego rzędu O(h5), oraz (ii) metoda Simpsona daje dokładne wyniki w przypadku wielomianów stopnia trzeciego oraz niższym. Wniosek ten jest zgodny z rezultatem podanym w rówMariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 150
2008-02-21
Strona 151 z 246
Metody Numeryczne i Programowanie
Rozdział 5
naniu (5.64) i wynika on stąd, że w oszacowaniu błędu obcięcia metody występuje pochodna
stopnia czwartego. Wynik ten jest o tyle interesujący, że do wyprowadzenia metody Simpsona wykorzystano wielomiany interpolacyjne Lagrange’a stopnia drugiego.
Przykład 5.8.
Korzystając z metody Simpsona obliczyć pole powierzchni pod krzywą daną równaniem
f ( x ) = exp(− x 2 ) ograniczoną punktami a = x0 = 0 oraz b = x1 = 2. Oszacowanie wartości
2
całki z dokładnością do sześciu cyfr po przecinku wynosi ∫ exp(− x 2 )dx =0.882081 .
0
Rozwiązanie
Aproksymację przeprowadzamy wykorzystując trzy punkty: x0 = a = 0, x1 = (2 + 0)/2
= 1 oraz x2 = b = 2. Korzystając z równania (5.72) definiującego metodę Simpsona obliczamy:
h
2 −1
∫ f (x )dx = ∫ exp(− x )dx ≈ 3 [ f (x ) + 4 f (x ) + f (x )] = 3 [exp(− 0 ) + 4 exp(− 1 ) + exp(− 2 )] =
b
2
2
2
0
a
1
2
2
2
0
=
1
(1 + 4 exp(− 1) + exp(− 4)) = 0.829944.
3
1.2
f(x)
1
0.8
0.6
P2(x)
0.4
0.2
0
0
0.5
1
1.5
2
2.5
Rysunek 5.5. Funkcja f ( x ) = exp(− x 2 ) oraz jej kwadratowa interpolanta wykorzystywana do
całkowania w metodzie Simpsona.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 151
2008-02-21
Strona 152 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Porównując pola powierzchni pod krzywą f(x) oraz pod wielomianem P2(x) (rysunek
5.5.)zauważyć można, że metoda Simpsona podaje wynik zaniżony
Oszacowany błąd obcięcia aproksymacji jest porównywalny z aproksymowaną wartością całki i wynosi:
(2 − 1) ⋅ 1 = 1 = 1.11 × 10 − 2 .
h5
h5
f ′′(ξ ) ≤
max f ′′(ξ ) =
ξ
0
2
≤
≤
90
90
90
90
5
Oszacowanie błędu względnego natomiast przedstawia się następująco:
ε=
~
x−x
x
=
0.829944 − 0.882081
0.882081
=
0.052137
= 5.91 × 10 − 2 .
0.882081
Jak z powyższego oszacowania błędu względnego wynika, aproksymowana wartość
całki jest obliczona z dokładnością do dwóch cyfr znaczących.
■
5.3.3. Uwagi o zamkniętych i otwartych metodach Newtona - Cotesa
Zarówno metoda trapezów jak też metoda Simpsona zaliczane są do grupy metod występujących pod wspólnym mianem zamkniętych metod Newtona – Cotesa. Wszystkie metody z tej grupy powstają poprzez zastosowanie do interpolowania funkcji podcałkowej wielomianu interpolacyjnego Lagrange’a odpowiednio stopnia pierwszego w przypadku metody
trapezów, wielomianu stopnia drugiego w przypadku metody Simpsona i wyższych stopni w
przypadku kolejnych metod otrzymując w ten sposób odpowiednie wyrażenia na obliczanie
przybliżonych wartości całek (tabela 5.11).
Cechą charakterystyczną wszystkich zamkniętych metod Newtona – Cotesa jest to, że
wszystkie n + 1 węzłów wykorzystywanych w wzorach xi = x0 + ih, i = 0, 1, 2, ..., n, h = (ba)/n dobranych jest w taki sposób, aby x0 = a oraz xn = b. Metody te zapisuje się w postaci:
b
∫
n
f ( x )dx ≈ ∑ a i f ( x i ) ,
(5.73)
i =0
a
gdzie
(x − x )
∫ ∏ (x − x )dx .
xn
xn
x0
x0 j = 0
j ≠i
a i = ∫ Li ( x )dx =
n
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
j
i
(5.74)
j
Strona 152
2008-02-21
Strona 153 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Analizując błędy obcięcia dla różnych metod Newtona – Cotesa zauważyć można, że
jego wielkość zależy od tego czy n jest liczbą parzystą czy też jest liczbą nieparzystą. W
przypadku, gdy n jest liczbą parzystą otrzymana kwadratura ma rząd zbieżności O(hn+3) oraz
jest dokładna dla wielomianów stopnia n + 1, pomimo tego, że do jej wyprowadzenia wykorzystano wielomian stopnia n. W przypadku, gdy n jest nieparzyste otrzymana kwadratura ma
rząd zbieżności O(hn+2) oraz jest dokładna dla wielomianów stopnia n. Z tego spostrzeżenia
wynika dodatkowy wniosek praktyczny. Jeżeli dotychczasowa liczba węzłów n + 1 była nieparzysta i dodajemy nowe węzły chcąc poprawić dokładność obliczeń, nie poprawimy jej
dokładając pojedynczy węzeł. Koniecznym jest dokładanie nowych węzłów w liczbie będącej wielokrotnością liczby dwa.
Tabela 5.11. Różne wyrażenia na obliczanie przybliżonej wartości całki z zastosowaniem
wzorów na zamkniętą metodę Newtona – Cotesa. n+1 – liczba węzłów. h =
b−a
n
– krok całkowania. ξ jest pewną liczbą z przedziału (a, b).
n
Formuła
Metoda
b
1
∫
Trapezów
f ( x )dx =
a
b
2
Simpsona
f ( x )dx =
∫
a
3
h
[ f (x 0 ) + f (x1 )] − h f ′′(ξ )
2
12
5
h
[ f (x 0 ) + 4 f (x1 ) + f (x 2 )] − h f
3
90
(5.73)
(4 )
(ξ )
(5.74)
b
3h
∫ f (x )dx = 8 [ f (x ) + 3 f (x ) + 3 f (x ) + f (x )] −
0
3
Simpsona 3/8
3h 5
−
f
80
b
4
-
1
2
3
a
(4 )
(ξ )
2h ⎡7 f ( x 0 ) + 32 f ( x1 ) + 12 f ( x 2 ) + ⎤
⎥−
3
4
⎦
7
8h
−
f (6 ) (ξ )
945
∫ f (x )dx = 45 ⎢⎣+ 32 f (x ) + 7 f (x )
a
(5.75)
(5.76)
Obok równań wynikających z tak zwanych zamkniętych wzorów Newtona – Cotesa w
literaturze opisywane są otwarte metody Newtona – Cotesa. W tym przypadku węzłami
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 153
2008-02-21
Strona 154 z 246
Metody Numeryczne i Programowanie
Rozdział 5
interpolacji są liczby xi = x0 + ih, i = 0, 1, 2, ..., n, gdzie h = (b-a)/(n+2) przy czym x0 = a +
h. oraz xn = b – h. Jak stąd wynika początek i koniec przedziału całkowania nie stanowią węzłów interpolacji. Jeżeli w sposób formalny wprowadzimy oznaczenia na granice całkowania
jako: x-1 = a oraz xn+1 = b, to wszystkie wzory otwartych metod Newtona – Cotesa przedstawić można w postaci:
b
∫
f ( x )dx =
a
xn +1
∫
n
f ( x )dx ≈ ∑ a i f ( x i ) ,
(5.77)
(x − x )
∏
∫ (x − x )dx .
(5.78)
i =0
x −1
gdzie
xn
xn
x0
x0 j = 0
j ≠i
a i = ∫ Li ( x )dx =
n
j
i
j
W zależności od n otrzymuje się różne wyrażenia na otwarte metody Newtona – Cotesa.
Odpowiednie wzory wraz z błędami obcięcia podano w tabeli 5.12.
Tabela 5.12. Różne wyrażenia na obliczanie przybliżonej wartości całki z zastosowaniem
wzorów na otwartą metodę Newtona – Cotesa. n+1 – liczba węzłów. h =
b−a
–
n+2
krok całkowania. ξ jest pewną liczbą z przedziału (a, b).
Formuła
n
xn +1
∫
0
f ( x )dx = 2hf ( x 0 ) +
x −1
xn +1
3h
3h 3
∫ f (x )dx = 2 [ f (x 0 ) + f (x1 )] + 4 f
x −1
1
xn +1
∫
2
f ( x )dx =
x −1
xn +1
3
h3
f ′′(ξ )
3
∫
x −1
f ( x )dx =
(5.79)
(2 )
(ξ )
5
4h
[2 f (x 0 ) − f (x1 ) + 2 f (x 2 )] + 14h f
45
3
(5.80)
(4 )
(ξ )
5
5h
[11 f (x 0 ) + f (x1 ) + f (x 2 ) + 11 f (x 3 )] + 95h f
144
24
(4 )
(5.81)
(ξ )
(5.82)
Analizując poszczególne wzory na metody otwarte Newtona – Cotesa zauważyć można,
ze błąd metody, podobnie jak w przypadku metod zamkniętych, zależy od tego czy n jest paMariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 154
2008-02-21
Strona 155 z 246
Metody Numeryczne i Programowanie
Rozdział 5
rzyste czy też nieparzyste. Dodatkowe porównanie z metodami zamkniętymi pozwala na
stwierdzenie, ż generalnie metody otwarte charakteryzują się większymi błędami w porównaniu do metod zamkniętych. Z tych też względów metody otwarte są rzadko stosowane w
praktyce do aproksymowania wartości całek. Główne zastosowanie znalazły natomiast w metodach numerycznego rozwiązywania równań różniczkowych zwyczajnych.
5.3.4. Metody kompozycyjne numerycznego całkowania
Podane wcześniej wzory Newtona – Cotesa są w ogólnym przypadku nie użyteczne, jeśli przedział całkowania jest zbyt duży. Chcąc uzyskać na takich przedziałach odpowiednią
dokładność aproksymacji należałoby zastosować wielomiany wysokiego stopnia. Wyznaczenie takich współczynników jest jednakże dość trudne. Z drugiej strony metody Newtona –
Cotesa bazują na wielomianach interpolacyjnych wykorzystujących siatki równo odległych
węzłów. Sprawia to dodatkowy problem, ponieważ wielomiany wysokiego stopnia na tak
zdefiniowanych węzłach mają tendencję do wpadania w oscylacje. Rozwiązaniem, jakie w tej
sytuacji się nasuwa jest zastosowanie funkcji będących kawałkami wielomianami. Taki sposób postępowania jest bardzo często wykorzystywany w praktyce. Celem wprowadzenia do
zagadnienia przeanalizujmy kolejny przykład 5.9.
Przykład 5.9.
Dana jest funkcja f(x) = exp(x). Korzystając z metody Simpsona należy scałkować tę
4
funkcję w przedziale od a = 0 do b = 4. Wartość dokładna wynosi
∫e
x
= e 4 − e 0 = 53.59815 .
0
Rozwiązanie
Zgodnie z metodą całkowania Simpsona krok całkowania wynosi h = (4-0)/2 = 2. Korzystając z wzoru na metodę Simpsona (równanie 5.74, tabela 5.11) otrzymamy:
4
∫e
0
x
dx =
2 0
(
e + 4e 2 + e 4 ) = 56.76958 .
3
Porównując ten wynik z wynikiem dokładnym stwierdzamy, że błąd aproksymacji jest
duży i wynosi ε = -3.17143. Błąd taki generalnie jest nie do przyjęcia. Chcąc poprawić dokładność naszych obliczeń podzielmy przedział [0, 4] na dwa podprzedziały [0, 2] oraz [2, 4]
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 155
2008-02-21
Strona 156 z 246
Metody Numeryczne i Programowanie
Rozdział 5
i przeprowadźmy obliczenia niezależnie dla każdego z nich stosując metodę Simpsona z krokiem h = 1:
4
∫e
2
x
0
4
dx = ∫ e dx + ∫ e x dx =
x
0
2
1 0
1
(
e + 4e + e 2 ) + (e 2 + 4e 3 + e 4 ) = 53.86385 .
3
3
W tym przypadku błąd aproksymacji zmalał i wynosi ε = -0.26570. Dokonajmy kolejnego podziału na jeszcze mniejsze podprzedziały tak, aby zastosować metodę Simpsona z
krokiem h = 0.5. Uzyskamy w ten sposób następujące oszacowanie:
4
1
2
3
4
∫ e dx = ∫ e dx + ∫ e dx + ∫ e dx + ∫ e dx =
x
x
0
0
x
1
x
2
x
3
(
) (
)
(
) (
)
1
1 0
e + 4e0.5 + e1 + e1 + 4e1.5 + e 2 +
3
3
1
1
+ e 2 + 4e 2.5 + e3 + e3 + 4e3.5 + e 4 = 53.61622.
3
3
=
W tym przypadku błąd aproksymacji wynosi ε = -0.01807.
■
Uogólniając powyższe rozważania zaproponować można następujący sposób postępowania: zadany przedział całkowania [a, b] należy podzielić na n podprzedziałów i do każdej z
sąsiadujących par węzłów zastosować metodę Simpsona. Przy czym należy zwrócić uwagę na
to, że zastosowanie metody Simpsona wymaga podania dwóch podprzedziałów. Oznacza to,
że liczba n musi być parzysta, to znaczy n = 2m gdzie m jest dowolną liczbą całkowitą wskazującą ile razy metoda Simpsona w danym przypadku zostanie zastosowana.
Zdefiniowane w ten sposób metody numerycznego całkowania określa się często mianem metod kompozycyjnych. Ten sposób postępowanie zastosować można w przypadku
każdej z wcześniej omówionych metod numerycznego całkowania. Prześledźmy formalny
sposób postępowania w przypadku dwóch typowych metod kwadratur Newtona – Cotesa, a
mianowicie metody trapezów i metody Simpsona.
Załóżmy, że dana jest ciągła na przedziale domkniętym [a, b] funkcja f ∈ C 2 [a, b] . Dla
kroku całkowania h = (b – a)/n i węzłów xj = a + jh, j = 0, 1, 2, ..., n kompozycyjna metoda
trapezów dla n podprzedziałów przedstawiona może być w następujący sposób:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 156
2008-02-21
Strona 157 z 246
Metody Numeryczne i Programowanie
Rozdział 5
b
∫
bx j
n
⎧h
⎫
h3
(
)
[
(
)
(
)
]
=
−
−
f
x
dx
f
x
f
x
f ′′(ξ j )⎬ ,
⎨
∑
j
j −1
∫
12
j =1 x j −1
j =1 ⎩ 2
⎭
n
f ( x )dx = ∑
a
(5.83)
gdzie ξ j ∈ (x j −1 , x j ) .
Wykorzystując fakt, że dla każdego j = 1, 2, ..., n-1 wartości funkcji f(xj) powtarzają się
dwukrotnie, raz na końcu przedziału [xj-1, xj] oraz po raz drugi na początku następnego podprzedziału [xj, xj+1], a następnie w odpowiedni sposób szacując wyraz błędu obcięcia, równanie (5.83) zapisać można w prostszej postaci:
b
∫
a
n −1
⎤ (b − a )h 2
h⎡
f ( x )dx = ⎢ f (a ) + 2∑ f (x j ) + f (b )⎥ −
f ′′(µ ) ,
2⎣
12
j =1
⎦
(5.84)
gdzie µ jest pewną liczbą z przedziału (a, b).
W analogiczny sposób wyprowadzić można kompozycyjną metodę Simpsona. W tym
przypadku zakładamy, że dana jest funkcja f ∈ C (4 ) [a, b] . Przyjmując h = (b-a)/2m, gdzie m
jest liczbą podprzedziałów, na których stosujemy metodę Simpsona, oraz siatkę węzłów a =
x0 < x1 < x2 < ... < x2m, gdzie xj = x0 + jh, j = 0, 1, 2, ..., 2m otrzymamy następujące wyrażenie na kompozycyjną metodę Simpsona:
b
∫
f ( x )dx =
a
m −1
m
⎤ (b − a )h 4 (4 )
h⎡
f (µ ) , (5.85)
⎢ f (a ) + 2∑ f (x 2 j ) + 4∑ f (x 2 j −1 ) + f (b )⎥ −
3⎣
180
j =1
j =1
⎦
gdzie µ jest pewną liczbą z przedziału (a, b).
Przykład 5.10.
Stosując metodę kompozycyjną Simpsona oraz trapezów oszacować wartość całki
π
I = ∫ sin( x )dx z błędem nie większym niż 0.00002. Wartość dokładna I = 2.
0
Rozwiązanie
Korzystając z metody Simpsona (równanie 5.84) dla poszukiwanej całki zapisać możemy:
π
I = ∫ sin( x )dx =
0
m −1
m
⎤ πh 4
h⎡
(
)
(
)
(
)
(
)
+
+
+
sin
0
2
sin
4
sin
sin
π
sin(µ ) ,
x
x
∑
∑
⎢
⎥−
2j
2 j −1
3⎣
j =0
j =1
⎦ 180
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 157
2008-02-21
Strona 158 z 246
Metody Numeryczne i Programowanie
Rozdział 5
gdzie µ jest liczbą z przedziału (0, π), h = π , n = 2m. Ponieważ oczekujemy, że błąd aprokn
symacji ma być nie większy niż 0.00002, korzystamy z oszacowania błędu:
πh 4
180
sin(µ ) ≤
πh 4
180
=
π5
2880m 4
≤ 0.00002 .
Stąd wyliczyć możemy, że m ≥ 9. Jeżeli m = 10, to n = 20 oraz h = π
20
i poszukiwaną
wartość całki obliczamy z wyrażenia:
π
I = ∫ sin( x )dx ≈
0
9
10
⎛ jπ ⎞
⎛ (2 j − 1)π
+
2
sin
4
sin⎜
⎟
∑
⎢ ∑ ⎜
60 ⎣ j = 0 ⎝ 10 ⎠
20
⎝
j =1
π ⎡
⎞⎤
⎟⎥ = 2.00000679 .
⎠⎦
W przypadku metody trapezów korzystamy z równania (5.85) otrzymując:
π
I = ∫ sin( x )dx =
0
n −1
⎤ πh 2
h⎡
(
)
(
)
(
)
+
+
sin
0
2
sin
sin
π
sin(µ ) ,
x
∑
⎢
⎥−
j
2⎣
j =1
⎦ 12
gdzie µ jest liczbą z przedziału (0, π), h = π , n – liczba węzłów. Podobnie jak poprzednio
n
korzystając z oszacowania błędu obliczyć możemy minimalną liczbę węzłów konieczną do
uzyskania oczekiwanej dokładności aproksymacji:
πh 2
12
sin(µ ) ≤
πh 2
12
=
π3
12n 2
≤ 0.0002 .
Stąd obliczyć możemy, że n > 359 i jako oszacowanie wartości całki dla n = 360
otrzymamy:
π
I = ∫ sin( x )dx ≈
0
π ⎡
359
⎛ π ⎞⎤
2
j ⎟⎥ = 1.99998731 .
⎢ ∑ sin⎜
720 ⎣ j =1 ⎝ 360 ⎠⎦
Jak z powyższego przykładu wynika zarówno metoda trapezów jak też metoda Simpsona dają porównywalne, co do dokładności, wyniki. Jednakże w przypadku metody trapezów
obliczenia należy przeprowadzić w 360 węzłach, natomiast w metodzie Simpsona jedynie w
20 węzłach, co znacznie obniża koszt obliczeń.
■
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 158
2008-02-21
Strona 159 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Ważną cechą wszystkich kompozycyjnych metod Newtona – Cotesa jest to, że charakteryzują się one numeryczną stabilnością ze względu na błędy zaokrągleń. Własność ta pokazana zostanie na przykładzie metody Simpsona zastosowanej do całkowania funkcji f na
przedziale domkniętym [a, b] podzielonym na n = 2m podprzedziałów. Chcąc oszacować
maksymalny błąd zaokrąglenia zakładamy, że wartość funkcji f(xi) aproksymowana jest w
f ( x ) oraz, że:
zmiennopozycyjnym rachunku maszynowym za pomocą ~
i
f (xi ) = ~
f ( x i ) + ei ,
i = 0,1,2, K n ,
(5.86)
f ( x i ) do aproksymowania f(xi). Zagdzie ei są błędami zaokrąglenia związanymi z użyciem ~
kumulowany błąd zaokrąglenia (ERR) dla kompozycyjnej metody Simpsona oszacować
można w następujący sposób:
ERR =
m
m −1
⎤
h⎡
+
+
e
e
e2 j −1 + e2 m ⎥ ≤
2
4
⎢ 0
∑
∑
2j
3⎣
j =1
j =1
⎦
≤
m −1
m
⎤
h⎡
⎢ e0 + 2∑ e2 j + 4∑ e2 j −1 + e2 m ⎥ ≤
3⎣
j =1
j =1
⎦
≤
h
[ε + 2(m − 1)ε + 4mε + ε ] = 2mhε = (b − a )ε ,
3
(5.87)
gdzie ε jest wspólnym oszacowaniem wszystkich występujących błędów zaokrągleń.
Z przedstawionego w równaniu (5.87) oszacowania błędu zaokrągleń dla kompozycyjnej metody Simpsona wynika, że błąd ten nie zależy od kroku h. Oznacza to, że metoda ta jest
stabilna numerycznie nawet w przypadkach, gdy krok h dąży do zera. Przypomnieć tu należy,
że takie spostrzeżenie nie było słuszne w przypadku wcześniej podanych metod numerycznego różniczkowania.
5.4. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
1.
Wyprowadzić wyrażenie na błąd aproksymacji pierwszej pochodnej dla formuły dwupunktowej progresywnej danej wzorem:
f ′( x 0 ) =
f (x 0 + h ) − f (x 0 ) h
− f ′′(ξ 0 )
h
2
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 159
2008-02-21
Strona 160 z 246
Metody Numeryczne i Programowanie
Rozdział 5
Dana jest funkcja e(h ) =
2.
ε
h
+
h2
d3
M , gdzie M jest ograniczeniem z góry dla
sin( x )
6
dx
na przedziale [0.800, 1.00]. Pokazać, że e(h) ma minimum dla h = 3 3ε
3.
M
.
Korzystając z odpowiednich wzorów różnicowych uzupełnić następujące tabele:
a)
4.
x
f(x)
1.1
0.48603
1.2
0.86160
0.11007
1.3
1.59751
0.39569
1.4
3.76155
x
f(x)
-0.3
-0.20431
-0.1
-0.08993
0.1
0.3
f’(x)
b)
f’(x)
Korzystając z różnych metod dwupunktowych aproksymować wartość pierwszej pochodnej funkcji f ( x ) = x 3 e x − sin( x ) w punkcie x0 = 2.19. Do obliczeń założyć krok h
2
= 0.1 oraz h = 0.01.
Wykorzystując metodę ekstrapolacji Richardsona obliczenia N4(h), aproksymować war-
5.
tości pierwszych pochodnych następujących funkcji w zadanym punkcie x0 oraz kroku
h:
a)
f ( x ) = ln( x ), x0 = 1.0, h = 0.4
c)
f ( x ) = x + e x , x 0 = 0.0, h = 0.4
b)
f ( x ) = 2 x sin ( x ), x0 = 1.05, h = 0.4
d)
f ( x ) = x 3 cos( x ), x 0 = 2.3, h = 0.4
6.
Powtórzyć obliczenia z zadania 5 prowadząc obliczenia w czterocyfrowej arytmetyce.
7.
Korzystając z tego, ze dwupunktowa metoda progresywna aproksymowania wartości
pochodnych dana jest zależnością
f ′( x 0 ) =
f (x 0 + h ) − f (x 0 ) h
h2
− f ′′( x 0 ) −
f ′′′( x 0 ) + O (h 3 )
h
2
6
wyprowadzić wzór na metodę z błędem obcięcia rzędu O(h3).
8.
Korzystając z różnych zamkniętych metod Newtona – Cotesa obliczyć wartości podanych całek. Porównać uzyskane wyniki z wartościami dokładnymi oraz podać, tam
gdzie jest to możliwe, oszacowanie błędu.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 160
2008-02-21
Strona 161 z 246
Metody Numeryczne i Programowanie
Rozdział 5
2
∫ ln(x )dx
a)
∫ x dx
1
b)
1
π
3π
4
c)
e)
π
3
∫ (sin(x ))
2
dx
0
0.4
4
∫ ctan(x )dx
0
9.
3
0
∫ tan(x )dx
d)
π
0.1
d)
∫e
3x
cos(2 x )dx
0.2
2
Korzystając z różnych zamkniętych i otwartych metod Newtona – Cotesa obliczyć wartości podanych całek. Porównać uzyskane wyniki z wartościami dokładnymi oraz podać, tam gdzie jest to możliwe, oszacowanie błędu. Czy podane oszacowania błędów
zgodne są z wartościami obliczonymi z wartości dokładnych?
1.5
∫ exp(x )dx
a)
∫ x dx
1
3
b)
1.1
∫
1 + x dx
1
∫1 x dx
e)
2
∫ (sin(x ))
2
dx
0
10
0
10.
c)
0
0.1
d)
π
1
5.5
d)
10
1
1
∫1 x dx + 5∫.5 x dx
Korzystając z zamkniętej metody Newtona – Cotesa dla n = 3 oraz otwartej dla n = 2
3
obliczyć
∫e
−
x
2
dx . Znaleźć w każdym przypadku oszacowanie błędu oraz porównać
1
otrzymaną aproksymację z wartością dokładną 0.7668010.
11.
Korzystając z zamkniętej metody Newtona – Cotesa dla n = 4 oraz otwartej dla n = 3
3
obliczyć
∫e
−
x
2
dx . Znaleźć w każdym przypadku oszacowanie błędu oraz porównać
1
otrzymaną aproksymację z wartością dokładną 0.7668010.
12.
Wyprowadzić metodę Simpsona wraz z członem błędu wychodząc z równania
x2
( )
∫ f (x )dx = a f (x ) + a f (x ) + a f (x ) + kf (ξ )
4
0
0
1
1
2
2
x0
Wskazówka. Współczynniki a0, a1 oraz a2 znaleźć wykorzystując zasadę zgodnie, z
którą metoda Simpsona jest dokładna dla wielomianowej funkcji f(x) = xn, gdzie n = 1, 2, 3.
Współczynnik
k
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
znaleźć
całkując
Strona 161
równanie
f(x)
=
x4.
2008-02-21
Strona 162 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
Rozdział 6. Rozwiązywanie układów równań liniowych
Układy równań liniowych występują w wielu innych metodach numerycznych. Bardzo
często są to układy zawierające kilka set a nawet kilka tysięcy równań. W takich przypadkach
bardzo duże znaczenie ma zastosowanie odpowiednich metod obliczeniowych. Stosowane w
praktyce obliczeniowej metody rozwiązywania równań liniowych podzielić można na dwie
grupy: metody dokładne oraz metody iteracyjne, podające oszacowanie poszukiwanego
rozwiązania z pewnym przybliżeniem wynikającym zarówno z błędów zaokrągleń jak też
błędu obcięcia charakterystycznego dla stosowanej metody iteracyjnej. Metody dokładne pozwalają na uzyskanie rozwiązania w skończonej liczbie kroków obliczeniowych, przy czym
otrzymane rozwiązanie obarczone jest jedynie błędem zaokrągleń wynikającym z stosowanej
reprezentacji maszynowej liczb.
6.1. Metody dokładne rozwiązywania układów równań liniowych
W przypadku metod dokładnych wykorzystujemy właściwość równań liniowych zgodnie, z którą kombinacja liniowa dwóch równań posiada takie samo rozwiązanie jak równania
wyjściowe. Wykorzystując tę właściwość przeprowadzić należy transformację wyjściowego
układu równań w inny, jemu równoważny i posiadający to samo rozwiązanie, ale zdecydowanie łatwiejszy do rozwiązania. Ten sposób postępowania wykorzystany został w jednej z najbardziej znanych metod rozwiązywania równań liniowych, jaką jest metoda eliminacji
Gaussa. Celem wprowadzenie do dalszych rozważań przeanalizujmy następujący przykład
6.1.
Przykład 6.1.
Rozwiązać układ czterech równań liniowych z czterema niewiadomymi stosując metodę
eliminacji Gaussa:
x + 2 y + 3z = 1,
2 x + 6 y + 10 z = 0,
3x + 14 y + 28 z = −8.
Rozwiązanie
Rozwiązanie tego układu równań uzyskujemy w kolejnych krokach
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 162
2008-02-21
Strona 163 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
Krok 1: Korzystając z równania pierwszego eliminujemy z równań drugiego i trzeciego
zmienną x. W tym celu mnożymy równanie pierwsze przez –2 i dodajemy do równania drugiego, otrzymując nową postać równania drugiego bez zmiennej x. Następnie mnożymy równanie pierwsze przez –3 i dodajemy do równania trzeciego również eliminując w nim zmienną x. Jako rezultat otrzymujemy nowy układ równań w postaci:
x + 2 y + 3z =
1,
2 y + 4 z = − 2,
8 y + 19 z = −11.
Krok 2: Korzystając z drugiego równania eliminujemy z równania trzeciego zmienną y. W
tym celu mnożymy równanie drugie przez –4 i dodajemy je do równia trzeciego, otrzymując
nowe równanie trzecie bez zmiennej y. Jako rezultat otrzymujemy nowy trójkątny układ
równań liniowych, będący równoważny wyjściowemu układowi równań, w postaci:
x + 2 y + 3z =
1,
2 y + 4 z = − 2,
3 z = − 3.
Krok 3: Rozwiązujemy trójkątny układ równań obliczając z równania trzeciego z = -1 i podstawiając ten wynik do równania drugiego i trzeciego otrzymując:
x + 2 y + 3z =
1,
2 y + 4 z = − 2, ⇒
x + 2 y + 3 ⋅ (− 1) =
1,
2 y + 4 ⋅ (− 1) = − 2, ⇒
3 z = − 3.
x + 2y =
4,
2y =
2,
z = − 1.
z = − 1.
Następnie z równania drugiego obliczamy y = 1 i podstawiamy do równania pierwszego
otrzymując kolejno:
x + 2y =
2y =
4,
x + 2 ⋅ (1) = 4,
2, ⇒
z = − 1.
x + 2 ⋅ (1) = 4,
y = 1, ⇒
z = − 1.
x = 2,
y = 1, ⇒ y = 1,
z = − 1.
z = − 1.
■
Celem uogólnienia przedstawionego w przykładzie 6.1. sposobu postępowania rozpatrzmy następujący układ n równań liniowych z n niewiadomymi:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 163
2008-02-21
Strona 164 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
E1 : a11 x1 + a12 x 2
E 2 : a 21 x1 + a 22 x 2
M
E n : a n1 x 1 + a n 2 x 2
+ K + a1n x n = b1 ,
+ K + a 2 n x n = b2 ,
M
+ K + a nn x n = bn .
(6.1)
Każde z tych równań oznaczone zostało kolejno jako E1, E2 i tak dalej aż do En. Powyższy układ równań zapisać można w postaci macierzowej jako:
Ax = b ,
(6.2)
gdzie macierz współczynników A oraz wektory: zmiennych x i wyrazów wolnych b dane są
w następującej postaci (UWAGA: zgodnie z przyjętą konwencją wszystkie wektory i macierze zapisywane są z wykorzystaniem czcionki pogrubionej!):
⎛ a11
⎜
⎜a
A = ⎜ 21
M
⎜⎜
⎝ a n1
a12
a 22
M
an2
K a1n ⎞
⎟
K a 2n ⎟
,
O M ⎟
⎟
K a nn ⎟⎠
(6.3)
x = ( x1
x2 K xn ) ,
(6.4)
b = (b1
b2
K bn ) .
(6.5)
T
T
Ze względów formalnych w wyprowadzeniu metody eliminacja Gaussa macierz A łączy się z
wektorem b otrzymując macierz:
⎛ a11
⎜
~ = [A b] = ⎜ a 21
A
⎜ M
⎜
⎜a
⎝ n1
a12
a 22
M
an2
K a1n M a1,n +1 ⎞
⎟
K a 2 n M a 2,n +1 ⎟
,
O M M M ⎟
⎟
K a nn M a n ,n +1 ⎟⎠
(6.6)
w której n + 1 kolumna zwiera wyrazy wolne, to znaczy ai,n+1 = bi, i = 1, 2, ..., n.
Zakładamy, że a1,1 ≠ 0. Możliwe jest więc dla każdego i = 2,3, ..., n przeprowadzenie
operacji:
⎛
(E i ) ← ⎜⎜ E i −
⎝
⎞
a i1
× E1 ⎟⎟ ,
a11
⎠
(6.7)
mającej na celu wyeliminowanie współczynników ai1 występujących przy wyrazie x1 w każdym z wierszy macierzy A, czyli z każdego z równań E2, E3, ..., En. Jakkolwiek każdy z eleMariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 164
2008-02-21
Strona 165 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
mentów macierzy aij jest w wyniku tego działania zmieniony, to w dalszym ciągu formalnie
oznaczać go będziemy jako element aij. W ten sposób eliminujemy w kolejnych wierszach z
kolejnych kolumn j = 2, 3, ..., n-1 współczynniki występujące przy zmiennej xj:
⎛
(E i ) ← ⎜⎜ E i −
⎝
⎞
×Ej ⎟
⎟
a jj
⎠
a ij
(6.8)
dla każdego i = j+1, j+2, ..., n, zakładając każdorazowo, że ajj ≠ 0. W ten sposób eliminujemy
współczynniki występujące przy zmiennej xj w wierszach poniżej wiersza j – tego, gdzie j =
1, 2, ..., n. W efekcie uzyskamy macierz trójkątną górną:
⎛ a11
⎜
⎜ 0
~ ⎜
A= M
⎜
⎜ M
⎜ 0
⎝
a12
a13 K a1n
a 22
a 23 K a 2 n
0
a 33 K a 3n
M
O O
0
K
0
M
a nn
M a1,n +1 ⎞
⎟
M a 2,n +1 ⎟
M a 3,n +1 ⎟ .
⎟
M
M ⎟
M a n ,n +1 ⎟⎠
(6.9)
Macierz ta przedstawia liniowy układ równań postaci:
E1 : a11 x1 + a12 x 2 + K + a1n x n = a1,n +1 ,
a 22 x 2 + K + a 2 n x n = a 2,n +1 ,
E2 :
O
M
M
M
a nn x n = a n ,n +1 .
En :
(6.10)
Układ równań (6.10) ma takie samo rozwiązanie jak wyjściowy układ równań liniowych (6.1). Jednakże z uwagi na to, że jest to układ równań z macierzą trójkątną, jego rozwiązanie jest zdecydowanie prostsze. Uzyskujemy je zaczynając od równania n – tego i przechodząc do równań n – 1, n – 2, ..., 2, 1, podstawiając wcześniej wyliczone zmienne uzyskujemy, poszukiwane rozwiązanie. Sposób postępowania przedstawia się następująco:
1.
Rozwiązujemy n – te równanie uzyskując:
xn =
2.
a n ,n +1
(6.11)
a nn
Podstawiamy do równania n – 1 obliczone xn i rozwiązujemy je względem xn-1 otrzymując:
x n −1 =
a n −1,n +1 − a n −1,n x n
(6.12)
a n −1,n −1
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 165
2008-02-21
Strona 166 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
3.
Ten proces obliczeniowy kontynuujemy dla kolejnych równań i = n – 1, n – 2, ..., 2, 1,
otrzymując:
xi =
a i ,n +1 − a in x n − a in −1 x n −1 − K − a i ,i +1 x i +1
a ii
a i ,n +1 −
=
n
∑a
j = i +1
ij
xj
a ii
(6.13)
Przedstawiona powyżej procedura rozwiązywania układu równań liniowych metodą
eliminacji Gaussa nie będzie działać poprawnie w przypadku, gdy chociażby jeden z elementów diagonali głównej aii, i =1, 2, ..., n będzie równy zero. Wynika to zarówno z równań (6.7,
6.8) jak też z równań (6.11) do (6.13), w których występuje dzielenie przez współczynnik aii.
Należy tutaj jednakże pamiętać o tym, że z faktu tego nie wynika, że układ równań liniowych
nie ma rozwiązania, wynika jedynie, że stosowana metoda jest niepoprawna i wymaga modyfikacji. Problem ten ilustruje przykład (6.2).
Przykład 6.2.
Stosując metodę eliminacji Gaussa rozwiązać układ równań:
x2 + 2 x3 − x4 = − 8,
E1 : x1 −
E2 : 2 x1 − 2 x2 + 3 x3 − 3 x4 = − 20,
x2 +
x3
=
− 2,
E3 : x1 +
4.
x2 + 4 x3 + 3x4 =
E4 : x1 −
Rozwiązanie
Macierz rozszerzona dla powyższego układu równań liniowych przyjmie postać:
~ =A
~ (1)
A
⎡1 − 1
⎢2 − 2
=⎢
⎢1 1
⎢
⎣1 − 1
Przeprowadzając
2 −1 M − 8 ⎤
3 − 3 M − 20⎥
⎥.
1 0 M −2⎥
⎥
4 3 M
4 ⎦
kolejno
operacje:
(E 2 ) ← (E 2 − 2E1 ) , (E 3 ) ← (E 3 − E1 )
oraz
(E 4 ) ← (E 4 − E1 ) eliminujemy elementy pierwszej kolumny otrzymując:
~ (2 )
A
⎡1 − 1 2 − 1 M − 8 ⎤
⎢0 0 − 1 − 1 M − 4 ⎥
⎥.
=⎢
⎢0 2 − 1 1 M 6 ⎥
⎥
⎢
2
4 M 12 ⎦
⎣0 0
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 166
2008-02-21
Strona 167 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
Gdybyśmy chcieli kontynuować proces obliczeniowy, to ze względu na to, że a22(2) jest
równy zero, mielibyśmy niewykonalne działanie typu dzielenie przez zero. Jednakże przeprowadzając prostą operację przestawienia (Ei) ↔ (Ej) wierszy macierzy A(2) problem ten
możemy rozwiązać. Należy jedynie w macierzy A znaleźć taki wiersz, w którym element ai2
będzie różny od zera. Ponieważ a32(2) ≠ 0, to przeprowadzamy operację (E2) ↔ (E3) otrzymując nową macierz:
~ (3 ) = A
~ (2 )′
A
⎡1 − 1 2 − 1 M − 8 ⎤
⎢0 2 − 1 1 M 6 ⎥
⎥.
=⎢
⎢0 0 − 1 − 1 M − 4 ⎥
⎥
⎢
2
4 M 12 ⎦
⎣0 0
Ponieważ x2 zostało z równań E3 oraz E4 wyeliminowane, to możemy przejść do następnego etapu, czyli eliminacji zmiennej x3 z równania E4. Wykonując operację
(E 4 ) ← (E 4 + 2E 3 ) otrzymamy macierz trójkątną postaci:
~ (4 )
A
⎡1 − 1 2 − 1 M − 8 ⎤
⎢0 2 − 1 1 M 6 ⎥
⎥.
=⎢
⎢0 0 − 1 − 1 M − 4 ⎥
⎥
⎢
0
2 M 4 ⎦
⎣0 0
Należy teraz przez kolejne podstawienia obliczyć niewiadome:
x4 =
4
=2,
2
x3 =
− 4 − (− 1) ⋅ x 4
= 2,
−1
x2 =
6 − x 4 − (− 1) ⋅ x 3
= 3,
2
x1 =
− 8 − (− 1) ⋅ x 4 − 2 x 3 − (− 1) ⋅ x 2
= −7 .
1
■
Przykład (6.2) pokazuje prosty sposób postępowania w przypadku, gdy jeden z elementów diagonali głównej równy jest zero, czyli gdy akk(k) = 0, k = 1, 2, ..., n-1. W takim przyMariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 167
2008-02-21
Strona 168 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
padku należy dokonać przeglądu wszystkich elementów k – tej kolumny macierzy A(k-1) począwszy od wiersza k – tego szukając niezerowego elementu. Znalazłszy element apk(k) ≠ 0 dla
pewnego p, takiego, że k – 1 ≤ p ≤ n należy dokonać przestawienia wierszy (Ek) ↔ (Ep), a
następnie kontynuować proces eliminacji kolejnych niewiadomych. Jeżeli okaże się, że apk(k)
= 0 dla każdego p = k, k+1, ..., n, to rozwiązywany układ równań nie ma jednoznacznego
rozwiązania, i procedurę obliczeniową należy przerwać z odpowiednim komunikatem.
W praktyce, prowadząc obliczenia bardzo często zdarza się, że wartości poszczególnych
współczynników w rozwiązywanych równaniach nie są dane dokładnie, a jedynie z pewnym
przybliżeniem. Źródłem tych niedokładności może być zarówno stosowana reprezentacja maszynowa liczb jak też błędy powstałe w trakcie badań, w przypadku, gdy rozwiązywane równania wynikają z badań eksperymentalnych. W takich przypadkach spodziewać się należy
przeniesienia tych błędów na uzyskane rozwiązanie. Problem ten ilustruje przykład 6.3.
Przykład 6.3.
Stosując metodę eliminacji Gaussa, bez zamiany kolejności wierszy, rozwiązać dwa
układy dwóch równań liniowych z dwiema niewiadomymi, w których założyliśmy, że poszczególne współczynniki dane są dokładnie, natomiast wyrazy wolne obarczone są pewnymi
błędami.:
a)
4 x + y = 6 ± 0.4,
− x + 5 y = 9 ± 0.4.
b)
− x + 5 y = 9 ± 0.4,
4 x + y = 6 ± 0.4.
Rozwiązanie dokładne dla nieobciążonego błędami układu równań wynosi x = 1, y = 2.
Obliczenia przeprowadzić w czterocyfrowej arytmetyce maszynowej.
Rozwiązanie
Ad a) W interpretacji geometrycznej rozwiązanie nie zaburzonego układu równań przedstawić można jako punkt przecięcia dwóch prostych
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 168
2008-02-21
Strona 169 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
3
y1(x)
2,5
y
y2(x)
2
1,5
1
0
0,5
1
1,5
2
x
Rysunek 6.1. Interpretacja geometryczna rozwiązania nie zaburzonego układu równań z przykładu 6.3a.
Zaburzony układ równań rozpatrywać możemy jako cztery układy równań, w których
przyjmujemy błędy w danych raz na poziomie górnym, a raz na poziomie dolnym, czyli:
4 x + y = 6 + 0.4,
− x + 5 y = 9 + 0.4.
4 x + y = 6 + 0.4,
− x + 5 y = 9 − 0.4.
4 x + y = 6 − 0.4,
− x + 5 y = 9 − 0.4.
4 x + y = 6 − 0.4,
− x + 5 y = 9 + 0.4.
Każde z tych układów równań generuje jedno rozwiązanie. Poszukiwane rozwiązanie
wyjściowego zaburzonego układu równań znajduje się wewnątrz równoległoboku, którego
wierzchołkami są rozwiązania powyższych czterech układów równań liniowych:
x = 1.0762,
x = 0.8857,
y = 2.0952.
y = 2.0571.
x = 1.1143,
x = 0.9238,
y = 1.9420.
y = 1.9048.
Interpretację geometryczną tej sytuacji przedstawiono na rysunku 6.2.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 169
2008-02-21
Strona 170 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
3
y1(x)
y
2,5
y2(x)
2
1,5
1
0
0,5
1
x
1,5
2
Rysunek 6.2. Interpretacja geometryczna rozwiązania wyjściowego zaburzonego układu równań z przykładu 6.3a potraktowanych jako cztery niezależne równania. Pole
powierzchni równoległoboku 0.0307.
Formalnie, stosując metodę eliminacji Gaussa wyjściowy układ równań 6.3a przekształcamy do układu równań z trójkątną macierzą współczynników postaci:
4 x + y = 6 ± 0.4,
5.25 y = 10.5 ± 0.5.
Jako rozwiązanie drugiego z tych równań otrzymujemy y = 2± 0.0952. Podstawiając to
rozwiązanie do równania pierwszego otrzymamy rozwiązanie powyższego układu równań w
postaci czterech punktów wyznaczających wierzchołki równoległoboku, w którym znajduje
się poszukiwane rzeczywiste rozwiązanie naszego układu równań:
x = 1.0762,
x = 0.8762,
y = 2.0952.
y = 2.0952.
x = 1.1238,
x = 0.9238,
y = 1.9048.
y = 1.9048.
Interpretację geometryczną tej sytuacji przedstawiono na rysunku 6.3.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 170
2008-02-21
Strona 171 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
3
y1(x)
2,5
y
y2(x)
2
1,5
1
0
0,5
1
x
1,5
2
Rysunek 6.3. Interpretacja geometryczna rozwiązania zaburzonego układu równań z przykładu 6.3a po przeprowadzeniu eliminacji Gaussa. Pole powierzchni równoległoboku 0.0381.
Porównując te dwa obszary stwierdzić możemy, że są one bardzo podobne. Miarą tego
podobieństwa może być pole powierzchni wyznaczanych przez punkty rozwiązania równoległoboków. W pierwszym przypadku pole to wynosi 0.0307, natomiast w drugim 0.0381.
Ad b) Przystępując do rozwiązanie drugiego układu równań, w którym przestawiono ich kolejność stwierdzić możemy, że rozwiązanie wyjściowego układu ma identyczną interpretację geometryczną jak w przypadku a).
Stosując metodę eliminacji Gaussa z układu b) otrzymujemy nowy układ równań o macierzy trójkątnej:
− x + 5 y = 9 ± 0.4,
21 y = 42 ± 2.
Rozwiązując drugie z tych równań otrzymujemy, że y = 2± 0.0952. Podstawiając to
rozwiązanie do równania pierwszego otrzymamy cztery różne rozwiązania wyznaczające
wierzchołki równoległoboku:
x = 1.0762,
x = 0.1240,
y = 2.0952.
y = 1.9048.
x = 1.8760,
x = 0.9238,
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 171
2008-02-21
Strona 172 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
y = 2.0952.
y = 1.9048.
Interpretację geometryczną przedstawiono na rysunku 6.4. Porównując rysunki 6.4 oraz
6.3 zauważyć można, że obszary wyznaczane przez uzyskane rozwiązania różnią się i to
znacznie. W tym przypadku dwa rozwiązania metodą eliminacji Gaussa są identyczne jak
prawdziwe rozwiązanie wyjściowego układu równań, natomiast pozostałe dwa rozwiązania
znacznie różnią się od niego. Miarą tej różnicy w rozwiązaniach może być pole powierzchni
równoległoboku, które w tym przypadku wynosi 0.1523
3
2,5
y
y2(x)
2
y1(x)
1,5
1
0
0,5
1
1,5
2
x
Rysunek 6.4. Interpretacja geometryczna rozwiązania zaburzonego układu równań z przykładu 6.3b po przeprowadzeniu eliminacji Gaussa. Pole powierzchni równoległoboku 0.1523.
■
Przykład 6.3 pokazuje jak duży wpływ na poprawność otrzymanych wyników ma kolejność rozwiązywanych równań. Generalny wniosek, jaki wynika z tego przykładu jest
taki, że do eliminacji zmiennych z kolejnych równań należy zawsze brać to równanie, w
którym przy eliminowanej zmiennej jest największy współczynnik. Wynika stąd modyfi-
kacja metody eliminacji Gaussa, w której przystępując do eliminacji kolejnych zmiennych,
najpierw zmienia się kolejność równań tak, aby jako element główny otrzymać ten, dla którego współczynnik jest największy.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 172
2008-02-21
Strona 173 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
Metoda eliminacji Gaussa bazuje na dwóch bardzo istotnych właściwościach układów
równań liniowych: (i) jeżeli równania mają punkt wspólny (rozwiązanie) to punkt ten jest
również punktem wspólnym dla dowolnej ich kombinacji liniowej; (ii) znaleźć można odpowiedni niezerowy mnożnik, którego użycie prowadzi do zredukowania kolumny do zera.
Poszukując niezerowego mnożnika rozpatrzyć należy dwie sytuacje. Pierwsza z nich
polegająca na tym, że w całej analizowanej kolumnie wszystkie elementy są równe zero.
Oznacza to, że rozwiązywany układ równań nie ma jednoznacznego rozwiązania. Druga sytuacja polega na tym, że w wierszu będącym podstawą do eliminacji odpowiedni współczynnik
równy jest zero, natomiast w kolumnie poniżej występują elementy niezerowe. W takie sytuacji należy dokonać przestawienia wierszy w rozwiązywanym układzie równań.
W przypadku metod numerycznych zawsze należy zadać sobie pytanie dotyczące tego
jak dobra jest dana metoda. Przede wszystkim, aby na pytanie takie odpowiedzieć należy zastanowić się nad tym czy generowane przez daną metodę numeryczną rozwiązanie jest poprawne. Druga istotna kwestia to czułość stosowanej metody na błędy. Chodzi tutaj zarówno
o błędy danych (współczynników) wynikających na przykład z stosowanych metod badawczych, jak też o błędy wynikające z stosowanej arytmetyki maszynowej. W końcu przeanalizować należy problem kosztów obliczeniowych, jakie należy ponieść chcąc rozwiązać dany
problem.
Miarą kosztów obliczeniowych jest liczba zmiennopozycyjnych działań, jakie należy
przeprowadzić celem uzyskania rozwiązania. Ponieważ dzielenie i mnożenie oraz dodawanie
i odejmowanie wykonywane są w porównywalnym czasie, wydzielić możemy te dwie grupy
działań jako mających istotny wpływ na koszt obliczeniowy. W zasadzie liczba dodawań i
odejmowań jest w przypadku metody eliminacji Gaussa porównywalna z liczbą mnożeń i
dzieleń. Wziąwszy pod uwagę, że mnożenie i dzielenia z reguły wykonywane są wolniej od
dodawań i dzieleń najczęściej analizę kosztów przeprowadza się uwzględniając jedynie te
dwa ostatnie działania. Istotne znaczenie w analizie kosztów ma wielkość układu równań,
czyli wymiar macierzy A co, do której zakładamy, że dim(A) = n × n.
W pierwszym kroku metody eliminacji Gaussa wykonać należy jedno dzielenie mające
na celu znalezienie mnożnika do eliminacji pierwszej zmiennej w wierszu drugim oraz n
mnożeń i tyle samo dodawań, które należy wykonać celem przeprowadzenia transformacji
drugiego równania. Należy pamiętać, że modyfikujemy zarówno macierz współczynników A,
jak też wektor wyrazów wolnych b, natomiast nie musimy wymnażać pierwszego elementu w
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 173
2008-02-21
Strona 174 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
wierszu, ponieważ nowa jego wartość będzie wynosić zero. Proces taki przeprowadzić należy
dla każdego z n - 1 wierszy leżącego poniżej wiersza pierwszego. Jak stąd wynika pierwszy
krok eliminacji Gaussa wymaga przeprowadzenia (n + 1)(n – 1) mnożeń i dzieleń oraz n(n –
1) dodawań. Takich kroków wykonać należy n – 1.
W k – tym kroku eliminacji Gaussa wykonać należy jedno dzielenie mające na celu znalezienie mnożnika oraz (n – k) mnożeń mających na celu wygenerowanie nowego wiersza i, i
= k + 1, k + 2, ..., n. Na każdy nowy wiersz wykonać należy również (n – k) dodawań. Całkowitą liczbę mnożeń i dzieleń oszacowań można w następujący sposób:
n −1
n −1
∑ (n − k + 1)(n − k ) = ∑ (n
k =1
2
− 2nk + k 2 + n − k ) =
k =1
n −1
n −1
n −1
n3 n
= ∑ (n + n ) − ∑ (2n + 1)k + ∑ k =
− .
3 3
k =1
k =1
k =1
2
(6.14)
2
W przypadku dodawań w sumie wykonać należy działań:
n −1
n −1
∑ (n − k )(n − k ) = ∑ (n 2 − 2nk + k 2 ) =
k =1
k =1
n −1
n −1
n −1
n3 n
= ∑ n − ∑ 2nk + ∑ k =
− .
3 3
k =1
k =1
k =1
2
(6.15)
2
Jeżeli istnieje jednoznaczne rozwiązanie analizowanego układu równań liniowych, obliczenia prowadzone są dokładnie oraz na każdym etapie obliczeń element główny jest różny
do zera, to metoda eliminacji Gaussa daje rozwiązanie. Problem polega na tym, że obliczenia
komputerowe nie są obliczeniami dokładnymi w związku z czym musimy liczyć się z błędem
zaokrągleń prowadzącego do otrzymywania niepoprawnych rozwiązań. Sytuacja taka jest
szczególnie częsta wtedy, gdy element główny jest bardzo mały w porównaniu do pozostałych współczynników w eliminowanej kolumnie. Problem wpływu zaburzeń w danych pokazany został w przykładzie 6.3. Kolejny aspekt tego zagadnienia przedstawiony zostanie w
przykładzie 6.4.
Przykład 6.4.
Stosując metodę eliminacji Gaussa rozwiązać w arytmetyce z dwiema cyframi znaczącymi następujący układ równań liniowych:
0.001x1 + x 2 = 3,
x1 + 2 x 2 = 5.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 174
2008-02-21
Strona 175 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
Rozwiązanie
Postępując zgodnie z metodą eliminacji Gaussa pierwsze równanie mnożymy przez –
1000 i dodajemy do równania drugiego otrzymując:
0.001x1 + x 2 = 3,
− 1000 x 2 = −3000.
W arytmetyce dokładnej otrzymalibyśmy w tym przypadku –998x1 = -2995, jednakże
zastosować musieliśmy zaokrąglenie, które dało nam wynik jak powyżej. Z podanego układu
równań otrzymamy x2 = 3, które to rozwiązanie podstawiamy w równaniu pierwszym otrzymując x1 = 0. Podstawiając otrzymane x1 oraz x2 do równania drugiego, łatwo sprawdzić, że
nie jest to dobre przybliżenie poszukiwanego rozwiązania.
Zamieńmy w takim razie kolejność równań i rozwiążmy taki zmodyfikowany układ:
x1 + 2 x 2 = 5,
0.001x1 + x 2 = 3.
Mnożąc pierwsze równanie przez –0.001 i dodając do równania drugiego w przyjętej
arytmetyce z dwiema cyframi znaczącymi otrzymamy:
x1 + 2 x 2 = 5,
x 2 = 3.
W arytmetyce dokładnej równanie drugie miałoby postać 0.998x2 = 2.995. Jednakże po
zaokrągleniu otrzymamy równanie jak powyżej. Podstawiając obliczone x2 do równania
pierwszego otrzymamy jako rozwiązanie x1 = -1. Przez podstawienie do układu równań łatwo
pokazać, że otrzymane rozwiązanie jest satysfakcjonujące.
■
Przykład 6.4 pokazuje problemy, z jakimi spotykać się możemy w przypadku, gdy element główny w macierzy jest bardzo mały. Ponieważ w takim przypadku wykonujemy dzielenie przez bardzo małą (bliską zero) liczbę, generuje to powstawanie dużych błędów obliczeniowych. Jak w przykładzie tym pokazano dobrym sposobem rozwiązanie tego problemu
jest zamiana równań prowadzona w taki sposób, aby otrzymać element główny jak największy.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 175
2008-02-21
Strona 176 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
Uogólniając to spostrzeżenie stwierdzić należy, ze metoda eliminacji Gaussa pracuje
poprawnie w tych przypadkach, gdy elementy diagonali głównej macierzy współczynników
A są silnie dominujące, to znaczy, gdy:
n
a ii > ∑ a ij
(6.16)
j =1,
j ≠i
Drugi problem związany z uzyskaniem poprawnego rozwiązania stosując metodę eliminacji Gaussa wynika z wpływu niewielkich zaburzeń w danych na wynik końcowy. Problem
ten zasygnalizowany został w przykładzie 6.3. Kolejny przykład pokazuje inny aspekt tego
zagadnienia.
Przykład 6.5.
Stosując metodę eliminacji Gaussa rozwiązać następujący układ równań a) oraz drugi z
minimalnie zmienionym wyrazem wolnym układ równań b):
1
3
x2 = ,
2
2
a)
1
1
5
x1 + x 2 = .
2
3
6
Rozwiązanie
x1 +
1
3
x2 = ,
2
2
1
1
x1 + x 2 = 1.
2
3
x1 +
b)
Stosując metodę eliminacji Gaussa po pierwszym kroku otrzymuje się następujące
układy równań z macierzą trójkątną:
a)
1
3
x2 = ,
2
2
1
1
x2 = .
12
12
x1 +
b)
1
3
x2 = ,
2
2
1
1
x2 = .
12
4
x1 +
W arytmetyce dokładnej jako rozwiązanie pierwszego układu równań otrzymamy x1 =
x2 = 1, natomiast jako rozwiązanie drugiego układu równań otrzymamy x2 = 3 oraz x1 = 0.
■
Przykładu 6.5 pokazuje jak niewielka zmiana jednego z wyrazów wolnych wpływa na
uzyskanie diametralnie różnych rozwiązań. Sugeruje to dużą czułość tego układu równań na
nawet niewielkie zaburzenia. Macierz współczynników dla takiego układu równań określa się
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 176
2008-02-21
Strona 177 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
mianem macierzy źle uwarunkowanej. Problemy związane z rozwiązywaniem układów
równań o źle uwarunkowanej macierzy współczynników nie da się w żaden sposób rozwiązać
modyfikując metodę eliminacji Gaussa, co oznacza, że nie można metody eliminacji Gaussa
zastosować do rozwiązywania takiego rodzaju równań. Miarą złego uwarunkowania jest tak
zwana liczba uwarunkowania, która często wyrażona jest jako stosunek największej wartości własnej danej macierzy do jej wartości najmniejszej. Uważa się, że macierze z dużą liczbą
uwarunkowania są źle uwarunkowane. Podać można inne sposoby obliczenia liczby uwarunkowanie, nie mniej niezależnie od sposobu obliczania im większa jest liczba uwarunkowania
tym gorzej uwarunkowana jest dana macierz współczynników.
W wielu zastosowaniach szczególne znaczenie mają tak zwane pasmowe układy równań liniowych. Charakteryzują się one tym, że macierz współczynników jest na przykład
macierzą pasmową np. trójdiagonalną. Oznacza to, że wszystkie niezerowe współczynniki
występują na diagonali głównej oraz na diagonalach znajdujących się bezpośrednio pod nią i
nad nią. Innym przykładem mogą być układy równań z pięciodiagonalną macierzą współczynników. Z omawianych dotychczas metod numerycznych takie pasmowe układy równań
otrzymujemy w przypadku interpolacji wielomianowymi funkcjami sklejanymi stopnia trzeciego. W takich przypadkach użytecznym jest stosowanie odpowiednio zmodyfikowanej metody eliminacji Gaussa, w której zanim zostanie przeprowadzony krok eliminacji zmiennych
element główny jest skalowany w taki sposób, aby wszystkie współczynniki na diagonali
głównej były równe jeden. Problem ten ilustruje kolejny przykład 6.6.
Przykład 6.6.
Stosując metodę eliminacji Gaussa rozwiązać następujący układ czterech równań liniowych:
2 x1 − x 2
= 1,
− x1 + 2 x 2 − x 3
= 0,
− x 2 + 2 x 3 − x 4 = 0,
− x 3 + 2 x 4 = 1.
Rozwiązanie
Na początek przeprowadzamy skalowanie pierwszego równania w taki sposób, aby
współczynnik występujący na diagonali głównej był równy jeden. W tym celu dzielimy
wszystkie współczynniki pierwszego równania przez a11 otrzymując:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 177
2008-02-21
Strona 178 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
1
x2
2
− x1 + 2 x 2 − x 3
x1 −
1
,
2
= 0,
=
− x 2 + 2 x 3 − x 4 = 0,
− x 3 + 2 x 4 = 1.
Następnie używając pierwszego równania eliminujemy z równania drugiego zmienną
x1. W efekcie uzyskujemy układ równań:
x1 −
1
1
x2
= ,
2
2
1
3
x2 − x3
= ,
2
2
− x 2 + 2 x 3 − x 4 = 0,
− x 3 + 2 x 4 = 1.
Dokonujemy transformacji drugiego równania w taki sposób, aby współczynnik przy x2
był równy jeden, otrzymując:
x1 −
1
,
2
1
2
x2 − x3
= ,
3
3
− x 2 + 2 x 3 − x 4 = 0,
1
x2
2
=
− x 3 + 2 x 4 = 1.
Korzystając z równania drugiego eliminujemy z równania trzeciego zmienną x2 otrzymując:
x1 −
1
,
2
1
2
x2 − x3
= ,
3
3
1
4
x3 − x4 = ,
3
3
− x 3 + 2 x 4 = 1.
1
x2
2
=
Modyfikujemy teraz równanie trzecie:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 178
2008-02-21
Strona 179 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
x1 −
1
x2
2
1
,
2
2
1
x2 − x3
= ,
3
3
1
3
x3 −
x4 = ,
4
4
− x 3 + 2 x 4 = 1.
=
Eliminujemy zmienną x3 z równania czwartego:
x1 −
1
x2
2
1
,
2
2
1
x2 − x3
= ,
3
3
3
1
x3 −
x4 = ,
4
4
5
5
x4 = .
4
4
=
Przeprowadzamy transformację ostatniego czwartego równania:
x1 −
1
,
2
1
2
x2 − x3
= ,
3
3
1
3
x3 −
x4 = ,
4
4
x 4 = 1.
1
x2
2
=
Stosując kolejne podstawienia obliczamy:
x4 = 1, x3 = 1, x2 = 1, x1 = 1.
■
W przypadku pasmowego układu równań z trójdiagonalną macierzą współczynników
wygodniej jest przechowywać współczynniki nie w n × n wymiarowej macierzy A, ale w
trzech niezależnych wektorach: wektorze d zawierającym elementy diagonali głównej (ang.
diagonal elements), wektorze a zawierającym elementy znajdujące się powyżej diagonali
głównej (ang. above) oraz wektorze b zawierającym elementy znajdujące się poniżej diagonali głównej (ang. below). Przy tej konwencji zapisu elementy b1 oraz an są równe zero. Wyrazy
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 179
2008-02-21
Strona 180 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
wolne zapisane są natomiast w wektorze r (ang. right-hand side). Przy takim sposobie zapisu
danych ograniczyliśmy ilość pamięci potrzebnej na zapamiętanie współczynników równań z
n2 na 3n.
Przy przyjętej konwencji, trójdiagonalny układ równań zapisujemy w postaci:
d 1 x1 + a 1 x 2
= r1 ,
b2 x1 + d 2 x 2 + a 2 x 3
= r2 ,
b3 x 2 + d 3 x 3 + a 3 x 4
L
= r3 ,
(6.17)
bn −1 x n − 2 + d n −1 x n −1 + a n −1 x n = rn −1 ,
bn x n −1 + d n x n
= rn −1 .
Wydajny algorytm stosowany do rozwiązania trójdiagonalnego układu równań stworzony na bazie metody eliminacji Gaussa występuje często w literaturze pod nazwą algorytmu Thomasa. Wykorzystuje on fakt, że elementy diagonali głównej są równe jeden oraz wy-
korzystuje specyficzną (trzy niewiadome w każdym równaniu) postać tego układu równań do
minimalizacji ilości koniecznych do przeprowadzenia operacji arytmetycznych. Algorytm ten
zapisać można jako ciąg następujących wyrażeń:
Przekształcamy pierwsze równanie:
a1 =
a1
,
d1
(6.18)
r
r1 = 1 .
d1
Kolejne równania j = 2, 3, ..., n-1:
t = d j − b j a j −1 ,
aj =
rj =
aj
t
,
(6.19)
r j − b j r j −1
t
,
dla j = 2,3, K , n − 1.
Ostanie równanie n:
rn =
rn − bn rn −1
.
d n − bn a n −1
(6.20)
Rozwiązanie uzyskujemy w ciągu obliczeń:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 180
2008-02-21
Strona 181 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
x n = rn ,
x j = r j − a j x j +1 ,
dla j = n − 1, n − 2, K ,1.
(6.21)
Algorytm Thomasa wymaga, aby d1 ≠ 0 oraz d i − bi a i −1 ≠ 0 dla każdego i = 2, 3, ..., n.
W wielu praktycznych zastosowaniach wymóg ten jest spełniony (na przykład w przypadku
omawianych funkcji spline). Dodatkową korzyścią tej metody jest to, że całkowita ilość mnożeń i dzieleń wymagana przez ten algorytm jest stosunkowo niewielka i wynosi dla pierwszego równania dwa dzielenia, dla każdego z następnych n – 2 równań po dwa dzielenia i mnożenia oraz dla ostatniego równania 2 mnożenia i 1 dzielenie. W sumie ilość koniecznych do
przeprowadzenia mnożeń i dzieleń wynosi:
5 + 4(n − 2 ) = 4n − 3 .
(6.22)
6.2. Metody iteracyjne rozwiązywania układów równań liniowych
Klasyczne metody iteracyjne rozwiązywania układów równań liniowych danych w postaci macierzowej:
Ax = b
(6.23)
bazują na transformacji tego układu równań do układu równoważnego:
x (k ) = Cx (k −1) + d, k = 1,2, L .
(6.24)
Wynika stąd, że wychodząc z początkowego przybliżenia x(0) generujemy, korzystając z
równania (6.24) kolejne przybliżenia x(1), x(2), ... . Metody takie zakwalifikować można do
wcześniej omawianej metody iteracji prostej zastosowanej do rozwiązywania równań nieliniowych.
Metodę iteracyjną rzadko wykorzystuje się do rozwiązywania niewielkich układów
równań liniowych. Wynika to z dużego nakładu czasu (dużej liczby iteracji) koniecznego do
uzyskania rozwiązania o porównywalnej dokładności, jaką uzyskujemy stosując metody dokładne takie jak metoda eliminacji Gaussa. Natomiast w przypadku dużych układów równań z
dużą liczbą zerowych współczynników metody iteracyjne są bardzo użyteczne. Sytuacja taka
szczególnie często występuje w przypadku numerycznego rozwiązywania równań różniczkowych zarówno zwyczajnych jak i cząstkowych.
W literaturze metod numerycznych opisanych jest kilka różnych metod iteracyjnych
rozwiązywania układów równań liniowych. Najbardziej popularne to metody Jacobiego,
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 181
2008-02-21
Strona 182 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
Gaussa – Seidlera oraz SOR (ang. successive overrelaxation). Metoda Jacobiego oraz Gaus-
sa – Seidlera są do siebie bardzo podobne. Różnica pomiędzy nimi polega jedynie na sposobie potraktowania zmiennych po prawej stronie układu równań (6.24). W metodzie SOR natomiast bazuje się na metodzie Gaussa – Seidlera oraz stosuje się kombinację wypukłą wcześniejszych rozwiązań.
Duże znaczenie w obliczeniach iteracyjnych ma przyjęcie odpowiedniego kryterium
przerwania obliczeń. Najprostsza jest analiza kolejnych przybliżeń i przyjęcie, że jeżeli błąd
względny kolejnych przybliżeń jest mniejszy od pewnej zadanej małej liczby ε to obliczenia
można przerwać. Ponieważ układ równań jest wielowymiarowy i rozwiązania są w postaci
wektorów do takiego porównania zastosować należy odpowiednią normę wektorową. Przyjmując, że jest to norma nieskończona kryterium przerwania obliczeń przyjmie postać:
x (k ) − x (k −1)
x
(k )
∞
≤ε ,
(6.25)
∞
gdzie ε jest pewną małą liczbą będącą dokładnością obliczeń.
Celem wprowadzenia w zagadnienie przeanalizujmy następujący przykład 6.7.
Przykład 6.7.
Dany jest układ równań liniowych typu Ax = b w postaci:
E1 : 10 x1 −
x2 + 2 x3
E 2 : − x1 + 11x 2 −
= 6,
x 3 + 3x 4 = 25,
E 3 : 2 x1 − x 2 + 10 x 3 − x 4 = −11,
E4 :
3x 2 −
x 3 + 8 x 4 = 15.
Znaleźć jego rozwiązanie stosując metodę iteracyjną daną równaniem (6.24). Jako
punkt startowy przyjąć x (0 ) = (0, 0, 0, 0) . Rozwiązanie dokładne x = (1, 2, − 1, 1) .
T
T
Rozwiązanie
Układ równań typu Ax = b należy przekształcić do postaci x = Cx + d. W tym celu z
równania E1 wyznaczamy zmienną x1, z równania E2wyznaczamy zmienną x2, E3 wyznaczamy zmienną x3 oraz z E4 wyznaczamy zmienną x4. Otrzymujemy w ten sposób następujący
układ równań:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 182
2008-02-21
Strona 183 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
1
1
3
x2 − x3
+ ,
10
5
5
1
1
3
25
x2 =
x1
+ x3 − x4 + ,
11
11
11
11
1
1
1
11
x 3 = − x1 +
x2
+
x4 − ,
5
10
10
10
3
1
15
x4 =
− x2 + x3
+ .
8
8
8
x1 =
Jak stąd wynika macierz C oraz wektor d mają postać:
1
1
⎤
⎡
0
0 ⎥
−
⎢
10
5
⎢ 1
1
3⎥
0
− ⎥
⎢
11
11⎥,
C = ⎢ 11
1 ⎥
⎢− 1 1
0
⎢ 5 10
10 ⎥
⎥
⎢
3 1
0 ⎥
⎢ 0 −
8 8
⎦
⎣
⎡ 3 ⎤
⎢ 5 ⎥
⎢ 25 ⎥
⎥
⎢
11
⎥.
⎢
d=
⎢ − 11 ⎥
⎢ 10 ⎥
⎢ 15 ⎥
⎥
⎢
⎣ 8 ⎦
Korzystając z punktu startowego obliczamy pierwsze przybliżenie poszukiwanego rozwiązania otrzymując:
1 (0 ) 1 (0 )
3
x2 − x3
+ = 0.6000,
10
5
5
1 (0 )
1
3
25
=
x1
+ x 3(0 ) − x 4(0 ) +
= 2.2727,
11
11
11
11
1
1 (0 )
1 (0 ) 11
= − x1(0 ) +
x2
+
x4 −
= −1.100,
5
10
10
10
3
1
15
=
− x 2(0 ) + x 3(0 )
+ = 1.8750.
8
8
8
x1(1) =
x 2(1)
x 3(1)
x 4(1)
Kolejne przybliżenia x (k ) = (x1(k ) , x 2(k ) , x 3(k ) , x 4(k ) ),
k = 1,2,3, K Podane są w tabeli 6.1.
Tabela 6.1. Kolejne przybliżenia rozwiązywanego metodą iteracyjną w przykładzie 6.7 układu równań.
k
0
1
2
x1(k )
0
0.6000 1.0473 0.9326 1.0152 0.9890 1.0032 0.9981 1.0006 0.9997 1.0001
x 2(k )
0
2.2727 1.7159 2.0533 1.9537 2.0114 1.9922 2.0023 1.9987 2.0004 1.9998
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
3
4
5
Strona 183
6
7
8
9
10
2008-02-21
Strona 184 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
0.8052 1.0493 0.9681 1.0103 0.9945 1.0020 0.9990 1.0004 0.9998
x 3(k )
0
-1.100
x 4(k )
0
1.8750 0.8852 1.1309 0.9739 1.0214 0.9944 1.0036 0.9989 1.0006 0.9998
Jako kryterium przerwania obliczeń wykorzystujemy równanie (6.25). Dla 10 – tej iteracji otrzymamy:
x (10 ) − x (9 )
x (10 )
∞
∞
=
8.0 × 10 − 4
< 10 − 3 .
1.9998
Porównują uzyskane rozwiązanie z rozwiązaniem dokładnym otrzymamy:
x (10 ) − x
∞
= 0.0002 .
■
Sposób postępowania przedstawiony w przykładzie 6.7 nazywany jest metodą Jacobiego. Podstawą tej metody jest, przy założeniu, że aii ≠ 0, rozwiązanie każdego z i równań
wyjściowego układu Ax = b ze względu na zmienną xi, otrzymując układ równań w postaci:
n
⎛ a ij ⎞ bi
x i = ∑ ⎜⎜ −
xj ⎟+
,
a ii ⎟⎠ a ii
j =1, ⎝
j ≠i
dla i = 1,2, K , n ,
(6.26)
a następnie wygenerowanie kolejnych przybliżeń xi(k) korzystając z rozwiązania poprzedniego
x(k) dla k ≥ 1 stosując równanie:
n
⎛ a ij (k −1) ⎞ bi
x i(k ) = ∑ ⎜⎜ −
x j ⎟⎟ +
,
a ii
a
j =1, ⎝
ii
⎠
j ≠i
dla i = 1,2, K , n ,
(6.27)
Metodę iteracyjną Jacobiego rozpatrywać można jako metodę, w której wyjściową macierz współczynników A podzielona trzy części: macierz D złożoną z elementów znajdujących się na diagonali głównej macierzy A (ang. Diagonal matrix), macierz L zawierającą
elementy macierzy A znajdujące się pod diagonalą główną (ang. Lower triangular matrix)
oraz macierz U zawierającą elementy macierzy A znajdujące się nad diagonalą główną (ang.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 184
2008-02-21
Strona 185 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
Upper triangular matrix). Formalnie, korzystając z powyższej notacji, macierz A zapisać
można w postaci:
⎡ a11
⎢a
A = ⎢ 12
⎢ M
⎢
⎣ a n1
a12
a 22
M
a n2
⎡a11
⎢0
=⎢
⎢ M
⎢
⎣0
0
a 22
M
0
=
D
K a1n ⎤
K a 2n ⎥
⎥=
O M ⎥
⎥
K a nn ⎦
0
K
K 0 ⎤ ⎡ 0
⎢
⎥
0
K
−a
K 0
⎥ − ⎢ 12
O
O
O M ⎥ ⎢ M
⎥ ⎢− a
K a nn ⎦ ⎣ n1 K − a n ,n −1
−L
0⎤ ⎡0 − a12
0⎥ ⎢ 0
0
⎥−⎢
M⎥ ⎢M
M
⎥ ⎢
0⎦ ⎣ 0
0
− U.
K − a1n ⎤
O
M ⎥
⎥ = (6.28)
O − a n −1,n ⎥
⎥
K
0 ⎦
Tak więc wyjściowe równanie
Ax = b
(6.23)
przekształcamy do postaci:
(D − L − U )x = Dx − (L + U )x = b ,
(6.29)
z którego uzyskujemy:
Dx = (L + U )x + b ,
(6.30)
oraz, ponieważ macierz D jest macierzą diagonalną o wymiarze n × n oraz niezerowych wartościach elementów na diagonali głównej, czyli jest macierzą nieosobliwą, otrzymujemy:
x = D −1 (L + U )x + D −1 b .
(6.31)
Ostatecznie metodę Jacobiego przedstawić można w postaci równania rekurencyjnego:
x (k ) = D −1 (L + U )x (k −1) + D −1 b,
dla k = 1,2, L .
(6.32)
Podstawowym warunkiem zastosowania metody Jacobiego jest aii ≠ 0. Jeżeli tak nie jest
to macierz D jest macierzą osobliwą i procesu obliczeniowego nie można prowadzić. W takim
przypadku należy dokonać przestawienia równań. Jeżeli nie uda się uzyskać takiej postaci
układu, aby warunek ten był spełniony, to układ równań nie ma jednoznacznego rozwiązania.
Interpretację geometryczną przebiegu metody Jacobiego przedstawiono w przykładzie 6.8.
Istotne znaczenie ma zbieżność metody Jacobiego. Można pokazać, że warunkiem dostatecznym na to, aby metoda iteracyjna Jacobiego zastosowana do układu równań liniowych
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 185
2008-02-21
Strona 186 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
AX = b była zbieżna do rozwiązania, jest to, że macierz układu równań A jest macierzą z
dominującą diagonalą główną. Natomiast warunkiem koniecznym i dostatecznym zbieżności
metody iteracyjnej Jacobiego jest to, aby największa wartość własna macierzy przejścia (iteracyjnej) C była mniejsza od jeden.
Przykład 6.8.
Stosując metodę Jacobiego rozwiązać następujący układ dwóch równań liniowych z
dwiema niewiadomymi:
2 x + y = 6,
x + 2 y = 6.
Jako wartości startowe przyjąć x
(0 )
⎛1
=⎜
⎝2
T
1⎞
⎟ .
2⎠
Rozwiązanie
Chcąc skorzystać z metody Jacobiego wyjściowy układ równań przekształcamy do postaci:
1
y + 3,
2
1
y = − x + 3.
2
x=−
Stąd pierwsze przybliżenie poszukiwanego rozwiązania wynosi:
1 (0 )
1
11
y + 3= − + 3= ,
2
4
4
1
1
11
= − x (0 ) + 3 = − + 3 = .
2
4
4
x (1) = −
y (1)
Korzystając z tego rozwiązania obliczamy drugie przybliżenie:
13
11
1 (1)
y + 3= − + 3= ,
8
8
2
1
11
13
= − x (1) + 3 = − + 3 = .
2
8
8
x (2 ) = −
y (2 )
Kolejne, trzecie, przybliżenie obliczamy korzystając z przybliżenia drugiego otrzymując:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 186
2008-02-21
Strona 187 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
35
13
1 (2 )
y + 3= − + 3= ,
16
16
2
1
13
35
= − x (2 ) + 3 = − + 3 = .
2
16
16
x (3 ) = −
y (3 )
Interpretację geometryczną kolejnych rozwiązań przedstawiono na rysunku 6.5.
5
4
y
y(1) 3
y(2)
y(0)
2
1
0
0
x(0)
1
x(2)
x
2 x(3)
x(1)
3
Rysunek 6.5. Interpretacja geometryczna kolejnych rozwiązań uzyskanych metodą Jacobiego.
Rozwiązanie układu równań z przykładu 6.8.
■
Macierz układu równań rozwiązywanego w przykładzie 6.8 jest macierzą o dominującej
diagonali głównej. Dodatkowo wartości własne układu równań iteracyjnych z tego przykładu
wynoszą 0.28868 oraz –0.28868. Jak przeprowadzone obliczenia pokazują metoda ta jest
zbieżna.
Przykład 6.9.
Stosując metodę iteracyjną Jacobiego rozwiązać układ równań liniowych z przykładu
6.8 po przestawieniu kolejności równań:
x + 2 y = 6,
2 x + y = 6.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 187
2008-02-21
Strona 188 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
Jako wartości startowe przyjąć x
(0 )
⎛1
=⎜
⎝2
T
1⎞
⎟ .
2⎠
Rozwiązanie
Przestawienie równań spowodowało, że macierz A tego układu nie jest już macierzą z
dominującą diagonalą główną. Po przekształceniach otrzymać z niego można równania iteracyjne w postaci:
x = −2 y + 6,
y = −2 x + 6.
Wykorzystując program MathCad obliczyć możemy, że wartości własne macierzy iteracyjnej dla tego układu równań wynoszą: 3.4641 oraz –3.4641, czyli są dużo większe od
jeden. Wychodząc z punktu startowego x(0) w pierwszej iteracji otrzymamy następujące przybliżenia:
x (1) = −2 y (0 ) + 6 = 5,
y (1) = −2 x (0 ) + 6 = 5.
Prowadząc kolejne iteracje stwierdzić można, że metoda jest rozbieżna, a kolejne przybliżenia x oraz y są coraz większymi liczbami na przemian dodatnimi i ujemnymi.
■
W metodzie Jacobiego kolejne przybliżenia obliczamy wykorzystując wszystkie wartości z poprzedniego przybliżenia równocześnie. Analizując natomiast przedstawione tu przykłady zauważyć można, że na przykład obliczając poprawioną wartość zmiennej x2 znana jest
już poprawiona wartość zmiennej x1; obliczając poprawioną wartość zmiennej x3 znane są
poprawione w tym kroku iteracyjnym wartości zmiennej x1 oraz x2, i tak dalej. Oznacza to, że
w k – tym kroku iteracyjnym obliczając xi(k) współrzędną wektora x(k) dla i > 1 znane są
współrzędne x1(k), x2(k), ..., xi-1(k), W metodzie Jacobiego wartości te nie są wykorzystywane.
Modyfikacja metody Jacobiego polegająca na wykorzystaniu wszystkich wcześniej wyliczonych przybliżeń znana jest w literaturze pod nazwą metody Gaussa – Seidela.
Przykład 6.10.
Korzystając z metody Gaussa – Seidela rozwiązać układ równań z przykładu 6.7.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 188
2008-02-21
Strona 189 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
E1 : 10 x1 −
x2 + 2 x3
E 2 : − x1 + 11x 2 −
= 6,
x 3 + 3x 4 = 25,
E 3 : 2 x1 − x 2 + 10 x 3 − x 4 = −11,
3x 2 −
E4 :
x 3 + 8 x 4 = 15.
Rozwiązanie
Powyższy układ równań pozwalający wyliczyć kolejne przybliżenia k = 1, 2, ... poszukiwanego rozwiązania przedstawić można w postaci:
1 (k −1)
x2
10
x1(k ) =
1 (k )
x1
11
1
1 (k )
= − x1(k ) +
x2
5
10
3
=
− x 2(k )
8
x 2(k ) =
x 3(k )
x 4(k )
1 (k −1)
x3
5
1
3
+ x 3(k −1) − x 4(k −1)
11
11
1
+ x 4(k −1)
10
1
+ x 3(k )
8
−
3
+ ,
5
25
+ ,
11
11
− ,
10
15
+ .
8
Wychodząc z punktu startowego x (0 ) = (0, 0, 0, 0) obliczamy kolejne przybliżeT
nia. Wyniki obliczeń podano w tabeli 6.2.
Tabela 6.2. Kolejne przybliżenia rozwiązywanego metodą iteracyjną Gaussa - Seidela układu
równań z przykładu 6.8.
k
0
1
2
3
4
5
x1(k )
0
0.6000
1.0300
1.0065
1.0009
1.0001
x 2(k )
0
2.3272
2.370
2.0036
2.0003
2.0000
x 3(k )
0
-0.9873 -1.0140 -1.0025 -1.0003 -1.0000
x 4(k )
0
0.8789
0.9844
0.9983
0.9999
1.0000
Jako kryterium przerwania obliczeń wykorzystujemy równanie (6.25). Dla 5 – tej iteracji otrzymamy:
x (5 ) − x ( 4 )
x (5 )
∞
∞
=
8.0 × 10 − 4
= 4 × 10 − 4 ,
2.0000
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 189
2008-02-21
Strona 190 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
co przy zastosowanej dokładności obliczeń jest akceptowalną dokładnością.
■
Korzystając z wprowadzonych w równaniu (6.28) oznaczeń, w zapisie macierzowym
metodę iteracyjną Gaussa – Seidela przedstawić można w sposób następujący:
(D − L − U )x = (D − L )x − Ux = b ,
(6.29)
(D − L )x (k ) = Ux (k −1) + b ,
(6.33)
stąd
oraz ostatecznie:
x (k ) = (D − L ) Ux (k −1) + (D − L ) b,
−1
−1
k = 1,2, K .
(6.34)
Metoda Gaussa – Seidela jest szybciej zbieżna od metody Jacobiego. Warunkiem jej
zastosowania jest nieosobliwość macierzy D – L. Oznacza to, że zachodzić musi dla wszystkich współczynników leżących na diagonali głównej aii ≠ 0, i = 1, 2, ..., n.
Korzystając z metody Jacobiego lub Gaussa – Seidela chcąc uzyskać odpowiednią dokładność rozwiązania wykonać należy iteracje, których liczba jest wprost proporcjonalna do
N2, gdzie N jest liczbą rozwiązywanych równań. W każdej iteracji wykonać należy O(N2)
mnożeń i dzieleń. Jak stąd wynika metody iteracyjne są bardziej czasochłonne od metod
bazujących na eliminacji Gaussa.
6.3. Rozwiązywanie układów równań liniowych w programie MathCad
Korzystając z programu MathCad układy równań liniowych rozwiązać możemy albo
wykorzystując funkcje macierzowe, albo też korzystając z funkcji given – find. W przypadku
funkcji macierzowych najczęściej korzystać będziemy z odwracania macierzy. Inną możliwością jest zastosowanie wbudowanej funkcji rref(A) (ang. reduced row echelon form), która
transformuje daną macierz do macierzy trójkątnej górnej. W tym celu wykorzystywana jest
nie przedstawiona w tym wykładzie modyfikacja metody eliminacji Gaussa występująca pod
nazwą metody Gaussa – Seidela.
Korzystając z programu MathCad, w zależności od zastosowanej normy macierzowej,
liczbę uwarunkowania obliczyć możemy na cztery różne sposoby. Pierwsza z funkcji
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 190
2008-02-21
Strona 191 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
cond1(A) używa normy L1; druga z funkcji cond2(A) używa normy L2; funkcja conde(A)
używa normy Euklidesowej natomiast funkcja condi(A) używa normy nieskończonej.
Poza tym liczbę uwarunkowania obliczyć możemy jako stosunek największej do najmniejszej wartości własnej macierzy A. W tym celu wykorzystać możemy wbudowaną w
program MathCad funkcję eigenvals(A).
6.4. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
1. Wykorzystując metodę eliminacji Gaussa rozwiązać podane układy równań liniowych.
Założyć, że obliczenia prowadzone są w arytmetyce z zaokrągleniem do dwóch cyfr znaczących. Nie należy dokonywać wyboru elementu głównego. Dokładne rozwiązanie każdego z układów równań wynosi: x1 = 1, x2 = -1, x3 = 3.
4 x1 − x 2 + x 3 = 8,
x1 + 2 x 2 + 4 x 3 = 11,
a) 2 x1 + 5 x 2 + 2 x 3 = 3,
b) 4 x1 − x 2 + x 3 = 8,
x1 + 2 x 2 + 4 x 3 = 11.
2 x1 + 5 x 2 + 2 x 3 = 3.
4 x1 + x 2 + 2 x 3 = 9,
2 x1 + 4 x 2 − x 3 = −5,
c) 2 x1 + 4 x 2 − x 3 = −5,
d) x1 + x 2 − 3x 3 = −9,
x1 + x 2 − 3x 3 = −9.
4 x1 + x 2 + 2 x 3 = 9.
2. `Wykorzystując metodę eliminacji Gaussa w wersji podstawowej i z wyborem elementu
głównego w wierszu rozwiązać następujące równania liniowe. Założyć, że obliczenia
prowadzone są w arytmetyce z zaokrągleniem do dwóch cyfr znaczących. Przeprowadzić
dyskusję otrzymanych wyników.
a)
0.001x + 2 y = 4
x + 2y = 5
b)
x + 2000 y = 4000
x+
2y =
5
c)
0.001x + 10 y = 30
x+ y= 5
d)
x + 1000 y = 3000
x+
y=
5
3. Korzystając z metody Jacobiego oraz Gaussa – Seidela rozwiązać iteracyjnie układy równań liniowych typu Ax = b:
⎡ 10 − 2 1 ⎤
a) A = ⎢ − 2 10 − 2⎥,
⎢
⎥
⎢⎣ − 2 − 5 10 ⎥⎦
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
⎡0⎤
b = ⎢12⎥
⎢ ⎥
⎢⎣18⎥⎦
⎡4 1 0 ⎤
b) A = ⎢1 3 − 1⎥,
⎢
⎥
⎢⎣1 0 2 ⎥⎦
Strona 191
⎡ 3⎤
b = ⎢ − 4⎥
⎢ ⎥
⎢⎣ 5 ⎥⎦
2008-02-21
Strona 192 z 246
Metody Numeryczne i Programowanie
Rozdział 6.
⎡ 5 −1 0 ⎤
c) A = ⎢ − 1 5 − 1⎥,
⎥
⎢
⎢⎣ 0 − 1 5 ⎥⎦
⎡9 ⎤
b=⎢ 4 ⎥
⎢ ⎥
⎢⎣ − 6⎥⎦
⎡ 8 1 − 1⎤
d) A = ⎢ − 1 7 − 2⎥,
⎥
⎢
⎢⎣ 2 1 9 ⎥⎦
⎡8⎤
b=⎢4⎥
⎢ ⎥
⎢⎣12⎥⎦
4.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 192
2008-02-21
Strona 193 z 246
Metody Numeryczne i Programowanie
Rozdział 7
Rozdział 7. Numeryczne metody rozwiązywania zagadnień początkowych dla równań różniczkowych zwyczajnych
Problem 7.1. Zbiornik z idealnym mieszaniem
Na rysunku 7.1. przedstawiono zbiornik z idealnym mieszaniem wypełniony cieczą o
objętości V [m3] zawierającej składnik A o stężeniu CA [mol/m3]. Do zbiornika dopływa strumień cieczy o natężeniu przepływu F0 [m3/s] zawierającej ten sam składnik A o stężeniu CA,0
[mol/m3]. Równocześnie z zbiornika odprowadzany jest strumień cieczy o natężeniu przepływu F [m3/s]. Obliczyć zmianę stężenia składnika A w strumieniu wypływającym F.
Fo(t), m3/s;
CA,0(t), mol/m3
V(t), m3;
CA(t), mol/m3
F(t), m3/s;
CA(t), mol/m3
Rysunek 7.1. Zbiornik z idealnym wymieszaniem.
Rozwiązanie
W związku z tym, że jest to zbiornik z idealnym mieszaniem, ciecz w nim zawarta jest
całkowicie jednorodna, co oznacza, że stężenie składnika A w wypływającym strumieniu F
jest takie samo jak w całej objętości zbiornika V.
W ogólnym przypadku bilans składnika A zapisać można następująco:
⎡szybkosc zmian (akumulacja)⎤ ⎡szybkosc dostarczania ⎤ ⎡szybkosc wyplywania ⎤
⎥ = ⎢skladnika A do zbiornika ⎥ − ⎢skladnika A z zbiornika⎥
⎢skladnika A w zbiorniku
⎦
⎦ ⎣
⎦ ⎣
⎣
Ilość składnika A dostarczana do zbiornika w strumieniu zasilającym w jednostce czasu wynosi:
F0 (t ) ⋅ C A,0 (t ),
m 3 mol mol
⋅
=
.
s m3
s
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 193
2008-02-21
Strona 194 z 246
Metody Numeryczne i Programowanie
Rozdział 7
Analogicznie, ilość składnika A wyprowadzana z zbiornika w strumieniu wypływającym w
jednostce czasu wynosi:
F (t ) ⋅ C A (t ),
m 3 mol mol
⋅
=
.
s m3
s
Natomiast ilość składnika A zawartego w roztworze znajdującym się w zbiorniku wynosi:
V (t ) ⋅ C A (t ), m 3 ⋅
mol
= mol
m3
Korzystając z tych zależności, w ogólnym przypadku, bilans składnika A w zbiorniku z idealnym mieszaniem zapisać można w postaci następującego równania:
d (V (t ) ⋅ C A (t ))
= F0 (t ) ⋅ C A,0 (t ) − F (t ) ⋅ C A (t )
dt
Jeżeli objętość cieczy w zbiorniku, natężenia przepływu strumieni zasilającego i wypływającego z zbiornika oraz stężenie składnika A w strumieniu zasilającym nie zmieniają się
w czasie, równanie to ma łatwe do uzyskania metodami analitycznymi rozwiązanie. W przeciwnym przypadku zastosować należy jedną z przedstawionych w tym rozdziale metod obliczeniowych.
■
Do rozwiązywania równań różniczkowych zwyczajnych (ODE, z ang. Ordinary Differential Equations) w przypadku zagadnienia początkowego wykorzystywane są wcześniej
przedstawione wzory do numerycznego różniczkowania.
Zakładamy, że dane jest równanie różniczkowe zwyczajne (ODE) w postaci:
y ′( x ) =
d
y ( x ) = f ( x, y ),
dx
x ∈ [a, b] ,
(7.1)
oraz, że dana jest wartość funkcji y(x) w punkcie x0, to znaczy:
y(x 0 ) = y 0 .
(7.2)
Naszym zadaniem jest znalezienie rozwiązania równania różniczkowego zwyczajnego z
zadanym warunkiem początkowym, czyli funkcji, która na zadanym przedziale [a, b] spełnia
zadane równanie różniczkowe (7.1) wraz z warunkiem początkowym (7.2).
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 194
2008-02-21
Strona 195 z 246
Metody Numeryczne i Programowanie
Rozdział 7
Podstawą wszystkich metod numerycznego rozwiązywania równań różniczkowych jest
podział przedziału [a, b], w którym poszukujemy rozwiązania, na n równych podprzedzia-
łów:
a = x 0 < x1 < x 2 < K < x n − 2 < x n −1 < x n = b ,
(7.3)
gdzie
x i +1 − x i = h =
b−a
,
n
i = 0,1, K n − 1
(7.4)
jest krokiem, z jakim aproksymujemy poszukiwane rozwiązanie. Podział (7.3) przedziału [a,
b] nazywamy siatką punktów.
Zadaniem stosowanych metod numerycznego rozwiązywania ODE jest znalezienie wartości aproksymowanych funkcji y(x) w zadanych punktach xi, i = 1, 2, ..., n, czyli znalezieniu
wartości yi = y(xi), i =1, 2, ..., n. Oznacza to, że jako rozwiązanie nie znajdujemy funkcji ciągłej aproksymującej nieznaną funkcję y(x) a jedynie jej dyskretną postać.
Najprostsze z stosowanych metod wykorzystują rozwinięcie nieznanej funkcji y(x) w
wielomian Taylora, a następnie wykorzystując to rozwinięcie obcięte do odpowiedniej liczby
wyrażeń poszukiwania rozwiązania. Najprostszą z tych metod jest metoda Eulera wykorzystująca wielomian pierwszego stopnia. Większą dokładność rozwiązania uzyskać w tym
przypadku można zwiększając stopień wykorzystywanego wielomianu Taylora. Wymaga to
jednakże obliczania wartości wyższych pochodnych. Metody wykorzystujące tę koncepcję
określane są mianem metod Taylora.
Inną ważną grupę metod rozwiązywania ODE stanowią tak zwane metody Rungego –
Kutty. Metody te są metodami dokładniejszymi od poprzednich. Zamiast pochodnych wyższych rzędów korzystają one z wartości funkcji y(x) w różnych punktach a następnie wyznaczają różne ich kombinacje celem znalezienia następnego punktu rozwiązania. Metody Taylo-
ra oraz Rungego – Kutty zaliczane są do metod jednokrokowych.
Trzecią grupę stanowią tak zwane metody wielokrokowe, które podzielić można na
metody jawne i metody niejawne. Określenie metody wielokrokowe oznacza, że do wyznaczenia kolejnego punktu stanowiącego rozwiązanie wykorzystuje się nie jeden wcześniej wyliczony punkt jak w metodach dwóch poprzednich grup, ale kilka takich punktów. Metody
niejawne z tej grupy są bardzo stabilnymi metodami, są one jednakże trudniejsze do nume-
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 195
2008-02-21
Strona 196 z 246
Metody Numeryczne i Programowanie
Rozdział 7
rycznego zastosowania od metod jawnych. Metody jawne i niejawne łączy się w metody
kombinowane, tak zwane metody predyktor – korektor.
7.1. Metody Taylora
Jak już wspomniano metody Taylora wykorzystują wielomian Taylora aproksymujący
zadaną funkcję y w punkcie x. Jedną z najprostszych metod z tej grupy jest metoda Eulera.
Przyjmijmy, że dane jest zadanie ODE w następującej postaci:
d
y (t ) = f (t , y ),
dt
y (a ) = y 0 .
a ≤ t ≤ b,
(7.5)
Przyjmujemy, że na przedziale [a, b] wyznaczona jest siatka równoodległych punktów
t0, t1, t2, ..., tn, takich, że
t i = a + ih,
h=
b−a
,
n
i = 0,1,2, K , n .
(7.6)
Zakładamy, że funkcja y(t) będąca rozwiązaniem zadania (7.5) jest różniczkowalna i ma
na przedziale [a, b] ciągłą pierwszą i drugą pochodną. Tak więc dla każdego i = 0, 1 ,2, ..., n-
1, y(ti+1) może być, korzystając z wielomianu Taylora, przedstawione w postaci:
y (t i +1 ) = y (t i ) + y ′(t i )(t i +1 − t i ) +
(t i +1 − t i )2
2
y ′′(ξ i )
(7.7)
gdzie ξi jest pewną liczbą z przedziału [ti, ti+1].
Korzystając z notacji h = ti+1 – ti, oraz z faktu, że y(t) spełnia równanie różniczkowe
(7.5), otrzymamy:
h
y (t i +1 ) = y (t i ) + hf (t i , y (t i )) +
2
2
y ′′(ξ i )
(7.7)
Metoda Eulera wynikająca z równania (7.7) pozwalająca na wyznaczenie kolejnych
aproksymacji yi ≈ y(ti) dla każdego i = 0, 2, ..., n-1, dana jest w formie następującego równa-
nia różnicowego:
w0 = y (a ),
(7.8)
wi +1 = wi + hf (t i , wi ),
Przykład 7.1 pokazuje zastosowanie metody Eulera do rozwiązywania ODE oraz jej interpretację geometryczną.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 196
2008-02-21
Strona 197 z 246
Metody Numeryczne i Programowanie
Rozdział 7
Przykład 7.1.
Stosując metodę Eulera znaleźć aproksymację rozwiązania następującego problemu
ODE z wartością początkową:
y ′ = − y + t + 1,
t ∈ [0,1],
y (0 ) = 1 .
Przyjąć, że przedział [0, 1] podzielony jest na n = 10 podprzedziałów. Porównać uzyskane rozwiązanie z rozwiązaniem dokładnym:
y = t + e −t .
Rozwiązanie
Ponieważ n = 10, to h = 0.1 oraz ti = 0.1 × i, i = 0, 1, ..., 10. Korzystając z równania rekurencyjnego (7.8), w którym uwzględniamy, że f(t,y) = -y + t +1 otrzymamy:
y 0 = 1,
y i +1 = y i + h ⋅ f (t i , y i ) = y i + h ⋅ (− y i + t i + 1) =
= y i + 0.1 ⋅ (− y i + 0.1 ⋅ i + 1) =
= 0.9 ⋅ y i + 0.01 ⋅ i + 0.1
dla i = 0, 1, 2, ..., 9.
Porównanie aproksymowanych przez powyższe równanie rekurencyjne wartości w
punktach ti z wartościami dokładnymi przedstawiono w tabeli 7.1.
Tabela 7.1. Porównanie wartości aproksymowanych z dokładnym rozwiązaniem równania
y′ = − y + 7 + 1 . Przyjęto krok całkowania h = 0.1. ε = yi − y (ti ) .
ti
yi
y(ti)
ε
Oszacowanie błędu
0.0
1.000000
1.000000
0.000
0.000
0.1
1.000000
1.004837
4.837e-3
5.259e-3
0.2
1.010000
1.018731
8.731e-3
1.107e-2
0.3
1.029000
1.040818
1.182e-2
1.749e-2
0.4
1.056100
1.07032
1.422e-2
2.459e-2
0.5
1.090490
1.106531
1.604e-2
3.244e-2
0.6
1.131441
1.148812
1.737e-2
4.111e-2
0.7
1.178297
1.196585
1.829e-2
5.069e-2
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 197
2008-02-21
Strona 198 z 246
Metody Numeryczne i Programowanie
Rozdział 7
0.8
1.230467
1.249329
1.886e-2
6.128e-2
0.9
1.287420
1.30657
1.915e-2
7.298e-2
1.0
1.348678
1.367879
1.920e-2
8.591e-2
Analiza wyników przedstawionych w tabeli 7.1 pokazuje, że błąd bezwzględny w kolejnych krokach całkowania nieznacznie rośnie w miarę wzrostu ti.
y
(t1,y(t1))
y(t1)
(t1,w 1)=(a+h,α +hf(a,α))
y(a)
(t0,w 0)=(a,y(a))
t
t0=a
t1
Rysunek 7.1. Interpretacja geometryczna jednego kroku całkowania metodą Eulera.
1.09
y(x)
1.07
1.05
1.03
1.01
0.99
0
0.1
0.2
0.3
0.4
0.5
x
Rysunek 7.2. Porównanie rozwiązania dokładnego oraz przybliżonego uzyskanego metodą
Eulera. Rozwiązywane równanie y ′ = − y + t + 1,
t ∈ [0,1],
y (0 ) = 1 .
■
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 198
2008-02-21
Strona 199 z 246
Metody Numeryczne i Programowanie
Rozdział 7
Przykład 7.1. pokazuje, że wzrost błędu aproksymacji jest w kolejnych krokach całkowania kontrolowany. Jest to charakterystyczna cecha metody Eulera wynikająca z jej stabilności. Oczekiwać możemy, że błędy powstające w efekcie zaokrągleń jakkolwiek rosną kumulując się z kroku na krok, to wzrost ten jest jedynie liniowy.
Oszacowanie błędu metody Eulera wynika z następującego twierdzenia:
Twierdzenie 7.1.
Niech y(t) będzie jednoznacznym rozwiązaniem równania różniczkowego
d
y (t ) = f (t , y ),
dt
a ≤ t ≤ b,
y (a ) = y 0 ,
(7.9)
oraz w1, w2, ..., wn będą aproksymacjami jego rozwiązania generowanymi przez metodę Eulera. Jeżeli funkcja f spełnia warunek Lipschitza z stałą L w obszarze
D = {(t , y ) : a ≤ t ≤ b,−∞ < y < ∞} ,
(7.10)
oraz istnieje taka stała M, że
y ′′(t ) ≤ M dla każdego t ∈ [a, b] ,
(7.11)
to dla każdego i = 0, 1, 2, ..., n zachodzi:
y (t i ) − wi ≤
(
)
hM L (ti −a )
e
−1 .
2L
(7.12)
■
Wydawać by się mogło, że największą słabością tego twierdzenia jest to, że chcąc oszacować błąd metody musimy znać drugą pochodną rozwiązania. Jednakże należy zauważyć, że
jeżeli pochodne ∂f/∂t oraz ∂f/∂y istnieją, to:
y ′′(t ) =
dy ′
(t ) = df (t , y( y )) = ∂f (t , y( y )) + ∂f (t , y( y )) ⋅ f (t , y( y )) ,
dt
dt
∂t
∂y
(7.13)
i odpowiednie oszacowanie z góry drugiej pochodnej otrzymać można beż konieczności poznania funkcji y(t).
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 199
2008-02-21
Strona 200 z 246
Metody Numeryczne i Programowanie
Rozdział 7
Przykład 7.2.
Oszacować błąd metody Eulera zastosowanej do rozwiązywania równania różniczkowego z przykładu 7.1,
y ′ = − y + t + 1,
t ∈ [0,1],
y (0 ) = 1 .
Rozwiązanie
Funkcja f (t , y ) = − y + t + 1 . Stąd ∂f/∂y = -1 i na podstawie twierdzenia (10.12) możemy
stwierdzić, że funkcja f spełnia warunek Lipschitza z stałą L = 1. Ponieważ znamy rozwiązanie tego równania y = t + e − t , to możemy obliczyć:
y ′′(t ) = e − t ≤ e −0 = 1 dla każdego t ∈ [0,1] .
Korzystając z nierówności (7.8), gdzie h = 0.1, M = L = 1 otrzymamy oszacowanie błędu:
(
)
y i − wi ≤ 0.05 e ti − 1 .
Uzyskane oszacowania błędów podano w tabeli 7.1. Porównanie ich z rzeczywistymi błędami
pokazuje, że otrzymane z nierówności (7.8) oszacowania są większe od wartości rzeczywistych.
■
Podstawowym wnioskiem wynikającym z twierdzenia (7.1) jest to, że błąd metody Eulera zależy liniowo od wielkości kroku całkowania h. Konsekwencją tego jest oczekiwanie, że
jeżeli będziemy zmniejszać krok całkowania h, to powinniśmy uzyskiwać coraz dokładniejsze
aproksymacje.
Z drugiej strony, jeżeli krok całkowania maleje, to konieczne jest wykonanie większej
ilości obliczeń, co wziąwszy pod uwagę arytmetykę maszynową, prowadzić powinno do powstania większych błędów zaokrągleń. Chcąc przeanalizować ten problem, przyjmijmy, że
zamiast metody Eulera z równaniami różnicowymi:
w0 = y (a ),
(7.14)
wi +1 = wi + hf (t i , wi ),
posługujemy się jej wersją zmodyfikowaną:
u0 = α~,
(7.15)
ui +1 = ui + hf (ti , ui ) + δ i ,
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 200
2008-02-21
Strona 201 z 246
Metody Numeryczne i Programowanie
Rozdział 7
gdzie α~ jest maszynową reprezentacją wartości początkowej, a δi oznacza błędy zaokrąglenia
związane z obliczeniem u i +1 = u i + hf (t i , y i ) . Dla tak sformułowanego zadania pokazać można następujące oszacowanie błędu metody Eulera uwzględniające przeprowadzanie obliczeń
w zmiennopozycyjnej arytmetyce maszynowej.
Twierdzenie 7.2.
Niech y(t) będzie jednoznacznym rozwiązaniem równania różniczkowego:
d
y (t ) = f (t , y ),
dt
a ≤ t ≤ b,
y (a ) = y 0 ,
(7.16)
a u0, u1, u2, ..., un będą aproksymacjami otrzymanymi z wykorzystaniem metody (7.15).
Jeżeli δ < δ dla każdego i = 0, 1, ..., n, gdzie δ = α~ − y oraz spełnione są założenia
i
0
0
twierdzenia (7.1), to dla każdego i = 0, 1, ..., n zachodzi:
y (t i ) − u i ≤
1 ⎛ hM δ ⎞ L (ti − a )
− 1 + δ 0 e L (t i − a ) .
+ ⎟e
⎜
L⎝ 2
h⎠
(
)
(7.17)
■
Jak z twierdzenia (7.2) wynika oszacowanie błędu nie jest już liniowe ze względu na
krok h. Dodatkowo z faktu, że
⎛ hM δ ⎞
lim⎜
+ ⎟ = ∞,
h →0
h⎠
⎝ 2
(7.18)
oczekiwać należy dużych błędów dla niewielkich wartości kroku h.
Korzystając z typowych metod rachunkowych obliczyć można, że minimalny krok całkowania w metodzie Eulera wynosi:
h=
2δ
.
M
(7.19)
Zmniejszając krok całkowania poniżej wartości wyliczonej z równania (7.19) oczekiwać należy gwałtownego wzrostu błędu metody Eulera. Pamiętać jednakże należy, że δ jest
małą liczbą oznaczającą dokładność maszynową. Stąd przypadki, w których powyższe ograniczenia zadziała są bardzo rzadkie.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 201
2008-02-21
Strona 202 z 246
Metody Numeryczne i Programowanie
Rozdział 7
Podstawowym wymogiem wszystkich metod numerycznych jest uzyskanie jak najlepszej aproksymacji jak najmniejszym kosztem. Z tego względu koniecznym jest porównanie
różnych metod obliczeniowych. Oznacza to, że musimy znaleźć dla każdej z analizowanych
metod aproksymacyjnych odpowiednią miarę ich sprawności. W przypadku metod wykorzystujących równania różnicowe, takich jak metoda Eulera, do rozwiązywania równań różniczkowych zwyczajnych najczęściej używaną miarą jest lokalny błąd obcięcia metody. Lokalny
błąd obcięcia w każdym kroku całkowania określa jak bardzo rozwiązanie dokładne równania
różniczkowego nie spełnia równania różnicowego użytego w aproksymacji. W przypadku
metody Eulera:
d
y (t ) = f (t , y ),
dt
a ≤ t ≤ b,
y (a ) = y 0 ,
(7.20)
lokalny błąd obcięcia dany jest zależnością:
τi =
y i − y i −1
− f (t i −1 , y i −1 ) dla każdego i = 1, 2, ..., n,
h
gdzie yi = y(ti) oznacza dokładne rozwiązanie w punkcie ti. Błąd ten określany jest mianem
błędu lokalnego, ponieważ jest to miara dokładności metody w każdym kroku całkowania,
przy założeniu, że metoda była dokładna w poprzednim kroku. Jak stąd wynika, tak zdefiniowany lokalny błąd metody zależy od: (i) rozwiązywanego równania różniczkowego, (ii) wielkości kroku całkowania, (iii) liczby wcześniej wykonanych kroków całkowania.
W przypadku metody Eulera, wynikającej z rozwinięcia poszukiwanego rozwiązania w wielomian Taylora stopnia drugiego:
h2
y (t i +1 ) = y (t i ) + hf (t i , y (t i )) +
y ′′(ξ i ) ,
2
(7.21)
lokalny błąd obcięcia dany będzie równaniem:
τi =
h
h
y ′′(ξ i ) ≤ M , t i < ξ i < t i +1 .
2
2
(7.22)
Jak z powyższego wynika lokalny błąd obcięcia w metodzie Eulera jest O(h), a metodę
Eulera zaliczyć należy do metod zbieżnych pierwszego rzędu. Wynik ten sugeruje, że jednym
z sposobów poprawienia zbieżności metody jest uzyskanie lokalnego błędu obcięcia O(hp),
gdzie p jest tak duże jak tylko to możliwe. Pomijamy w tym momencie problem liczby oraz
złożoności obliczeń koniecznych do uzyskania takiego wyniku.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 202
2008-02-21
Strona 203 z 246
Metody Numeryczne i Programowanie
Rozdział 7
Najprostszym, wynikającym z powyższych rozważań, sposobem uzyskania metody o
lepszych właściwościach zbieżności jest zastosowanie do wyprowadzenia równań różnicowych wielomianu Taylora odpowiednio wysokiego stopnia n.
Załóżmy, że rozwiązanie y(t) równania różniczkowego z warunkiem początkowym:
d
y (t ) = f (t , y ),
dt
a ≤ t ≤ b,
y (a ) = α ,
(7.23)
ma (n + 1) ciągłych pochodnych oraz, że rozwiązanie to, y(t), możemy rozwinąć w wielomian
Taylora stopnia n w otoczeniu punktu ti otrzymując:
h2
y ′′(t i ) + K
2
h n (n )
h n +1 (n +1)
(ξ i ), t i < ξ i < t i +1 .
+
y (t i ) +
y
(n + 1)!
n!
y (t i +1 ) = y (t i ) + hy ′(t i ) +
(7.24)
Kolejno różniczkując rozwiązanie y(t), otrzymamy:
y ′(t ) = f (t , y (t )) ,
(7.25)
y ′′(t ) = f ′(t , y (t )) ,
(7.26)
i w ogólnym przypadku
y (k ) (t ) = f (k −1) (t , y (t )) .
(7.27)
Podstawiając ten wynik do równania (7.24) otrzymamy:
h2
y (t i +1 ) = y (t i ) + hf (t i , y (t i )) +
f ′(t i , y (t i )) + K
2
n +1
h n (n −1)
(t i , y(t i )) + h f (n ) (t i , y(ξ i )), t i < ξ i < t i +1 .
+
f
(n + 1)!
n!
(7.28)
Metodę różnicową rozwiązywania równań różniczkowych związaną z równaniem
(7.28) otrzymamy poprzez pominięcie członu błędu. W ten sposób uzyskamy metodę Taylo-
ra rzędu n, którą zdefiniować można jako następujące równanie różnicowe:
w0 = α ,
wi +1 = wi + hT (n ) (t i , wi ), i = 0,1,2, K n − 1,
(7.29)
gdzie:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 203
2008-02-21
Strona 204 z 246
Metody Numeryczne i Programowanie
Rozdział 7
T (n ) (t i , wi ) = f (t i , wi ) +
h
h n −1 (n −1)
(t i , wi )
f ′(t i , wi ) + K +
f
n!
2
(7.30)
Jak stąd wynika metoda Eulera jest metodą Taylora rzędu pierwszego.
Jak z powyższych rozważań można wnosić lokalny błąd obcięcia dla metod Taylora
rzędu n powinien wynosić O(hn). Jego oszacowanie uzyskać można przekształcając równanie
(7.28) do postaci:
h2
f ′(t i , y (t i )) − K
2
n +1
h n (n −1)
(t i , y(t i )) = h f (n ) (t i , y(ξ i )), t i < ξ i < t i +1 .
−
f
(n + 1)!
n!
y (t i +1 ) − y (t i ) − hf (t i , y (t i )) −
(7.31)
Stąd lokalny błąd obcięcia w (i+1) kroku całkowania wynosi:
τ i +1
y (t i +1 ) − y (t i )
hn
(n )
=
− T (t i , y (t i )) =
f (n ) (t i , y (ξ i )), t i < ξ i < t i +1 ,
(n + 1)!
h
(7.32)
dla każdego i = 0, 1, ..., n-1. Jeżeli y ∈ C n +1 [a, b] , to funkcja y (n +1) (t ) = f (n ) (t , y (t )) jest ograniczona na przedziale [a, b] i stąd lokalny błąd obcięcia τi = O(hn) dla każdego i = 1, ..., n.
Przykład 7.3.
Rozwiązać stosując metodę Taylora drugiego i czwartego rzędu równanie różniczkowe
y ′ = − y + t + 1,
t ∈ [0,1],
y (0 ) = 1 .
Przyjąć krok całkowania h = 0.1. Rozwiązanie dokładne y(t) = t + e-t.
Rozwiązanie
Na początek obliczamy kolejne pochodne funkcji f (t , y (t )) = − y + t + 1 :
f ′(t , y (t )) =
d
(− y + t + 1) = − y ′ + 1 = y − t − 1 + 1 = y − t ,
dt
f ′′(t , y (t )) =
d
( y − t ) = y′ − 1 = − y + t + 1 − 1 = − y + t ,
dt
f ′′′(t , y (t )) =
d
(− y + t ) = − y ′ + 1 = y − t − 1 + 1 = y − t .
dt
Stąd
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 204
2008-02-21
Strona 205 z 246
Metody Numeryczne i Programowanie
Rozdział 7
T (2 ) (t i , wi ) = f (t i , wi ) +
h
h
f ′(t i , wi ) = − wi + t i + 1 + (wi − t i ) =
2
2
⎛ h⎞
= ⎜1 − ⎟(t i − wi ) + 1,
⎝ 2⎠
oraz
h
h2
h3
f ′(t i , wi ) +
f ′′(t i , wi ) +
f ′′′(t i , wi ) =
2
6
24
3
h
h2
(− wi + t i ) + h (wi − t i ) =
= − wi + t i + 1 + (wi − t i ) +
2
6
24
2
3
⎛ h h
h ⎞
= ⎜⎜1 − +
− ⎟⎟(t i − wi ) + 1.
⎝ 2 6 24 ⎠
T (2 ) (t i , wi ) = f (t i , wi ) +
W końcu uzyskamy następujące wyrażenie na metodę Taylora rzędu drugiego:
w0 = 1,
⎤
⎡⎛ h ⎞
wi +1 = wi + h ⎢⎜1 − ⎟(t i − wi ) + 1⎥,
⎦
⎣⎝ 2 ⎠
oraz rzędu czwartego:
w0 = 1,
wi +1
⎤
⎡⎛ h h 2 h 3 ⎞
= wi + h ⎢⎜⎜1 − +
− ⎟⎟(t i − wi ) + 1⎥,
⎦
⎣⎝ 2 6 24 ⎠
gdzie i = 0, 1, ..., n.
Ponieważ stąd, że h = 0.1 wynika, że n = 10 oraz ti = 0.1 × i dla każdego i = 1, 2, ..., 10
odpowiednie równania różnicowe na metodę Taylora drugiego i czwartego rzędu przyjmą
odpowiednio postać:
w0 = 1,
⎡⎛ 0.1 ⎞
⎤
wi +1 = wi + 0.1⎢⎜1 −
⎟(0.1 ⋅ i − wi ) + 1⎥ =
2 ⎠
⎣⎝
⎦
= 0.905wi + 0.0095 ⋅ i + 0.1,
w0 = 1,
⎡⎛ 0.1 0.01 0.001 ⎞
⎤
+
−
wi +1 = wi + 0.1⎢⎜1 −
⎟(0.1 ⋅ i − wi ) + 1⎥ =
2
6
24 ⎠
⎣⎝
⎦
= 0.9048375wi + 0.00951625 ⋅ i + 0.1.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 205
2008-02-21
Strona 206 z 246
Metody Numeryczne i Programowanie
Rozdział 7
Wyniki obliczeń przedstawiono w tabeli 7.2.
Tabela
7.1.
Aproksymacja
y ′ = − y + t + 1,
t ∈ [0,1],
rozwiązania
równania
różniczkowego
y (0 ) = 1 za pomocą metody Taylora rzędu pierwszego
(metoda Eulera), drugiego i czwartego.
Metoda Eulera
Metoda Taylora n =2
Wynik dokładny
Aproksymacja
Błąd
Aproksymacja
Błąd
1
1
0
1
0
1.004837418
1
-4.837e-3
1.005
1.626e-4
1.0187307531
1.01
-8.731e-3
1.019025
2.942e-4
1.0408182207
1.029
-1.182e-2
1.041218
3.994e-4
1.070320046
1.0561
-1.422e-2
1.070802
4.819e-4
1.1065306597
1.09049
-1.604e-2
1.107076
5.451e-4
1.1488116361
1.131441
-1.737e-2
1.149404
5.919e-4
1.1965853038
1.178297
-1.829e-2
1.19721
6.249e-4
1.2493289641
1.230467
-1.886e-2
1.249975
6.463e-4
1.3065696597
1.28742
-1.915e-2
1.307228
6.579e-4
1.3678794412
1.348678
-1.92e-2
1.368541
6.615e-4
t
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
Metoda Taylora n = 4
Aproksymacja
Błąd
1
0
1.0048375
8.196e-8
1.0187309014
1.483e-7
1.040818422
2.013e-7
1.0703202889
2.429e-7
1.1065309344
2.747e-7
1.1488119344
2.983e-7
1.1965856187
3.149e-7
1.2493292897
3.256e-7
1.3065699912
3.315e-7
1.3678797744
3.332e-7
■
Przedstawione w tym rozdziale metody Taylora jakkolwiek mają bardzo dobre właściwości w przypadku oszacowania lokalnego błędu obcięcia, to niestety wymagają obliczenia
pochodnych z funkcji f(t, y). Takie obliczenia najczęściej są bardzo złożone i wymagają czasochłonnych procedur obliczeniowych. Z tych też względów, metody Taylora jakkolwiek
interesujące są bardzo rzadko wykorzystywane w praktyce.
Zdecydowanie większe znaczenie mają metody Rungego – Kutty charakteryzujące się
podobnie jak metody Taylora wysokim rzędem błędu obcięcia nie posiadające natomiast tej
wady polegającej na konieczności obliczania różnorodnych pochodnych z f(t,y).
7.2. Metody Rungego - Kutty
Największą niedogodnością w zastosowaniu metody Taylora jest konieczność wielokrotnego obliczania wartości pochodnej z funkcji w punkcie. W przypadku metody drugiego
rzędu:
w0 = α ,
wi +1 = wi + hT (n ) (t i , wi ), i = 0,1,2, K n − 1,
(7.33)
gdzie
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 206
2008-02-21
Strona 207 z 246
Metody Numeryczne i Programowanie
Rozdział 7
T (n ) (t i , wi ) = f (t i , wi ) +
h
f ′(t i , wi ) .
2
(7.30)
oznacza to, że w każdym kroku całkowania należy obliczyć wartość pierwszej pochodne z funkcji f’(t, y). Podstawowym pomysłem w metodach Rungego – Kutty jest zastąpienie
tych pochodnych odpowiednimi aproksymacjami, dla których znaleźć należy wartości parametrów. W przypadku metody Taylora drugiego rzędu chcemy prawą stronę w wyrażeniu
(7.30) zastąpić jego aproksymacją w postaci a1 f (t + α 1 , y + β 1 ) , dla której błąd będzie nie
większy niż O(h2), czyli nie będzie większy od lokalnego błędu obcięcia dla metody Taylora
drugiego rzędu. Przy tych założeniach wyznaczyć chcemy parametry tej aproksymacji, czyli
a1, α, β. Ponieważ:
f ′(t , y ) =
d
∂
∂
f (t , y ) =
f (t , y ) +
f (t , y ) ⋅ y ′(t ) ,
dt
∂t
∂y
(7.31)
to wyrażenie (7.30) przedstawić możemy w postaci:
T (n ) (t , y ) = f (t , w) +
h ∂
h ∂
f (t , y ) +
f (t , y ) ⋅ f (t , y ) ,
2 ∂t
2 ∂y
(7.32)
gdyż y ′(t ) = f (t , w) .
Z drugiej strony funkcję aproksymującą a1 f (t + α 1 , y + β1 ) rozwinąć możemy w szereg
Taylora w otoczeniu (t, y) otrzymując:
∂
∂
f (t , y ) + a1 β 1
f (t , y ) +
∂t
∂y
+ a1 ⋅ R1 (t + α 1 , y + β 1 ),
a1 f (t + α 1 , y + β 1 ) = a1 f (t , y ) + a1α 1
(7.33)
gdzie
α12 ∂ 2
β12 ∂ 2
∂2
R1 (t + α1 , y + β1 ) =
f (ξ ,η ) + α1β1
f (ξ ,η ) +
f (ξ ,η ) (7.34)
2 ∂t 2
∂t∂y
2 ∂y 2
oraz ξ ∈ [t , t + α 1 ] i η ∈ [ y, y + β 1 ] .
Porównując współczynniki w równaniach (7.32) oraz (7.33) przy funkcji f oraz jej pochodnych otrzymamy następujące trzy równania:
f (t , y ) : a1 = 1 ,
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
(7.35)
Strona 207
2008-02-21
Strona 208 z 246
Metody Numeryczne i Programowanie
Rozdział 7
h
∂
f (t , y ) : a1α 1 = ,
2
∂t
(7.36)
h
∂
f (t , y ) : a1 β 1 = f (t , y ) ,
∂y
2
(7.37)
Stąd poszukiwane parametry przyjmują wartości:
a1 = 1,
h
2
h
β 1 = f (t , y ),
2
α1 = ,
(7.38)
h
h
⎛ h
⎞
⎛ h
⎞
T (2 ) (t , y ) = f ⎜ t + , y + f (t , y )⎟ + R1 ⎜ t + , y + f (t , y )⎟ ,
2
2
⎝ 2
⎠
⎝ 2
⎠
(7.39)
2
2
h
⎛ h
⎞ h ∂
f (ξ ,η ) +
R1 ⎜ t + , y + f (t , y )⎟ =
2
2
⎝ 2
⎠ 8 ∂t
2
h2
h2
∂2
( f (t , y ))2 ∂ 2 f (ξ ,η ).
+
f (t , y )
f (ξ ,η ) +
∂t∂y
4
8
∂y
(7.40)
oraz
gdzie
h
⎛ h
⎞
Stąd, jeżeli drugie pochodne cząstkowe funkcji f są ograniczone, to R1 ⎜ t + , y + f (t , y )⎟
2
⎝ 2
⎠
będzie rzędu O(h2), a więc zgodne z rzędem lokalnego błędu obcięcia dla metody Taylora
rzędu drugiego.
Wyprowadzona powyżej metoda różnicowa powstała z metody Taylora drugiego rzędu
przez zastąpienie T(2)(t, y) funkcją a1 f (t + α 1 , y + β1 ) jest szczególną postacią metody Run-
gego – Kutty drugiego rzędu, która w literaturze występuje pod nazwą metody punktu
środkowego. Zapisać ją można dla każdego i = 0, 1, ..., n - 1 w następującej formie:
w0 = α ,
h
h
⎛
⎞
wi +1 = wi + h ⋅ f ⎜ t i + , wi + f (t i , wi )⎟.
2
2
⎝
⎠
(7.41)
Jak stąd wynika metoda Rungego – Kutty drugiego rzędu wymaga znajomości trzech
parametrów, a w każdym kroku całkowania obliczyć należy dwie różne wartości funkcji f. Z
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 208
2008-02-21
Strona 209 z 246
Metody Numeryczne i Programowanie
Rozdział 7
przedstawionych rozważań należałoby również wnosić, że w przypadku modyfikowania metod Taylora wyższego rzędu koniecznym będzie zastosowanie bardziej złożonych zależności
chcąc uzyskać odpowiedni błąd.
W przypadku metody Taylora trzeciego rzędu:
T (3 ) (t , y ) = f (t , y ) +
h
h2
f ′(t , y ) +
f ′′(t , y ) ,
2
6
(7.42)
zastosować będziemy musieli aproksymację postaci:
a1 f (t , y ) + a 2 f (t + α 2 , y + δ 1 f (t , y )) .
h2
Niestety w tym przypadku pojawia się duży problem z wyrażeniem
6
powstałym z rozwinięcia
(7.43)
2
⎤
⎡∂
⎢ ∂y f (t , y )⎥ f (t , y )
⎦
⎣
h2
f ′′(t , y ) . Konsekwencją tego jest to, że z zastosowania aproksy6
macji (7.43) jesteśmy wstanie uzyskać jedynie metodę z błędem O(h2). Aproksymacja ta daje
jednakże pewne dodatkowe możliwości wynikające z faktu, że w wyrażeniu (7.43) mamy
cztery różne parametry. Pozwala to pewną swobodę w ich wyznaczeniu, co prowadzi do wyprowadzenia kilku różnych metod z błędem O(h2). Z pośród nich najbardziej znane są dwie
metody: tak zwana zmodyfikowana metoda Eulera oraz metod Heuna.
W przypadku zmodyfikowanej metody Eulera przyjmujemy a1 = a2 = ½, α1 = δ2 = h, a
równanie różnicowe w tym przypadku ma postać:
w0 = α ,
h
⋅ [ f (t i , wi ) + f (t i + h, wi + hf (t i , wi ))],
2
i = 0,1,2,K , n − 1.
wi +1 = wi +
(7.44)
Natomiast w przypadku metody Heuna odpowiednie stałe mają wartości a1 = ¼ a2 = ¾,
α1 = δ2 = ⅔h, natomiast równanie różnicowe ma postać:
w0 = α ,
wi +1 = wi +
h ⎡
2
2
⎛
⎞⎤
⋅ ⎢ f (t i , wi ) + 3 f ⎜ t i + h, wi + hf (t i , wi )⎟⎥,
4 ⎣
3
3
⎝
⎠⎦
(7.45)
i = 0,1,2,K , n − 1.
Obie te metody zaliczane są do metod Rungego – Kutty drugiego rzędu.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 209
2008-02-21
Strona 210 z 246
Metody Numeryczne i Programowanie
Rozdział 7
Jakkolwiek można wyprowadzić metodę Rungego – Kutty z błędem O(h3), to jest ona
dość skomplikowana i z tych względów nie znalazła praktycznego zastosowania. Najbardziej
znaną metodą z grupy metod Rungego – Kutty jest metoda czwartego rzędu, dla której równania różnicowe opisujące ją dane są w postaci:
w0 = α ,
k1 = h ⋅ f (t i , wi ),
h
1 ⎞
⎛
k 2 = f ⎜ t i + , wi + k1 ⎟,
2
2 ⎠
⎝
1 ⎞
h
⎛
k 3 = f ⎜ t i + , wi + k 2 ⎟,
2
2 ⎠
⎝
k 4 = f (t i + h, wi + k 3 ),
(7.46)
h
⋅ [k1 + 2k 2 + 2k 3 + k 4 ],
6
i = 0,1,2,K , n − 1.
wi +1 = wi +
Lokalny błąd obcięcia tej metody wynosi O(h4) przy założeniu, że rozwiązanie y(t) ma
piątą pochodną ciągłą.
Przykład 7.4.
Korzystając z metody Rungego – Kutty czwartego rzędu rozwiązać równanie różniczkowe:
y ′ = − y + t + 1,
t ∈ [0,1],
y (0 ) = 1 .
Przyjąć, że przedział [0, 1] podzielony jest na n = 10 podprzedziałów. Porównać uzyskane
rozwiązanie z rozwiązaniem dokładnym: y = t + e − t .
Rozwiązanie
Wyniki obliczeń przedstawiono w tabeli 7.2.
Tabela 7.2. Metoda Rungego – Kutty czwartego rzędu. Wyniki rozwiązania równania różniczkowego y ′ = − y + t + 1,
t ∈ [0,1],
y (0 ) = 1 .
ti
Rozwiązanie dokładne
Aproksymacja RK czwartego rzędu
Błąd
0.0
1.000000000
1.0000000000
0
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 210
2008-02-21
Strona 211 z 246
Metody Numeryczne i Programowanie
Rozdział 7
0.1
1.0048374180
1.0048374106
7.41e-9
0.2
1.0187307531
1.0187307437
9.379e-9
0.3
1.0408182207
1.0408182389
1.819e-8
0.4
1.0703200460
1.070320078
3.198e-8
0.5
1.1065306597
1.1065307001
4.042e-8
0.6
1.1488116361
1.1488116837
4.756e-8
0.7
1.1965853038
1.196585419
1.152e-7
0.8
1.2493289641
1.2493297228
7.587e-7
0.9
1.3065696597
1.3065711133
1.454e-6
1.0
1.3678794412
1.3678811241
1.683e-6
■
Podstawową zaletą metod Rungego – Kutty jest to, że w metodach tych zamiast obliczać pochodne z funkcji f wykorzystuje się wartości tej funkcji w różnych punktach. W przypadku metody drugiego rzędu charakteryzującej się lokalnym błędem obcięcia O(h2) konieczne jest dwukrotne obliczenie wartości funkcji, natomiast w przypadku metody czwartego rzędu czterokrotne.
7.4. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
1.
Korzystając z metody Eulera rozwiązać następujące równania różniczkowe z warunkami początkowymi:
2
⎛ y⎞ ⎛ y⎞
a) y ′ = ⎜ ⎟ + ⎜ ⎟, 1 ≤ t ≤ 1.2, y (1) = 1, h = 0.1 .
⎝t⎠ ⎝t⎠
b) y ′ = sin (t ) + e − t , 0 ≤ t ≤ 1, y (0) = 0, h = 0.5 .
c) y ′ =
(
)
1 2
y + y , 1 ≤ t ≤ 3, y (1) = −2, h = 0.5 .
t
d) y ′ = −ty +
4t
, 0 ≤ t ≤ 1, y (0) = 1, h = 0.25 .
y
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 211
2008-02-21
Strona 212 z 246
Metody Numeryczne i Programowanie
Rozdział 7
2.
Dane jest następujące równanie różniczkowe z warunkami początkowymi
y ′ = − y + t + 1, 0 ≤ t ≤ 5, y (0 ) = 1 ,
posiadające rozwiązanie dokładne y (t ) = t + e − t .
a)
Korzystając z metody Eulera z krokiem h = 0.1, h = 0.1, h = 0.05 aproksymować y(5).
b)
Korzystając z równania (7.19) oszacować wartość optymalnego kroku h koniecznego do obliczenia y(5). Założyć δ = 10-6.
3.
Używając metody Taylora drugiego rzędu aproksymować rozwiązania równań różniczkowych z zadania 1. Oszacować błąd aproksymacji.
4.
Używając metody Taylora czwartego rzędu aproksymować rozwiązania równań różniczkowych z zadania 1. Oszacować błąd aproksymacji.
5.
Korzystając z zmodyfikowanej metody Eulera rozwiązać równania różniczkowe z zadania 1. Oszacować błąd aproksymacji.
6.
Korzystając z metody Rungego – Kutty czwartego rzędu rozwiązać równania różniczkowe z zadania 1. Oszacować błąd aproksymacji.
7.
Korzystając z metody Heuna rozwiązać równania różniczkowe z zadania 1. Oszacować
błąd aproksymacji.
8.
Korzystając z metody punktu środkowego rozwiązać równania różniczkowe z zadania
1. Oszacować błąd aproksymacji.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 212
2008-02-21
Strona 213 z 246
Metody Numeryczne i Programowanie
Rozdział 8.
Rozdział 8. Poszukiwanie minimów funkcji jednej zmiennej
In the future
Tabela 8.1.
Rysunek 8.1.
Przykład 7.2.
Rozwiązanie
■
8.4. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 213
2008-02-21
Strona 214 z 246
Metody Numeryczne i Programowanie
Rozdział 9.
Rozdział 9. Programowanie w programie MathCad
In the future
Tabela 9.1.
Rysunek 9.1.
Przykład 9.1.
Rozwiązanie
■
9.4. Zagadnienia obliczeniowe i problemy do samodzielnego rozwiązania
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 214
2008-02-21
Strona 215 z 246
Metody Numeryczne i Programowanie
Rozdział 10
Rozdział 10. Dodatki
10.1. Alfabet grecki
Α, α - alfa
Η, η - eta
Ν, ν - ni
Τ, τ - tau
Β, β - beta
Θ, θ, ϑ - teta
Ξ, ξ - ksi
Υ, υ υ - ypsilon
Γ, γ - gamma
Ι, ι - jota
Ο, ο - omikron
Φ, φ, ϕ - fi
∆, δ - delta
Κ, κ - kappa
Π, π - pi
Χ, χ - chi
Ε, ε,∈ - epsilon
Λ, λ - lambda
Ρ, ρ - ro
Ψ, ψ - psi
Ζ, ζ - dzeta
Μ, µ - mi
Σ, σ, ς,- sigma
Ω, ω - omega
10.2. Znajdowanie rozwinięć dwójkowych liczb dziesiętnych
Prostym sposobem znajdowania cyfr rozwinięcia dwójkowego liczby przedstawionej w
systemie dziesiętnym jest obliczanie reszt z kolejnych dzieleń przez dwa. Zaczynamy od liczby, której rozwinięcia dwójkowego poszukujemy. Liczbę tę dzielimy przez dwa. Resztę 0 lub
1 traktujemy jako ostatnią cyfrę rozwinięcia dwójkowego. Wynik uzyskany z tego dzielenia
powtórnie dzielimy przez dwa otrzymując jako resztę 0 lub 1, którą traktujemy jako drugą od
końca cyfrę rozwinięcia. Kolejne cyfry rozwinięcia dwójkowego uzyskujemy jako reszty,
dzieląc uzyskiwane w ten sposób wyrazy. Otrzymane reszty w kolejności "z prawa na lewo"
stanowią ciąg kolejnych cyfr rozwinięcia dwójkowego.
Przykład 10.1.
Znaleźć dwójkowe rozwinięcie liczby 191.
Rozwiązanie
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Dzielenie
Reszta
191:2=95
1
95:2=47
1
47:2=23
1
23:2=11
1
Strona 215
2008-02-21
Strona 216 z 246
Metody Numeryczne i Programowanie
Rozdział 10
11:2=5
1
5:2=2
1
2:2=1
0
1:2=0
1
Rozwinięciem dwójkowym liczby 191 jest liczba 10111111, co zapisujemy:
191 10 = 10111111 2 .
■
Celem wyznaczania kolejnych cyfr rozwinięcia dwójkowego dodatniego ułamka właściwego, przedstawionego w systemie dziesiętnym, znajdujemy części całkowite kolejnych
iloczynów liczby dwa przez elementy ciągu liczbowego, gdzie pierwszym elementem tego
ciągu jest ułamek, którego rozwinięcia dwójkowego poszukujemy, a kolejne wyrazy są częściami ułamkowymi uzyskanymi z poprzednich iloczynów. Odwrotnie niż poprzednio cyfry
poszukiwanego rozwinięcia dwójkowego czytamy od początku.
Przykład 10.2.
Znaleźć rozwinięcie dwójkowe ułamka właściwego 0.6875.
Rozwiązanie
Iloczyn
Część całkowita
0.6875×2=1.3750, 1
0.3750×2=0.7500, 0
0.750×2=1.5000,
1
0.50×2=1.0000.
1
Rozwinięciem dwójkowym powyższego ułamka jest 0.687510 = 101122.
■
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 216
2008-02-21
Strona 217 z 246
Metody Numeryczne i Programowanie
Rozdział 10
Należy tutaj zwrócić uwagę na to, że ze skończoności rozwinięcia dziesiętnego ułamka
właściwego nie wynika skończoność rozwinięcia dwójkowego tego ułamka. Np. ułamek dziesiętny 0.35 ma rozwinięcie dwójkowe w postaci 010110011... . Innym przykładem ułamka o
nieskończonym rozwinięciu dwójkowym jest 0.66.
10.3. Dodawanie i mnożenie liczb w układzie dwójkowym
Podobnie jak w przypadku dziesiętnego systemu pozycyjnego w układzie binarnym
utworzyć można tabliczki dodawania i mnożenia (tabela 10.1. i 10.2).
Tabela 10.1. Tabliczka dodawania w układzie dwójkowym. Wynikiem binarnego dodawania
1+1=0 z równoczesnym przeniesieniem 1 o jedno miejsce w lewo.
+
0
1
0
0
1
1
1
(1)0
Tabela 2.4. Tabliczka mnożenia w układzie dwójkowym
×
0
1
0
0
0
1
0
1
W przypadka dodawania, pamiętać należy o tym, że jakkolwiek dodając dwie jedynki
otrzymujemy zero, to równocześnie następuje przeniesienie cyfry 1 o jeden rząd w lewo.
Przykład 10.3.
Korzystając z tabliczek dodawania i mnożenia wykonać następujące działania w układzie dwójkowym: 2 + 3 oraz 2 × 3.
Rozwiązanie
Działanie
Układ dziesiętny
Układ dwójkowy
Dodawanie
2+3=5
10
+11
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 217
2008-02-21
Strona 218 z 246
Metody Numeryczne i Programowanie
Rozdział 10
101
Mnożenie
2×3=6
10
×11
10
+10
110
■
Powyższy przykład pokazuje, że trzy operacje elementarne takie, jak przerzucenie, zerowanie i sprawdzenie w zupełności wystarczą do przeprowadzenia podstawowych działań
arytmetycznych.
10.4. Sposoby kodowania znaku liczby w binarnej reprezentacji maszynowej
Chcąc rozszerzyć reprezentowany w pamięci komputera zakres liczb z naturalnych na
rzeczywiste oraz na liczby ujemne musielibyśmy, przynajmniej pozornie, wyjść poza dwuelementowy zestaw znaków – byłyby potrzebne dwa znaki dodatkowe: jeden do oznaczania
liczb ujemnych, drugi do oddzielania części całkowitej od ułamkowej. Można tego uniknąć
wprowadzając odpowiednią konwencję zapisu. W przypadku kodowania znaku liczby problem ten rozwiązać można kilkoma sposobami.
Kod znak – moduł prosty
Najprostszy sposób związany jest z wprowadzeniem tzw. bitu znaku. Przyjmijmy, że
ciąg kodowy liczby (ułamka) składa się z n+1 pozycji, z których pierwsza od lewej strony
zawiera zakodowany znak liczby. Kodowanie to przeprowadzamy według tej konwencji
zgodnie w ten sposób, że na pierwszej pozycji piszemy 0, jeśli liczba jest nieujemna lub 1,
jeśli liczba jest niedodatnia. Pozostałe n pozycji (bitów) stanowi n – cyfrowe rozwinięcie
dwójkowe wartości bezwzględnej liczby (ułamka). Ten sposób zapisu znaku liczby (ułamka)
określany jest mianem kodu znak - moduł prosty. Formalnie ten sposób kodowania przedstawić można następująco:
⎧⎪0 + x = x
x zmp = ⎨
⎪⎩1 + x = 1 − x
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
dla x ≥ 0,
(10.1)
dla x ≤ 0,
Strona 218
2008-02-21
Strona 219 z 246
Metody Numeryczne i Programowanie
Rozdział 10
gdzie 1 oznacza ustawienie n+1 bitu (skrajny lewy bit) na 1, 0 bit ten ustawiony jest na 0.
Analizując powyższy wzór należy zwrócić uwagę na to, że jeśli x jest ułamkiem właściwym,
tzn. |x|<1 to zachodzi 1<1+⏐x⏐<2 dla x≠0. Inaczej mówiąc ujemne ułamki właściwe w tej
reprezentacji są dodatnimi liczbami wymiernymi, których wartość jest o jeden większa w stosunku do wartości bezwzględnej kodowanego ułamka.
Przeniesienie bity znaku na znak kodowanej liczby dokonać można przez pomnożenie
danej liczby przez +1 lub –1 uzyskane z bitu znaku na dwa sposoby:
⎧1, dla s = 0,
s
znak = (− 1) = ⎨
⎩− 1, dla s = 1,
(10.2)
⎧1, dla s = 0,
znak = −2 × s + 1 = ⎨
⎩− 1, dla s = 1,
(10.3)
lub
gdzie s jest bitem znaku.
Przykład 10.4.
Znaleźć dziesiętną wartość rozwinięcia dwójkowego ułamków właściwych 01011010
oraz 11011010, wiedząc, że znak liczby kodowany jest w kodzie znak – moduł prosty.
Rozwiązanie
Zgodnie z umową w kodzie znak – moduł prosty, przy założeniu siedmiocyfrowego
rozwinięcia, pierwsza cyfra koduje znak liczby, natomiast pozostałe kodują ułamek właściwy.
Wykorzystując jeden z sposobów przeniesienia bitu znaku na znak kodowanej liczby otrzymamy:
(i) Stosując wyrażenie (10.2) na obliczenie wartości znaku liczby otrzymamy:
xzmp = 01011010 =
(
)
= (− 1) × 1 ⋅ 2−1 + 0 ⋅ 2− 2 + 1 ⋅ 2− 3 + 1 ⋅ 2− 4 + 0 ⋅ 2− 5 + 1 ⋅ 2− 6 + 0 ⋅ 2− 7 =
= 0.70312510 ,
0
xzmp = 11011010 =
(
)
= (− 1) × 1 ⋅ 2 −1 + 0 ⋅ 2 − 2 + 1 ⋅ 2 − 3 + 1 ⋅ 2 − 4 + 0 ⋅ 2 − 5 + 1 ⋅ 2 − 6 + 0 ⋅ 2 − 7 =
1
= −0.70312510.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 219
2008-02-21
Strona 220 z 246
Metody Numeryczne i Programowanie
Rozdział 10
(ii) Stosując wyrażenie (10.3) na obliczenie wartości znaku liczby otrzymamy:
xzmp = 01011010 =
(
)
= (− 2 × 0 + 1) × 1 ⋅ 2 −1 + 0 ⋅ 2− 2 + 1 ⋅ 2 − 3 + 1 ⋅ 2 − 4 + 0 ⋅ 2− 5 + 1 ⋅ 2 − 6 + 0 ⋅ 2 − 7 =
= 0.70312510.
xzmp = 11011010 =
(
)
= (− 2 × +1) × 1 ⋅ 2 −1 + 0 ⋅ 2 − 2 + 1 ⋅ 2 − 3 + 1 ⋅ 2 − 4 + 0 ⋅ 2 − 5 + 1 ⋅ 2 − 6 + 0 ⋅ 2 − 7 =
= −0.703125.10
■
UWAGA: W powyższej konwencji liczba 0 ma dwie równoważne reprezentacje!
00000000⎫
⎧0,
⎬=0=⎨
10000000 ⎭
⎩− 0.
(10.4)
Kod znak - moduł odwrotny
Innym sposobem kodowania ułamków właściwych jest tzw. kod znak - moduł od-
wrotny. Ten sposób kodowania formalnie zapisujemy w następującej postaci:
⎧⎪0 + x = x
xzmo = ⎨
−n
⎪⎩1 + x = 2 + x − 2
dla x ≥ 0,
dla x ≤ 0,
(10.5)
gdzie x = 1 − x − 2 − n i oznacza liczbę powstałą z liczby x przez zastąpienie wszystkich cyfr 1
przez cyfry 0, a cyfr 0 przez cyfry 1, tzn., jeżeli na przykład x oznacza liczbę 1001101 to x
oznacza liczbę 0110010. Wyrażenie 2−n koduje się jako 1 na pierwszej z prawej pozycji zapisywanej liczby. W wzorze (10.5) oznacza odjęcie 1 od zapisanej liczby
W tej konwencji liczby 01011010 oraz 10100101 w zapisie dwójkowym oznaczają odpowiednio 0.703125 oraz -0.703125 w zapisie dziesiętnym.
UWAGA: Podobnie jak poprzednio, w kodzie znak - moduł odwrotny, liczba zero ma
dwie równoważne reprezentacje!
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 220
2008-02-21
Strona 221 z 246
Metody Numeryczne i Programowanie
Rozdział 10
00000000⎫
⎧0,
⎬=0=⎨
11111111 ⎭
⎩− 0.
(10.6)
Kod uzupełnieniowy
Trzecim ważnym sposobem kodowania ułamków właściwych jest tak zwany kod uzupełnieniowy. Zadany jest on wzorem:
⎧⎪
0+ x = x
xu = ⎨
−n
⎪⎩1 + x + 2 = 2 + x
dla x ≥ 0,
dla x < 0,
(10.7)
gdzie x = 1 − x − 2 − n .
Znajdując ośmiobitowy kod uzupełnieniowy (n = 7) ujemnego ułamka właściwego -
0.703125, z powyższego wzoru mamy:
x = 1011010,
x = 0100101,
2 −7 = 0000001,
x u = 10100110.
Dodatni ułamek 0.703125 ma, jak i w pozostałych dwu kodach binarnych, postać
01011010.
Kod uzupełnieniowy dla liczb całkowitych zadany jest wzorem:
⎧⎪ 0 + x = x
xu = ⎨ n
n
⎪⎩2 − x = 2 + x
dla x ≥ 0,
dla x < 0,
(10.8)
gdzie 2 n oznacza bit na n + 1 pozycji ustawiony na 1.
Zauważyć należy, że w kodzie uzupełnieniowym liczba 0 ma tylko jedną reprezentację.
W zastosowaniach praktycznych największe znaczenie mają kody znak-moduł odwrotny i
kod uzupełnieniowy.
Jak z powyższych rozważań wynika przedstawienie znaku liczby jest efektem tylko i
wyłącznie przyjętej konwencji.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 221
2008-02-21
Strona 222 z 246
Metody Numeryczne i Programowanie
Rozdział 10
Kodowanie znaku i liczby z przesunięciem
Ten sposób kodowania znaku i liczby stosuje się w przypadku liczb całkowitych. W
tym przypadku liczba całkowita k kodowana jest na n bitowym bajcie jako liczba bez znaku.
Jej wartość obliczana jest z wzoru:
n −1
k = ∑ d i 2i − B ,
(10.9)
i =0
gdzie B jest tak zwanym przesunięciem i zwykle
B = 2 n −1 − 1 .
(10.10)
Przykład 10.5.
W jakim zakresie liczb zapisać można na 8 bitowym bajcie liczby całkowitych w kodowaniu z przesunięciem?
Rozwiązanie
Na 8 bitowym bajcie zapisać można liczby całkowite bez znaku z zakresu [0, 255].
Przyjmując, że liczby te zapisane są z przesunięciem B = 2 8−1 − 1 = 2 7 − 1 = 128 − 1 = 127 , to
zapisywane na tym bajcie liczby będą z zakresu [-127, 128].
■
UWAGA: Ten sposób zapisu bardzo często stosowany jest do kodowanie cechy liczb w zapi-
sie zmiennopozycyjnym.
10.5. Heksagonalny system pozycyjny
Szesnastkowy układ pozycyjny zwanym również układem heksagonalnym jest waż-
nym i często stosowanym w informatyce sposobem zapisu liczb Podstawą tego układu jest
liczba szesnaście. Dowolną n cyfrową liczbę naturalną przedstawiamy w postaci:
x 16 = hn −1 hn − 2 K h1 h0 ,
(10.11)
gdzie hn−1 , hn− 2 , K , h1 , h0 są cyframi ze zbioru {0,1,...9,A,B,C,D,E,F}. A, B, C, D, E, F oznaczają odpowiednio 10, 11, 12, 13, 14 oraz 15.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 222
2008-02-21
Strona 223 z 246
Metody Numeryczne i Programowanie
Rozdział 10
Powyższy zapis oznacza liczbę, której wartość w układzie dziesiętnym obliczamy w typowy dla układów pozycyjny sposób:
x 16 = hn −1 16 n −1 + hn − 2 16 n − 2 + K + h1 161 + h0 16 0 = x 10 .
(10.12)
Reprezentację szesnastkową liczb dziesiętnych uzyskujemy w podobny sposób jak w
przypadku układu binarnego, czyli wykonując odpowiednie kolejne dzielenia w przypadku
liczb całkowitych lub mnożenia w przypadku ułamków właściwych. Zastosowanie układu
heksagonalnego w opracowaniach informatycznych wynika z wyjątkowej łatwości przenoszenia liczb z układu binarnego do heksagonalnego i na odwrót. Jeżeli przyjmiemy, że każda
liczba w układzie szesnastkowym ma czterobitową reprezentację binarną, to można zapisać
następujący ciąg odpowiedników:
0 10 = 0 16 = 0000 2 ,
1 10 = 1 16 = 0001 2 ,
2 10 = 2 16 = 0010 2 ,
…
9 10 = 9 16 = 1001 2
10 10 = A 16 = 1010 2 ,
11 10 = B 16 = 1011 2 ,
…
14 10 = E 16 = 1110 2 ,
15 10 = F 16 = 1111 2 .
Korzystając z powyższego zestawienia dowolną liczbę dziesiętną przedstawić można w
układzie dwójkowym w ten sposób, że najpierw liczbę zapisaną w układzie dziesiętnym
przedstawiamy w układzie heksagonalnym, a następnie każdą cyfrę zapisu heksagonalnego
przedstawiamy za pomocą czterech bitów w zapisie dwójkowym.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 223
2008-02-21
Strona 224 z 246
Metody Numeryczne i Programowanie
Rozdział 10
Przykład 10.6.
Korzystając z układu heksagonalnego, przedstawić rozwinięcia dwójkowe następujących liczb: 21, 32, 255, 256.
Rozwiązanie
Każdą liczbę w rozwinięciu dziesiętnym zapisujemy w rozwinięciu heksagonalnym, a
następnie każdej cyfrze w układzie szesnastkowym przyporządkujemy odpowiednie rozwinięcie dwójkowe. Otrzymamy w ten sposób:
21 10 = 15 16 = 0001 0101 2 ,
32 10 = 20 16 = 0010 0000 2 ,
255 10 = FF 16 = 11111111 2 ,
256 10 = 100 16 = 0001 0000 0000 2 .
■
Jak z powyższego przykładu wynika zastosowanie rozwinięcia heksagonalnego zamiast
binarnego znacznie upraszcza zapis liczb, czyniąc go bardziej czytelnym.
10.6. Ważne definicje i twierdzenia rachunku różniczkowego
W przedstawionych rozważaniach dotyczących metod numerycznych korzysta się z szeregu pojęć wprowadzonych w kursie podstawowym matematyki. W tym miejscu zostaną one
podane jako przypomnienie. Duże znaczenie mają pojęcia granicy i ciągłości funkcji:
Definicja 10.1. Definicja granicy ciągu
Niech xn, n = 0, 1, ..., ∞ będzie nieskończonym ciągiem liczb rzeczywistych lub zespolonych. Mówimy, że ciąg xn jest zbieżny do liczby x nazywanej granicą tego ciągu, jeżeli dla
dowolnego ε > 0, istnieje taka liczba całkowita zależna od ε, N(ε), że dla n > N(ε) zachodzi
x n − x < ε . Zapis lim x n = x lub równoważny mu x n → x, dla n → ∞ oznacza, że ciąg xn, n
n →∞
= 0, 1, ..., ∞ jest zbieżny do x.
■
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 224
2008-02-21
Strona 225 z 246
Metody Numeryczne i Programowanie
Rozdział 10
Definicja 10.2. Definicja Cauchy’ego1 granicy funkcji
Niech f będzie funkcją zdefiniowaną na zbiorze liczb rzeczywistych X. Mówimy, że
funkcja f ma granicę L w punkcie x0, co zapisujemy lim f ( x ) = L , jeżeli dla dowolnej liczby
x → x0
rzeczywistej ε > 0, istnieje taka liczba rzeczywista δ > 0, że f ( x ) − L < ε dla dowolnego
x ∈ X oraz takiego, że 0 < x − x 0 < δ .
f(x)
■
L+ε
L
L-ε
x0-δ
x0
x0+δ
x
Rysunek 10.1. Interpretacja geometryczna granicy funkcji.
Interpretację geometryczną tej definicji Cauchy’ego granicy funkcji pokazano na rysunku 10.1. Przyjmijmy, że dana jest granica funkcji f w punkcie x0 oraz dwie liczby ε oraz δ
spełniające warunki określone w definicji 10.2. Jak wynika z rysunku 10.1. dla każdej liczby
x z przedziału (x0 - δ, x0 + δ) wartości funkcji f leżą w przedziale (L - ε, L + ε). Dodatkowo,
jeżeli wybierzemy δ1 < δ, to dla tego samego ε w dalszym ciągu zachodzić będzie, że jeżeli x
jest z przedziału (x0 - δ1, x0 + δ1), to wartości funkcji f cały czas będą w przedziale (L - ε, L +
1
Augustin – Luis Cauchy (1789 – 1857), matematyk francuski.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 225
2008-02-21
Strona 226 z 246
Metody Numeryczne i Programowanie
Rozdział 10
ε). Natomiast sytuacja odwrotna, gdy wybierzemy mniejszą wartość ε1, to może się okazać, że
nie jesteśmy wstanie określić właściwego δ.
Definicja 10.3. Definicja ciągłości funkcji
Niech f będzie funkcją zdefiniowaną na zbiorze X liczb rzeczywistych, oraz niech
x 0 ∈ X . Mówimy, że funkcja f jest ciągła w punkcie x0, jeżeli zachodzi lim f ( x ) = f ( x0 ) .
x→ x
Mówimy, że funkcja f jest ciągła na zbiorze X, jeżeli jest ciągła dla każdej liczby x ze zbioru
X. Zapis C(X) oznacza zbiór wszystkich funkcji ciągłych na zbiorze X. W przypadku, gdy X
jest przedziałem liczb rzeczywistych zbiór wszystkich funkcji ciągłych na przedziale domkniętym [a, b] zapisujemy C[a, b].
■
Twierdzenie 10.1. Twierdzenie o ciągłości funkcji
Jeżeli funkcja f jest zdefiniowana na zbiorze X liczb rzeczywistych oraz jeżeli x 0 ∈ X ,
to następujące stwierdzenia są równoważne:
a)
funkcja f jest ciągła w punkcie x0;
b)
jeżeli xn, n = 0, 1, ..., ∞ jest dowolnym ciągiem liczb z zbioru X zbieżnym do x0, to
lim f ( x n ) = f ( x 0 ) .
n →∞
■
Definicja 10.4. Definicja funkcji różniczkowalnych
Niech f będzie funkcją zdefiniowaną na otwartym przedziale zawierającym x0. Mówimy, że funkcja f jest różniczkowalna w punkcie x0, jeżeli istnieje granica
lim
x → x0
f (x ) − f (x 0 )
.
x − x0
Granicę tę oznaczamy f’(x0) i nazywamy pochodną funkcji f w punkcie x0. Funkcję f
posiadającą pochodne w każdym punkcie zbioru X nazywamy różniczkowalną na tym zbiorze.
■
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 226
2008-02-21
Strona 227 z 246
Metody Numeryczne i Programowanie
Rozdział 10
Twierdzenie 10.2. Twierdzenie o funkcji różniczkowalnej
Jeżeli funkcja f jest różniczkowalna w punkcie x0, to jest ona w tym punkcie ciągła.
■
Uwaga 1: Zbiór wszystkich funkcji ciągłych na zbiorze X i mających ciągłe pochodne
do rzędu n włącznie oznaczamy Cn(X). Zbiór funkcji ciągłych, posiadające na zbiorze X ciągłe
pochodne dowolnego rzędu oznaczamy C∞(X).
Uwaga 2: Funkcje wielomianowe, wymierne, trygonometryczne, eksponencjalne i loga-
rytmiczne należą do klasy C∞(X), gdzie X jest zbiorem wszystkich punktów, w których funkcja jest zdefiniowana.
Kolejne twierdzenia mają duże znaczenie przy wyprowadzaniu zależności na błąd osza-
f(x)
cowania.
f(ξ)
ξ2
ξ1
x
Rysunek 10.2. Interpretacja geometryczna Twierdzenia Rolle’a o średniej.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 227
2008-02-21
Strona 228 z 246
Metody Numeryczne i Programowanie
Rozdział 10
Twierdzenie 10.3. Twierdzenie Rolle’a2 o średniej
Jeżeli funkcja f jest ciągła w przedziale domkniętym [a, b], co zapisujemy f ∈ C [a , b] , i
jest różniczkowalna wewnątrz tego przedziału (a, b) oraz jeżeli f(a) = f(b) = 0, to istnieje taki
punkt ξ ∈ (a, b ) , że f ′(ξ ) = 0 .
■
Zgodnie z interpretacją geometryczną z Twierdzenia Rolle’a o średniej wynika, że jeżeli krzywa stanowiąca wykres funkcji f przecina oś Ox w dwóch punktach a oraz b jest ciągła i
ma w sposób ciągły zmieniającą się styczną na całej rozciągłości od a do b, to istnieje przynajmniej jeden taki punkt c zawarty pomiędzy a oraz b, w którym styczna ta jest równoległa
do osi Ox (rysunek 10.2)
Twierdzenie 10.4. Twierdzenie Lagrange’a3 o wartości średniej
Jeżeli funkcja f jest ciągła w przedziale domkniętym [a, b] i różniczkowalna wewnątrz
tego przedziału (a, b), to istnieje taki punkt ξ ∈ (a, b), że
f (b ) − f (a )
= f ′(ξ ) .
b−a
(10.13)
■
W interpretacji geometrycznej Twierdzenie Lagrange’a o wartości średniej znajdujemy,
że nachylenie stycznej do funkcji f w punkcie (ξ, f(ξ)) jest takie samo jak nachylenie siecznej
przechodzącej przez punkty (a, f(a)) oraz (b, f(b)). Dodatkowo należy pamiętać, że istnieć
może więcej takich liczb jak ξ.
2
Michel Rolle (1652 – 1719), matematyk francuski.
3
Joseph Louis Lagrange (1736 – 1813), matematyk francuski.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 228
2008-02-21
Strona 229 z 246
f(x)
Metody Numeryczne i Programowanie
Rozdział 10
(b, f(b))
(a, f(a))
x
a
c
b
Rysunek 10.3. Interpretacja geometryczna Twierdzenia Lagrange’a o wartości średniej
Twierdzenie 10.5. Twierdzenie Fermata4 o wartości maksymalnej (o ekstremum)
Jeżeli funkcja f jest ciągła na przedziale domkniętym [a, b], f ∈ C [a , b] , to istnieją takie
punkty c1 , c 2 ∈ [a, b] , że f (c1 ) ≤ f ( x ) ≤ f (c 2 ) dla każdego x ∈ [a, b] . Jeżeli dodatkowo funkcja f jest różniczkowalna wewnątrz przedziału (a, b), to liczby c1 oraz c2 są punktami leżącymi na krańcach przedziału domkniętego [a, b] lub też pochodna f ′( x ) = 0 .
■
Twierdzenie 10.6. Twierdzenie całkowe o średniej
Jeżeli f będzie funkcją ciągłą w przedziale domkniętym [a, b], f ∈ C [a , b] , to wewnątrz
tego przedziału istnieje przynajmniej jedna taka liczba ξ ∈ (a, b ) , że
b
f (ξ ) =
∫ f (x )dx
a
b−a
.
(10.14)
Liczbę f(ξ) nazywamy wartością średnią funkcji f w przedziale [a, b].
4
Pierre de Fermat (1601 – 1665), matematyk francuski.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 229
2008-02-21
Strona 230 z 246
Metody Numeryczne i Programowanie
Rozdział 10
f(x)
■
(b, f(b))
(c, f(c))
(a, f(a))
a
c
b
x
Rysunek 10.4. Interpretacja geometryczna Twierdzenia całkowego o wartości średniej.
Z interpretacji geometrycznej tego twierdzenia (rysunek 10.3) wynika, że jeżeli funkcja
f(x) ≥ 0 dla dowolnego x z przedziału [a, b], to zgodnie z twierdzeniem 10.6. istnieje taka
liczba ξ ∈ (a, b ) , dla której pole powierzchni prostokąta o wysokości f(ξ) i szerokości b – a
jest takie samo jak pole powierzchni pod krzywą y = f(x).
Twierdzenie 10.7. Uogólnione twierdzenie całkowe o średniej
Jeżeli funkcja f ∈ C [a , b] , natomiast funkcja g jest całkowalna w przedziale domkniętym [a, b] oraz g(x) nie zmienia znaku w tym przedziale [a, b], to wewnątrz przedziału [a, b]
istnieje przynajmniej jedna taka liczba ξ, a < ξ < b , że
b
b
a
a
∫ f (x )g (x )dx = f (c )∫ g (x )dx .
(10.15)
■
UWAGA: Jeżeli g ( x ) ≡ 1 , to z twierdzenia 10.7 otrzymamy twierdzenie 10.6.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 230
2008-02-21
Strona 231 z 246
Metody Numeryczne i Programowanie
Rozdział 10
Twierdzenie 10.8. Uogólnione twierdzenie Rolle’a o średniej
Niech funkcja f ∈ C [a , b] będzie n – krotnie różniczkowalna wewnątrz przedziału (a,
b). Jeżeli funkcja f znika w n + 1 różnych punktach x0, x1, ..., xn należących do przedziału [a,
b], to istnieje taka liczba ξ, a < ξ < b , że f
(n )
(ξ ) = 0 .
f(x)
■
(b, f(b))
f(b)
K
x
f(b)
(a, f(a))
a
c
b
Rysunek 10.5. Interpretacja geometryczna Twierdzenia o wartości średniej.
Twierdzenie 10.9. Twierdzenie o wartości średniej
Jeżeli funkcja f ∈ C [a , b] i w punktach a oraz b przebiera dwie różne wartości, to dla
każdej liczby K leżącej pomiędzy f(a) oraz f(b) istnieje co najmniej jeden punkt c leżący pomiędzy a oraz b taki, że f (c ) = K .
■
Z Twierdzenie o wartości średniej wynika, że każda funkcja ciągła na przedziale domkniętym [a, b] przyjmuje wszystkie wartości pomiędzy f(a) oraz f(b). Innymi słowy funkcja
f nie „przeskakuje” żadnej wartości. Jego praktyczne wykorzystanie pokazuje przykład 10.6.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 231
2008-02-21
Strona 232 z 246
Metody Numeryczne i Programowanie
Rozdział 10
Przykład 10.6.
Pokazać, że funkcja f ( x ) = x 5 − 2 x 3 + 3x 2 − 1 ma rozwiązanie w przedziale [0, 1],
czyli, że istnieje taka liczba x 0 ∈ [0,1] , dla której f(x0) = 0.
Rozwiązanie
Łatwo wykazać, że funkcja f jest ciągłą w przedziale domkniętym [0, 1] oraz że f(0) = -
1 i f(1) = 1. Ponieważ f(0) < 0 < f(1), to na mocy twierdzenia o wartości średniej istnieje taka
liczba x0, 0 < x0 < 1, dla której f(x0) = 0.
■
Jak z przedstawionego przykładu 10.6. wynika twierdzenie o wartości średniej (twierdzenie 10.9.) ma duże znaczenie praktyczne, ponieważ jakkolwiek nie mówi o tym jak znaleźć rozwiązanie, to pozwala stwierdzić, kiedy rozpatrywany problem posiada rozwiązanie.
Twierdzenie 10.9. Twierdzenie o rozkładzie całki
Dla dowolnych liczb a, b, c zachodzi związek:
b
c
b
a
a
c
∫ f (x )dx = ∫ f (x )dx + ∫ f (x )dx .
(10.16)
■
Twierdzenie 10.10. Twierdzenie Taylora5
Załóżmy, że funkcja f ma w przedziale [a, b] ciągłe pochodne do rzędu n,
f ∈ C (n ) [a, b] , oraz że istnieje jej n + 1 pochodna. Niech x 0 ∈ [a, b] . Wtedy dla każdego
x ∈ [a, b] istnieje taka liczba ξ(x), x 0 < ξ ( x ) < x , że
f ( x ) = Pn ( x ) + Rn ( x ) ,
(10.17)
gdzie
5
Brook Taylor (1685 – 1731) matematyk angielski.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 232
2008-02-21
Strona 233 z 246
Metody Numeryczne i Programowanie
Rozdział 10
f ′′( x0 )
(x − x0 )2 +
2!
n
f (k ) ( x0 )
(x − x0 )k ,
=∑
k!
k =0
Pn ( x ) = f ( x0 ) + f ′( x0 )(x − x0 ) +
f (n ) ( x0 )
(x − x0 )n
+K+
n!
(10.18)
oraz
Rn (x ) =
f
(ξ ( x )) ( x − x )n +1 .
0
(n + 1)!
(n +1)
(10.19)
Pn(x) nazywane jest wielomianem Taylora n – tego stopnia wyznaczonym w otoczeniu
punktu x0. Natomiast Rn(x) jest tak zwanym błędem obcięcia (ang. truncation error) związanym z wielomianem Pn(x), a podanym w tak zwanej postaci Lagrange’a. Nieskończony szereg uzyskany z Pn(x) przy przejściu z n do nieskończoności nazywany jest szeregiem Taylora
funkcji f w otoczeniu punktu x0. W przypadku, gdy x0 = 0, wielomian Taylora nazywany
jest wielomianem Maclaurina, a szereg Taylora nazywany jest szeregiem Maclaurina6.
■
Określenie błąd obcięcia używa się jako określenie błędu powstającego przez obcięcie
kolejnych wyrażeń lub skończone sumowanie w przypadku, gdy chcemy oszacować wartość
sumy nieskończenie wielu wyrażeń.
Twierdzenie 10.11. Twierdzenie o istnieniu rozwiązania f(x) = 0 (Twierdzenie o przechodzeniu przez zero)
Jeżeli f jest funkcją jednej zmiennej ciągłą w przedziale domkniętym [a, b] i funkcja ta
ma różne znaki na krańcach tego przedziału, co zapisujemy f(a)⋅f(b) < 0, to istnieje co najmniej jeden taki punkt x 0 ∈ [a, b] taki, że f(x0) = 0.
■
Sens geometryczny tego twierdzenie jest taki, że krzywa ciągła przechodząca z jednej
strony osi Ox na drugą stronę przecina tę oś.
6
Colin Maclaurin (1698 – 1746) matematyk szkocki.
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 233
2008-02-21
Strona 234 z 246
Metody Numeryczne i Programowanie
Rozdział 10
Definicja 10.5.
Mówimy, że funkcja f(t, y) spełnia warunek Lipschitza ze względu na zmienną y z
zbioru D ⊂ R 2 , jeżeli istnieje taka stała L > 0, że dla każdego (t , y1 ), (t , y 2 ) ∈ D spełniony
jest warunek:
f (t , y1 ) − f (t , y 2 ) ≤ L y1 − y 2 .
(10.20)
Stałą L nazywamy stałą Lipschitza.
■
Twierdzenie 10.12.
Załóżmy, że funkcja f(t, y) jest zdefiniowana na zbiorze wypukłym D ⊂ R 2 . Jeżeli istnieje taka stała L, że
∂f
(t , y ) ≤ L dla każdego (t , y ) ∈ D ,
∂y
(10.21)
to funkcja f spełnia warunek Lipschitza na zbiorze D ze względu na zmienną y z stałą Lipschitza L.
■
Definicja 10.6
Jeżeli istnieje granica lim F ( x ) = L , to zbieżność tę nazywamy O(G(x)) wtedy, gdy istx →0
nieje taka liczba K > 0, niezależna od x, dla której dla dostatecznie małego x > 0 zachodzi:
f (x ) − L
G (x )
≤K.
(10.22)
Taką sytuację często sygnalizujemy wykorzystując zapis F(x) = L + O(G(x)) lub F(x) → L z
rzędem zbieżności O(G(x)).
■
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 234
2008-02-21
Strona 235 z 246
Metody Numeryczne i Programowanie
Rozdział 10
Twierdzenie 10.13 Twierdzenie Taylora dla funkcji dwóch zmiennych
Załóżmy, że funkcja f(t,y) oraz wszystkie jej pochodne cząstkowe aż do rzędu n + 1 są
ciągłe w obszarze D = {(t , y ) : a ≤ t ≤ b, c ≤ y ≤ d }. Niech (t0, y0) ∈ D. Wtedy dla dowolnego
(t, y) ∈ D istnieje taka liczba ξ ∈ [t, t0] oraz η ∈ [y, y0], że:
f (t , y ) = Pn (t , y ) + Rn (t , y )
(10.23)
gdzie
⎡
⎤
∂
∂
Pn (t , y ) = f (t 0 , y 0 ) + ⎢(t − t 0 ) f (t 0 , y 0 ) + ( y − y 0 ) f (t 0 , y 0 )⎥ +
∂t
∂y
⎣
⎦
⎤
⎡ (t − t 0 )2 ∂ 2
∂2
(
)
(
)(
)
(
)
+
−
−
+
f
t
,
y
t
t
y
y
f
t
,
y
⎥
⎢
0
0
0
0
0
0
∂t∂y
2
∂t 2
⎥+
⎢
+
⎥
⎢ ( y − y )2 ∂ 2
0
⎥
⎢+
(
)
f
t
,
y
0
0
2
∂y 2
⎦⎥
⎣⎢
+K +
(10.24)
∂n
1 n ⎛n⎞
⎜⎜ ⎟⎟(t − t 0 )n − j ( y − y 0 ) j n − j j f (t 0 , y 0 ),
∑
n! j =0 ⎝ j ⎠
∂t ∂y
oraz
1 n +1 ⎛ n + 1⎞
∂ n +1
n +1− j
j
⎜⎜
⎟(t − t 0 )
( y − y 0 ) n+1− j j f (t 0 , y 0 ) .
Rn (t , y ) =
j ⎟⎠
(n + 1)! ∑
∂t
∂y
j =0 ⎝
(10.25)
Wielomian Pn nazywany jest wielomianem Taylora stopnia n dwóch zmiennych dl
funkcji f w otoczeniu punktu (t0, y0). Rn(t, y) jest natomiast resztą tego wielomianu.
■
10.7. Normy wektorowe i macierzowe
Definicja 10.7.
Normą wektorową w przestrzeni rzeczywistej Rn zawierającej n – wymiarowe wektory
kolumnowe nazywamy funkcję ⋅ z Rn do R posiadającą następujące własności:
(i)
x ≥ 0 , dla każdego x ∈ R n ,
(ii)
x = 0 wtedy i tylko wtedy, gdy x = (0, 0, K , 0) ≡ 0 ,
(iii)
α ⋅ x = α ⋅ x dla każdego α∈R oraz x∈Rn,
T
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 235
2008-02-21
Strona 236 z 246
Metody Numeryczne i Programowanie
Rozdział 10
(iv)
x + y ≤ x + y dla każdego x, y∈Rn.
■
Definicja 10.8.
Normy wektorowe L1, L2 oraz L∞ wektora x = ( x1 , x 2 , K , x n ) definiuje się w spoT
sób następujący:
def
n
x 1 = ∑ xi
(norma pierwsza),
(10.26)
i =1
x
x
⎛ n
2⎞
= ⎜ ∑ xi ⎟
⎝ i =1
⎠
def
2
def
∞
= max xi
1≤i ≤ n
1
2
(norma druga lub euklidesowa),
(norma maksimum).
(10.27)
(10.28)
■
Definicja 10.9.
Normą macierzową na zbiorze n × n wymiarowych macierzy rzeczywistych nazywa-
my zdefiniowaną na tym zbiorze funkcję o wartościach rzeczywistych spełniająca dla każdej
n × n macierzy A oraz B oraz liczby rzeczywistej α następujące warunki:
(i)
A ≥0,
(ii)
A = 0 wtedy i tylko wtedy, gdy wszystkie elementy macierz A są równe zero,
(iii)
α ⋅A = α ⋅ A ,
(iv)
A+B ≤ A + B ,
(v)
A⋅B ≤ A ⋅ B .
■
Twierdzenie 10.14.
Jeżeli ⋅ jest jedną z norm wektorowych w przestrzeni Rn, to normę macierzową
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 236
2008-02-21
Strona 237 z 246
Metody Numeryczne i Programowanie
Rozdział 10
A = max Ax
(10.29)
x =1
nazywamy maturalną normą macierzową.
■
Jak z definicji 10.12 wynika, w zależności od przyjętej normy wektorowej rozróżniać
możemy trzy normy macierzowe: normę pierwszą , normę euklidesową lub drugą oraz normę
maksimum.
Twierdzenie 10.15.
Jeżeli A = (aij) jest macierzą kwadratową o wymiarze n × n to
A
n
∞
= max ∑ aij
1≤ i ≤ n
(10.30)
j =1
■
Definicja 10.10.
Jeżeli A jest n × n wymiarową macierzą kwadratową to wielomian:
p (λ ) = det ( A − λI )
(10.31)
nazywamy wielomianem charakterystycznym macierzy A.
■
Definicja 10.11.
Jeżeli p(λ) jest wielomianem charakterystycznym macierzy A, to zera wielomianu p nazywane są wartościami własnymi macierzy A. Jeżeli λ jest wartością własną macierzy A
oraz wektor x ≠ 0 ma własność taką, że (A - λI)x = 0, to wektor x nazywamy wektorem własnym macierzy A odpowiadający wartości własnej λ.
■
Definicja 10.12.
Promieniem spektralnym ρ(A) macierzy A nazywamy wyrażenie:
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 237
2008-02-21
Strona 238 z 246
Metody Numeryczne i Programowanie
Rozdział 10
ρ (A ) = max λ
(10.31)
gdzie λ są wartościami własnymi macierzy A.
■
Twierdzenie 10.16.
■
Mariusz B. Bogacki
Zakład Inżynierii Procesowej
Wydział Technologii Chemicznej
Politechnika Poznańska
Strona 238
2008-02-21

Podobne dokumenty