Document 13575417

advertisement
18.336 spring 2009
lecture 5
02/19/09
Finite Difference (FD) Approximation
Consider u ∈ C l .
Goal: Approximate derivative by finitely many function values:
m
�
∂ku
(x
)
≈
ai u(xi ) (k ≤ l)
0
∂xk
i=0
Image by MIT OpenCourseWare.
Vector of coefficients a = (a0 , a1 , · · · , am ) is called FD stencil.
How to get stencil?
Taylor expansion
In 1D: u(x) = u(x0 ) + ux (x0 ) · (x − x0 ) + 12 uxx (x0 ) · (x − x0 )2
+ 16 uxxx (x0 ) · (x − x0 )3 + O(|x − x0 |4 )
Name x̄i = xi − x0
=⇒ u(xi ) = u(x0 ) + ux (x0 ) · x̄i + 12 uxx (x0 ) · x̄2i + 16 uxxx (x0 ) · x̄3i + O(|x̄i |4 )
� m �
� m
�
m
�
�
�
=⇒
ai u(xi ) = u(x0 ) ·
ai + ux (x0 ) ·
ai x̄i
i=0
i=0
�
+uxx (x0 ) ·
1
2
i=0
m
�
�
ai x̄2i
+ O(h3 ) where x̄i ≤ h ∀i.
i=0
Match coefficients:
m
�
�
�
ai u(xi ) ≈ ux (x0 ) ⇒
ai = 0,
ai x̄i = 1
i=0
m
�
i=0
ai u(xi ) ≈ uxx (x0 ) ⇒
i
i
�
�
ai = 0,
i
i
etc.
1
ai x̄i = 0,
��
�
i
ai x̄2i
=2
ai x̄2i
small
��
ai x̄3i
�
small
�
Vandermonde matrix
⎡
⎤
⎡
1 ······ 1
1 1 ··· 1
⎢ x̄0 · · · · · · x¯m ⎥
⎢
⎥ ⎢ 0 x̄1 · · · x̄m
2 ⎥
⎢
⎢ 2
V = V (x0 , x1 , · · · , xm ) = ⎢ x̄
0 · · · · · · x¯m ⎥ =
⎢ .. ..
. .
.
⎢ ..
⎥ ⎣
. .
. ..
.
.
⎣
.
. ⎦
0 x̄k1 · · · x̄km
k
x¯
0 · · · · · · x¯km
⎤
⎥
⎥
⎥
⎦
Constraints for stencil:
V ·a=b
linear system
⎡
k=1:
�
ai u(xi ) ≈ ux (x0 ) :
�
1 · · ·
1
x̄0 · · · x¯m
�
⎡
1 · · ·
1
�
k=2:
ai u(xi ) ≈ uxx (x0 ) : ⎣
x̄0 · · · x¯m
x̄20 · · · x̄2m
⎤
a0
�
�
0
⎢ .
⎥
·
⎣
.
.
⎦
=
1
am
⎤ ⎡ ⎤
⎤ ⎡
a0
0
.
⎥ =
⎣
0
⎦
⎦
· ⎢
⎣
.
⎦
.
2
am
If m = k =⇒ In general one unique stencil a
If m > k =⇒ Multiple stencils
Can add additional criteria, e.g. require higher order.
Ex.: k = 1, m = 1
�
� �
� � �
1 1
a0
0
·
=
x̂0 x̂1
1
a1
x̄0 = 0, x̄1 = h =⇒ a0 = − h1 , a1 =
1
h
x̄0 = 0, x̄1 = −h =⇒ a0 = h1 , a1 = − h1
Image by MIT OpenCourseWare.
Image by MIT OpenCourseWare.
Ex.: k = 1, m = 2
x = (x0 , x0 + h, x0 − h)
⎡
⎤
�
�
�
�
�
a0
1
�
1 1 1
0
a
−
a
=
1
2
·
⎣
a1 ⎦
=
=⇒
h
0 h −h
1
a0 = −a1 − a2
a2
One-parameter family of stencils
Additional criterion: second order accuracy
2
⎡
⎤ ⎡
⎤ ⎡ ⎤
1 1 1
a0
0
⎣
0 h −h ⎦
·
⎣
a1 ⎦
=
⎣
1
⎦
=
⇒
a0 = 0, a1 =
0
h2 h2
a2
0
Ex.: k = 2, m = 2
⎡
1 1
⎣
0 x̄1
0 x̄21
1
, a2
2h
1
= −
2h
Image by MIT OpenCourseWare.
⎧
a0 = −a1 − a2
⎪
⎪
⎤ ⎡
⎤ ⎡ ⎤
⎪
⎪
1
a0
0
⎨
⎦
⎣
⎦
⎣
⎦
x̄2 ·
a1 =
0
=
⇒
a1 = x̄21 · (x̄1 − x̄2 )
⎪
⎪
x̄22
a2
2
⎪
⎪
⎩
a2 = x̄22 · (x̄2 − x̄1 )
Equidistant: x = (x0 , x0 + h, x0 − h)
a0 = − h22 , a1 = a2 =
1
h2
Image by MIT OpenCourseWare.
Higher space dimensions
x�i = (xi , yi )
2D
Image by MIT OpenCourseWare.
⎡
1
⎢ 0
⎢
⎢ 0
⎢
⎢ 0
⎢
⎣
0
0
1
x̄1
ȳ1
x̄
21
x̄1 ȳ1
ȳ12
· · · · · ·
· · · · · ·
· · · · · ·
······
······
······
1
x̄m
ȳm
x̄2m
x̄m ȳm
2
ȳm
⎤
⎡
⎢
⎥ ⎢
⎥ ⎢
⎥ ⎢
⎥ ·
⎢
⎥ ⎢
⎥ ⎢
⎦
⎢
⎣
a0
a1
..
.
.
.
.
.
..
am
⎤
⎤
0
⎥
⎥ ⎢ 0
⎥
⎥ ⎢ ⎥
⎥ ⎢ 0
⎥
⎥ =
⎢ ⎥ ←
stencil �a for uxx (x0 )
⎥ ⎢ 2
⎥
⎥ ⎢ ⎥
⎥ ⎣
0
⎦
⎦
0
3
⎡
3D
⎡
1
⎢ 0
⎢
⎢ 0
⎢
⎢ 0
⎢
⎢ 0
⎢
⎢ 0
⎢
⎢ 0
⎢
⎢ 0
⎢
⎣
0
0
· · · · · ·
1
· · · · · · x̄i
· · · · · · ȳi
· · · · · · z̄i
· · · · · · x̄
2i
· · · · · ·
ȳi2
· · · · · ·
z̄i2
· · · · · · x̄i ȳi
· · · · · · x̄i z̄i
· · · · · · ȳi z̄i
Ex.:
2D
· · · · · ·
· · · · · ·
· · · · · ·
· · · · · ·
······
· · · · · ·
· · · · · ·
· · · · · ·
· · · · · ·
······
⎡
a0
1
⎢ a1
⎥ ⎢
⎥ ⎢ ..
⎥ ⎢ .
⎥ ⎢ .
⎥ ⎢ .
⎥ ⎢ .
⎥ ⎢ .
⎥ ·
⎢ .
⎥ ⎢ .
⎥ ⎢ ..
⎥ ⎢ .
⎥ ⎢ .
⎥ ⎢ .
⎥ ⎢ .
⎦
⎢ .
⎣
..
am
⎤
⎤
⎡
⎤
0
⎥
⎥ ⎢ 0
⎥
⎥ ⎢ ⎥
⎥ ⎢ 0
⎥
⎥ ⎢ ⎥
⎥ ⎢ 0
⎥
⎥ ⎢ ⎥
⎥ ⎢ 2
⎥ ←
stencil for �
2 u(x0 ) =
⎥ =
⎢ ⎥
⎥ ⎢ 2
⎥
uxx + uyy + uzz
⎥ ⎢ ⎥
⎥ ⎢ 2
⎥
⎥ ⎢ ⎥
⎥ ⎢ 0
⎥
⎥ ⎢ ⎥
⎥ ⎣
0
⎦
⎦
0
�
2 u(x0 )
Image by MIT OpenCourseWare.
�
� �
� �
�
�a =
−
h42 , h12 , h12 , h12 , h12 =
−
h22 , h12 , 0, h12 , 0 +
−
h22 , 0, h12 , 0, h12
Image by MIT OpenCourseWare.
�a = (· · · exercise · · · )
4
Poisson Equation
⎧
⎫
⎨ −uxx = f (x) in ]0, 1[ ⎬
u(0) = a
← Dirichlet boundary condition
1D
⎩
⎭
ux (1) = c
← Neumann boundary condition
Discretize on regular grid �x = (0, h, 2h, · · · , nh, 1), where h =
1
n+1
Image by MIT OpenCourseWare.
−u(xi−1 ) + 2u(xi ) − u(xi+1 )
Interior: f (xi ) = −uxx(xi ) =
+ O(h2 )
2
h
⎛
⎞
u
i−1
�
�
= − h12 , h22 , − h12 · ⎝ ui ⎠ + O(h2 )
ui+1
Dirichlet boundary condition: u0 = u(x0 ) = a (exact)
Neumann boundary condition:
• Naive choice: c = ux (1)
�
� �
�
un+1 − un
1 1
un
=
+ O(h) = − ,
·
+O(h)
un+1
h
h h
O(h) on a single cell =⇒ Could preserve O(h2 ) globally, or drop
accuracy to O(h). Here the bad event happens.
• Second order approximation:
u(xn+2 ) − u(xn )
c = ux (1) =
+ O(h2 )
2h
−un + 2un+1 − un+2
Obtain un+2 by
= f (1)
2
h
�
� �
�
1 1
h
un
·
=⇒ − ,
= c + f (1)
un+1
h h
�2 �� �
right hand side correction yields 2nd order
• Alternative: ⎛
⎞
un−1
� 1 2
�
− 2h , h , − 23h · ⎝ un ⎠ = c
un+1
nd
2 order one-sided stencil (check by V · a = b).
5
Discretization generates linear system:
⎡
⎤ ⎡
1
u0
⎢ −
h12 h22 −
h12
⎥ ⎢ u1
⎢
⎥ ⎢ .
..
..
..
⎢
⎥ ⎢ .
.
.
.
⎢
⎥ ⎢ .
⎢
⎥ ·
⎢ .
.
.
.
⎢
⎥ ⎢ .
. .
. .
. .
⎢
⎥ ⎢ .
1
2
1 ⎦
⎣
⎣
−
h2 h2 − h2
un
1
−
h1
u
n+1
h
�
��
�
�
��
A
�
u
⎤
⎡
⎤
a
⎥ ⎢ f (x1 ) ⎥
⎥ ⎢
⎥
.
⎥ ⎢
⎥
.
.
⎥ ⎢
⎥
⎥ =
⎢
⎥
.
⎥ ⎢
⎥
.
.
⎥ ⎢
⎥
⎦
⎣
f (xn ) ⎦
c +
h2 f (1)
�
�
��
�
(∗)
�b
Second order approximation (try it yourself!)
Big Question:
How to solve sparse linear systems A · �u = �b?
→ lecture 11.
Rem.: (∗) ⇔
(∗∗)
⎡
2
−
h12
h2
1
2
⎢ −
h2
−
h12
h2
⎢
. .
. .
.
.
⎢
.
.
.
⎢
⎢
.
.
⎢
.
.
.
.
⎢
⎣
−
h12
1
h2
⎤⎡
.
.
.
2
h2
− h1
−
h12
⎥⎢
⎥⎢
⎥⎢
⎥⎢
⎥·
⎢
⎥⎢
⎥ ⎣
⎦
1
h
u1
..
.
.
.
.
..
.
un
⎡
f (x1 ) + h12 a
⎢
f (x2 )
⎥ ⎢
⎥ ⎢
.
.
⎥ ⎢
.
⎥ =
⎢
.
⎥ ⎢
.
.
⎥ ⎢
⎦
⎢
f (xn−1 )
⎣
f (xn )+ hc +
f (1)
2
⎤
↑
from Neumann boundary conditions
�
�
un+1 = un + h c + h2 f (1)
�
�
=⇒ − h12 un+1 = h12 un + h1 c + h2 f (1)
Advantages: • fewer equations
• matrix symmetric
6
⎤
⎥
⎥
⎥
⎥
⎥ (∗∗)
⎥
⎥
⎥
⎦
MIT OpenCourseWare
http://ocw.mit.edu
18.336 Numerical Methods for Partial Differential Equations
Spring 2009
For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.
Download