Finite Differences: Partial Differential Equations
Week 5
Link to completed assignment
Problem 8.1
Problem 8.1
(a) Looking at Equation (8.20) in the textbook for inspiration in terms of second order derivatives, we can easily derive the straightforward approximation. $$\frac{\delta^2 u}{\delta t^2} = v^2 \frac{\delta^2 u}{\delta x^2}$$ $$\frac{\delta^2 u}{\delta t^2} = \frac{u_j^{n+1}-2u_j^n+u_j^{n-1}}{(\Delta t)^2}\, ,\quad \frac{\delta^2 u}{\delta x^2} = \frac{u_{j+1}^n-2u_j^n+u_{j-1}^n}{(\Delta x)^2}$$ $$\frac{u_j^{n+1}-2u_j^n+u_j^{n-1}}{(\Delta t)^2} = v^2 \left(\frac{u_{j+1}^n-2u_j^n+u_{j-1}^n}{(\Delta x)^2}\right)$$
(b) We can clearly see that this is a second order approximation in both space and time.
(c) We can substitute Equation (8.9) in for all of our u terms and solve in terms of A to find the mode amplitudes. $$u_j^n=A(k)^n e^{ijk\Delta x} \quad (8.9)$$ $$u_j^{n+1}=2u_j^n-u_j^{n-1}+\frac{v^2(\Delta t^2)}{(\Delta x^2)}\bigl(u_{j+1}^n-2u_j^n+u_{j-1}^n\bigr)$$ $$A^{n+1}e^{ijk\Delta x}=2A^n e^{ijk\Delta x}-A^{n-1}e^{ijk\Delta x}+ \frac{v^2 (\Delta t)^2}{(\Delta x)^2}\bigl(A^n e^{i(j+1)k\Delta x}-2A^n e^{ijk\Delta x}+A^n e^{i(j-1)k\Delta x}\bigr)$$ $$A=2-A^{-1}+\frac{v^2 (\Delta t)^2}{(\Delta x)^2}\bigl(e^{ik\Delta x}-2+e^{-ik\Delta x}\bigr)$$ $$A+A^{-1}=2+\frac{2v^2 (\Delta t)^2}{(\Delta x)^2}\bigl(\cos(k\Delta x)-1\bigr)$$ $$\Bigl(A+A^{-1}=2+\frac{2v^2 (\Delta t)^2}{(\Delta x)^2}\bigl(\cos(k\Delta x)-1\bigr)\Bigr)\cdot A$$ $$A^2-\alpha A +1\, ,\quad \alpha =2+\frac{2v^2 (\Delta t)^2}{(\Delta x)^2}\bigl(\cos(k\Delta x)-1\bigr)$$ $$\frac{-b\pm \sqrt{b^2-4ac}}{2a}\quad \Rightarrow \quad A=\frac{-\alpha \pm \sqrt{\alpha ^2-4}}{2}$$ I am leaving the solution for A in this simplified form.
(d) We know that |A|2=1. Because there are two solutions, A1 and A2, we know that A1*A2=1. This is only possible if the two solutions are complex conjugates of each other. Therefore, the square root term in the quadratic formula needs to be negative. $$\alpha ^2-4\lt 0$$ $$\alpha ^2 \lt 4$$ $$-2 \lt \alpha \lt 2$$ $$-2 \lt 2+\frac{2v^2 (\Delta t)^2}{(\Delta x)^2}\bigl(\cos(k\Delta x)-1\bigr) \lt 2$$ $$-4 \lt \frac{2v^2 (\Delta t)^2}{(\Delta x)^2}\bigl(\cos(k\Delta x)-1\bigr) \lt 0$$ $$-2 \lt \frac{v^2 (\Delta t)^2}{(\Delta x)^2}\bigl(\cos(k\Delta x)-1\bigr) \lt 0$$ Because the cosine term fluctuates between 0 and 1, the (cos - 1) term will fluctuate between -1 and 0. Thus, $$\frac{v^2 (\Delta t)^2}{(\Delta x)^2} \lt 2$$
(e) Because the real term is the same for both mode amplitudes, they both decay at the same rate.
(f)
(g)
(h)
Problem 8.2
(a) Below is the code for the 1D diffusion problem at different time step sizes of 1, 0.5, and 0.1.
import matplotlib.pyplot as plt
import numpy as np
L = 500
delta_x = 1.0
Nx = int(L/delta_x)
T = 100
delta_t = [1.0, 0.5, 0.1]
for del_t in delta_t:
Nt = int(T/del_t)
D = delta_x
x = np.linspace(0, L, Nx+1) # mesh points in space
dx = x[1] - x[0]
t = np.linspace(0, int(T), Nt+1) # mesh points in time
dt = t[1] - t[0]
F = D*dt/dx**2
u = np.zeros(Nx+1) # unknown u at new time level
u_1 = np.zeros(Nx+1) # u at the previous time level
# Set initial condition u(x,0) = I(x)
u_1[int(len(u)/2)] = 1.0
print()
print("For delta_t = ", del_t, "Nt = ", Nt)
for n in range(0, Nt):
# Compute u at inner mesh points
for i in range(1, Nx):
u[i] = u_1[i] + F*(u_1[i-1] - 2*u_1[i] + u_1[i+1])
# Insert boundary conditions
u[0] = 0; u[Nx] = 0
# Update u_1 before next step
u_1[:]= u
print("Final output of u: ")
print(u)
print()
The numbers blow up at t = 1, then start to calm down as the step size decreases.
(b)
Problem 8.3
Problem 8.4