W tym rozdziale przedstawimy idee metody różnic skończonych na dwóch modelowych przykładach. Ze wszystkich metod przybliżonego rozwiązywania równań różniczkowych cząstkowych metoda ta wydaje się najbardziej intuicyjna w konstrukcji. W klasycznym sformułowaniu danego równania różniczkowego zamiast pochodnych rozpatrujemy ich przybliżenia. Na zadanej siatce rozpatrujemy przybliżenia pochodnych za pomocą różnic skończonych, czyli ilorazów różnicowych.
Rozpatrzmy następujące zagadnienie brzegowe:
(7.1) | |||||
dla nieujemnej stałej , ustalonego odcinka i znanych wartości .
Na podstawie tego modelowego zadania opiszemy ideę metody różnic skończonych (MRS).
Przyjmijmy następujące oznaczenia na różnicę skończoną w przód (ang. forward finite difference) i różnicę skończoną w tył (ang. backward finite difference) :
(7.2) | |||||
dla . Będziemy często opuszczali dolny indeks , jeśli będzie ustalone.
Dla ustalonego kroku rozważmy następującą aproksymację drugiej pochodnej:
(7.3) |
Nietrudno zauważyć, że jeśli funkcja jest klasy w otoczeniu to:
(7.4) |
co pozostawiamy jako zadanie, zob. ćwiczenie 7.1.
Wprowadzając siatkę (ang. mesh), czyli zbiór dyskretny dla :
z i , możemy zdefiniować następujące zadanie dyskretne: znaleźć funkcję określoną na siatce taką, że
(7.5) | |||||
(7.6) |
Przyjmujemy, że przyjmuje wartości i .
Możemy przypuszczać, że będzie aproksymowało w jakimś sensie rozwiązanie zadania wyjściowego w punktach siatki.
Jak porównać określone na zbiorze dyskretnym z określonym na całym domknięciu obszaru? Możemy porównać te funkcje w punktach siatki licząc błąd:
dla funkcji obcięcia (ang. restriction) określonej na siatce, przyjmującej wartości w punktach siatki, ale możemy też badać dyskretną normę Euklidesową , czyli pierwiastek z sumy kwadratów błędów w punktach siatki przeskalowanych przez :
dla . Popatrzmy na wykres rozwiązania zadania dyskretnego dla i , dla którego rozwiązaniem jest dla sześciu punktów i dla dwudziestu punktów, por. rysunki 7.1 i 7.2. Widać, że dla dwudziestu punktów siatki rozwiązanie przybliżone pokrywa się z rozwiązaniem dokładnym w punktach siatki.
Będziemy badać błąd w normach i dla połowionych kroków, tzn. dla dla ustalonego . Wyniki w tabeli 7.1 sugerują, że błędy dyskretne w obu normach są rzędu dwa, tzn. że i . W kolejnych rozdziałach wyjaśnimy dlaczego tak jest. Jak się okaże wyniki eksperymentu są zgodne z oszacowaniami otrzymanymi teoretycznie.
Przyjmując oznaczenie otrzymujemy następujący układ równań liniowych:
Wstawiając i do układu równań otrzymujemy następujący układ równań:
(7.7) |
czyli układ z macierzą trójdiagonalną, który można rozwiązać np. metodą przeganiania (wersja rozkładu LU dla macierzy trójdiagonalnej) kosztem dla , czy nawet większych (w zależności od dostępnego komputera).
W tym rozdziale rozpatrzymy modelowe zadanie eliptyczne dwuwymiarowe na kwadracie jednostkowym . Zadanie polega na znalezieniu takiego, że
(7.8) | |||||
gdzie , jest ustaloną nieujemną stałą, - to funkcja ciągła na , a - to funkcja ciągła na . Zakładamy, że istnieje jednoznaczne rozwiązanie (7.8).
Dla ustalonego kroku rozważmy następującą aproksymację drugiej pochodnej cząstkowej (por. (7.3)):
(7.9) |
gdzie jest -tym wersorem.
Wprowadzamy siatkę (zbiór dyskretny) dla :
(7.10) |
i jej odpowiednie podzbiory i .
Definiujemy następujące zadanie dyskretne: chcemy znaleźć funkcję określoną na siatce taką, że
(7.11) |
Tak, jak w przypadku jednowymiarowym, możemy porównywać błąd w punktach siatki w dyskretnej normie maksimum:
dla zdefiniowanego analogicznie, tzn. funkcji określonej na siatce przyjmującej wartości w punktach siatki lub w dyskretnej normie :
dla .
W Tabeli 7.2 podane są wyniki obliczeń dla dyskretyzacji (7.11) zadania (7.8) z ze znanym rozwiązaniem i odpowiednio dobranymi i dla na brzegu kwadratu. Stosunki norm dyskretnych dla danego względem błędu dla sugerują, że w tym przypadku widzimy rząd zbieżności kwadratowej w obu normach, tzn. że i , tak samo jak w przypadku jednowymiarowym. Oczywiście obliczenia czyli rozwiązywanie odpowiedniego układu równań liniowych jest teraz bardziej kosztowne, jako że np. dla czyli , otrzymujemy układ równań liniowych z niewiadomymi i z macierzą o elementach. Jednak macierz jest pasmowa - o paśmie szerokości i o około , czyli ma niezerowych elementów. Zatem możemy jeszcze zastosować specjalne, bezpośrednie metody rozwiązywania układów równań liniowych, takie jak odpowiednia wersja rozkładu , por. np. [9], czy - jeśli trzymamy tę macierz w formacie rzadkim, np. spakowanych kolumn, czy wierszy - to możemy zastosować jakąś bezpośrednią metodę dla macierzy rzadkich, np. metodę frontalną, por. [8]. Warto zauważyć, że w tym szczególnym przypadku obszaru znamy wartości i wektory własne tej macierzy i możemy zastosować specjalne metody rozwiązywania tego układu równań z wykorzystaniem algorytmu szybkiej transformaty Fouriera (FFT) (ang. Fast Fourier Transform), por. [10].
Moglibyśmy też rozważyć siatkę z różnymi rozmiarami względem obu osi tzn.:
dla i i jej odpowiednie podzbiory i .
Wtedy oczywiście otrzymalibyśmy trochę inny układ równań, ale generalnie o tych samych właściwościach.
Zauważmy, że dla obszaru możemy tak dobrać kroki siatki, aby otrzymać w sposób naturalny punkty siatki leżące na . W przypadku obszarów o bardziej skomplikowanej geometrii, które nie są prostokątami, czy sumami prostokątów, często nie ma takiej możliwości. Taka sytuacja ma miejsce np. gdy jest kołem.
Dla dowolnego i naszej aproksymacji różnicowej Laplasjanu wprowadzamy pomocniczą siatkę na postaci dla ustalonego punktu i dodatnich kroków. Dla i naszego operatora różnicowego definiujemy otoczenie siatkowe (ang. mesh neighborhood) punktu jako podzbiór taki, aby było zdefiniowane poprzez wartości w , czyli w tym przypadku otoczenie siatkowe zawiera dany punkt i cztery sąsiednie punkty leżące na pionowej i poziomej prostej przechodzącej przez tzn. , por. rysunek 7.4.
Wtedy definiujemy , a
czyli złożoną z takich punktów , że ten punkt i sąsiednie punkty na osiach siatki należą do . Wtedy , por. rysunek 7.3. (W przypadku bardziej skomplikowanych operatorów definicja może być inna, a zatem i definicja może być inna).
Następnie będziemy szukali funkcji zdefiniowanej na tej siatce tj. w .
Zauważmy, że wtedy dla każdego
jest poprawnie zdefiniowany. Pojawia się natomiast pytanie, jak postawić warunek brzegowy Dirichleta w punktach , które nie leżą na . Najprostszym rozwiązaniem dla , który leży w , jest postawienie w takim punkcie warunku:
gdzie taki, że odległość od jest nie większa niż . Dalej postępujemy jak w przypadku obszaru prostokątnego.
Rozwiązanie wyjściowego zadania jest określone we wszystkich punktach , ponieważ . Operator obcięcia definiujemy tak samo, tzn.:
Dla dostatecznie gładkiego otrzymujemy:
dla i tylko:
jeśli . Pokazanie tego pozostawiamy jako zadanie.
Oznacza to, że dokładność schematu na rozwiązaniu wyjściowego zagadnienia różniczkowego, czyli rząd aproksymacji schematu (który formalnie zostanie zdefiniowany w kolejnym rozdziale, por. definicja 8.4) wynosi jeden. Istnieją oczywiście metody podwyższania rzędu aproksymacji w tym przypadku poprzez odpowiednią interpolację warunków brzegowych z brzegu obszaru na punkty siatki leżące wewnątrz .
Udowodnij, (7.4).
Rozpatrzmy zadanie różniczkowe jednowymiarowe:
czyli równanie (7.5), ale z warunkiem brzegowym Neumanna : tzn. z i . Pokaż, że jeśli to zadanie ma jednoznaczne rozwiązanie.
Rozważmy następującą dyskretyzację na siatce z i :
Sprawdź, czy to zadanie dyskretne ma jednoznaczne rozwiązanie. Sformułuj je jako układ równań liniowych:
dla , znajdując macierz i wektor prawej strony . Czy ta macierz jest symetryczna, czy jest nieosobliwa? Czy jest trój-diagonalna? Jak rozwiązać powyższy układ możliwie małym kosztem?
Rozpatrzmy zadanie i schemat z poprzedniego zadania. Zbadaj, dla jakiego możliwie dużego lokalny błąd schematu posiada rząd , czyli
Zakładamy dowolnie wysoką regularność rozwiązania zadania wyjściowego.
Rozpatrzmy zadanie różniczkowe i schemat z ćwiczenia 7.2, ale z . Pokaż, że zadanie nie ma jednoznacznego rozwiązania w ogólności, ale ma z dokładnością do stałej, o ile . Jaki warunek musi spełniać , aby zadanie dyskretne miało rozwiązanie? Sformułuj ten schemat jako układ równań liniowych, jak w ćwiczeniu 7.2. Pokaż, że jądro macierzy jest jednowymiarowe. Znajdź bazę jądra tej macierzy. Wykorzystując tę informację zaproponuj tanią (w sensie ilości operacji arytmetycznych) metodę znalezienia rozwiązania dyskretnego z dodatkowym warunkiem .
Analogicznie do przypadku jednowymiarowego, biorąc ,
i możemy zapisać zadanie dyskretne (7.11), jako układ równań liniowych z macierzą i wektorem prawej strony . Wyznacz tę macierz i ten wektor (por. (7.7) dla przypadku jednowymiarowego). Oblicz, ile elementów różnych od zera ma ta macierz. Policz, ile operacji arytmetycznych jest potrzebnych do rozwiązania tego układu równań liniowych z zastosowaniem metody Choleskiego, czyli rozkładu dla macierzy dolnotrójkątnej w wersji dla macierzy pasmowych.
Stwórz w octavie macierz z poprzedniego zadania dla , tzn. macierz układu równań powstałego z (7.11), jako macierz pełną i rzadką (można wykorzystać funkcję octave'a sparse()
). Następnie rozwiąż ten układ dla wektora prawej strony odpowiadającego funkcji dla .
Korzystając z narzędzi octave'a tic()
i toc()
sprawdź czas rozwiązywania dla różnych np. itp. dla obu typów macierzy. Czy różnica jest znacząca?
Zbadaj błąd dyskretny w normie maksimum (funkcja octave'a norm(wektor,'inf')
) i w dyskretnej normie (np. używając funkcji octave'a norm(x,2)
) między rozwiązaniem dokładnym , a rozwiązaniem dyskretnym dla .
Czy eksperyment potwierdza teorię, tzn. czy dla podwojonych (czyli połowionych ) błąd maleje czterokrotnie?
Rozwiąż równanie z warunkami brzegowymi na przy pomocy metody różnic skończonych, tzn. rozwiąż zadanie (7.1) dla i za pomocą schematu (7.5) dla . Policz normę maksimum w punktach siatki między dokładnymi wartościami rozwiązania a rozwiązaniem dyskretnym zadania (7.5), Porównaj z wynikami metody strzałów zastosowanej do tego zadania tj. z ćwiczeniem 6.2.
Rozpatrzmy przeskalowaną macierz z (7.7) (dla ):
Pokaż, że jej wartości własne to dla z odpowiednimi wektorami własnymi: dla . Oszacuj uwarunkowanie macierzy tzn. dla .
Porównaj z wynikami otrzymanymi przy pomocy funkcji octave'a eig()
i cond()
.
Korzystamy z wzorów trygonometrycznych: oraz .
Zauważmy, że biorąc otrzymujemy, że . Zatem wystarczy sprawdzić, czy zachodzą równania dla .
Biorąc otrzymujemy:
Uwarunkowanie dla dużych dąży do nieskończoności jak .
Treść automatycznie generowana z plików źródłowych LaTeXa za pomocą oprogramowania wykorzystującego LaTeXML.
strona główna | webmaster | o portalu | pomoc
© Wydział Matematyki, Informatyki i Mechaniki UW, 2009-2010. Niniejsze materiały są udostępnione bezpłatnie na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 3.0 Polska.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.
Projekt współfinansowany przez Ministerstwo Nauki i Szkolnictwa Wyższego i przez Uniwersytet Warszawski.