Finite Difference Methods for PDEs
Per-Olof Persson
persson@berkeley.edu
Math 228B Numerical Solutions of Differential Equations
Finite Difference Approximations
Finite Difference Approximations
\[\begin{aligned} D_+ u(\bar{x}) &= \frac{u(\bar{x}+h)-u(\bar{x})}{h} = u'(\bar{x})+\frac{h}{2} u''(\bar{x}) + \mathcal{O}(h^2) \\ D_- u(\bar{x}) &= \frac{u(\bar{x})-u(\bar{x}-h)}{h} = u'(\bar{x})-\frac{h}{2} u''(\bar{x}) + \mathcal{O}(h^2) \\ D_0 u(\bar{x}) &= \frac{u(\bar{x}+h)-u(\bar{x}-h)}{2h} = u'(\bar{x})+\frac{h^2}{6} u'''(\bar{x}) + \mathcal{O}(h^4) \\ D^2 u(\bar{x}) &= \frac{u(\bar{x}-h)-2u(\bar{x})+u(\bar{x}+h)}{h^2} \\ &= u''(\bar{x}) + \frac{h^2}{12}u''''(\bar{x})+\mathcal{O}(h^4) \end{aligned}\]
Method of Undetermined Coefficients
Find approximation to \(u^{(k)}(\bar{x})\) based on \(u(x)\) at \(x_1,x_2,\ldots,x_n\)
Write \(u(x_i)\) as Taylor series centered at \(\bar{x}\): \[\begin{aligned} u(x_i) &= u(\bar{x}) + (x_i-\bar{x})u'(\bar{x}) + \cdots + \frac{1}{k!} (x_i-\bar{x})^k u^{(k)}(\bar{x}) + \cdots \end{aligned}\]
Seek approximation of the form \[\begin{aligned} u^{(k)}(\bar{x}) = c_1 u(x_1) + c_2 u(x_2) + \cdots + c_n u(x_n) + \mathcal{O}(h^p) \end{aligned}\]
Collect terms multiplying \(u(\bar{x})\), \(u'(\bar{x})\), etc, to obtain: \[\begin{aligned} \frac{1}{(i-1)!} \sum_{j=1}^n c_j (x_j-\bar{x})^{(i-1)} = \begin{cases} 1 & \text{if } i-1=k \\ 0 & \text{otherwise.} \end{cases} \end{aligned}\]
Nonsingular Vandermonde system if \(x_j\) are distinct
Finite difference 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 Difference Method
Consider the Poisson equation with Dirichlet conditions: \[\begin{aligned} u''(x) = f(x),\quad 0<x<1,\quad u(0)=\alpha,\quad u(1)=\beta \end{aligned}\]
Introduce \(n\) uniformly spaced grid points \(x_j=jh\), \(h=1/(n+1)\)
Set \(u_0=\alpha\), \(u_{n+1}=\beta\), and use the three-point difference approximation to get the discretization \[\begin{aligned} \frac{1}{h^2} (u_{j-1} - 2u_j + u_{j+1}) = f(x_j),\quad j=1,\ldots,n \end{aligned}\]
This can be written as a linear system \(Au=f\) with
\[\begin{aligned} A=\frac{1}{h^2} \begin{bmatrix} -2 & 1 & & \\ 1 & -2 & 1 & \\ & & \ddots & \\ & & 1 & -2 \end{bmatrix} \quad u= \begin{bmatrix} u_1 \\ u_2 \\ \vdots \\ u_n \end{bmatrix} \quad f= \begin{bmatrix} f(x_1) - \alpha/h^2 \\ f(x_2) \\ \vdots \\ f(x_n)-\beta/h^2 \end{bmatrix} \end{aligned}\]
Errors and Grid Function Norms
The error \(e=u-\hat{u}\) where \(u\) is the numerical solution and \(\hat{u}\) is the exact solution \[\begin{aligned} \hat{u} = \begin{bmatrix} u(x_1) \\ \vdots \\ u(x_n) \end{bmatrix} \end{aligned}\]
Measure errors in grid function norms, which are approximations of integrals and scale correctly as \(n\rightarrow\infty\) \[\begin{aligned} \|e\|_\infty &= \max_j |e_j| \\ \|e\|_1 &= h \sum_j |e_j| \\ \|e\|_2 &= \left( h\sum_j |e_j|^2 \right)^{1/2} \end{aligned}\]
Local Truncation Error
Insert the exact solution \(u(x)\) into the difference scheme to get the local truncation error: \[\begin{aligned} \tau_j &= \frac{1}{h^2} (u(x_{j-1}) - 2u(x_j) + u(x_{j+1})) - f(x_j) \\ &= u''(x_j) + \frac{h^2}{12} u''''(x_j) + \mathcal{O}(h^4) - f(x_j) \\ &= \frac{h^2}{12} u''''(x_j) + \mathcal{O}(h^4) \end{aligned}\] or \[\begin{aligned} \tau=\begin{bmatrix} \tau_1 \\ \vdots \\ \tau_n \end{bmatrix} = A\hat{u}-f \end{aligned}\]
Errors
Linear system gives error in terms of LTE: \[\begin{aligned} \left\{ \begin{array}{ll} Au = f \\ A\hat{u} = f+\tau \end{array} \right. \Longrightarrow Ae = -\tau \end{aligned}\]
Introduce superscript \(h\) to indicate that a problem depends on the grid spacing, and bound the norm of the error: \[\begin{aligned} A^h e^h &= -\tau^h \\ e^h &= - (A^h)^{-1} \tau^h \\ \|e^h\| &= \|(A^h)^{-1}\tau^h\| \le \|(A^h)^{-1}\|\cdot\|\tau^h\| \end{aligned}\]
If \(\|(A^h)^{-1}\|\le C\) for \(h\le h_0\), then \[\begin{aligned} \|e^h\|\le C \cdot \|\tau^h\| \rightarrow 0 \text{ if } \|\tau^h\|\rightarrow 0\text{ as }h\rightarrow 0 \end{aligned}\]
Stability, Consistency, and Convergence
A method \(A^hu^h=f^h\) is stable if \((A^h)^{-1}\) exists and \(\|(A^h)^{-1}\|\le C\) for \(h\le h_0\)
It is consistent with the DE if \(\|\tau^h\|\rightarrow 0\) as \(h\rightarrow 0\)
It is convergent if \(\|e^h\|\rightarrow 0\) as \(h\rightarrow 0\)
Consistency + Stability \(\Longrightarrow\) Convergence
since \(\|e^h\|\le \|(A^h)^{-1}\|\cdot\|\tau^h\| \le C\cdot \|\tau^h\| \rightarrow 0\). A stronger statement is
\(\mathcal{O}(h^p)\) LTE + Stability \(\Longrightarrow\) \(\mathcal{O}(h^p)\) global error
Stability in the 2-Norm
In the 2-norm, we have \[\begin{aligned} \|A\|_2 &= \rho(A) = \max_p |\lambda_p| \\ \|A^{-1}\|_2 &= \frac{1}{\min_p |\lambda_p|} \end{aligned}\]
For our model problem matrix, we have explicit expressions for the eigenvectors/eigenvalues:
\[\begin{aligned} A=\frac{1}{h^2} \begin{bmatrix} -2 & 1 & & \\ 1 & -2 & 1 & \\ & & \ddots & \\ & & 1 & -2 \end{bmatrix} \end{aligned}\]
\[\begin{aligned} u_j^p &= \sin (p\pi j h) \\ \lambda_p &= \frac{2}{h^2}(\cos(p\pi h)-1) \end{aligned}\]
The smallest eigenvalue is \[\begin{aligned} \lambda_1 = \frac{2}{h^2}(\cos(\pi h)-1) = -\pi^2 +\mathcal{O}(h^2) \Longrightarrow \text{ Stability} \end{aligned}\]
Convergence in the 2-Norm
This gives a bound on the error \[\begin{aligned} \|e^h\|_2 \le \|(A^h)^{-1}\|_2\cdot\|\tau^h\|_2 \approx \frac{1}{\pi^2}\|\tau^h\|_2 \end{aligned}\]
Since \(\tau_j^h\approx \frac{h^2}{12} u''''(x_j)\), \[\begin{aligned} \|\tau^h\|_2 \approx \frac{h^2}{12} \|u''''\|_2 = \frac{h^2}{12}\|f''\|_2 \Longrightarrow \|e^h\|_2 = \mathcal{O}(h^2) \end{aligned}\]
While this implies convergence in the max-norm, 1/2 order is lost because of the grid function norm: \[\begin{aligned} \|e^h\|_\infty \le \frac{1}{\sqrt{h}} \|e^h\|_2 = \mathcal{O}(h^{3/2}) \end{aligned}\]
But it can be shown that \(\|(A^h)^{-1}\|_\infty=\mathcal{O}(1)\), which implies \(\|e^h\|_\infty = \mathcal{O}(h^2)\)
Neumann Boundary Conditions
Consider the Poisson equation with Neumann/Dirichlet conditions: \[\begin{aligned} u''(x) = f(x),\quad 0<x<1,\quad u'(0)=\sigma,\quad u(1)=\beta \end{aligned}\]
Second-order accurate one-sided difference approximation: \[\begin{aligned} \frac{1}{h}\left(-\frac32 u_0 + 2u_1 - \frac12 u_2\right) = \sigma \end{aligned}\] \[\begin{aligned} \frac{1}{h^2} \begin{bmatrix} -\frac{3h}{2} & 2h & -\frac{h}{2} & & \\ 1 & -2 & 1 & &\\ & & \ddots & &\\ & & 1 & -2 & 1 \\ & & & 0 & h^2 \end{bmatrix} \begin{bmatrix} u_0 \\ u_1 \\ \vdots \\ u_n \\ u_{n+1} \end{bmatrix} = \begin{bmatrix} \sigma \\ f(x_1) \\ \vdots \\ f(x_n) \\ \beta \end{bmatrix} \end{aligned}\] Most general approach.
Finite Difference Methods for Elliptic Problems
Elliptic Partial Differential Equations
Consider the elliptic PDE below, the Poisson equation: \[\begin{aligned} \nabla^2 u(x,y) \equiv \frac{\partial ^2 u}{\partial x^2} (x,y) + \frac{\partial ^2 u}{\partial y^2} (x,y) = f(x,y) \end{aligned}\] on the rectangular domain \[\begin{aligned} \Omega = \{ (x,y)\ |\ a<x<b, c<y<d \} \end{aligned}\] with Dirichlet boundary conditions \(u(x,y) = g(x,y)\) on the boundary \(\Gamma=\partial \Omega\) of \(\Omega\).
Introduce a two-dimensional grid by choosing integers \(n,m\) and defining step sizes \(h=(b-a)/n\) and \(k = (d-c)/m\). This gives the point coordinates (mesh points): \[\begin{aligned} x_i &= a+ih,\qquad i=0,1,\ldots,n \\ y_i &= c+jk,\qquad j=0,1,\ldots,m \end{aligned}\]
Finite Difference Discretization
Discretize each of the second derivatives using finite differences on the grid: \[\begin{aligned} &\frac{u(x_{i+1},y_j) - 2u(x_i,y_j) + u(x_{i-1},y_j)}{h^2} + \\ &\frac{u(x_{i},y_{j+1}) - 2u(x_i,y_j) + u(x_{i},y_{j-1})}{k^2} \\ & \quad = f(x_i,y_j) + \frac{h^2}{12} \frac{\partial^4 u}{\partial x^4}(x_i,y_j) + \frac{k^2}{12} \frac{\partial^4 u}{\partial y^4} (x_i,y_j) + \mathcal{O}(h^4 + k^4) \end{aligned}\] for \(i=1,2,\ldots,n-1\) and \(j=1,2,\ldots,m-1\), with boundary conditions \[\begin{aligned} u(x_0,y_j) &= g(x_0,y_j),\quad u(x_n,y_j)=g(x_n,y_j),\quad j=0,\ldots,m \\ u(x_i,y_0) &= g(x_i,y_0),\quad u(x_i,y_0)=g(x_i,y_m),\quad i=1,\ldots,n-1 \end{aligned}\]
Finite Difference Discretization
The corresponding finite-difference method for \(u_{i,j} \approx u(x_i,y_i)\) is \[\begin{aligned} &2\left[ \left(\frac{h}{k}\right)^2 + 1 \right] u_{ij} -(u_{i+1,j} + u_{i-1,j}) - \\ & \qquad \left(\frac{h}{k}\right)^2(u_{i,j+1} + u_{i,j-1}) = -h^2 f(x_i,y_j) \end{aligned}\] for \(i=1,2,\ldots,n-1\) and \(j=1,2,\ldots,m-1\), with boundary conditions \[\begin{aligned} u_{0j} &= g(x_0,y_j),\quad u_{nj}=g(x_n,y_j),\quad j=0,\ldots,m \\ u_{i0} &= g(x_i,y_0),\quad u_{im}=g(x_i,y_m),\quad i=1,\ldots,n-1 \end{aligned}\] Define \(f_{ij} = f(x_i,y_i)\) and suppose \(h=k\), to get the simple form \[\begin{aligned} u_{i+1,j} + u_{i-1,j} + u_{i,j+1} + u_{i,j-1} - 4 u_{i,j} = h^2 f_{ij} \end{aligned}\]
FDM for Poisson, Julia implementation
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 \[\begin{aligned} \tau_{ij} = \frac{1}{12} h^2 (u_{xxxx} + u_{yyyy}) + \mathcal{O}(h^4) \end{aligned}\]
It can be shown that the smallest eigenvalue of \(A^h\) is \(-2\pi^2 + \mathcal{O}(h^2)\), and the spectral radius of \((A^h)^{-1}\) is approximately \(1/2\pi^2\)
As before, this gives \(\|e^h\|_2 = \mathcal{O}(h^2)\)
Non-Rectangular Domains
Poisson in 2D non-rectangular domain
Consider the Poisson problem on the non-rectangular domain \(\Omega\) with boundary \(\Gamma = \Gamma_D \cup \Gamma_N = \partial \Omega\): \[\begin{aligned} -\nabla^2 u &= f & & \text{in }\Omega\\ u &= g & & \text{on }\Gamma_D \\ \frac{\partial u}{\partial n} &= r & & \text{on }\Gamma_N \end{aligned}\]
Consider a mapping between a rectangular reference domain \(\hat{\Omega}\) and the actual physical domain \(\Omega\)
Find an equivalent problem that can be solved in \(\hat{\Omega}\)
Poisson in 2D non-rectangular domainTransformed derivatives
Use the chain rule to transform the derivatives of \(u\) in the physical domain: \[\begin{aligned} u(x,y) = u(x(\xi,\eta), y(\xi,\eta))\quad\Longrightarrow\quad \begin{aligned} u_x &= \xi_x u_\xi+ \eta_x u_\eta \\ u_y &= \xi_y u_\xi+ \eta_y u_\eta \end{aligned} \end{aligned}\]
Determine the terms \(\xi_x,\eta_x,\xi_y,\eta_y\) by the mapped derivatives:
\[\begin{aligned} \xi = \xi(x,y) \\ \eta = \eta(x,y) \end{aligned}\] \[\begin{aligned} \begin{pmatrix} d\xi \\ d\eta \end{pmatrix} = \begin{pmatrix} \xi_x & \xi_y \\ \eta_x & \eta_y \end{pmatrix} \begin{pmatrix} dx \\ dy \end{pmatrix} \end{aligned}\]
\[\begin{aligned} x = x(\xi, \eta) \\ y = y(\xi, \eta) \end{aligned}\] \[\begin{aligned} \begin{pmatrix} dx \\ dy \end{pmatrix} = \begin{pmatrix} x_\xi & x_\eta \\ y_\xi & y_\eta \end{pmatrix} \begin{pmatrix} d\xi \\ d\eta \end{pmatrix} \end{aligned}\]
\[\begin{aligned} \Longrightarrow \begin{pmatrix} \xi_x & \xi_y \\ \eta_x & \eta_y \end{pmatrix} = \begin{pmatrix} x_\xi & x_\eta \\ y_\xi & y_\eta \end{pmatrix}^{-1} = \frac{1}{J} \begin{pmatrix} y_\eta & -x_\eta \\ -y_\xi & x_\xi \end{pmatrix} \end{aligned}\]
where \(J=x_\xi y_\eta - x_\eta y_\xi\)
Poisson in 2D non-rectangular domainTransformed equations
Using the derivative expressions, we can transform all the derivatives and the equation \(-(u_{xx} + u_{yy}) = f\) becomes \[\begin{aligned} -\frac{1}{J^2} (a u_{\xi\xi} -2bu_{\xi\eta} +c u_{\eta\eta} +d u_{\eta} + e u_{\xi}) = f \end{aligned}\] where \[\begin{aligned} a &= x^2_\eta + y^2_\eta & b &= x_\xi x_\eta + y_\xi y_\eta & c &=x^2_\xi + y^2_\xi \\ d &= \frac{y_\xi\alpha - x_\xi \beta}{J} & e &= \frac{x_\eta\beta - y_\eta \alpha}{J} \end{aligned}\] with \[\begin{aligned} \alpha &= a x_{\xi\xi} -2b x_{\xi\eta} + c x_{\eta\eta} \\ \beta &= a y_{\xi\xi} -2b y_{\xi\eta} + c y_{\eta\eta} \end{aligned}\]
Poisson in 2D non-rectangular domainNormal derivatives
The normal \(\boldsymbol{n}\) in the physical domain is in the direction of
\(\nabla\eta\) or \(\nabla\xi\).For example, on the top boundary \(\eta=1\) we have \[\begin{aligned} \boldsymbol{n} = (n^x, n^y) = \frac{1}{\sqrt{\eta^2_x + \eta^2_y}} (\eta_x, \eta_y) = \frac{1}{\sqrt{x^2_\xi + y^2_\xi}} (-y_\xi, x_\xi) \end{aligned}\]
This gives the normal derivative \[\begin{aligned} \hspace{-5mm} \frac{\partial u}{\partial n} = u_x n^x + u_y n^y = \frac{1}{J} \left[ (y_\eta n^x - x_\eta n^y) u_\xi + (-y_\xi n^x + x_\xi n^y) u_\eta \right] \end{aligned}\]
Finite Difference Methods for Parabolic Problems
Parabolic equations
Model problem: The heat equation: \[\begin{aligned} \frac{\partial u}{\partial t} - \nabla \cdot (\kappa \nabla u) = f \end{aligned}\] where
\(u=u(\boldsymbol{x},t)\) is the temperature at a given point and time
\(\kappa\) is the heat capacity (possibly \(\boldsymbol{x}\)- and \(t\)-dependent)
\(f\) is the source term (possibly \(\boldsymbol{x}\)- and \(t\)-dependent)
Need initial conditions at some time \(t_0\): \[\begin{aligned} u(\boldsymbol{x},t_0) = \eta(\boldsymbol{x}) \end{aligned}\]
Need boundary conditions at domain boundary \(\Gamma\):
Dirichlet condition (prescribed temperature): \(u = u_D\)
Neumann condition (prescribed heat flux): \(\boldsymbol{n}\cdot(\kappa \nabla u) = g_N\)
1D discretization
Initial case: One space dimension, \(\kappa=1\), \(f=0\): \[\begin{aligned} u_t = \kappa u_{xx}, \qquad 0\le x \le 1 \end{aligned}\] with boundary conditions \(u(0,t)=g_0(t)\), \(u(1,t)=g_1(t)\)
Introduce finite difference grid: \[\begin{aligned} x_i = ih,\quad t_n = nk \end{aligned}\] with mesh spacing \(h=\Delta x\) and time step \(k=\Delta t\).
Approximate the solution \(u\) at grid point \((x_i,t_n\)): \[\begin{aligned} U_i^n \approx u(x_i, t_n) \end{aligned}\]
Numerical schemes: FTCS
FTCS (Forward in time, centered in space): \[\begin{aligned} \frac{U_i^{n+1} - U_i^n}{k} = \frac{1}{h^2} \left( U_{i-1}^n - 2U_i^n + U_{i+1}^n \right) \end{aligned}\] or, as an explicit expression for \(U_i^{n+1}\), \[\begin{aligned} U_i^{n+1} = U_i^n + \frac{k}{h^2} \left( U_{i-1}^n - 2U_i^n + U_{i+1}^n \right) \end{aligned}\]
Explicit one-step method in time
Boundary conditions naturally implemented by setting \[\begin{aligned} U_0^n = g_0(t_n),\qquad U_{m+1}^n = g_1(t_n) \end{aligned}\]
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*h^2
N = ceil(Int, T/k)
u = exp.(-(x .- 0.25).^2 / 0.1^2) .+ 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/h^2 * (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\): \[\begin{aligned} \hspace{-5mm} \frac{U_i^{n+1} - U_i^n}{k} &= \frac12 \left( D^2 U_i^n + D^2 U_i^{n+1} \right) \\ &= \frac{1}{2h^2} \left( U_{i-1}^n - 2U_i^n + U_{i+1}^n + U_{i-1}^{n+1} - 2U_i^{n+1} + U_{i+1}^{n+1} \right) \end{aligned}\] or \[\begin{aligned} \hspace{-5mm} -rU_{i-1}^{n+1} + (1+2r) U_i^{n+1} -rU_{i+1}^{n+1} = rU_{i-1}^n + (1-2r) U_i^n +rU_{i+1}^n \end{aligned}\] where \(r=k/2h^2\)
Implicit one-step method in time \(\Longrightarrow\) need to solve tridiagonal system of equations
Crank-Nicolson, Julia implementation
"""
Solves the 1D heat equation with the Crank−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*h^2
N = ceil(Int, T/k)
u = exp.(-(x .- 0.25).^2 / 0.1^2) .+ 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)) / h^2
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 difference equations
Ex: FTCS \[\begin{aligned} \hspace{-12mm} \tau(x,t) = \frac{u(x,t+k)-u(x,t)}{k} - \frac{1}{h^2}(u(x-h,t)-2u(x,t)+u(x+h,t)) \end{aligned}\] Assume \(u\) smooth enough and expand in Taylor series: \[\begin{aligned} \hspace{-10mm} \tau(x,t) = \left(u_t + \frac12 k u_{tt} + \frac16 k^2 u_{ttt} + \cdots \right) - \left( u_{xx} + \frac{1}{12} h^2 u_{xxxx} + \cdots \right) \end{aligned}\] Use the equation: \(u_t=u_{xx}\), \(u_{tt} = u_{txx} = u_{xxxx}\): \[\begin{aligned} \tau(x,t) = \left( \frac12 k - \frac{1}{12} h^2 \right) u_{xxxx} + O(k^2 + h^4) = O(k+h^2) \end{aligned}\] First order accurate in time, second order accurate in space
Ex: For Crank-Nicolson, \(\tau(x,t) = O(k^2+h^2)\)
Consistent method if \(\tau(x,t)\rightarrow 0\) as \(k,h\rightarrow 0\)
Method of Lines
Discretize PDE in space, integrate resulting semidiscrete system of ODEs using standard schemes
Ex: Centered in space \[\begin{aligned} U'_i(t) = \frac{1}{h^2} (U_{i-1}(t) - 2U_i(t) + U_{i+1}(t)),\quad i=1,\ldots,m \end{aligned}\] or in matrix form: \(U'(t) = AU(t) + g(t)\), where
\[\begin{aligned} A = \frac{1}{h^2} \begin{bmatrix} -2 & 1 & & & & \\ 1 & -2 & 1 & & & \\ & 1 & -2 & 1 & & \\ & & \ddots & \ddots & \ddots & \\ & & & 1 & -2 & 1 \\ & & & & 1 & -2 \end{bmatrix},\quad g(t) = \frac{1}{h^2} \begin{bmatrix} g_0(t) \\ 0 \\ 0 \\ \vdots \\ 0 \\ g_1(t) \end{bmatrix} \end{aligned}\]
Solve the centered semidiscrete system using:
Forward Euler \(U^{n+1} = U^n + kf(U^n)\)
\(\qquad \Longrightarrow\) the FTCS methodTrapezoidal method \(U^{n+1} = U^n + \frac{k}{2}(f(U^n)+f(U^{n+1}))\)
\(\qquad \Longrightarrow\) 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.1^2) .+ 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]) / h^2 # 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\lambda\) to be inside the absolute stability region, for all eigenvalues \(\lambda\) of \(A\)
For the centered differences, the eigenvalues are
\[\begin{aligned} \lambda_p = \frac{2}{h^2} (\cos(p\pi h) - 1),\quad p=1,\ldots,m \end{aligned}\]
or, in particular, \(\lambda_m\approx -4/h^2\)
Euler gives \(-2\le -4k/h^2 \le 0\), or \[\begin{aligned} \frac{k}{h^2}\le \frac12 \end{aligned}\] \(\Longrightarrow\) time step restriction for FTCS
Trapezoidal method A-stable \(\Longrightarrow\) Crank-Nicolson is stable for any time step \(k>0\)
Convergence
For convergence, \(k\) and \(h\) must in general approach zero at appropriate rates, for example \(k\rightarrow 0\) and \(k/h^2 \le 1/2\)
Write the methods as \[\begin{aligned} U^{n+1} = B(k) U^n + b^n(k) \ \ (*) \end{aligned}\] where, e.g., \(B(k) = I+kA\) for forward Euler and \(B(k) = \left( I-\frac{k}{2} A \right)^{-1} \left( I+\frac{k}{2} A \right)\) for Crank-Nicolson
A linear method of the form (*) is Lax-Richtmyer stable if,
for each time \(T\), these is a
constant \(C_T>0\) such that \[\begin{aligned}
\| B(k)^n \| \le C_T
\end{aligned}\]
for all \(k>0\) and integers \(n\) for which \(kn\le T\).
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)\): \[\begin{aligned}
U^{n+1} &= BU^n + b^n \\
u^{n+1} &= Bu^n + b^n + k\tau^n
\end{aligned}\]
Subtract to get difference equation for the error \(E^n = U^n - u^n\): \[\begin{aligned}
E^{n+1} = BE^n - k\tau^n, \quad\text{or}\quad
E^N = B^NE^0 - k\sum_{n=1}^N B^{N-n}\tau^{n-1}
\end{aligned}\]
Bound the norm, use Lax-Richtmyer stability and \(Nk\le T\): \[\begin{aligned}
\|E^N\| &\le \|B^N\| \|E^0\| + k
\sum_{n=1}^N \|B^{N-n}\| \|\tau^{n-1}\| \\
& \le C_T \| E^0 \| + T C_T \max_{1\le n\le N} \|\tau^{n-1} \|
\rightarrow 0
\text{ as } k\rightarrow 0
\end{aligned}\]
provided \(\|\tau\|\rightarrow 0\) and
that the initial data \(\|E^0\|\rightarrow
0\). ◻
Convergence
For the FTCS method, \(B(k) = I+kA\) is symmetric, so \(\|B(k)\|_2 = \rho(B) \le 1\) if \(k\le h^2/2\). Therefore, it is Lax-Richtmyer stable and convergent, under this restriction.
For the Crank-Nicolson method, \(B(k) = \left( I-\frac{k}{2} A \right)^{-1} \left( I+\frac{k}{2} A \right)\) is symmetric with eigenvalues \((1+k\lambda_p/2)/(1-k\lambda_p/2)\). Therefore, \(\|B(k)\|_2=\rho(B)<1\) for any \(k>0\) and the method is Lax-Richtmyer stable and convergent.
\(\|B(k)\|\le 1\) is called strong stability, but Lax-Richtmyer stability is also obtained if \(\|B(k)\|\le 1+\alpha k\) for some constant \(\alpha\), since then \[\begin{aligned} \|B(k)^n\| \le (1+\alpha k)^n \le e^{\alpha T} \end{aligned}\]
Von Neumann Analysis
Consider the Cachy problem, on all space and no boundaries (\(-\infty<x<\infty\) in 1D)
The grid function \(W_j = e^{ijh\xi}\), constant \(\xi\), is an eigenfunction of any translation-invariant finite difference operator
Consider the centered difference \(D_0V_j = \frac{1}{2h} (V_{j+1} - V_{j-1})\): \[\begin{aligned} D_0W_j &= \frac{1}{2h} \left( e^{i(j+1) h \xi} - e^{i(j-1) h \xi} \right) = \frac{1}{2h} \left( e^{i h \xi} - e^{- i h \xi} \right) e^{ijh\xi} \\ &= \frac{i}{h} \sin(h\xi) e^{ijh\xi} = \frac{i}{h}\sin(h\xi) W_j, \end{aligned}\] that is, \(W\) is an eigenfunction with eigenvalue \(\frac{i}{h}\sin(h\xi)\)
Note that this agrees to first order with the eigenvalue \(i\xi\) of the operator \(\partial_x\)
Von Neumann Analysis
Consider a function \(V_j\) on the grid \(x_j = jh\), with finite 2-norm \[\begin{aligned} \|V\|_2 = \left( h \sum_{j=-\infty}^{\infty} |V_j|^2 \right) ^{1/2} \end{aligned}\]
Express \(V_j\) as linear combination of \(e^{ijh\xi}\) for \(|\xi|\le \pi/h\): \[\begin{aligned} \hspace{-8mm} V_j = \frac{1}{\sqrt{2\pi}} \int_{-\pi/h}^{\pi/h} \hat{V}(\xi) e^{ijh\xi}\,d\xi,\quad \text{where } \hat{V}(\xi) = \frac{h}{\sqrt{2\pi}} \sum_{j=-\infty}^{\infty} V_j e^{-ijh\xi} \end{aligned}\]
Parseval’s relation: \(\|\hat{V}\|_2 = \|V\|_2\) in the norms \[\begin{aligned} \|V\|_2 = \left( h \sum_{j=-\infty}^{\infty} |V_j|^2 \right) ^{1/2},\quad \|\hat{V}\|_2 = \left( \int_{-\pi/h}^{\pi/h} |\hat{V}(\xi)|^2 d\xi \right) ^{1/2} \end{aligned}\]
Von Neumann Analysis
Using Parseval’s relation, we can show Lax-Richtmyer stability \[\begin{aligned} \|U^{n+1}\|_2 \le (1+\alpha k)\|U^n\|_2 \end{aligned}\] in the Fourier transform of \(U^n\): \[\begin{aligned} \|\hat{U}^{n+1}\|_2 \le (1+\alpha k)\|\hat{U}^n\|_2 \end{aligned}\]
This decouples each \(\hat{U}^n(\xi)\) from all other wave numbers: \[\begin{aligned} \hat{U}^{n+1}(\xi) = g(\xi) \hat{U}^n (\xi) \end{aligned}\] with amplification factor \(g(\xi)\).
If \(|g(\xi)|\le 1+\alpha k\), then \[\begin{aligned} \hspace{-5mm} |\hat{U}^{n+1}(\xi)| \le (1+\alpha k)|\hat{U}^n(\xi)|\quad\text{and}\quad \|\hat{U}^{n+1}\|_2 \le (1+\alpha k)\|\hat{U}^n\|_2 \end{aligned}\]
Von Neumann Analysis
For the FTCS method, \[\begin{aligned}
U_i^{n+1} = U_i^n + \frac{k}{h^2}
\left( U_{i-1}^n - 2U_i^n + U_{i+1}^n \right)
\end{aligned}\]
we get the amplification factor \[\begin{aligned}
g(\xi) = 1 + 2\frac{k}{h^2} (\cos(\xi h) -1)
\end{aligned}\]
and \(|g(\xi)|\le 1\) if \(k\le h^2/2\)
For the Crank Nicolson method, \[\begin{aligned}
\hspace{-1mm}
-rU_{i-1}^{n+1} + (1+2r) U_i^{n+1} -rU_{i+1}^{n+1} =
rU_{i-1}^n + (1-2r) U_i^n +rU_{i+1}^n
\end{aligned}\]
we get the amplification factor \[\begin{aligned}
g(\xi) = \frac{1+\frac12 z}{1-\frac12 z}\quad\text{where}\quad
z = \frac{2k}{h^2} (\cos(\xi h) - 1)
\end{aligned}\]
and \(|g(\xi)|\le 1\) for any \(k,h\)
Multidimensional Problems
Consider the heat equation in two space dimensions: \[\begin{aligned} u_t = u_{xx} + u_{yy} \end{aligned}\] with initial conditions \(u(x,y,0)=\eta(x,y)\) and boundary conditions on the boundary of the domain \(\Omega\).
Use e.g. the 5-point discrete Laplacian: \[\begin{aligned} \nabla_h^2 U_{ij} = \frac{1}{h^2} (U_{i-1,j} + U_{i+1,j} +U_{i,j-1} + U_{i,j+1} - 4U_{ij}) \end{aligned}\]
Use e.g. the trapezoidal method in time: \[\begin{aligned} U_{ij}^{n+1} = U_{ij}^n +\frac{k}{2}\left[ \nabla_h^2 U_{ij}^n + \nabla_h^2 U_{ij}^{n+1} \right] \end{aligned}\] or \[\begin{aligned} \left(I-\frac{k}{2}\nabla_h^2\right)U_{ij}^{n+1} = \left(I+\frac{k}{2}\nabla_h^2\right)U_{ij}^{n} \end{aligned}\]
Linear system involving \(A=I-k\nabla_h^2/2\), not tridiagonal
But condition number \(=O(k/h^2)\), \(\Longrightarrow\) fast iterative solvers
Locally One-Dimensional and Alternating Directions
Split timestep and decouple \(u_{xx}\) and \(u_{yy}\): \[\begin{aligned} U_{ij}^* &= U_{ij}^n + \frac{k}{2} (D_x^2 U_{ij}^n + D_x^2 U_{ij}^*) \\ U_{ij}^{n+1} &= U_{ij}^* + \frac{k}{2} (D_y^2 U_{ij}^* + D_x^2 U_{ij}^{n+1}) \end{aligned}\] or, as in the alternating direction implicit (ADI) method, \[\begin{aligned} U_{ij}^* &= U_{ij}^n + \frac{k}{2} (D_y^2 U_{ij}^n + D_x^2 U_{ij}^*) \\ U_{ij}^{n+1} &= U_{ij}^* + \frac{k}{2} (D_x^2 U_{ij}^* + D_y^2 U_{ij}^{n+1}) \end{aligned}\]
Implicit scheme with only tridiagonal systems
Remains second order accurate
Finite Difference Methods for Hyperbolic Problems
Advection
The scalar advection equation, with constant velocity \(a\): \[\begin{aligned} u_t + au_x = 0 \end{aligned}\]
Cauchy problem needs initial data \(u(x,0)=\eta(x)\), and the exact solution is \[\begin{aligned} u(x,t) = \eta(x-at) \end{aligned}\]
FTCS scheme: \[\begin{aligned} \frac{U_j^{n+1} - U_j^n}{k} = -\frac{a}{2h}\left(U_{j+1}^n - U_{j-1}^n \right) \end{aligned}\] or \[\begin{aligned} U_j^{n+1} = U_j^n - \frac{ak}{2h}\left(U_{j+1}^n - U_{j-1}^n \right) \end{aligned}\]
Stability problems – more later
The Lax-Friedrichs Method
Replace \(U_j^n\) in FTCS by the average of its neighbors: \[\begin{aligned} U_j^{n+1} = \frac12 \left(U_{j-1}^n + U_{j+1}^n \right) - \frac{ak}{2h}\left(U_{j+1}^n - U_{j-1}^n \right) \end{aligned}\]
Lax-Richtmyer stable if \[\begin{aligned} \left| \frac{ak}{h} \right| \le 1, \end{aligned}\] or \(k=\mathcal{O}(h)\) – not stiff
Method of Lines
With bounded domain, e.g. \(0\le x\le 1\), if \(a>0\) we need an inflow boundary condition at \(x=0\): \[\begin{aligned} u(0,t) = g_0(t) \end{aligned}\] and \(x=1\) is an outflow boundary
Opposite if \(a<0\)
Need one-sided differences – more later
Periodic Boundary Conditions
For analysis, impose the periodic boundary conditions \[\begin{aligned} u(0,t) = u(1,t),\qquad \text{for }t\ge 0 \end{aligned}\]
Equivalent to Cauchy problem with periodic initial data
Introduce one boundary value as an unknown, e.g. \(U_{m+1}(t)\): \[\begin{aligned} U(t) = ( U_1(t), U_2(t), \ldots, U_{m+1}(t) )^T \end{aligned}\]
Use periodicity for first and last equations: \[\begin{aligned} U'_1(t) &= -\frac{a}{2h}(U_2(t) - U_{m+1}(t)) \\ U'_{m+1}(t) &= -\frac{a}{2h}(U_1(t) - U_m(t)) \end{aligned}\]
Periodic Boundary Conditions
Leads to Method of Lines formulation \(U'(t) = AU(t)\), where \[\begin{aligned} A = -\frac{a}{2h} \begin{bmatrix} 0 & 1 & & & & -1 \\ -1 & 0 & 1 & & & \\ & -1 & 0 & 1 & & \\ & & \ddots & \ddots & \ddots & \\ & & & -1 & 0 & 1 \\ 1 & & & & -1 & 0 \end{bmatrix} \end{aligned}\]
Skew-symmetric matrix (\(A^T=-A\)) \(\Longrightarrow\) purely imaginary eigenvalues: \[\begin{aligned} \lambda_p = -\frac{ia}{h} \sin (2\pi p h),\qquad p=1,2,\ldots,m+1 \end{aligned}\] with eigenvectors \[\begin{aligned} u_j^p = e^{2\pi i p j h},\qquad\qquad\ \ p,j=1,2,\ldots,m+1 \end{aligned}\]
Forward Euler
Use Forward Euler in time \(\Longrightarrow\) FTCS scheme: \[\begin{aligned} U_j^{n+1} = U_j^n - \frac{ak}{2h}\left(U_{j+1}^n - U_{j-1}^n \right) \end{aligned}\]
Stability region \(\mathcal{S}\): \(|1+k\lambda| \le 1\) \(\Longrightarrow\) imaginary \(k\lambda_p\) will always be outside \(\mathcal{S}\) \(\Longrightarrow\) unstable for fixed \(k/h\)
However, if e.g. \(k=h^2\), we have \[\begin{aligned} |1+k\lambda_p|^2 \le 1 + \left( \frac{ka}{h} \right)^2 \\ = 1+a^2h^2 = 1+a^2k \end{aligned}\] which gives Lax-Richtmyer stability \[\begin{aligned} \hspace{-5mm} \|(I+kA)^n\|_2 \le (1+a^2k)^{n/2} \le e^{a^2T/2} \end{aligned}\]
Not used in practice – too strong restriction on timestep \(k\)
Leapfrog
Consider using the midpoint method in time: \[\begin{aligned} U^{n+1} = U^{n-1} + 2kAU^n \end{aligned}\]
For the centered differences in space, this gives the leapfrog method: \[\begin{aligned} U_j^{n+1} = U_j^{n-1} - \frac{ak}{h} \left(U_{j+1}^n - U_{j-1}^n \right) \end{aligned}\]
Stability region \(\mathcal{S}\): \(i\alpha\) for \(-1<\alpha<1\) \(\Longrightarrow\) stable if \(|ak/h|<1\)
Only marginally stable \(\Longrightarrow\) nondissipative
Lax-Friedrichs
Rewrite the average as: \[\begin{aligned} \frac12 \left( U_{j-1}^n + U_{j+1}^n \right) = U_j^n + \frac12 \left( U_{j-1}^n -2U_j^n + U_{j+1}^n \right) \end{aligned}\] to obtain \[\begin{aligned} U_j^{n+1} = U_j^n - \frac{ak}{2h}\left(U_{j+1}^n - U_{j-1}^n \right) +\frac12 \left( U_{j-1}^n - 2U_j^n + U_{j+1}^n \right) \end{aligned}\] or \[\begin{aligned} \frac{U_j^{n+1} - U_j^n}{k} + a \left( \frac{U_{j+1}^n - U_{j-1}^n}{2h} \right) = \frac{h^2}{2k} \left( \frac{U_{j-1}^n - 2U_j^n + U_{j+1}^n}{h^2} \right) \end{aligned}\]
Like a discretization of the advection-diffusion equation \[\begin{aligned} u_t + au_x = \epsilon u_{xx} \end{aligned}\] where \(\epsilon = h^2/(2k)\).
Lax-Friedrichs
The Lax-Friedrichs method can then be written as \(U'(t) = A_\epsilon U(t)\) with \[\begin{aligned} A_\epsilon = -\frac{a}{2h} & \begin{bmatrix} 0 & 1 & & & & -1 \\ -1 & 0 & 1 & & & \\ & -1 & 0 & 1 & & \\ & & \ddots & \ddots & \ddots & \\ & & & -1 & 0 & 1 \\ 1 & & & & -1 & 0 \end{bmatrix} \\ +\frac{\epsilon}{h^2} & \begin{bmatrix} -2 & 1 & & & & 1 \\ 1 & -2 & 1 & & & \\ & 1 & -2 & 1 & & \\ & & \ddots & \ddots & \ddots & \\ & & & 1 & -2 & 1 \\ 1 & & & & 1 & -2 \end{bmatrix} \end{aligned}\] where \(\epsilon=h^2/(2k)\)
Lax-Friedrichs
The eigenvalues of \(A_\epsilon\) are shifted from the imaginary axis into the left half-plane: \[\begin{aligned} \mu_p = -\frac{ia}{h}\sin(2\pi p h) - \frac{2\epsilon}{h^2}(1-\cos(2\pi p h )) \end{aligned}\]
The values \(k\mu_p\) lie on an ellipse centered at \(-2k\epsilon/h^2\), with semi-axes \(2k\epsilon/h^2\), \(ak/h\)
For Lax-Friedrichs, \(\epsilon = h^2/(2k)\) and \(-2k\epsilon/h^2 = -1\) \(\Longrightarrow\) stable if \(|ak/h|\le 1\)
The Lax-Wendroff Method
Use Taylor series method for higher order accuracy in time
For \(U'(t) = AU(t)\), we have \(U''=AU'=A^2U\) and the second-order Taylor method \[\begin{aligned} U^{n+1} = U^n + kAU^n + \frac12 k^2 A^2 U^n \end{aligned}\]
Note that \[\begin{aligned} (A^2U)_j = \frac{a^2}{4h^2} \left( U_{j-2} - 2U_j + U_{j+2} \right) \end{aligned}\] so the method can be written \[\begin{aligned} U_j^{n+1} = U_j^n - \frac{ak}{2h} \left(U_{j+1}^n - U_{j-1}^n \right) + \frac{a^2k^2}{8h^2}\left( U_{j-2}^n - 2U_j^n + U_{j+2}^n \right) \end{aligned}\]
Replace last term by 3-point discretization of \(a^2k^2u_{xx}/2\) \(\Longrightarrow\) the Lax-Wendroff method: \[\begin{aligned} U_j^{n+1} = U_j^n - \frac{ak}{2h} \left(U_{j+1}^n - U_{j-1}^n \right) + \frac{a^2k^2}{2h^2}\left( U_{j-1}^n - 2U_j^n + U_{j+1}^n \right) \end{aligned}\]
Stability analysis
The Lax-Wendroff method is Euler’s method applied to \(U'(t)=A_\epsilon U(t)\), with \(\epsilon=a^2k/2\) \(\Longrightarrow\) eigenvalues \[\begin{aligned} k\mu_p = -i\left( \frac{ak}{h} \right) \sin(p\pi h) + \left( \frac{ak}{h} \right)^2 (\cos(p\pi h) - 1) \end{aligned}\]
On ellipse centered at \(-(ak/h)^2\) with semi-axes \((ak/h)^2\), \(|ak/h|\)
Stable if \(|ak/h|\le 1\)
Upwind methods
Consider one-sided approximations for \(u_x\), e.g. for \(a>0\): \[\begin{aligned} U_j^{n+1} = U_j^n - \frac{ak}{h}(U_j^n - U_{j-1}^n),\text{ stable if } 0\le \frac{ak}{h}\le 1 \end{aligned}\] or, if \(a<0\): \[\begin{aligned} U_j^{n+1} = U_j^n - \frac{ak}{h}(U_{j+1}^n - U_j^n),\text{ stable if } -1\le \frac{ak}{h}\le 0 \end{aligned}\]
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 \[\begin{aligned} U_j^{n+1} = U_j^n - \frac{ak}{2h} (U_{j+1}^n - U_{j-1}^n) +\frac{ak}{2h}(U_{j+1}^n - 2U_j^n + U_{j-1}^n) \end{aligned}\]
Again like a discretization of advection-diffusion \(u_t+au_x = \epsilon u_{xx}\), with \(\epsilon=ah/2\) \(\Longrightarrow\) stable if \[\begin{aligned} -2 < -2\epsilon k/h^2<0,\quad\text{or}\quad 0\le \frac{ak}{h} \le 1 \end{aligned}\]
The three methods, Lax-Wendroff, upwind, Lax-Friedrichs, can all be written as advection-diffusion with \[\begin{aligned} \epsilon_{LW} = \frac{a^2k}{2}=\frac{ah\nu}{2},\quad \epsilon_{up} = \frac{ah}{2},\quad \epsilon_{LF} = \frac{h^2}{2k} = \frac{ah}{2\nu} \end{aligned}\] where \(\nu=ak/h\). Stable if \(0<\nu<1\).
The Beam-Warming method
Like upwind, but use second-order one-sided approximations: \[\begin{aligned} U_j^{n+1} = &U_j^n - \frac{ak}{2h}(3U_j^n-4U_{j-1}^n+U_{j-2}^n) \\ & +\frac{a^2k^2}{2h^2}(U_j^n-2U_{j-1}^n+U_{j-2}^n)\quad\text{for } a>0 \end{aligned}\] and \[\begin{aligned} U_j^{n+1} = &U_j^n - \frac{ak}{2h}(-3U_j^n+4U_{j+1}^n-U_{j+2}^n) \\ & +\frac{a^2k^2}{2h^2}(U_j^n-2U_{j+1}^n+U_{j+2}^n)\quad\text{for } a<0 \end{aligned}\]
Stable if \(0\le\nu\le 2\) and \(-2\le\nu\le 0\), respectively
Von Neumann analysis
\[\begin{aligned} g(\xi) = (1-\nu) + \nu e^{-i\xi h} \end{aligned}\] where \(\nu=ak/h\), stable if \(0\le \nu \le 1\)
\[\begin{aligned} g(\xi) = \cos(\xi h) -\nu i \sin(\xi h) &\Longrightarrow |g(\xi)|^2 = \cos^2(\xi h) + \nu^2 \sin^2(\xi h), \end{aligned}\] stable if \(|\nu|\le 1\)
Von Neumann analysis
\[\begin{aligned} g(\xi) = 1-i\nu[2\sin(\xi h/2)\cos(\xi h/2)] - \nu^2[2\sin^2(\xi h/2)] \\ \Longrightarrow |g(\xi)|^2 = 1-4\nu^2(1-\nu^2)\sin^4(\xi h/2) \end{aligned}\] stable if \(|\nu|\le 1\)
\[\begin{aligned} g(\xi)^2 = 1-2\nu i \sin(\xi h) g(\xi), \end{aligned}\] stable if \(|\nu|<1\) (like the midpoint method)
Characteristic tracing and interpolation
Consider the case \(a>0\) and \(ak/h<1\)
Trace characteristic through \(x_j,t_{n+1}\) to time \(t_n\)
Find \(U_j^{n+1}\) by linear interpolation between \(U_{j-1}^n\) and \(U_j^n\): \[\begin{aligned} U_j^{n+1} = U_j^n - \frac{ak}{h} (U_j^n - U_{j-1}^n) \end{aligned}\] \(\Longrightarrow\) first order upwind method
Quadratic interpolating \(U_{j-1}^n\), \(U_j^n\), \(U_{j+1}^n\) \(\Longrightarrow\) Lax-Wendroff
Quadratic interpolating \(U_{j-2}^n\), \(U_{j-1}^n\), \(U_{j}^n\) \(\Longrightarrow\) Beam-Warming
The CFL condition
For the advection equation, \(u(X,T)\) depends only on the initial data \(\eta(X-aT)\)
The domain of dependence is \(\mathcal{D}(X,T) = \{X-aT\}\)
Heat equation \(u_t=u_{xx}\), \(\mathcal{D}(X,T) = (-\infty,\infty)\)
Domain of dependence for 3-point explicit FD method: Each value depends on neighbors at previous timestep
Refining the grid with fixed \(k/h\equiv r\) gives same interval
This region must contain the true \(\mathcal{D}\) for the PDE: \[\begin{aligned} X-T/r\le X-aT \le X+T/r \end{aligned}\] \(\Longrightarrow\) \(|a|\le 1/r\) or \(|ak/h|\le 1\)
The Courant-Friedrichs-Lewy (CFL) condition: Numerical domain of dependence must contain the true \(\mathcal{D}\) as \(k,h\rightarrow 0\)
The CFL condition
The centered-difference scheme for the advection equation is unstable for fixed \(k/h\) even if \(|ak/h|\le 1\)
3-point one-sided stencil, CFL condition gives \(0\le ak/h\le 2\) (for left-sided, used when \(a>0\))
\(\mathcal{D}(X,T) = (-\infty,\infty)\) \(\Longrightarrow\) any 3-point explicit method violates CFL condition for fixed \(k/h\)
However, with \(k/h^2\le 1/2\), all of \(\mathbb{R}\) is covered as \(k\rightarrow 0\)
Any implicit scheme satisfies the CFL condition, since the tridiagonal linear system couples all points.
Modified equations
Find a PDE \(v_t=\cdots\) that the numerical approximation \(U_j^n\) satisfies exactly, or at least better than the original PDE
To second order accuracy, the numerical solution satisfies \[\begin{aligned}
v_t + av_x = \frac12 a h \left( 1 - \frac{ak}{h} \right) v_{xx}
\end{aligned}\]
Advection-diffusion equation
To third order accuracy, \[\begin{aligned}
v_t + av_x + \frac16 ah^2\left( 1- \left(\frac{ak}{h}\right)^2 \right)
v_{xxx} = 0
\end{aligned}\]
Dispersive behavior, leading to a phase error. To
fourth order, \[\begin{aligned}
v_t + av_x + \frac16 ah^2\left( 1- \left(\frac{ak}{h}\right)^2 \right)
v_{xxx} = -\epsilon v_{xxxx}
\end{aligned}\]
where \(\epsilon=O(k^3+h^3)\) \(\Longrightarrow\) highest modes damped
Modified equations
To third order, \[\begin{aligned} v_t + av_x = \frac16 a h^2 \left(2-\frac{3ak}{h}+\left(\frac{ak}{h}\right)^2\right) v_{xxx} \end{aligned}\] Dispersive, similar to Lax-Wendroff
Modified equation \[\begin{aligned} v_t + av_x + \frac16 ah^2\left(1-\left(\frac{ak}{h}\right)^2\right) v_{xxx} = \epsilon v_{xxxxx} + \cdots \end{aligned}\] where \(\epsilon=O(h^4+k^4)\) \(\Longrightarrow\) only odd-order derivatives, nondissipative method
Hyperbolic systems
The methods generalize to first order linear systems of equations of the form \[\begin{aligned} &u_t + Au_x = 0, \\ &u(x,0) = \eta(x), \end{aligned}\]
where \(u : \mathbb{R} \times \mathbb{R} \rightarrow \mathbb{R}^s\) and a constant matrix \(A\in\mathbb{R}^{s\times s}\)Hyperbolic system of conservation laws, with flux function \(f(u)=Au\), if \(A\) diagonalizable with real eigenvalues: \[\begin{aligned} A=R\Lambda R^{-1}\quad\text{or}\quad Ar_p = \lambda_p r_p\text{ for }p=1,2,\ldots,s \end{aligned}\]
Change variables to eigenvectors, \(w=R^{-1}u\), to decouple system into \(s\) independent scalar equations \[\begin{aligned} (w_p)_t + \lambda_p (w_p)_x = 0,\quad p=1,2,\ldots, s \end{aligned}\]
with solution \(w_p(x,t) = w_p(x-\lambda_p t,0)\) and initial condition the \(p\)th component of \(w(x,0)=R^{-1}\eta(x)\).Solution recovered by \(u(x,t) = Rw(x,t)\), or \[\begin{aligned} u(x,t) = \sum_{p=1}^s w_p(x-\lambda_p t, 0)r_p \end{aligned}\]
Numerical methods for hyperbolic systems
Most methods generalize to systems by replacing \(a\) with \(A\)
\[\begin{aligned} U_j^{n+1} = U_j^n - \frac{k}{2h} A(U_{j+1}^n - U_{j-1}^n) + \frac{k^2}{2h^2} A^2 (U_{j-1}^n - 2U_j^n + U_{j+1}^n) \end{aligned}\] Second-order accurate, stable if \(\nu = \max_{1\le p \le s} |\lambda_p k/h| \le 1\)
\[\begin{aligned} U_j^{n+1} &= U_j^n - \frac{k}{h} A(U_j^n - U_{j-1}^n) \\ U_j^{n+1} &= U_j^n - \frac{k}{h} A(U_{j+1}^n - U_{j}^n) \end{aligned}\] Only useful if all eigenvalues of \(A\) have same sign. Instead, decompose into scalar equations and upwind each one separately \(\Longrightarrow\) Godunov’s method
Initial boundary value problems
For a bounded domain, e.g. \(0\le x \le 1\), the advection equation requires an inflow condition \(x(0,t)=g_0(t)\) if \(a>0\)
This gives the solution \[\begin{aligned} u(x,t) = \begin{cases} \eta(x-at) & \text{if }0\le x-at\le 1, \\ g_0(t-x/a) & \text{otherwise}. \end{cases} \end{aligned}\]
First-order upwind works well, but other stencils need special cases at inflow boundary and/or outflow boundary
von Neumann analysis not applicable, but generally gives necessary conditions for convergence
Method of Lines applicable if eigenvalues of discretization matrix are known