0% found this document useful (0 votes)
28 views73 pages

Finite Difference Methods For PDEs

Finite difference methods can be used to approximate solutions to partial differential equations (PDEs). The document discusses: 1) How finite difference approximations can be derived for derivatives, such as the second derivative, using Taylor series expansions. 2) How the method of undetermined coefficients can be used to find finite difference approximations of a desired order by solving a Vandermonde system. 3) How finite difference methods can be applied to boundary value problems like the Poisson equation, discretizing it as a linear system of equations that can be solved numerically. 4) Issues like stability, consistency, convergence, and error analysis for finite difference methods solving PDEs.

Uploaded by

xz12110324
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
28 views73 pages

Finite Difference Methods For PDEs

Finite difference methods can be used to approximate solutions to partial differential equations (PDEs). The document discusses: 1) How finite difference approximations can be derived for derivatives, such as the second derivative, using Taylor series expansions. 2) How the method of undetermined coefficients can be used to find finite difference approximations of a desired order by solving a Vandermonde system. 3) How finite difference methods can be applied to boundary value problems like the Poisson equation, discretizing it as a linear system of equations that can be solved numerically. 4) Issues like stability, consistency, convergence, and error analysis for finite difference methods solving PDEs.

Uploaded by

xz12110324
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 73

Finite Dierence Methods for PDEs

Per-Olof Persson
persson@berkeley.edu

Department of Mathematics

University of California, Berkeley

Math 228B Numerical Solutions of Dierential Equations


Finite Dierence Approximations
Finite Dierence Approximations

u(x̄ + h) − u(x̄) h
D+ u(x̄) = = u0 (x̄) + u00 (x̄) + O(h2 )
h 2
u(x̄) − u(x̄ − h) 0 h 00
D− u(x̄) = = u (x̄) − u (x̄) + O(h2 )
h 2
u(x̄ + h) − u(x̄ − h) h2
D0 u(x̄) = = u0 (x̄) + u000 (x̄) + O(h4 )
2h 6
u(x̄ − h) − 2u(x̄) + u(x̄ + h)
D2 u(x̄) =
h2
h2
= u00 (x̄) + u0000 (x̄) + O(h4 )
12
Method of Undetermined Coecients

Find approximation to u(k) (x̄) based on u(x) at x1 , x2 , . . . , xn


Write u(xi ) as Taylor series centered at x̄:

1
u(xi ) = u(x̄) + (xi − x̄)u0 (x̄) + · · · + (xi − x̄)k u(k) (x̄) + · · ·
k!
Seek approximation of the form

u(k) (x̄) = c1 u(x1 ) + c2 u(x2 ) + · · · + cn u(xn ) + O(hp )

Collect terms multiplying u(x̄), u0 (x̄), etc, to obtain:


n
(
1 X
(i−1) 1 if i − 1 = k
cj (xj − x̄) =
(i − 1)!
j=1
0 otherwise.

Nonsingular Vandermonde system if xj are distinct


Finite dierence stencils, Julia implementation
 
"""
c = mkfdstencil(x, xbar, k)

Compute the coefficients `c` in a finite difference approximation of a function


defined at the grid points `x`, evaluated at `xbar`, of order `k`.
"""
function mkfdstencil(x, xbar, k)
n = length(x)
A = @. (x[:]' - xbar)  (0:n-1) / factorial(0:n-1)
b = (1:n) .== k+1
c = A \ b
end
 
Examples:
 
julia> println(mkfdstencil([-1 0 1], 0, 2)) # Centered 2nd derivative
[1.0, -2.0, 1.0]

julia> println(mkfdstencil([0 1 2], 0, 1)) # One-sided (right) 1st derivative


[-1.5, 2.0, -0.5]

julia> println(mkfdstencil(-2:2, 0//1, 2)) # 4th order 5-point stencil, rational


Rational{Int64}[-1//12, 4//3, -5//2, 4//3, -1//12]
 
Boundary Value Problems
The Finite Dierence Method
Consider the Poisson equation with Dirichlet conditions:

u00 (x) = f (x), 0 < x < 1, u(0) = α, u(1) = β

Introduce n uniformly spaced grid points xj = jh,


h = 1/(n + 1)
Set u0 = α, un+1 = β , and use the three-point dierence
approximation to get the discretization
1
(uj−1 − 2uj + uj+1 ) = f (xj ), j = 1, . . . , n
h2
This can be written as a linear system Au = f with
f (x1 ) − α/h2
     
−2 1 u1
1 1
 −2 1   u2   f (x2 ) 
A= 2 .. u= .  f = ..
    
h  .  ..  .
 
  
2
1 −2 un f (xn ) − β/h
Errors and Grid Function Norms
The error e = u − û where u is the numerical solution and û is
the exact solution
 
u(x1 )
û =  ... 
 

u(xn )

Measure errors in grid function norms, which are


approximations of integrals and scale correctly as n → ∞

kek∞ = max |ej |


j
X
kek1 = h |ej |
j
 1/2
X
kek2 = h |ej |2 
j
Local Truncation Error

Insert the exact solution u(x) into the dierence scheme to get
the local truncation error:
1
τj = (u(xj−1 ) − 2u(xj ) + u(xj+1 )) − f (xj )
h2
h2
= u00 (xj ) + u0000 (xj ) + O(h4 ) − f (xj )
12
h2 0000
= u (xj ) + O(h4 )
12
or
 
τ1
 .. 
τ =  .  = Aû − f
τn
Errors

Linear system gives error in terms of LTE:



Au = f
=⇒ Ae = −τ
Aû = f + τ

Introduce superscript h to indicate that a problem depends on


the grid spacing, and bound the norm of the error:

Ah eh = −τ h
eh = −(Ah )−1 τ h
keh k = k(Ah )−1 τ h k ≤ k(Ah )−1 k · kτ h k

If k(Ah )−1 k ≤ C for h ≤ h0 , then

keh k ≤ C · kτ h k → 0 if kτ h k → 0 as h → 0
Stability, Consistency, and Convergence

Denition
A method Ah uh = f h is stable if (Ah )−1 exists and
k(Ah )−1 k ≤ C for h ≤ h0
It is consistent with the DE if kτ h k → 0 as h → 0
It is convergent if keh k → 0 as h → 0

Theorem Fundamental Theorem of Finite Dierence Methods


Consistency + Stability =⇒ Convergence
since keh k ≤ k(Ah )−1 k · kτ h k ≤ C · kτ h k → 0. A stronger
statement is
O(hp ) LTE + Stability =⇒ O(hp ) global error
Stability in the 2-Norm

In the 2-norm, we have

kAk2 = ρ(A) = max |λp |


p
1
kA−1 k2 =
minp |λp |

For our model problem matrix, we have explicit expressions for


the eigenvectors/eigenvalues:
 
−2 1
upj = sin(pπjh)
1  1 −2 1

A= 2 ..

h  .
 2
 λp = 2 (cos(pπh) − 1)
1 −2 h
The smallest eigenvalue is
2
λ1 = (cos(πh) − 1) = −π 2 + O(h2 ) =⇒ Stability
h2
Convergence in the 2-Norm

This gives a bound on the error


1 h
keh k2 ≤ k(Ah )−1 k2 · kτ h k2 ≈ kτ k2
π2
h2 0000
Since τjh ≈ 12 u (xj ),

h2 0000 h2 00
kτ h k2 ≈ ku k2 = kf k2 =⇒ keh k2 = O(h2 )
12 12
While this implies convergence in the max-norm, 1/2 order is
lost because of the grid function norm:
1
keh k∞ ≤ √ keh k2 = O(h3/2 )
h

But it can be shown that k(Ah )−1 k∞ = O(1), which implies


keh k∞ = O(h2 )
Neumann Boundary Conditions

Consider the Poisson equation with Neumann/Dirichlet


conditions:

u00 (x) = f (x), 0 < x < 1, u0 (0) = σ, u(1) = β

Second-order accurate one-sided dierence approximation:


 
1 3 1
− u0 + 2u1 − u2 = σ
h 2 2
 3h
− 2 2h − h2
   
u0 σ
 1 −2 1   u1   f (x1 ) 
1  ..   ..   .. 
   
. =
 .   . 

h2 
     
 1 −2 1   un  f (xn )
0 h2 un+1 β

Most general approach.


Finite Dierence Methods for Elliptic Problems
Elliptic Partial Dierential Equations
Consider the elliptic PDE below, the Poisson equation:

∂2u ∂2u
∇2 u(x, y) ≡ (x, y) + (x, y) = f (x, y)
∂x2 ∂y 2

on the rectangular domain

Ω = {(x, y) | a < x < b, c < y < d}

with Dirichlet boundary conditions u(x, y) = g(x, y) on the


boundary Γ = ∂Ω of Ω.

Introduce a two-dimensional grid by choosing integers n, m and


dening step sizes h = (b − a)/n and k = (d − c)/m. This gives
the point coordinates (mesh points):

xi = a + ih, i = 0, 1, . . . , n
yi = c + jk, j = 0, 1, . . . , m
Finite Dierence Discretization

Discretize each of the second derivatives using nite dierences on


the grid:

u(xi+1 , yj ) − 2u(xi , yj ) + u(xi−1 , yj )


+
h2
u(xi , yj+1 ) − 2u(xi , yj ) + u(xi , yj−1 )
k2
h2 ∂ 4 u k2 ∂ 4 u
= f (xi , yj ) + (x i , yj ) + (xi , yj ) + O(h4 + k 4 )
12 ∂x4 12 ∂y 4

for i = 1, 2, . . . , n − 1 and j = 1, 2, . . . , m − 1, with boundary


conditions

u(x0 , yj ) = g(x0 , yj ), u(xn , yj ) = g(xn , yj ), j = 0, . . . , m


u(xi , y0 ) = g(xi , y0 ), u(xi , y0 ) = g(xi , ym ), i = 1, . . . , n − 1
Finite Dierence Discretization

The corresponding nite-dierence method for ui,j ≈ u(xi , yi ) is


"  #
h 2
2 + 1 uij − (ui+1,j + ui−1,j )−
k
 2
h
(ui,j+1 + ui,j−1 ) = −h2 f (xi , yj )
k

for i = 1, 2, . . . , n − 1 and j = 1, 2, . . . , m − 1, with boundary


conditions

u0j = g(x0 , yj ), unj = g(xn , yj ), j = 0, . . . , m


ui0 = g(xi , y0 ), uim = g(xi , ym ), i = 1, . . . , n − 1

Dene fij = f (xi , yi ) and suppose h = k , to get the simple form

ui+1,j + ui−1,j + ui,j+1 + ui,j−1 − 4ui,j = h2 fij


FDM for Poisson, Julia implementation
 
# Solve Poisson's equation -(uxx + uyy) = f, bnd cnds u(x,y) = g(x,y)
# on a square grid using the finite difference method.
#
# UC Berkeley Math 228B, Per-Olof Persson <persson@berkeley.edu>

using SparseArrays, PyPlot

"""
A, b, x, y = assemblePoisson(n, f, g)

Assemble linear system Au = b for Poisson's equation using finite differences.


Grid size (n+1) x (n+1), right hand side function f(x,y), Dirichlet boundary
conditions g(x,y).
"""
function assemblePoisson(n, f, g)
h = 1.0 / n
N = (n+1)2
x = h * (0:n)
y = x

umap = reshape(1:N, n+1, n+1) # Index mapping from 2D grid to vector


A = Tuple{Int64,Int64,Float64}[] # Array of matrix elements (row,col,value)
b = zeros(N)
 
FDM for Poisson, Julia implementation
 
# Main loop, insert stencil in matrix for each node point
for j = 1:n+1
for i = 1:n+1
row = umap[i,j]
if i == 1 || i == n+1 || j == 1 || j == n+1
# Dirichlet boundary condition, u = g
push!(A, (row, row, 1.0))
b[row] = g(x[i],y[j])
else
# Interior nodes, 5-point stencil
push!(A, (row, row, 4.0))
push!(A, (row, umap[i+1,j], -1.0))
push!(A, (row, umap[i-1,j], -1.0))
push!(A, (row, umap[i,j+1], -1.0))
push!(A, (row, umap[i,j-1], -1.0))
b[row] = f(x[i], y[j]) * h2
end
end
end

# Create CSC sparse matrix from matrix elements


A = sparse((x->x[1]).(A), (x->x[2]).(A), (x->x[3]).(A), N, N)

return A, b, x, y
end
 
FDM for Poisson, Julia implementation
 
"""
error = testPoisson(n=20)

Poisson test problem:


- Prescribe exact solution uexact
- set boundary conditions g = uexact and set RHS f = -Laplace(uexact)

Solves and plots solution on a (n+1) x (n+1) grid.


Returns error in max-norm.
"""
function testPoisson(n=40)
uexact(x,y) = exp(-(4(x - 0.3)2 + 9(y - 0.6)2))
f(x,y) = uexact(x,y) * (26 - (18y - 10.8)2 - (8x - 2.4)2)
A, b, x, y = assemblePoisson(n, f, uexact)

# Solve + reshape for plotting


u = reshape(A \ b, n+1, n+1)

# Plotting
clf(); contour(x, y, u, 10, colors="k"); contourf(x, y, u, 10)
axis("equal"); colorbar()

# Compute error in max-norm


u0 = uexact.(x, y')
error = maximum(abs.(u - u0))
end
Convergence in the 2-Norm

For the homogeneous Dirichlet problem on the unit square,


convergence in the 2-norm is shown in exactly the same way as
for the corresponding BVP
Taylor expansions show that
1 2
τij = h (uxxxx + uyyyy ) + O(h4 )
12
It can be shown that the smallest eigenvalue of Ah is
−2π 2 + O(h2 ), and the spectral radius of (Ah )−1 is
approximately 1/2π 2
As before, this gives keh k2 = O(h2 )
Non-Rectangular Domains
Poisson in 2D non-rectangular domain
Consider the Poisson problem on the non-rectangular domain
Ω with boundary Γ = ΓD ∪ ΓN = ∂Ω:
−∇2 u = f in Ω
u=g on ΓD
∂u
=r on ΓN
∂n
Consider a mapping between a rectangular reference domain Ω̂
and the actual physical domain Ω
Find an equivalent problem that can be solved in Ω̂
n
η
N

x = x(ξ, η)
y = y(ξ, η)

Ω̂ y

ξ
x
Poisson in 2D non-rectangular domain
Transformed derivatives

Use the chain rule to transform the derivatives of u in the


physical domain:

ux = ξx uξ + ηx uη
u(x, y) = u(x(ξ, η), y(ξ, η)) =⇒
uy = ξy uξ + ηy uη

Determine the terms ξx , ηx , ξy , ηy by the mapped derivatives:


ξ = ξ(x, y) x = x(ξ, η)
η = η(x, y) y = y(ξ, η)
         
dξ ξx ξy dx dx xξ xη dξ
= =
dη ηx ηy dy dy yξ yη dη
   −1  
ξx ξy xξ xη 1 yη −xη
=⇒ = =
ηx ηy yξ yη J −yξ xξ

where J = xξ yη − xη yξ
Poisson in 2D non-rectangular domain
Transformed equations

Using the derivative expressions, we can transform all the


derivatives and the equation −(uxx + uyy ) = f becomes

1
− (auξξ − 2buξη + cuηη + duη + euξ ) = f
J2
where

a = x2η + yη2 b = x ξ x η + yξ yη c = x2ξ + yξ2


yξ α − xξ β xη β − yη α
d= e=
J J
with

α = axξξ − 2bxξη + cxηη


β = ayξξ − 2byξη + cyηη
Poisson in 2D non-rectangular domain
Normal derivatives

The normal n in the physical domain is in the direction of


∇η or ∇ξ .
For example, on the top boundary η = 1 we have
1 1
n = (nx , ny ) = q (ηx , ηy ) = q (−yξ , xξ )
ηx2 + ηy2 x2ξ + yξ2
This gives the normal derivative
∂u 1
= ux nx + uy ny = [(yη nx − xη ny )uξ + (−yξ nx + xξ ny )uη ]
∂n J
n
η
N

x = x(ξ, η)
y = y(ξ, η)

Ω̂ y

ξ
x
Finite Dierence Methods for Parabolic Problems
Parabolic equations

Model problem: The heat equation:


∂u
− ∇ · (κ∇u) = f
∂t
where
u = u(x, t) is the temperature at a given point and time
κ is the heat capacity (possibly x- and t-dependent)
f is the source term (possibly x- and t-dependent)
Need initial conditions at some time t0 :

u(x, t0 ) = η(x)

Need boundary conditions at domain boundary Γ:


Dirichlet condition (prescribed temperature): u = uD
Neumann condition (prescribed heat ux): n · (κ∇u) = gN
1D discretization

Initial case: One space dimension, κ = 1, f = 0:

ut = κuxx , 0≤x≤1

with boundary conditions u(0, t) = g0 (t), u(1, t) = g1 (t)

t
Introduce nite dierence grid:

xi = ih, tn = nk
tn+1

with mesh spacing h = ∆x tn


Uin
and time step k = ∆t. tn−1

Approximate the solution u at k = ∆t

grid point (xi , tn ):


t0 x
Uin ≈ u(xi , tn ) x0
h = ∆x
xi−1 xi xi+1
Numerical schemes: FTCS

FTCS (Forward in time, centered in space):

Uin+1 − Uin 1 n
− 2Uin + Ui+1
n

= 2 Ui−1
k h
or, as an explicit expression for Uin+1 ,

k
Uin+1 = Uin + n
− 2Uin + Ui+1
n

2
Ui−1
h
Explicit one-step method in time
Boundary conditions naturally implemented by setting

U0n = g0 (tn ), n
Um+1 = g1 (tn )
FTCS, Julia implementation
 
using PyPlot, LinearAlgebra, DifferentialEquations
"""
Solves the 1D heat equation with the FTCS scheme (Forward-Time,
Centered-Space), using grid size `m` and timestep multiplier `kmul`.
Integrates until final time `T` and plots each solution.
"""
function heateqn_ftcs(m=100; T=0.2, kmul=0.5)
# Discretization
h = 1.0 / (m+1)
x = h * (0:m+1)
k = kmul*h2
N = ceil(Int, T/k)

u = exp.(-(x .- 0.25).2 / 0.12) .+ 0.1sin.(10*2π*x) # Initial conditions


u[[1,end]] .= 0 # Dirichlet boundary conditions u(0) = u(1) = 0

clf(); axis([0, 1, -0.1, 1.1]); grid(true); ph, = plot(x,u) # Setup plotting


for n = 1:N
u[2:m+1] += k/h2 * (u[1:m] .- 2u[2:m+1] + u[3:m+2])
if mod(n, 10) == 0 # Plot every 10th timestep
ph[:set_data](x,u), pause(1e-3)
end
end
end
 
Numerical schemes: Crank-Nicolson

Crank-Nicolson  like FTCS, but use average of space


derivative at time steps n and n + 1:

Uin+1 − Uin 1
D2 Uin + D2 Uin+1

=
k 2
1 n+1
n
− 2Uin + Ui+1
n
− 2Uin+1 + Ui+1
n+1

= 2 Ui−1 + Ui−1
2h
or
n+1
−rUi−1 + (1 + 2r)Uin+1 − rUi+1
n+1 n
= rUi−1 + (1 − 2r)Uin + rUi+1
n

where r = k/2h2
Implicit one-step method in time =⇒ need to solve tridiagonal
system of equations
Crank-Nicolson, Julia implementation
 
"""
Solves the 1D heat equation with the C r a n k Nicolson scheme,
using grid size `m` and timestep multiplier `kmul`.
Integrates until final time `T` and plots each solution.
"""
function heateqn_cn(m=100; T=0.2, kmul=50)
# Discretization
h = 1.0 / (m+1)
x = h * (0:m+1)
k = kmul*h2
N = ceil(Int, T/k)

u = exp.(-(x .- 0.25).2 / 0.12) .+ 0.1sin.(10*2π*x) # Initial conditions


u[[1,end]] .= 0 # Dirichlet boundary conditions u(0) = u(1) = 0

# Form the matrices in the Crank-Nicolson scheme (Left and right)


A = SymTridiagonal(-2ones(m), ones(m-1)) / h2
LH = I - A*k/2
RH = I + A*k/2

clf(); axis([0, 1, -0.1, 1.1]); grid(true); ph, = plot(x,u) # Setup plotting


for n = 1:N
u[2:m+1] = LH \ (RH * u[2:m+1]) # Note ()'s for efficient evaluation
ph[:set_data](x,u), pause(1e-3) # Plot every timestep
end
end
Local truncation error
LTE: Insert exact solution u(x, t) into dierence equations
Ex: FTCS
u(x, t + k) − u(x, t) 1
τ (x, t) = − 2 (u(x − h, t) − 2u(x, t) + u(x + h, t))
k h
Assume u smooth enough and expand in Taylor series:
   
1 1 2 1 2
τ (x, t) = ut + kutt + k uttt + · · · − uxx + h uxxxx + · · ·
2 6 12

Use the equation: ut = uxx , utt = utxx = uxxxx :


 
1 1 2
τ (x, t) = k − h uxxxx + O(k 2 + h4 ) = O(k + h2 )
2 12

First order accurate in time, second order accurate in space


Ex: For Crank-Nicolson, τ (x, t) = O(k 2 + h2 )
Consistent method if τ (x, t) → 0 as k, h → 0
Method of Lines
Discretize PDE in space, integrate resulting semidiscrete
system of ODEs using standard schemes
Ex: Centered in space
1
Ui0 (t) = (Ui−1 (t) − 2Ui (t) + Ui+1 (t)), i = 1, . . . , m
h2
or in matrix form: U 0 (t) = AU (t) + g(t), where
−2
   
1 g0 (t)
1
 −2 1 

 0 
 
1 
 1 −2 1 
1  0 
 
A= 2 , g(t) = 2  . 

. . .
h  .
.
.
.
.
.  h  .. 
   
 1 −2 1  0 
1 −2 g1 (t)

Solve the centered semidiscrete system using:


Forward Euler U n+1 = U n + kf (U n )
=⇒ the FTCS method
Trapezoidal method U n+1 = U n + k2 (f (U n ) + f (U n+1 ))
=⇒ the Crank-Nicolson method
Heat equation, method of lines using black-box ODE solver
 
"""
Solves the 1D heat equation using Method of Lines with ODE solvers from
DifferentialEquations.jl. Grid size `m`, integrates until final time `T`
and plots a total of `nsteps` solutions.
"""
function heateqn_odesolver(m=100; T=0.2, nsteps=100)
# Discretization
h = 1.0 / (m+1)
x = h * (0:m+1)

u = exp.(-(x .- 0.25).2 / 0.12) .+ 0.1sin.(10*2π*x) # Initial conditions


u[[1,end]] .= 0 # Dirichlet boundary conditions u(0) = u(1) = 0

fode(u,p,t) = ([0; u[1:m+1]] .- 2u .+ [u[2:m+2]; 0]) / h2 # RHS du/dt = f(u)


prob = ODEProblem(fode, u, (0,T))
sol = solve(prob, alg_hints=[:stiff], saveat=T / nsteps)

# Animate solution
clf(); axis([0, 1, -0.1, 1.1]); grid(true); ph, = plot(x,u) # Setup plotting
for n = 1:length(sol)
ph[:set_data](x,sol.u[n]), pause(1e-3) # Update plot
end
end
 
Method of Lines, Stability
Stability requires kλ to be inside the
absolute stability region, for all Im(kλ)

eigenvalues λ of A
For the centered dierences, the
eigenvalues are −1 Re(kλ)

2
λp = (cos(pπh) − 1), p = 1, . . . , m
h2
Forward-Euler stability region
or, in particular, λm ≈ −4/h2
Euler gives −2 ≤ −4k/h2 ≤ 0, or Im(kλ)

k 1
2

h 2
−1 Re(kλ)
=⇒ time step restriction for FTCS
Trapezoidal method A-stable =⇒
Crank-Nicolson is stable for any time
Trapezoidal method stability region
step k > 0
Convergence
For convergence, k and h must in general approach zero at
appropriate rates, for example k → 0 and k/h2 ≤ 1/2
Write the methods as
U n+1 = B(k)U n + bn (k) (*)
where, e.g., B(k) = I + kA for forward Euler and
−1
B(k) = I − k2 A I + k2 A for Crank-Nicolson


Denition
A linear method of the form (*) is Lax-Richtmyer stable if, for each
time T , these is a constant CT > 0 such that
kB(k)n k ≤ CT
for all k > 0 and integers n for which kn ≤ T .

Theorem (Lax Equivalence Theorem)


A consistent linear method of the form (*) is convergent if and only
if it is Lax-Richtmyer stable.
Lax Equivalence Theorem
Proof.
Consider the numerical scheme applied to the numerical solution U
and the exact solution u(x, t):
U n+1 = BU n + bn
un+1 = Bun + bn + kτ n
Subtract to get dierence equation for the error E n = U n − un :
N
X
E n+1 n
= BE − kτ ,n
or E N N
=B E −k 0
B N −n τ n−1
n=1
Bound the norm, use Lax-Richtmyer stability and N k ≤ T :
N
X
kE N k ≤ kB N kkE 0 k + k kB N −n kkτ n−1 k
n=1
≤ CT kE k + T CT max kτ n−1 k → 0 as k → 0
0
1≤n≤N

provided kτ k → 0 and that the initial data kE 0 k → 0.


Convergence
Example
For the FTCS method, B(k) = I + kA is symmetric, so
kB(k)k2 = ρ(B) ≤ 1 if k ≤ h2 /2. Therefore, it is Lax-Richtmyer
stable and convergent, under this restriction.

Example
−1
For the Crank-Nicolson method, B(k) = I − k2 A I + k2 A is


symmetric with eigenvalues (1 + kλp /2)/(1 − kλp /2). Therefore,


kB(k)k2 = ρ(B) < 1 for any k > 0 and the method is
Lax-Richtmyer stable and convergent.

Example
kB(k)k ≤ 1 is called strong stability, but Lax-Richtmyer stability is
also obtained if kB(k)k ≤ 1 + αk for some constant α, since then

kB(k)n k ≤ (1 + αk)n ≤ eαT


Von Neumann Analysis

Consider the Cachy problem, on all space and no boundaries


(−∞ < x < ∞ in 1D)
The grid function Wj = eijhξ , constant ξ , is an eigenfunction
of any translation-invariant nite dierence operator
Consider the centered dierence D0 Vj = 1
2h (Vj+1 − Vj−1 ):

1  i(j+1)hξ  1  ihξ 
D0 Wj = e − ei(j−1)hξ = e − e−ihξ eijhξ
2h 2h
i i
= sin(hξ)eijhξ = sin(hξ)Wj ,
h h
that is, W is an eigenfunction with eigenvalue i
h sin(hξ)
Note that this agrees to rst order with the eigenvalue iξ of
the operator ∂x
Von Neumann Analysis

Consider a function Vj on 
the grid xj = jh , with nite 2-norm
1/2

X
kV k2 = h |Vj |2 
j=−∞

Express Vj as linear combination of eijhξ for |ξ| ≤ π/h:


Z π/h ∞
1 h X
Vj = √ V̂ (ξ)eijhξ
dξ, where V̂ (ξ) = √ Vj e−ijhξ
2π −π/h 2π j=−∞

Parseval's relation: kV̂ k2 = kV k2 in the norms


 1/2 !1/2

X Z π/h
kV k2 = h |Vj |2  , kV̂ k2 = |V̂ (ξ)|2 dξ
j=−∞ −π/h
Von Neumann Analysis

Using Parseval's relation, we can show Lax-Richtmyer stability

kU n+1 k2 ≤ (1 + αk)kU n k2

in the Fourier transform of U n :

kÛ n+1 k2 ≤ (1 + αk)kÛ n k2

This decouples each Û n (ξ) from all other wave numbers:

Û n+1 (ξ) = g(ξ)Û n (ξ)

with amplication factor g(ξ).


If |g(ξ)| ≤ 1 + αk , then

|Û n+1 (ξ)| ≤ (1 + αk)|Û n (ξ)| and kÛ n+1 k2 ≤ (1 + αk)kÛ n k2


Von Neumann Analysis
Example (FTCS)
For the FTCS method,
k
Uin+1 = Uin + n n n

Ui−1 − 2Ui + U i+1
h2
we get the amplication factor
k
g(ξ) = 1 + 2 2 (cos(ξh) − 1)
h
and |g(ξ)| ≤ 1 if k ≤ h2 /2

Example (Crank-Nicolson)
For the Crank Nicolson method,
n+1
−rUi−1 n+1
+ (1 + 2r)Uin+1 − rUi+1 n
= rUi−1 + (1 − 2r)Uin + rUi+1
n

we get the amplication factor


1 + 12 z 2k
g(ξ) = 1 where z = 2 (cos(ξh) − 1)
1 − 2z h
and |g(ξ)| ≤ 1 for any k, h
Multidimensional Problems
Consider the heat equation in two space dimensions:
ut = uxx + uyy
with initial conditions u(x, y, 0) = η(x, y) and boundary
conditions on the boundary of the domain Ω.
Use e.g. the 5-point discrete Laplacian:
1
∇2h Uij = (Ui−1,j + Ui+1,j + Ui,j−1 + Ui,j+1 − 4Uij )
h2
Use e.g. the trapezoidal method in time:
kh 2 n i
Uijn+1 = Uijn + ∇h Uij + ∇2h Uijn+1
2
or
   
k 2 n+1 k 2
I − ∇h Uij = I + ∇h Uijn
2 2
Linear system involving A = I − k∇2h /2, not tridiagonal
But condition number = O(k/h2 ), =⇒ fast iterative solvers
Locally One-Dimensional and Alternating Directions

Split timestep and decouple uxx and uyy :

k
Uij∗ = Uijn + (Dx2 Uijn + Dx2 Uij∗ )
2
k
Uijn+1 = Uij∗ + (Dy2 Uij∗ + Dx2 Uijn+1 )
2
or, as in the alternating direction implicit (ADI) method,

k
Uij∗ = Uijn + (Dy2 Uijn + Dx2 Uij∗ )
2
k
Uijn+1 = Uij∗ + (Dx2 Uij∗ + Dy2 Uijn+1 )
2
Implicit scheme with only tridiagonal systems
Remains second order accurate
Finite Dierence Methods for Hyperbolic Problems
Advection
The scalar advection equation, with constant velocity a:

ut + aux = 0

Cauchy problem needs initial data u(x, 0) = η(x), and the


exact solution is

u(x, t) = η(x − at)

FTCS scheme:
Ujn+1 − Ujn a n n

=− Uj+1 − Uj−1
k 2h
or
ak
Ujn+1 = Ujn − n n

Uj+1 − Uj−1
2h
Stability problems  more later
The Lax-Friedrichs Method

Replace Ujn in FTCS by the average of its neighbors:

1  ak
Ujn+1 = n n n n

Uj−1 + Uj+1 − Uj+1 − Uj−1
2 2h
Lax-Richtmyer stable if

ak
≤ 1,
h

or k = O(h)  not sti


Method of Lines

With bounded domain, e.g. 0 ≤ x ≤ 1, if a > 0 we need an


inow boundary condition at x = 0:
u(0, t) = g0 (t)

and x = 1 is an outow boundary


Opposite if a < 0
Need one-sided dierences  more later
Periodic Boundary Conditions

For analysis, impose the periodic boundary conditions

u(0, t) = u(1, t), for t ≥ 0

Equivalent to Cauchy problem with periodic initial data


Introduce one boundary value as an unknown, e.g. Um+1 (t):

U (t) = (U1 (t), U2 (t), . . . , Um+1 (t))T

Use periodicity for rst and last equations:


a
U10 (t) = − (U2 (t) − Um+1 (t))
2h
0 a
Um+1 (t) = − (U1 (t) − Um (t))
2h
Periodic Boundary Conditions
Leads to Method of Lines formulation U 0 (t) = AU (t), where
 
0 1 −1
−1 0 1 
 
a  −1 0 1 
A=−  . . .

2h  . . . . . .


 
 −1 0 1
1 −1 0

Skew-symmetric matrix (AT = −A) =⇒ purely imaginary


eigenvalues:
ia
λp = − sin(2πph), p = 1, 2, . . . , m + 1
h
with eigenvectors

upj = e2πipjh , p, j = 1, 2, . . . , m + 1
Forward Euler
Use Forward Euler in time =⇒ FTCS scheme:
ak
Ujn+1 = Ujn − n n

Uj+1 − Uj−1
2h
Stability region S : |1 + kλ| ≤ 1 =⇒ imaginary kλp will always
be outside S =⇒ unstable for xed k/h
However, if e.g. k = h2 , we have
 2
2 ka Im(kλ)
|1 + kλp | ≤ 1 +
h
= 1 + a2 h2 = 1 + a2 k
−1 Re(kλ)
which gives Lax-Richtmyer stability
2 T /2
k(I + kA)n k2 ≤ (1 + a2 k)n/2 ≤ ea
Forward-Euler stability region

Not used in practice  too strong


restriction on timestep k
Leapfrog

Consider using the midpoint method in time:

U n+1 = U n−1 + 2kAU n

For the centered dierences in space, this gives the leapfrog


method:
ak
Ujn+1 = Ujn−1 − n n

Uj+1 − Uj−1
h

Stability region S : iα for −1 < α < 1 Im(kλ)

=⇒ stable if |ak/h| < 1


Only marginally stable =⇒
nondissipative −1 Re(kλ)

Midpoint method stability region


Lax-Friedrichs
Rewrite the average as:
1 n n 1
= Ujn + n
− 2Ujn + Uj+1
n
 
Uj−1 + Uj+1 Uj−1
2 2
to obtain
ak  1
Ujn+1 = Ujn − n n n
− 2Ujn + Uj+1
n

Uj+1 − Uj−1 + Uj−1
2h 2
or

Ujn+1 − Ujn n − Un
Uj+1 h2 n − 2U n + U n
Uj−1
   
j−1 j j+1
+a = 2
k 2h 2k h

Like a discretization of the advection-diusion equation

ut + aux = uxx

where  = h2 /(2k).
Lax-Friedrichs
The Lax-Friedrichs method can then be written as
U 0 (t) = A U (t) with
 
0 1 −1
−1 0 1 
 
a  −1 0 1 
A = −  .. .. ..
 
2h  . . .


 
 −1 0 1
1 −1 0
 
−2 1 1
1
 −2 1 

  1 −2 1 
+ 2 .. .. ..
 
h  . . .


 
 1 −2 1 
1 1 −2

where  = h2 /(2k)
Lax-Friedrichs

The eigenvalues of A are shifted from the imaginary axis into


the left half-plane:
ia 2
µp = − sin(2πph) − 2 (1 − cos(2πph))
h h
The values kµp lie on an ellipse centered at −2k/h2 , with
semi-axes 2k/h2 , ak/h
For Lax-Friedrichs,  = h2 /(2k) and −2k/h2 = −1 =⇒
stable if |ak/h| ≤ 1
The Lax-Wendro Method
Use Taylor series method for higher order accuracy in time
For U 0 (t) = AU (t), we have U 00 = AU 0 = A2 U and the
second-order Taylor method
1
U n+1 = U n + kAU n + k 2 A2 U n
2
Note that
a2
(A2 U )j = (Uj−2 − 2Uj + Uj+2 )
4h2
so the method can be written
ak  a2 k 2
Ujn+1 = Ujn − n n n
− 2Ujn + Uj+2
n

Uj+1 − Uj−1 + 2
Uj−2
2h 8h
Replace last term by 3-point discretization of a2 k 2 uxx /2 =⇒
the Lax-Wendro method:
ak  a2 k 2
Ujn+1 = Ujn − n n n
− 2Ujn + Uj+1n

Uj+1 − Uj−1 + 2
Uj−1
2h 2h
Stability analysis

The Lax-Wendro method is Euler's method applied to


U 0 (t) = A U (t), with  = a2 k/2 =⇒ eigenvalues
   2
ak ak
kµp = −i sin(pπh) + (cos(pπh) − 1)
h h

On ellipse centered at −(ak/h)2 with semi-axes (ak/h)2 ,


|ak/h|
Stable if |ak/h| ≤ 1
Upwind methods

Consider one-sided approximations for ux , e.g. for a > 0:


ak n ak
Ujn+1 = Ujn − n
(Uj − Uj−1 ), stable if 0 ≤ ≤1
h h
or, if a < 0:
ak n ak
Ujn+1 = Ujn − (Uj+1 − Ujn ), stable if − 1 ≤ ≤0
h h
Natural with asymmetry for the advection equation, since the
solution is translating at speed a
Stability analysis

The upwind method for a > 0 can be written


ak n ak n
Ujn+1 = Ujn − n
(Uj+1 − Uj−1 )+ (U − 2Ujn + Uj−1
n
)
2h 2h j+1
Again like a discretization of advection-diusion
ut + aux = uxx , with  = ah/2 =⇒ stable if

ak
−2 < −2k/h2 < 0, or 0≤ ≤1
h
The three methods, Lax-Wendro, upwind, Lax-Friedrichs, can
all be written as advection-diusion with
a2 k ahν ah h2 ah
LW = = , up = , LF = =
2 2 2 2k 2ν
where ν = ak/h. Stable if 0 < ν < 1.
The Beam-Warming method

Like upwind, but use second-order one-sided approximations:


ak
Ujn+1 =Ujn − (3Ujn − 4Uj−1
n n
+ Uj−2 )
2h
a2 k 2 n
+ (U − 2Uj−1n n
+ Uj−2 ) for a > 0
2h2 j
and
ak
Ujn+1 =Ujn − (−3Ujn + 4Uj+1
n n
− Uj+2 )
2h
a2 k 2 n
+ n
(U − 2Uj+1 n
+ Uj+2 ) for a < 0
2h2 j
Stable if 0 ≤ ν ≤ 2 and −2 ≤ ν ≤ 0, respectively
Von Neumann analysis

Example (The upwind method)

g(ξ) = (1 − ν) + νe−iξh

where ν = ak/h, stable if 0 ≤ ν ≤ 1

Example (Lax-Friedrichs)

g(ξ) = cos(ξh) − νi sin(ξh) =⇒ |g(ξ)|2 = cos2 (ξh) + ν 2 sin2 (ξh),

stable if |ν| ≤ 1
Von Neumann analysis

Example (Lax-Wendro)

g(ξ) = 1 − iν[2 sin(ξh/2) cos(ξh/2)] − ν 2 [2 sin2 (ξh/2)]


=⇒ |g(ξ)|2 = 1 − 4ν 2 (1 − ν 2 ) sin4 (ξh/2)

stable if |ν| ≤ 1

Example (Leapfrog)

g(ξ)2 = 1 − 2νi sin(ξh)g(ξ),

stable if |ν| < 1 (like the midpoint method)


Characteristic tracing and interpolation
Consider the case a > 0 and ak/h < 1
Trace characteristic through xj , tn+1 to time tn
Find Ujn+1 by linear interpolation between Uj−1
n and Ujn :
ak n
Ujn+1 = Ujn − n
(U − Uj−1 )
h j
=⇒ rst order upwind method
n , U n, U n
Quadratic interpolating Uj−1 j j+1 =⇒ Lax-Wendro
Quadratic interpolating Uj−2 , Uj−1 , Ujn =⇒ Beam-Warming
n n

h
tn+1

tn
xj−1 xj
ak
The CFL condition
For the advection equation, u(X, T ) depends only on the
initial data η(X − aT )
The domain of dependence is D(X, T ) = {X − aT }
Heat equation ut = uxx , D(X, T ) = (−∞, ∞)
Domain of dependence for 3-point explicit FD method: Each
value depends on neighbors at previous timestep
Rening the grid with xed k/h ≡ r gives same interval
This region must contain the true D for the PDE:
X − T /r ≤ X − aT ≤ X + T /r
=⇒ |a| ≤ 1/r or |ak/h| ≤ 1
The Courant-Friedrichs-Lewy (CFL) condition: Numerical
domain of dependence must contain the true D as k, h → 0

t2 t4

t0 t0
xj−2 xj xj+2 xj−4 xj xj+4
The CFL condition
Example (FTCS)
The centered-dierence scheme for the advection equation is
unstable for xed k/h even if |ak/h| ≤ 1

Example (Beam-Warming)
3-point one-sided stencil, CFL condition gives 0 ≤ ak/h ≤ 2 (for
left-sided, used when a > 0)

Example (Heat equation)


D(X, T ) = (−∞, ∞) =⇒ any 3-point explicit method violates
CFL condition for xed k/h
However, with k/h2 ≤ 1/2, all of R is covered as k → 0

Example (Crank-Nicolson)
Any implicit scheme satises the CFL condition, since the
tridiagonal linear system couples all points.
Modied equations
Find a PDE vt = · · · that the numerical approximation Ujn
satises exactly, or at least better than the original PDE
Example (Upwind method)
To second order accuracy, the numerical solution satises
 
1 ak
vt + avx = ah 1 − vxx
2 h
Advection-diusion equation

Example (Lax-Wendro)
To third order accuracy,
 2 !
1 2 ak
vt + avx + ah 1 − vxxx = 0
6 h
Dispersive behavior, leading to a phase error . To fourth order,
 2 !
1 2 ak
vt + avx + ah 1 − vxxx = −vxxxx
6 h
where  = O(k 3 + h3 ) =⇒ highest modes damped
Modied equations
Example (Beam-Warming)
To third order,
 2 !
1 3ak ak
vt + avx = ah2 2− + vxxx
6 h h

Dispersive, similar to Lax-Wendro

Example (Leapfrog)
Modied equation
 2 !
1 ak
vt + avx + ah2 1− vxxx = vxxxxx + · · ·
6 h

where  = O(h4 + k 4 ) =⇒ only odd-order derivatives,


nondissipative method
Hyperbolic systems
The methods generalize to rst order linear systems of
equations of the form
ut + Aux = 0,
u(x, 0) = η(x),
where u : R × R → Rs and a constant matrix A ∈ Rs×s
Hyperbolic system of conservation laws, with ux function
f (u) = Au, if A diagonalizable with real eigenvalues:
A = RΛR−1 or Arp = λp rp for p = 1, 2, . . . , s
Change variables to eigenvectors, w = R−1 u, to decouple
system into s independent scalar equations
(wp )t + λp (wp )x = 0, p = 1, 2, . . . , s
with solution wp (x, t) = wp (x − λp t, 0) and initial condition
the pth component of w(x, 0) = R−1 η(x).
Solution recovered by u(x, t) = Rw(x, t), or
X s
u(x, t) = wp (x − λp t, 0)rp
p=1
Numerical methods for hyperbolic systems
Most methods generalize to systems by replacing a with A
Example (Lax-Wendro)

k k2
Ujn+1 = Ujn − n
A(Uj+1 n
− Uj−1 ) + 2 A2 (Uj−1
n
− 2Ujn + Uj+1
n
)
2h 2h
Second-order accurate, stable if ν = max1≤p≤s |λp k/h| ≤ 1

Example (Upwind methods)

k
Ujn+1 = Ujn − A(Ujn − Uj−1
n
)
h
k
Ujn+1 n
= Ujn − A(Uj+1 − Ujn )
h
Only useful if all eigenvalues of A have same sign. Instead,
decompose into scalar equations and upwind each one separately
=⇒ Godunov's method
Initial boundary value problems

For a bounded domain, e.g. 0 ≤ x ≤ 1, the advection equation


requires an inow condition x(0, t) = g0 (t) if a > 0
This gives the solution
(
η(x − at) if 0 ≤ x − at ≤ 1,
u(x, t) =
g0 (t − x/a) otherwise.

First-order upwind works well, but other stencils need special


cases at inow boundary and/or outow boundary
von Neumann analysis not applicable, but generally gives
necessary conditions for convergence
Method of Lines applicable if eigenvalues of discretization
matrix are known

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy