import numpy as np
import matplotlib.pyplot as plt
D = 0.1
N = 100
L = 1
dx = L/N
x = np.linspace(0, L, N+1)
u0 = np.exp(-x**2)
t = 0
T = 0.5
dt = 0.01
def F(u):
uxx = np.zeros(N+1)
uxx[1:N] = (u[2:N+1] - 2*u[1:N] + u[0:N-1])/dx**2
return D*uxx
def RK4_step(u, dt):
k1 = F(u)
k2 = F(u + dt/2 * k1)
k3 = F(u + dt/2 * k2)
k4 = F(u + dt * k3)
return u + dt/6 * (k1 + 2*k2 + 2*k3 + k4)
while t < T:
u0 = RK4_step(u0, dt)
t += dt
plt.plot(x, u0)
plt.xlabel('$x$')
plt.ylabel('$u(x,0.5)$')
plt.title('Solution of the Diffusion Equation with RK4')
plt.show()