# 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\):#

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\):#

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\).

and substitute into the differencing formula

*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.