Why Does Crank-Nicolson Become Unstable for Large Time Steps?

Click For Summary

Discussion Overview

The discussion revolves around the stability and accuracy of various numerical differencing techniques for solving the one-dimensional transient heat conduction equation, specifically focusing on the Crank-Nicolson method and its behavior with large time steps.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • Matt describes his MATLAB program that calculates surface temperature using Fourier's equation and notes that different differencing techniques show distinct behaviors as time steps increase.
  • Matt questions why the Crank-Nicolson method becomes unstable for large time steps while the Forward method does not.
  • Chet suggests that Matt should not be experiencing difficulties with the 1D transient heat conduction equation and questions the implementation of the methods, particularly the Backward Euler scheme.
  • Chet inquires whether the Backward Euler method returns the steady state solution after one time step with a large time step, indicating its stability.
  • Matt confirms that he has double-checked his code and is using a tri-diagonal matrix solver, but does not provide further details on the stability of the Backward Euler method.

Areas of Agreement / Disagreement

Participants do not reach a consensus on the reasons for the instability of the Crank-Nicolson method or the behavior of the Backward Euler method, indicating that multiple views remain regarding the implementation and stability of these numerical techniques.

Contextual Notes

There are unresolved questions regarding the implementation details of the numerical methods, particularly concerning the stability of the Backward Euler method and the conditions under which the Crank-Nicolson method becomes unstable.

mattyboson12
Messages
38
Reaction score
0
Hi, I have written a MATLAB program to calculate the surface temperature on a tile and I am trying to find the most stable/accurate differenceing technique. I have plotted the surface temperature (where its actual value is ~122.5) against the time step for the differencing techniques shown below. All of them are accurate for small time steps, and then Backwards/DuFort decrease/increase parabolically, is this due to second order accuracy? And why is crank unstable for large timesteps and fowards isn't?

untitled.jpg


untitled1.jpg
 
Physics news on Phys.org
Let's see the PDEs you're solving.

Chet
 
Hi Chet

The program calculates the temperature using fourier's equation in one dimension: dU/dt=α*(d^2 U/d^2 x) . I'm guessing crank is the best method as it seems to have the best compromise between stability/accuracy compared to the others. I am just confused as to why the differencing methods form very distinct graphs ie. why the crank oscillates around the actual value whereas dufort flies off to infinity

kind regards
Matt
 
Based on my experience, you should't be encountering these difficulties solving the 1D transient heat conduction equation using most of these methods. Backward differencing, in particular, should not give rise to the zigs and zags that you are seeing. Are you sure you are implementing these methods correctly? How are you solving for the temperatures at n+1 using your Backward Euler scheme? Are you solving a tri-diagonal matrix?

Chet
 
I've double checked my code and all the methods seem to be okay. Yep, i have used the tri-diagonal matirx and then the built in function tdm() to solve the matrix

Matt
 
Here's something you can check. The Backward Euler method should return the steady state solution after one time step if the time step is made extremely large. Does it? That's an indication of how stable the Backward Euler method is.

Chet