ru tatu
Transkrypt
ru tatu
Metody numeryczne Wykład nr 10 Dr Piotr Fronczak Równania róŜniczkowe cząstkowe (RRC) • liczba zmiennych ≥ 2 u = u ( x, y, L) F (x, y, u , u x , u y , u xx , u xy , u yy ,L) = 0 ∂u ∂u ∂ 2u ∂ 2u ux = ,uy = , u xx = 2 , u xy = ,L ∂x ∂y ∂x ∂x∂y • rząd równania: rząd najwyŜszej pochodnej u x − b 3u y = 0 u xx + u 3y = 0 u x + u yyy = 0 • charakterystyka: liniowe, quasi-liniowe, nieliniowe a (⋅ ) u x + b (⋅ ) u y + c (⋅ ) = 0 a(⋅), b(⋅), c(⋅) (⋅) ≡ (x, y ) ...Liniowe (⋅) ≡ (x, y, u ) (⋅) ≡ (x, y, u, u x , u y ) ...Quasi − liniowe ...Nieliniowe u x + bu y = 0 ux + u ⋅ u y + x2 = 0 u x + (u y ) = 0 2 A(:)u xx + B(:)u xy + C (:)u yy + D (⋅)u x + E (⋅)u y + F (⋅) = 0 A(:), B(:), C (:): (:) ≡ (x, y ) (:) ≡ (x, y, u, u x , u y ) (:) ≡ (x, y, u, u x , u y , u xx , u xy , u yy ) ...Liniowe ...Quasi − liniowe ...Nieliniowe • • Skupmy się na RRC co najwyŜej drugiego rzędu – najpopularniejsze w fizyce Ogólna postać RRC drugiego rzędu ∂u ∂u ∂ 2u ∂ 2u ∂ 2u A( x, y ) 2 + B ( x, y ) + C ( x , y ) 2 = G (u , , , x, y ) ∂x ∂y ∂x ∂x∂y ∂y Au xx + Bu xy + Cu yy = G (u, u x , u y , x, y ) B2-4AC Kategoria Przykład <0 eliptyczne Równanie Laplace’a ∂ 2T ∂ 2T + =0 ∂x 2 ∂y 2 =0 paraboliczne Równanie przewodnictwa ciepła ∂ 2 T ∂T k 2 = ∂x ∂t >0 hiperboliczne Równanie falowe ∂ 2y 1 ∂ 2y = 2 2 2 ∂x c ∂t Motywacja dla takiej klasyfikacji ∂2 ∂2 2 − 2 u = C ∂y ∂x hiperbolic zne ; ∂2 2 u = C ∂x parabolicz ne ; ∂2 ∂2 2 + 2 u = C ∂y ∂x eliptyczne Najprostsze rozwiązania: u= C 2 x − y2 4 ( ) hiperbola ; u= C 2 x 2 parabola ; u= C 2 x + y 2 = C elipsa 4 ( ) RównieŜ dla bardziej skomplikowanych równań lokalne własności rozwiązanie zaleŜą od znaku wyraŜenia B2-4AC. Zagadka: Skategoryzuj równanie Schrodingera. Eliptyczne RRC - dwuwymiarowe zagadnienie brzegowe Równanie Laplace’a • • • ∂ 2u ∂ 2u + =0 2 2 ∂x ∂y hx ui,j hy Zakładamy hx = hy = h [siatka kwadratowa] u(xi,yj) = ui,j u(xi+h, yj+h) = ui+1,j+1, 1 u ' ' (xi , y j )x ≈ 2 ui −1, j − 2ui , j + ui +1, j h 1 u ' ' (xi , y j )y ≈ 2 ui , j −1 − 2ui , j + ui , j +1 h u ' ' (xi , y j )x + u ' ' (xi , y j )y ≈ [ [ yj+1 yj yj-1 ] ] xi-1 xi xi+1 1 { ui −1, j − 2ui , j + ui +1, j }+ {ui , j −1 − 2ui , j + ui , j +1} = 2 h 1 ui −1, j + ui , j −1 − 4ui , j + ui +1, j + ui , j +1 = 0 2 h [ [ ] ] Sumując wyrazy wyznaczamy ui,j: ui , j 1 = {ui −1, j + ui , j −1 + ui +1, j + ui , j +1 } 4 Przykład: siatka 3x3 Przyjmujemy początkowe przybliŜenie u11 = u12 = u31 = u14 = 0 Korzystamy z metody iteracyjnej Jacobiego (lub Gaussa-Seidla – szybsza zbieŜność) u=0 1 1 u=0 2 u=0 3 4 0.9 0.8 0.7 0.6 u=1 0.5 u1m +1 = 14 (0 + u 2m + u3m + 0) u m +1 2 = (0 + 0 + u + u ) u m +1 3 = (u + u + 1 + 0) u m +1 4 = (u + 0 + 1 + u ) m 4 1 4 1 4 1 4 m 1 m 2 m 1 m 4 m 3 0.4 0.3 0.2 S4 0.1 S3 0 1 S2 2 3 4 S1 Korzystając z metod dokładnych (np. dekompozycja LU) musimy ułoŜyć macierz o rozmiarze liniowym n x n. Wniosek: Musimy wprowadzić indeksowanie równań odpowiadających punktom dwuwymiarowej siatki n x n: ( j, k ) → P (na przykład wierszami) P = (k − 1) ⋅ n + j Przykład: równanie Poissona ρ ∆ϕ = ε0 P = 1, 2, ..., n 2 gęstość ładunku ∂ 2u ∂ 2u + = − f ( x, y ) 2 2 ∂x ∂y potencjał 1 − ui −1, j − ui , j −1 + 4ui , j − ui +1, j − ui , j +1 = f i , j 2 h 1 [− uP −1 − uP −n + 4uP − uP +1 − uP +n ] = f P 2 h [ ] Przykład: Powierzchnia potencjału przy losowo rozmieszczonej gęstości ładunku Paraboliczne i hiperboliczne RRC Bezwymiarowe równanie przewodnictwa ciepła ∂u ( x, t ) ∂t u xx = ut ∇ 2 u ( x, t ) = z warunkiem początkowym (dla t = 0) u ( x,0) = g ( x) 0< x< L gdzie L = 1 – szerokość dziedziny rozwiązań. Warunki brzegowe: u (0, t ) = a (t ) u ( L, t ) = b(t ) t≥0 t≥0 gdzie a(t) i b(t) są funkcjami jedynie czasu, a g(x) zaleŜy jedynie od połoŜenia x. Dyskretyzacja przestrzeni rozwiązań ∆x t 10 9 8 7 6 5 ∆t 4 3 czas 2 (indeks j) 1 0 0 1 2 3 4 5 6 7 8 przestrzeń (indeks i) PołoŜenie w węźle i w chwili j: t j = j∆t xi = i∆x 9 10 x j≥0 0 ≤ i ≤ n +1 Zamieniając pochodne na róŜnice otrzymujemy u ( x, t + ∆t ) − u ( x, t ) u ( xi , t j +1 ) − u ( xi , t j ) ut ≈ = ∆t ∆t z błędem O(∆t), u xx ≈ u ( xi +1 , t j ) − 2u ( xi , t j ) + u ( xi −1 , t j ) ∆x 2 z błędem O(∆x2). Dalej upraszczając uij +1 − uij ut ≈ ∆t uij+1 − 2uij + uij−1 u xx ≈ ∆x 2 Zatem zdyskretyzowane równanie ma postać uij +1 − uij uij+1 − 2uij + uij−1 = ∆t ∆x 2 Definiując r = ∆t / ∆x2, otrzymujemy schemat jawny Eulera: uij +1 = ruij−1 + (1 − 2r )uij + ruij+1 - punkt uwzględniany przy obliczaniu róŜnicy czasowej - punkt uwzględniany przy obliczaniu róŜnicy przestrzennej Algorytm schematu jawnego // mamy n+1 węzłów przestrzennych siatki // warunek brzegowy u[0] = unew[0] = u[n] = 0.0; // warunek początkowy for (int i=1; i<n; i++) { x = i*step; u[i] = func(x); }; // pętla czasowa for (int t=1; t<=tsteps; t++) for (int i=1; i<n; i++) unew[i] = alpha*u[i-1] + (1-2*alpha)*u[i] + alpha*u[i+1]; Problem: warunek stabilności schematu ∆t 1 ≤ 2 ∆x 2 Czyli jeśli podzielimy domenę [0,1] na sto podprzedziałów (∆x = 0.01), to ∆t ≤ 5·10-5. Analiza stabilności RozwaŜmy schemat jawny dla równania ciepła: u nj +1 − u nj ∂u ∂u α = 2 ∂x ∂t ∆t = α (∆x ) 2 (u n j +1 − 2u nj + u nj−1 ) (1) Zatem nasz schemat ma postać: u n +1 j ∆t n n n = u +α u − 2 u + u j +1 j j −1 2 (∆x ) ( n j ) ( 2) Niech D będzie dokładnym rozwiązaniem równania (2). Niech N będzie numerycznym rozwiązaniem równania (2). Zatem błąd zaokrągleń ε = N −D Napiszmy równanie stabilności metody numerycznej, które opisze ewolucję błędu w trakcie obliczania kolejnych kroków czasowych. ε rośnie ⇒ niestabilność nierośnie ⇒ stabilność Równanie stabilności będziemy badać za pomocą analizy Fouriera (metoda von Neumanna). Rozwiązanie numeryczne moŜemy zapisać jako N=D+ε (3) Podstawiając (3) do (1), otrzymujemy D nj +1 + ε nj +1 − D nj − ε nj ∆t D nj +1 − D nj ∆t + ε nj +1 − ε nj ∆t D nj+1 + ε nj+1 − 2 D nj − 2ε nj + D nj−1 + ε nj−1 =α 2 ( ∆ ) x D nj+1 − 2 D nj + D nj−1 ε nj+1 − 2ε nj + ε nj−1 =α +α 2 2 ( ∆ x ) ( ∆ x ) PoniewaŜ z równania (1) D nj +1 − D nj ∆t D nj+1 − 2 D nj + D nj−1 =α 2 (∆x ) Zatem ε nj +1 − ε nj ∆t ε nj+1 − 2ε nj + ε nj−1 =α 2 ( ) ∆ x ( 4) Czyli równanie na błąd jest takie same jak równanie na funkcję u. RozwaŜmy rozkład błędu w pewnym kroku czasowym. ZałóŜmy dla wygody, Ŝe t=0. ε (x,0) x Błąd ε(x,t) moŜna zapisać w postaci szeregu Fouriera: ε ( x, t ) = ∑ bm (t )eik mx m eik m x = cos k m x + i sin k m x, (k m : liczba falowa) (5) PoniewaŜ równanie róŜnicowe na błąd ε jest liniowe, zachowanie kaŜdego wyrazu szeregu jest podobne do zachowania całego szeregu. Zatem wystarczy rozwaŜyć wzrost błędu typowego wyrazu ε ( x, t ) = bm (t )eik mx (6) Czasową zaleŜność błędu uwzględnimy, przyjmując, Ŝe amplituda błędu bm jest funkcją czasu. PoniewaŜ błąd rośnie lub maleje zwykle wykładniczo z czasem, moŜemy zapisać ε (x, t ) = eateik x (7) m gdzie km jest rzeczywiste, ale a moŜe być zespolone. Podstawiając (7) do (4), otrzymujemy ( e a (t + ∆t )eik m x − e at e ik m x = r e at e ik m ( x + ∆x ) − 2e at e ik m x + e at e ik m ( x − ∆x ) gdzie r = α ∆t (∆x )2 ) (8) ( e a (t + ∆t )eik m x − e at e ik m x = r e at e ik m ( x + ∆x ) − 2e at e ik m x + e at e ik m ( x − ∆x ) ) (8) Dzieląc (8) obustronnie przez eateikmx ( e a∆t − 1 = r eik m ∆x − 2 + e ik m ∆x Korzystając z zaleŜności otrzymujemy e iβ + e − iβ cos β = 2 e a∆t = 1 + 2r (cos β − 1) gdzie β = k m ∆x Korzystając z zaleŜności sin 2 otrzymujemy e a∆t β 2 = 1 − cos β 2 = 1 − 4r sin 2 β 2 ) (9) Definiując współczynnik wzmocnienia błędu ε nj +1 G= n εj Oczekujemy, by błąd nie narastał z kroku na krok | G |≤ 1 Zatem ε nj +1 ≤ 1, ε nj ε (x, t ) = eateik x m ε nj +1 a∆t = e ε nj 1 − 4r sin 2 β 2 ≤1 1 − 4r sin 2 β 2 − 1 ≤ 1 − 4r sin 2 (1), −1 ≤ 1 − 4r sin 2 (2), 1 − 4r sin 2 β β 2 ≤1 β 2 ≤1 ≤ 1 ⇒ r sin 2 β (1) + (2) ⇒ 0 ≤ r ≤ 1 2 2 β ⇒ 4r sin 2 ∆t 1 ≤ 2 ∆x 2 2 2 ≤ ≥0⇒r ≥0 1 1 ⇒r≤ 2 2 Warunek zbieŜności schematu jawnego (1) Przypomnijmy sobie, Ŝe współczynnik wzmocnienia błędu ε nj +1 G= n εj Czyli: krok czasowy ε n +1 j = Gε n j wykładnik potęgi ε nj +1 = G n +1ε 0j Zwróćmy uwagę, Ŝe nasz schemat jawny (4) ε n +1 j ε nj++11 − 2ε nj + ε nj−1 n n +1 n n = ε + α∆t = ε + r ε − 2 ε + ε j j +1 j j −1 (∆x )2 n j [ ] moŜemy przedstawić w postaci równania macierzowego n r 1 − 2r ε 1n ε n +1 ε 1 1 r n n +1 n Równanie własne − 1 2 r r ε 2 ε 2 ε 2 z wartościami = r 1 − 2r r = G własnymi G n +1 n n ε N r 1 − 2r ε N ε N Zatem mamy układ równań iterowanych ε nj +1 = Gε nj Przypomnienie z wykładu nr 3 Metoda Jacobiego Jako rozwiązanie początkowe, obiera się dowolny wektor (np. wektor zerowy) i oblicza się kolejne iteracje: Kolejne przybliŜenia x(0), x(1) , x(2) utworzą ciąg wektorów. JeŜeli istnieje granica tego ciągu, wtedy jest ona rozwiązaniem układu równań liniowych. Ciąg wektorów musi być zatem ciągiem zbieŜnym. Tw. Ciąg określony wzorem (*) przy dowolnym wektorze x(0) jest zbieŜny wtedy i tylko wtedy, gdy ρ(α)<1. ρ(α) – promień spektralny macierzy α = max |λi|, λi – wartości własne macierzy α. Twierdzenie powyŜsze mówi nam, Ŝe aby nasz schemat nie był rozbieŜny, to wszystkie wartości własne G muszą leŜeć na płaszczyźnie zespolonej (bo G mogą być zespolone) wewnątrz okręgu o promieniu 1. W naszym przypadku wartości G były rzeczywiste, więc weźmy ciekawszy przypadek: Uwaga: stabilność kaŜdego ∂u ∂u problemu niehomogenicznego − =0 ∂t ∂x ∂u ∂u − = f ( x, t ) ∂t ∂x Zastosujmy schemat: u p +1 j −u ∆t róŜnica zwykła Zastępując u ε Pamiętając, Ŝe oraz, Ŝe p j − p j u −u ∆x p j −1 badamy upraszczając równanie do postaci homogenicznej. =0 róŜnica wsteczna ε jp +1 = r (ε jp − ε jp−1 ) + ε jp ε nj +1 = G n +1ε 0j ε 0j = eik mx otrzymujemy ( ) G p +1eikm x = r G p eikm x − G p eikm ( x −∆x ) + G p eikm x p ik m x Dzieląc obustronnie przez G e ( ) G = r 1 − e −ikm ∆x + 1 = 1 + r − re −ikm ∆x = 1 + r − re −iβ Wniosek: schemat jest niestabilny dla kaŜdego r. Pora coś wklepać… n=1000; dh=1.0/n; dt=1.0*dh; for(x=0;x<=n;x++) { X=(double)x/n; u[x][0]=0.2*exp(-200*(X-0.5)*(X-0.5)); u[x][1]=0.2*exp(-200*(X-0.5-dt)*(X-0.5-dt)); }; Warunki początkowe Jeden krok czasowy: for(x=0;x<=n;x++) { L=x-1; P=x+1; Warunki brzegowe (periodyczne) if(x==0) L=n; if(x==n) P=0; u[x][2]=(u[P][1]-2*u[x][1]+u[L][1])*dt*dt/dh/dh+2*u[x][1]-u[x][0]; }; for(x=0;x<=n;x++) { u[x][0]=u[x][1]; u[x][1]=u[x][2]; }; MoŜna obliczyć warunek stabilności dla podanego schematu, ale nie jest prosto… ( ) G 2 − 2 1 − 2r 2 sin 2 ( β 2 ) G + 1 = 0 Czyli mamy równanie kwadratowe. r = 0.2 r = 0.4 1.5 1.5 1.5 1.5 1.0 1.0 1.0 1.0 0.5 0.5 0.5 0.5 - 1.5 - 1.0 - 0.5 0.5 1.0 1.5 - 1.5 - 1.0 - 0.5 0.5 r = 0.6 1.0 1.5 - 1.5 - 1.0 - 0.5 0.5 r = 0.8 1.0 1.5 - 1.5 - 1.0 - 0.5 - 0.5 - 0.5 - 0.5 - 0.5 - 1.0 - 1.0 - 1.0 - 1.0 - 1.5 - 1.5 - 1.5 - 1.5 r = 1.0 r = 1.2 1.5 1.5 1.5 1.5 1.0 1.0 1.0 1.0 0.5 0.5 0.5 0.5 - 1.5 - 1.0 - 0.5 0.5 1.0 1.5 - 1.5 - 1.0 - 0.5 0.5 r = 1.4 1.0 1.5 - 1.5 - 1.0 - 0.5 0.5 0.5 1.0 1.5 0.5 1.0 1.5 r = 1.6 1.0 1.5 - 1.5 - 1.0 - 0.5 - 0.5 - 0.5 - 0.5 - 0.5 - 1.0 - 1.0 - 1.0 - 1.0 - 1.5 - 1.5 - 1.5 - 1.5 Schemat niejawny Eulera Wróćmy do równania ciepła Było: uij +1 − uij uij+1 − 2uij + uij−1 = ∆t ∆x 2 Schemat jawny Teraz: uij +1 − uij uij++11 − 2uij +1 + uij−+11 = ∆t ∆x 2 Schemat niejawny - punkt uwzględniany przy obliczaniu róŜnicy czasowej - punkt uwzględniany przy obliczaniu róŜnicy przestrzennej uij +1 − uij uij++11 − 2uij +1 + uij−+11 = ∆t ∆x 2 − ruij−+11 + (1 + 2r )uij +1 − ruij++11 = uij Zatem mamy układ równań z macierzą trójdiagonalną. 1 + 2λ − λ − r 1 + 2r −r − r 1 + 2r O u1j +1 u1j + ru0j +1 j +1 j u2 u2 u3j +1 = −r u3j O − r M M j + 1 j j + 1 − λ 1 + 2λ un −1 un −1 + run który musimy rozwiązać w kaŜdym kroku czasowym. Stabilność schematu niejawnego Postępując analogicznie do poprzednich przypadków przyjmujemy po paru przekształceniach 1 G= 1 + 4r sin 2 ( k m ∆x 2 ) co daje ograniczenie na G: 1 ≤ G ≤1 1 + 4r co jest spełnione dla dowolnego r (oczywiście większego od zera). Zatem schemat niejawny jest zawsze stabilny. Schemat Cranka-Nicholsona MoŜemy wyobrazić sobie bardziej ogólny schemat: uij +1 − uij uij+1 − 2uij + uij−1 uij++11 − 2uij +1 + uij−+11 =θ + (1 − θ ) 2 ∆t ∆x ∆x 2 gdzie 0 ≤ θ ≤ 1. Przyjmijmy θ = ½. Pierwsza pochodna czasowa jako róŜnica centralna w tl+1/2 ∂u uil +1 − uil ≅ ∂t ∆t Druga pochodna przestrzenna jako róŜnica centralna waŜona ∂ 2u 1 uil−1 − 2uil + uil+1 uil−+11 − 2uil +1 + uil++11 ≅ + 2 2 ∂x 2 (∆x) (∆x) 2 Po paru przekształceniach − ruil−+11 + 2(1 + r )uil +1 − ruil++11 = ruil−1 + 2(1 − r )uil + ruil+1 A zatem znowu mamy układ równań z macierzą trójdiagonalną. MoŜna pokazać, Ŝe układ jest zawsze stabilny. Przewaga nad schematem niejawnym – błąd O(∆t2) zamiast O(∆t). Porównanie schematów: