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