MATLAB A lazy numerical solution to the diffusion equation

Click For Summary
The discussion centers on solving the diffusion equation using a numerical approach that incorporates the gradient function for calculating spatial differences. The initial implementation led to erroneous results, particularly negative values when starting with a Gaussian initial condition. A key issue identified was the failure to adhere to the CFL (Courant-Friedrichs-Lewy) condition, which is crucial for ensuring stability in numerical solutions. Once the CFL condition was applied, the results improved significantly. The conversation highlights the importance of understanding stability conditions when discretizing equations and the potential pitfalls of neglecting them, illustrated by a teaching anecdote about intentionally violating stability to demonstrate the consequences. The goal remains to solve the diffusion equation with arbitrary initial and boundary conditions effectively.
hunt_mat
Homework Helper
Messages
1,816
Reaction score
33
So I want to write a short code to solve the diffusion equation and I want to be lazy and use the gradient function for the spatial differences, so for the second order derivative:
<br /> \frac{f(i+1)-2*f(i)+f(i-1)}{h^{2}}=\textrm{gradient}(\textrm{gradient}(f,h),h)<br />

So the code I wold use is:

<br /> T=T+dt*D*\textrm{gradient}(\textrm{gradient}(f,h),h)<br />

When I do this, I get erroneous results from my initial condition of a Gaussian for example. values start becoming negative which wrong. I don't know where I am going wrong.
 
Physics news on Phys.org
I think you will need to be more specific about what you are doing and what result you are trying to obtain relative to what you get. Also, posting your code would be helpful.
 
My goal is solving the diffusion equation with arbitrary initial conditions and arbitrary boundary conditions.

One problem I noted was I wasn't using the CFL condition on time. Once I did that it worked fine. I have yet to check it works with the formulation above yet.
 
Not satisfying the CFL condition of course would make your solution unstable. I once taught this to students and made a point out of not telling them about it as I was telling them how to discretise the heat equation. Then I purposely set ##\Delta t## just above the limit for stability to have the resulting animation start out as expected but break down after about ten seconds. That brought down some laughs as I said "... and we see that the solution behaves perfectly as expected ..." at the same time as it started to diverge and a cautionary tale to make sure students would take care to check their stability conditions and not blindly apply numerical recipes.
 
Schoolboy error. It's been a long long time since I had to numerically solve a PDE...
 

Similar threads

Replies
2
Views
2K
  • · Replies 41 ·
2
Replies
41
Views
10K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 36 ·
2
Replies
36
Views
5K
  • · Replies 13 ·
Replies
13
Views
2K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K