Zagadnienia

7. Metoda różnic skończonych dla równań eliptycznych drugiego rzędu

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.

7.1. Modelowe zadanie jednowymiarowe

Rozpatrzmy następujące zagadnienie brzegowe:

Lux=-u′′x+cux=fxxΩ=a,b, (7.1)
ua=α,
ub=β

dla nieujemnej stałej c, ustalonego odcinka a,b 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) :

hux=h-1ux+h-ux, (7.2)
¯hux=h-1ux-ux-h.

dla h>0. Będziemy często opuszczali dolny indeks h, jeśli h będzie ustalone.

Dla ustalonego kroku h>0 rozważmy następującą aproksymację drugiej pochodnej:

¯hux=¯ux=¯ux=ux-h-2ux+ux+hh2. (7.3)

Nietrudno zauważyć, że jeśli funkcja u jest klasy C4 w otoczeniu x to:

u′′x=¯ux+Oh2. (7.4)

co pozostawiamy jako zadanie, zob. ćwiczenie 7.1.

Wprowadzając siatkę (ang. mesh), czyli zbiór dyskretny dla h=b-a/N :

Ω¯h=a+k*hk=0N

z Ωh=a+k*hk=1N-1 i Ωh=a+k*hk=0,N=a,b, możemy zdefiniować następujące zadanie dyskretne: znaleźć uh funkcję określoną na siatce Ω¯h taką, że

-¯uhx+cuhx=fxxΩh (7.5)
ux=gxxΩh (7.6)

Przyjmujemy, że g:ΩR przyjmuje wartości ga=α i gb=β.

Możemy przypuszczać, że uh będzie aproksymowało w jakimś sensie u rozwiązanie zadania wyjściowego w punktach siatki.

\
Rys. 7.1. Wykres rozwiązania dokładnego ux=sinx zadania (7.1) i rozwiązania przybliżonego (7.5) oznaczonego plusami dla siatki sześciopunktowej .
\
Rys. 7.2. Wykres rozwiązania dokładnego ux=sinx zadania (7.1) i rozwiązania przybliżonego (7.5) oznaczonego plusami dla dwudziestu punktów.

Jak porównać uh określone na zbiorze dyskretnym z u określonym na całym domknięciu obszaru? Możemy porównać te funkcje w punktach siatki licząc błąd:

uh-rhu,h=maxxΩ¯huhx-ux

dla rhu funkcji obcięcia (ang. restriction) określonej na siatce, przyjmującej wartości u w punktach siatki, ale możemy też badać dyskretną normę Euklidesową Lh2, czyli pierwiastek z sumy kwadratów błędów w punktach siatki przeskalowanych przez h:

uh-rhu0,h=hk=0Nuhxk-uxk2

dla xk=a+k*h. Popatrzmy na wykres rozwiązania zadania dyskretnego dla c=0,a=0,b=π i fx=sinx, dla którego rozwiązaniem jest ux=sinx 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 ,h i 0,h dla połowionych kroków, tzn. dla 2-kh0 dla ustalonego h0=π/10. Wyniki w tabeli 7.1 sugerują, że błędy dyskretne w obu normach są rzędu dwa, tzn. że rhu-uh,h=Oh2 i rhu-uh0,h=Oh2. W kolejnych rozdziałach wyjaśnimy dlaczego tak jest. Jak się okaże wyniki eksperymentu są zgodne z oszacowaniami otrzymanymi teoretycznie.

Neh,heh,h/e2h,2heh0,heh0,h/e2h0,2h108.265e-031.036e-02202.059e-034.01e+002.580e-034.01e+00405.142e-044.00e+006.445e-044.00e+00801.285e-044.00e+001.611e-044.00e+001603.213e-054.00e+004.027e-054.00e+003208.032e-064.00e+001.007e-054.00e+006402.008e-064.00e+002.517e-064.00e+0012805.020e-074.00e+006.292e-074.00e+0025601.255e-074.00e+001.573e-074.00e+0051203.138e-084.00e+003.933e-084.00e+00
Tabela 7.1. Badanie błędu dyskretnego dla dyskretyzacji różnicami skończonymi zadania -u′′=sinx dla x0,π z u0=uπ=0 dla którego znamy rozwiązanie ux=sinx. W kolumnie drugiej podajemy normę błędu eh=rhu-uh w dyskretnej normie maksimum, a w kolumnie czwartej w dyskretnej normie L2. W kolumnach trzeciej i piątej podajemy stosunek odpowiedniej normy błędu dla danego h względem normy błędu dla 2*h.

Przyjmując oznaczenie uk=uhxk=uha+k*h otrzymujemy następujący układ równań liniowych:

u0=ga,1h2-uk-1+2*uk-uk-1+c*uk=fxk=fkk=1,,N-1,uN=gb.

Wstawiając u0=ga i uN=gb do układu równań otrzymujemy następujący układ równań:

1h22+c*h2-100-12+c*h2-10-12+c*h2-100-12+c*h2u1u2uN-2uN-1=f1+1h2gau2uN-2uN-1+1h2gb, (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 ON dla N106, czy nawet większych N (w zależności od dostępnego komputera).

7.2. Modelowe zadanie dwuwymiarowe

W tym rozdziale rozpatrzymy modelowe zadanie eliptyczne dwuwymiarowe na kwadracie jednostkowym Ω¯=0,12. Zadanie polega na znalezieniu uC2ΩCΩ¯ takiego, że

Lux=-ux+cux=fxxΩ (7.8)
us=gssΩ,

gdzie u=k=122uxk2, c jest ustaloną nieujemną stałą, f - to funkcja ciągła na Ω, a g - to funkcja ciągła na Ω. Zakładamy, że istnieje jednoznaczne rozwiązanie (7.8).

Dla ustalonego kroku h>0 rozważmy następującą aproksymację drugiej pochodnej cząstkowej (por. (7.3)):

¯k,hux=¯kux=¯kux=ux-hek-2ux+ux+hekh2.k=1,2, (7.9)

gdzie ek jest k-tym wersorem.

Wprowadzamy siatkę (zbiór dyskretny) dla h=1/N:

Ω¯h=k*h,l*hk,l=0N (7.10)

i jej odpowiednie podzbiory Ωh=k*h,l*hk,l=1N-1Ω i Ωh=k*h,l*hk,l=0,NΩ.

Definiujemy następujące zadanie dyskretne: chcemy znaleźć uh funkcję określoną na siatce Ω¯h taką, że

-k=1,2¯kuhx+cuhx=fxxΩh,ux=gxxΩh (7.11)

Tak, jak w przypadku jednowymiarowym, możemy porównywać błąd w punktach siatki w dyskretnej normie maksimum:

uh-rhu,h=maxxΩ¯huhx-ux

dla rhu zdefiniowanego analogicznie, tzn. funkcji określonej na siatce przyjmującej wartości u w punktach siatki lub w dyskretnej normie Lh2:

uh-rhu0,h=h2k,l=0Nuhxk,l-uxk,l2

dla xk,l=k*h,l*h.

Nzh,hzh,h/zh,2hzh0,hzh0,h/zh0,2h105.211e-052.789e-05201.317e-053.96e+007.011e-063.98e+00403.298e-063.99e+001.755e-063.99e+00808.254e-074.00e+004.389e-074.00e+001602.064e-074.00e+001.097e-074.00e+00
Tabela 7.2. Badanie błędu dyskretnego dla dyskretyzacji różnicami skończonymi dwuwymiarowego zadania -u=2*sinx*cosx na x0,12, dla którego znamy rozwiązanie ux=sinxcosx z odpowiednim warunkiem brzegowym Dirichleta na Ω. W kolumnie drugiej podajemy normę błędu zh=rhu-uh w dyskretnej normie maksimum, a w kolumnie czwartej w dyskretnej normie L2. W kolumnach trzeciej i piątej podajemy stosunek odpowiednich norm dla danego h względem normy błędu dla 2*h.

W Tabeli 7.2 podane są wyniki obliczeń dla dyskretyzacji (7.11) zadania (7.8) z c=0 ze znanym rozwiązaniem ux=sinxcosx i odpowiednio dobranymi fx,y=2sinxcosx i gx,y=ux,y dla x na brzegu kwadratu. Stosunki norm dyskretnych dla danego h względem błędu dla 2*h sugerują, że w tym przypadku widzimy rząd zbieżności kwadratowej w obu normach, tzn. że rhu-uh,h=Oh2 i rhu-uh0,h=Oh2, 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 N=160 czyli h=1/160, otrzymujemy układ równań liniowych z M=1592=25281 niewiadomymi i z macierzą o M2=6.3912*108 elementach. Jednak macierz jest pasmowa - o paśmie szerokości N-1 i o około 4*M, czyli ma 105 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 LU, 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 Ω=0,12 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ę Ω¯h z różnymi rozmiarami hk k=1,2 względem obu osi tzn.:

Ω¯h=k*h1,l*h2k=0,,N;l=0,,M

dla h1=1/N i h2=1/M i jej odpowiednie podzbiory Ωh=Ω¯hΩ i Ωh=Ω¯hΩ.

Wtedy oczywiście otrzymalibyśmy trochę inny układ równań, ale generalnie o tych samych właściwościach.

7.2.1. Warunki brzegowe dla obszaru o skomplikowanej geometrii

Zauważmy, że dla obszaru Ω¯=0,12 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.

\
Rys. 7.3. Siatka dla obszaru nieprostokątnego. Czarne punkty należą do Ωh.
\
Rys. 7.4. Siatka dla obszaru nieprostokątnego. Otoczenia siatkowe dla operatora Lh=-k=1,2¯k.

Dla dowolnego Ω i naszej aproksymacji różnicowej Laplasjanu wprowadzamy pomocniczą siatkę na R2 postaci Sh=x0+k*h1,l*h2k,lZ dla x0 ustalonego punktu i h1,h2 dodatnich kroków. Dla xSh i naszego operatora różnicowego Lhuhx=-k=1,2¯kuhx+cuhx definiujemy otoczenie siatkowe (ang. mesh neighborhood) punktu x jako podzbiór Sh taki, aby Lhuhx było zdefiniowane poprzez wartości uh w Nhx, czyli w tym przypadku otoczenie siatkowe Nhx zawiera dany punkt x i cztery sąsiednie punkty leżące na pionowej i poziomej prostej przechodzącej przez x tzn. Nh(x)={x,x+h1*e1,x-h1*e1,x+h2*e2,x-h2*e2,}, por. rysunek 7.4.

Wtedy definiujemy Ω¯h=ShΩ¯, a

Ωh=xShΩ:NhxΩ¯ΩSh,

czyli złożoną z takich punktów Ω, że ten punkt i sąsiednie punkty na osiach siatki należą do Ω. Wtedy Ωh=Ω¯hΩh, por. rysunek 7.3. (W przypadku bardziej skomplikowanych operatorów definicja Nhx może być inna, a zatem i definicja Ωh może być inna).

Następnie będziemy szukali funkcji zdefiniowanej na tej siatce tj. w Ω¯h=ΩhΩh.

Zauważmy, że wtedy dla każdego xΩh

Lhuhx=-k=1,2¯kuhx+cuhx=fhx=fx

jest poprawnie zdefiniowany. Pojawia się natomiast pytanie, jak postawić warunek brzegowy Dirichleta w punktach Ωh, które nie leżą na Ω. Najprostszym rozwiązaniem dla xΩh, który leży w Ω, jest postawienie w takim punkcie warunku:

lhuhx=gxs=ghx,

gdzie xsΩ taki, że odległość od x jest nie większa niż h. Dalej postępujemy jak w przypadku obszaru prostokątnego.

Rozwiązanie wyjściowego zadania u jest określone we wszystkich punktach Ω¯h, ponieważ ΩhΩ¯. Operator obcięcia definiujemy tak samo, tzn.:

rhux=uxxΩ¯h.

Dla u dostatecznie gładkiego otrzymujemy:

Lhrhu-fh,h,Ωh:=maxxΩhLhrhux-fhx=Oh2

dla h=maxh1,h2 i tylko:

lhrhu-ghx,h,Ωh:=maxxΩhlhrhux-ghx=Oh.

jeśli ΩhΩ. 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 Ωh leżące wewnątrz Ω.

7.3. Zadania

Ćwiczenie 7.1

Udowodnij, (7.4).

Ćwiczenie 7.2

Rozpatrzmy zadanie różniczkowe jednowymiarowe:

-u′′x+cxux=fw0,1

czyli równanie (7.5), ale z warunkiem brzegowym Neumanna : tzn. z ua=ga i ub=gb. Pokaż, że jeśli cxc0>0 to zadanie ma jednoznaczne rozwiązanie.

Rozważmy następującą dyskretyzację na siatce Ω¯h=xkk=0,,N z h=b-a/N i xk=k*h:

Lhuhx:=-¯uhx+cuhx=fxxΩh
lh,auh:=hua=galh,buh=¯hub=gb

Sprawdź, czy to zadanie dyskretne ma jednoznaczne rozwiązanie. Sformułuj je jako układ równań liniowych:

Au=F

dla u=u0,,uNT, znajdując macierz A i wektor prawej strony F. 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?

Ćwiczenie 7.3

Rozpatrzmy zadanie i schemat z poprzedniego zadania. Zbadaj, dla jakiego możliwie dużego p lokalny błąd schematu posiada rząd p, czyli

maxmaxxΩhLhrhux-fx,maxsa,blh,srhus-gs=Ohp

Zakładamy dowolnie wysoką regularność rozwiązania zadania wyjściowego.

Ćwiczenie 7.4

Rozpatrzmy zadanie różniczkowe i schemat z ćwiczenia 7.2, ale z c=α=β=0. Pokaż, że zadanie nie ma jednoznacznego rozwiązania w ogólności, ale ma z dokładnością do stałej, o ile abf=0. Jaki warunek musi spełniać fh, 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 A 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 uha=0.

Ćwiczenie 7.5

Analogicznie do przypadku jednowymiarowego, biorąc xkl=k*h,l*h,

uk-1+l-1*N-1=uxkl

i u=uk-1+l-1*N-1k,l=1N-1 możemy zapisać zadanie dyskretne (7.11), jako układ równań liniowych Ahu=f z macierzą Ah i wektorem prawej strony f. 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 A=LTL dla L macierzy dolnotrójkątnej w wersji dla macierzy pasmowych.

Ćwiczenie 7.6 (laboratoryjne)

Stwórz w octavie macierz z poprzedniego zadania dla c=0, 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 f=-u* dla u*=x1-xy1-y.

  1. Korzystając z narzędzi octave'a tic() i toc() sprawdź czas rozwiązywania dla różnych N np. N=20,80,320 itp. dla obu typów macierzy. Czy różnica jest znacząca?

  2. Zbadaj błąd dyskretny w normie maksimum (funkcja octave'a norm(wektor,'inf')) i w dyskretnej normie L2 (np. używając funkcji octave'a norm(x,2)) między rozwiązaniem dokładnym u*, a rozwiązaniem dyskretnym dla N=10,20,40,80,160. Czy eksperyment potwierdza teorię, tzn. czy dla podwojonych N (czyli połowionych h) błąd maleje czterokrotnie?

Ćwiczenie 7.7 (laboratoryjne)

Rozwiąż równanie -d2udx2+u=0 z warunkami brzegowymi u0=u20=1 na 0,20 przy pomocy metody różnic skończonych, tzn. rozwiąż zadanie (7.1) dla a=0,b=20 i cx=1 za pomocą schematu (7.5) dla N=100,200. Policz normę maksimum w punktach siatki między dokładnymi wartościami rozwiązania u*x=et-20+e-t/1+e-20 a rozwiązaniem dyskretnym uh zadania (7.5), Porównaj z wynikami metody strzałów zastosowanej do tego zadania tj. z ćwiczeniem 6.2.

Ćwiczenie 7.8 (częściowo laboratoryjne)

Rozpatrzmy przeskalowaną macierz z (7.7) (dla c=0):

AN-1=2-1-12-1-12-1-12RN-1,N-1

Pokaż, że jej wartości własne to λk=4*sin2k*π2*N dla k=1,,N-1 z odpowiednimi wektorami własnymi: xk=sink*π*jNn=1N-1 dla k=1,,N-1. Oszacuj uwarunkowanie macierzy tzn. maxkλkminkλk dla N1.

Porównaj z wynikami otrzymanymi przy pomocy funkcji octave'a eig() i cond().

Wskazówka: 

Korzystamy z wzorów trygonometrycznych: sina+sinb=2*sina+b/2*cosa-b/2 oraz cos2*a=1-2*sin2a.

Rozwiązanie: 

Zauważmy, że biorąc vj,k=vkj=sink*π*jN otrzymujemy, że v0,k=vN,k=0. Zatem wystarczy sprawdzić, czy zachodzą równania -vj-1,k+2vj,k-vj+1,k=λkvj,k dla j=1,,N-1.

Biorąc αk=k*π/N otrzymujemy:

-vj-1,k+2vj,k-vj+1,k=-(sin((j-1)αk)-sin((j+1)αk)+2*sin(j*αk)
=-2*sinj*αk*cosαk+2*sinj*αk
=21-cosαksinj*αk=4sin2αk/2sinj*αk
=4*sin2αk/2*vj,k=4*sin2k*π2*N*vj,k=λk*vj,k.

Uwarunkowanie sin2((N-1)*π)/2*N)sin2π/2*N dla dużych N dąży do nieskończoności jak N2.

Treść automatycznie generowana z plików źródłowych LaTeXa za pomocą oprogramowania wykorzystującego LaTeXML.

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.