# 2023-08-30 Finite Differences#

## Last time#

• General shape of PDE solvers and stakeholders

• Comparing/plotting cost and accuracy

• Learning strategy

## Today#

• Discussion and scoping

• Evaluating derivatives

• Taylor series and truncation error

• Stability

## Examples of PDE#

• Navier-Stokes (viscous fluids)

• nonlinear

• incompressible or compressible

• Elasticity

• linear elasticity

• hyperelasticity (geometric nonlinear + material nonlinearity)

• time dependent (dynamics) or steady state

• Hamilton-Jacobi-Bellman

• optimal control

• Wave equations

• acoustics

• elasticity

• electromagnetics

• frequency domain

# Choices in scoping the class#

## Theory#

Analysis first, confirm using numerics. Limited to simpler models.

## Applied#

Numerics first, pointers to useful theory.

## Build from scratch#

Limited to simpler models, but you’ll understand everything under the hood.

## Build using libraries#

More installation and software layers, but can solve more interesting problems.

# Consider the boundary value problem: find $$u$$:#

(3)#$\begin{gather} -\frac{d^2 u}{dx^2} = f(x) \quad x \in \Omega = (-1,1) \\ u(-1) = a \quad \frac{du}{dx}(1) = b . \end{gather}$

We say

• $$f(x)$$ is the “forcing”

• the left boundary condition is Dirichlet

• the right boundary condition is Neumann

We need to choose

• how to represent $$u(x)$$, including evaluating it on the boundary,

• how to compute derivatives of $$u$$,

• in what sense to ask for the differential equation to be satisfied,

• where to evaluate $$f(x)$$ or integrals thereof,

• how to enforce boundary conditions.

# Finite Difference/collocation approach to solve $$u$$:#

(4)#$\begin{gather} -\frac{d^2 u}{dx^2} = f(x) \quad x \in \Omega = (-1,1) \\ u(-1) = a \quad \frac{du}{dx}(1) = b . \end{gather}$
• Represent the function $$u(x)$$ by its values $$u_i = u(x_i)$$ at a discrete set of points

$-1 = x_1 < x_2 < \dotsb < x_n = 1 .$

• The FD framework does not uniquely specify the solution values at other points

• Compute derivatives at $$x_i$$ via differencing formulas involving a finite number of neighbor points (independent of the total number of points $$n$$).

• FD methods ask for the differential equation to be satisfied pointwise at each $$x_i$$ in the interior of the domain.

• Evaluate the forcing term $$f$$ pointwise at $$x_i$$.

• Approximate derivatives at discrete boundary points ($$x_n = 1$$ above), typically using one-sided differencing formulas.

# Computing a derivative#

using Plots
default(linewidth=3)

n = 41
h = 6 / (n - 1)
x = LinRange(-3, 3, n)
u = sin.(x)
plot(x, u, marker=:circle)

u_x = cos.(x)
fd_u_x = (u[2:end] - u[1:end-1]) / h

plot(x, u_x)
plot!(x[1:end-1], fd_u_x, marker=:circle)


# How accurate is it?#

Without loss of generality, we’ll approximate $$u'(x_i = 0)$$, taking $$h = x_{i+1} - x_i$$.

$u(x) = u(0) + u'(0)x + u''(0)x^2/2! + O(x^3)$

and substitute into the differencing formula

$\begin{split} \begin{split} u'(0) \approx \frac{u(h) - u(0)}{h} = h^{-1} \Big( u(0) + u'(0) h + u''(0)h^2/2 + O(h^3) - u(0) \Big) \\ = u'(0) + u''(0)h/2 + O(h^2) . \end{split}\end{split}$
Evidently the error in this approximation is $$u''(0)h/2 + O(h^2)$$. We say this method is first order accurate.

# Activity on stability and accuracy computing derivatives#

• Accept the activity on Canvas

• Clone the repo

• If you’re using coding.csel.io

• use gh auth login from the terminal (you’ll only need to do this once)

• then use the Git sidebar widget to clone

• git clone https://github.com/cu-numpde/2023-08-30-derivatives-YOUR-GH-USERNAME (or with ssh)

• Complete the activity, commit your changes, and push.