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.