Crank-Nicholson solution of 1D heat equation

Click For Summary
SUMMARY

The discussion focuses on implementing the Crank-Nicholson scheme to numerically solve the 1D heat equation, represented by the equation \(\partial_{t}u=\partial^{2}_{x}u\). The user employs MATLAB to construct a tridiagonal matrix for the solution, utilizing boundary conditions of zero-gradient at both ends. A common error identified is the use of first-order finite differences for boundary conditions, which should be corrected by applying a three-point formula for better accuracy. The user successfully resolves the issue and extends the solution to a nonlinear diffusion equation.

PREREQUISITES
  • Understanding of the Crank-Nicholson numerical method
  • Familiarity with MATLAB programming and matrix operations
  • Knowledge of finite difference methods for solving partial differential equations
  • Basic concepts of boundary conditions in numerical analysis
NEXT STEPS
  • Explore advanced MATLAB functions for solving tridiagonal systems
  • Learn about finite difference methods for higher-order accuracy
  • Investigate stability and convergence criteria for numerical schemes
  • Study extensions of the heat equation, such as nonlinear diffusion equations
USEFUL FOR

Mathematicians, physicists, and engineers involved in numerical analysis, particularly those working on heat transfer problems and numerical simulations using MATLAB.

hunt_mat
Homework Helper
Messages
1,816
Reaction score
33
I wish to numerically compute solutions of the 1D heat equation using the Crank-Nicholson scheme:

The equation is:
<br /> \partial_{t}u=\partial^{2}_{x}u<br />

I use the discretisation:
<br /> u_{i+1,j}-u_{i,j}=s(u_{i+1,j+1}-2u_{i+1,j}+u_{i+1,j-1})+s(u_{i+1,j+1}-2u_{i+1,j}+u_{i+1,j-1})<br />

Where s=\delta t/2\delta x. This can be rearranged into the following:
<br /> su_{i+1,j+1}-(2s+1)u_{i+1,j}+su_{i+1,j-1}=-su_{i,j+1}+(2s-1)u_{i,j}-su_{i,j-1}<br />

This is a matrix equation which is tridiagonal and can be solved very easily using matlab's many inbuilt functions.

So suppose I wish to use the following boundary conditions \partial_{x}u(t,0)=\partial_{x}u(t,L)=0 how would I go about doing it? I've heard about people going from an n\times n matrix to an (n-2)\times (n-2), solving that and just adding in the boundary conditions after that? I tried that method but my solution blew up annoyingly.

Any suggestions on what I am doing wrong? My code is here:

Code:
%This program is meant to test out the Crank-Nicolson scheme using a simple
%nonlinear diffusion scheme.
n=2000;m=30;
t=linspace(0,20,n);% set time and distance scales
x=linspace(0,1,m);
dx=x(2)-x(1);dt=t(2)-t(1); %Increments
s=dt/(2*dx^2);%Useful for the solution.
u=zeros(n,m); %set up solution matrix
p=s*ones(1,m-1); q=-(1+2*s)*ones(1,m);
Z=diag(p,1)+diag(p,-1)+diag(q);
A=Z(2:m-1,2:m-1);
%Add in intial condition:
u(1,:)=exp(-5*(x-0.5).^2);
v=zeros(m-2,1);
%Solve the system
for i=2:n-1
    %Construct the RHS for the solution
    for j=2:m-1
        v(j-1)=s*u(i-1,j+1)-(2*s+1)*u(i-1,j)-s*u(i-1,j-1);
    end
    %Solve for the new time step
    w=A\v;
    u(i,2:m-1)=w;
    u(i,1)=u(i,2);
    u(i,end)=u(i,end-1);
end
 
Physics news on Phys.org
A common fall is to use first order finite difference for the derivative boundary condition. Use a 3 points formula instead. I don't know how that can be embedded in the solution for the transient problem though.
 
It shouldn't matter with the transient problem as we're just dealing with boundary conditions. so you're suggesting I use something like:

<br /> \frac{\partial u}{\partial x}\approx\frac{u_{i,j+1}-u_{i,j-1}}{2\delta x}<br />

That's the accuracy you're referring to right?
 
The code is now working and I have also solved the following extension of the simple heat equation:

<br /> \rho c\frac{\partial T}{\partial t}=\frac{\partial}{\partial x}\left(k(x)\frac{\partial T}{\partial x}\right)+\dot{Q}<br />
 

Similar threads

  • · Replies 41 ·
2
Replies
41
Views
10K
  • · Replies 8 ·
Replies
8
Views
5K
  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 1 ·
Replies
1
Views
1K
  • · Replies 8 ·
Replies
8
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
0
Views
892
  • · Replies 2 ·
Replies
2
Views
2K
Replies
7
Views
3K