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: