You are on page 1of 75

The Crank-Nicolson Method

and

Insulated Boundaries

Douglas Wilhelm Harder, M.Math. LEL


Department of Electrical and Computer Engineering
University of Waterloo
Waterloo, Ontario, Canada

ece.uwaterloo.ca
dwharder@alumni.uwaterloo.ca

© 2012 by Douglas Wilhelm Harder. Some rights reserved.


The Crank-Nicolson Method

Outline

This topic discusses numerical approximations to


solutions to the heat-conduction/diffusion equation:
– Consider the Crank-Nicolson method for approximating the heat-
conduction/diffusion equation
– This is an implicit method
• Uses Matlab from Laboratories 1 and 2
• Unconditionally stable
– Defines the characteristics of insulated boundaries
– Implement insulated boundaries into the Crank-Nicolson method

2
The Crank-Nicolson Method

Outcomes Based Learning Objectives

By the end of this laboratory, you will:


– Understand the Crank-Nicolson method
– Understand the definition and approximations of insulated
boundaries

3
The Crank-Nicolson Method

Review

In Laboratory 1, you solved a boundary-value problem:


– Given the finite-difference equation
d+uk − 1 + duk + d−uk + 1 = g(xk),
there are three unknowns:
uk – 1 uk uk + 1

– This requires us to set up a system


of n – 2 linear equations which must be
solved
– The boundary values give us u1 and un

4
The Crank-Nicolson Method

Review

In Laboratory 2, we used an explicit method:


– Given the finite-difference equation
t
ui ,k 1  ui ,k  2  ui 1,k  2ui ,k  ui 1,k 
h

– All the values on the right-hand side


are known, we need only evaluate this
for u2, k + 1 through un x − 1 , k + 1

5
The Crank-Nicolson Method

Review

We found the finite-difference equation


t
ui ,k 1  ui ,k 
h 2 u
i 1, k  2ui ,k  ui 1,k 
by substituting
 ui ,k 1  ui ,k
u  xi , tk  
t t
2 ui 1,k  2ui ,k  ui 1,k
u  xi , tk  
 x
2
h2
u  2u
into  2
t x

Both focus on (xi, tk)

6
The Crank-Nicolson Method

The Crank-Nicolson Method

What happens if we focus on the point (xi, tk + 1)?


 ui ,k 1  ui ,k
u  xi , tk 1  
t h
2 ui 1,k 1  2ui ,k 1  ui 1,k 1
u  i k 1 
x , t 
2 x h2

These focus on (xi, tk + 1)

7
The Crank-Nicolson Method

The Crank-Nicolson Method

This gives us the finite-difference equation


t
ui ,k 1  ui ,k 
h 2 u
i 1, k 1  2ui , k 1  ui 1, k 1 

The linear equation now has:


– One known ui, k
– Three unknowns ui – 1,k + 1, ui,k + 1, ui + 1, k + 1

8
The Crank-Nicolson Method

The Crank-Nicolson Method

Compare the two: t


ui ,k 1  ui ,k 
h 2 u
i 1, k 1  2ui , k 1  ui 1, k 1 

t
ui ,k 1  ui ,k 
h 2 u
i 1, k  2ui ,k  ui 1,k 
9
The Crank-Nicolson Method

The Crank-Nicolson Method

Given two equations, we can add them:

t
ui ,k 1  ui ,k 
h 2 u
i 1, k  2ui , k  ui 1, k 

t
+ ui , k 1  ui , k  2  ui 1, k 1  2ui , k 1  ui 1, k 1 
h
t
2ui ,k 1  2ui ,k  2  ui 1,k  2ui ,k  ui 1,k 
h
t
 2  ui 1,k 1  2ui ,k 1  ui 1, k 1 
h

10
The Crank-Nicolson Method

The Crank-Nicolson Method


t
First, substitute r 
h2
2ui ,k 1  2ui ,k  r  ui 1,k  2ui ,k  ui 1,k 
 r  ui 1,k 1  2ui ,k 1  ui 1,k 1 

11
The Crank-Nicolson Method

The Crank-Nicolson Method

Next, collect similar terms and bring


– All unknowns to the left, and
– All knowns to the right

rui 1,k 1  2  r  1 ui ,k 1  rui 1,k 1


 2ui ,k  r  ui 1,k  2ui ,k  ui 1,k 

12
The Crank-Nicolson Method

The Crank-Nicolson Method

We now have a new finite-difference equation:


rui 1,k 1  2  r  1 ui ,k 1  rui 1,k 1  2ui ,k  r  ui 1,k  2ui ,k  ui 1,k 

Unknowns Knowns

13
The Crank-Nicolson Method

The Crank-Nicolson Method

As we did in Laboratory 1, we could then write nx – 2


equations
ru1,k 1  2 1  r  u2,k 1  ru3,k 1  2u2,k  r  u1, k  2u2, k  u3, k 
ru2,k 1  2 1  r  u3,k 1  ru4,k 1  2u3,k  r  u2,k  2u3,k  u4,k 

ru3,k 1  2 1  r  u4,k 1  ru5,k 1  2u4,k  r  u3,k  2u4,k  u5,k 


... nx – 2


runx 3,k 1  2 1  r  unx 2,k 1  runx 1,k 1  2unx 2,k  r unx 3,k  2unx 2,k  unx 1,k 
runx 2,k 1  2 1  r  unx 1,k 1  runx ,k 1  2unx 1,k  r u nx  2, k  2unx 1,k  unx ,k 
Unknowns Knowns

14
The Crank-Nicolson Method

The Crank-Nicolson Method

Again, there appear to be nx unknowns; however, the


boundary conditions provide two of those values:
ru1,k 1  2 1  r  u2,k 1  ru3,k 1  2u2,k  r  u1, k  2u2, k  u3, k 
ru2,k 1  2 1  r  u3,k 1  ru4,k 1  2u3,k  r  u2,k  2u3,k  u4,k 

ru3,k 1  2 1  r  u4,k 1  ru5,k 1  2u4,k  r  u3,k  2u4,k  u5,k 


...

runx 3,k 1  2 1  r  unx 2,k 1  runx 1,k 1  2unx 2,k  r unx 3,k  2unx 2,k  unx 1,k 
runx 2,k 1  2 1  r  unx 1,k 1  runx ,k 1  2unx 1,k  r u nx  2, k  2unx 1,k  unx ,k 
Unknowns Knowns

15
The Crank-Nicolson Method

The Crank-Nicolson Method

That is: u1, k + 1 = abndry(tk + 1)


un , k + 1 = bbndry(tk + 1)
x
ru1,k 1  2 1  r  u2,k 1  ru3,k 1  2u2,k  r  u1, k  2u2, k  u3, k 
ru2,k 1  2 1  r  u3,k 1  ru4,k 1  2u3,k  r  u2,k  2u3,k  u4,k 

ru3,k 1  2 1  r  u4,k 1  ru5,k 1  2u4,k  r  u3,k  2u4,k  u5,k 


...

runx 3,k 1  2 1  r  unx 2,k 1  runx 1,k 1  2unx 2,k  r unx 3,k  2unx 2,k  unx 1,k 
runx 2,k 1  2 1  r  unx 1,k 1  runx ,k 1  2unx 1,k  r u nx  2, k  2unx 1,k  unx ,k 
Unknowns Knowns

16
The Crank-Nicolson Method

The Crank-Nicolson Method

We now have nx – 2 linear equations and nx – 2 unknowns

2 1  r  u2,k 1  ru3,k 1  2u2,k  r  u1,k  2u2,k  u3,k   rabndry  tk 1 


ru2,k 1  2 1  r  u3,k 1  ru4,k 1  2u3,k  r  u2,k  2u3,k  u4,k 

ru3,k 1  2 1  r  u4,k 1  ru5,k 1  2u4,k  r  u3,k  2u4,k  u5,k 


...

runx 3,k 1  2 1  r  unx 2,k 1  runx 1,k 1  2unx 2,k  r unx 3,k  2unx 2,k  unx 1,k 
runx 2,k 1  2 1  r  unx 1,k 1  2unx 1,k  r u nx  2, k 
 2unx 1,k  unx ,k  rbbndry  tk 1 

Unknowns Knowns

17
The Crank-Nicolson Method

The Crank-Nicolson Method

This can be written in the form Mx = b:


 2 1  r  r  u
   2,k 1 
 r 2 1  r  r   u3,k 1 
  
 r 2 1  r     u4,k 1 
  
   r  
   unx  2,k 1 
 r 2 1  r  r   
 un 1,k 1 
 r 2 1  r    x 

 2u2,k  r  u1,k  2u2,k  u3, k   rabndry  tk 1  
 
 2u3,k  r  u2,k  2u3, k  u4, k  
 
 4,k
2u  r  u3, k  2u 4, k  u5, k  Knowns 
 
 
 2u

 
nx  2, k  r unx 3, k  2unx  2, k  unx 1, k


 2u
 n x 1, k  
 r unx  2,k  2unx 1,k  unx ,k  rbbndry  tk 1   18

The Crank-Nicolson Method

The Crank-Nicolson Method

Note the structure of b:


 2u2,k  r  u1,k  2u2,k  u3, k   rabndry  t 1  
 
 2u3,k  r  u2,k  2u3, k  u4, k  
 
 4,k
2u  r  u3, k  2u 4, k  u5, k  
 
 
 2u

 
nx  2, k  r unx 3, k  2unx  2, k  unx 1, k

 diff
 2u
 nx 1,k  
 r unx  2,k  2unx 1,k  unx ,k  rbbndry  t 1  

 u2,k   u1,k  2u2,k  u3,k   rabndry  tk 1  
     
u
 3,k   2,k u  2u  u  
3, k 4, k 
 u4,k   u3,k  2u4, k  u5, k   
2 r  
     
 un  2,k   un 3,k  2un 2,k  un 1,k   
 x
  x x x
  
 un 1,k   un  2,k  2un 1,k  un ,k   rbbndry  tk 1   19
 x   x x x   
The Crank-Nicolson Method

Approximating the Solution

Thus, given the initial state at time t1, we create a system


of equations with k = 1 to solve for u2, 2 through unx – 1, 2

20
The Crank-Nicolson Method

Approximating the Solution

We will simultaneously solve for these values and assign


them to our solution matrix U

21
The Crank-Nicolson Method

Approximating the Solution

Given the initial state at time t2, we will create the system
of equations with k = 2 to solve for u2, 3 through unx – 1, 3

22
The Crank-Nicolson Method

Approximating the Solution

Again, having solved for the values u2, 3 through unx – 1, 3,


we assign those entries to our matrix U

23
The Crank-Nicolson Method

Approximating the Solution

In general, at time tk, we will create the system of


equations with k and then solve for u2, k + 1 through unx – 1, k + 1

24
The Crank-Nicolson Method

Approximating the Solution

Doing this, we will fill in the balance of the matrix

25
The Crank-Nicolson Method

The diffusion1d Function

The signature will be


function [x_out, t_out, U_out] = ...
crank_nicolson1d( kappa, x_rng, nx, t_rng, nt, u_init, u_bndry )

where
kappa the diffusivity coefficient
x_rng the space range [a, b]
nx the number of points into which we will divide [a, b]
t_rng the time interval [t0, tfinal]
nt the number of points into which we will divide [t0, tfinal]
u_init a function handle giving the initial state uinit:[a, b] → R
u_bndry a function handle giving the two boundary conditions
 abndry  t  
where ubndry  t   
 bbndry  t  
ubndry:[t0, tfinal] → R2
 
26
The Crank-Nicolson Method

Step 1: Error Checking

Unlike the previous method we used which was subject


to a catastrophic error if
t
2
 0.5
h
the Crank-Nicolson method is unconditionally stable
– There are no values which will cause the divergence we saw
using the previous technique

t
Never-the-less, if 2
 0.5 , there may be decaying
h
osillations

27
The Crank-Nicolson Method

Step 1: Error Checking

Rather than throwing an exception, issue a warning:

warning( 'MATLAB:questionable_argument', ...


'the arguments of %d and %d are sub-optimal', ...
a, b )

This warning will be seen by the user; however,


it will not terminate the execution of the function

28
The Crank-Nicolson Method

Step 2: Initialization

It would still be useful to initialize the matrix U and then


use the values as appropriate

nt
uinit  x1  abndry  t2  abndry  t3  abndry  t4  abndry  t5  abndry  t6  abndry  t7  abndry  t8  abndry  t9  abndry  t10  abndry  t11  abndry t12 
uinit  x2  ? ? ? ? ? ? ? ? ? ? ?
uinit  x3  ? ? ? ? ? ? ? ? ? ? ?
uinit  x4  ? ? ? ? ? ? ? ? ? ? ?
nx uinit  x5  ? ? ? ? ? ? ? ? ? ? ?
uinit  x6  ? ? ? ? ? ? ? ? ? ? ?
uinit  x7  ? ? ? ? ? ? ? ? ? ? ?
uinit  x8  ? ? ? ? ? ? ? ? ? ? ?
uinit  x9  bbndry  t2  bbndry  t3  bbndry  t4  bbndry  t5  bbndry  t6  bbndry  t7  bbndry  t8  bbndry  t9  bbndry  t10  bbndry  t11  bbndry t12 

29
The Crank-Nicolson Method

Step 3: Solving

As with the previous case, we will find solutions for the


interior points
t for t through t
2 nt

nt
uinit  x1  abndry  t2  abndry  t3  abndry  t4  abndry  t5  abndry  t6  abndry  t7  abndry  t8  abndry  t9  abndry  t10  abndry  t11  abndry t12 
uinit  x2  ? ? ? ? ? ? ? ? ? ? ?
uinit  x3  ? ? ? ? ? ? ? ? ? ? ?
uinit  x4  ? ? ? ? ? ? ? ? ? ? ?
nx uinit  x5  ? ? ? ? ? ? ? ? ? ? ?
uinit  x6  ? ? ? ? ? ? ? ? ? ? ?
uinit  x7  ? ? ? ? ? ? ? ? ? ? ?
uinit  x8  ? ? ? ? ? ? ? ? ? ? ?
uinit  x9  bbndry  t2  bbndry  t3  bbndry  t4  bbndry  t5  bbndry  t6  bbndry  t7  bbndry  t8  bbndry  t9  bbndry  t10  bbndry  t11  bbndry t12 

30
The Crank-Nicolson Method

Step 3: Solving

For each time step from 1 to nt – 1, we will, however,


have to perform the following:
3a. Set up the system of linear equations
3b. Solve the system of linear equations, and
3c. Assign the values to the next column of the solution matrix

31
The Crank-Nicolson Method

Useful Matlab Commands

There are no new additional Matlab commands for the


Crank-Nicolson method that you have not already been
introduced to in Laboratories 1 and 2

32
The Crank-Nicolson Method

Examples

Consider the following example:


– The initial temperature of the bar is 1 oC
– The bar is placed in contact with two barriers at –1 oC and 2 oC

function [u] = u3a_init( x )


u = x*0 + 1;
end

function [u] = u3a_bndry( t )


u = [t*0 - 1; t*0 + 2];
end

33
The Crank-Nicolson Method

Examples

[xs, ts, Us] = crank_nicolson1d( 1.5, [0 1], 6, [0 1], 21, @u3a_init, @u3a_bndry );
mesh( ts, xs, Us )

t
 1.875
h2

34
The Crank-Nicolson Method

Examples

[xs, ts, Us] = crank_nicolson1d( 1.5, [0 1], 41, [0 1], 11, @u3a_init, @u3a_bndry );
mesh( ts, xs, Us )

t
 240
h2

Note the transient oscillations

35
The Crank-Nicolson Method

Examples

[xs, ts, Us] = crank_nicolson1d( 1.5, [0 1], 41, [0 1], 41, @u3a_init, @u3a_bndry );
mesh( ts, xs, Us )

t
 60
h2

Note the transient oscillations

36
The Crank-Nicolson Method

Examples

[xs, ts, Us] = crank_nicolson1d( 1.5, [0 1], 21, [0 1], 301, @u3a_init, @u3a_bndry );
mesh( ts, xs, Us )

t
2
h2

37
The Crank-Nicolson Method

Examples

Consider an alternate example:


– The initial temperature of the bar is 0 oC
– The bar is placed in contact with two barriers at 1 oC and 4 oC

function [u] = u3b_init( x )


u = x*0;
end

function [u] = u3b_bndry( t )


u = [t*0 + 1; t*0 + 4];
end

38
The Crank-Nicolson Method

Examples
[x3b, t3b, U3b] = crank_nicolson1d( 0.25, [0 1], 11, [0 1], 11, @u3b_init, @u3b_bndry );
mesh( t3b, x3b, U3b );
frames3b = animate( U3b );
frames2gif( frames3b, 'plot3b.i.gif' ); t
 2.5
h2

39
The Crank-Nicolson Method

Examples
[x3b, t3b, U3b] = crank_nicolson1d( 0.25, [0 1], 41, [0 1], 161, @u3b_init, @u3b_bndry );
mesh( t3b, x3b, U3b );
frames3b = animate( U3b );
t
frames2gif( frames3b, 'plot3b.ii.gif' );
 2.5
h2

40
The Crank-Nicolson Method

Insulated Boundaries

We have looked at situations where we have known


temperatures or concentrations at each end of the bar;
however, what happens if one end of the bar is
insulated?

41
The Crank-Nicolson Method

Terminology

Up to this point, we have discussed boundary values


where the value of the function is specified
– These are termed Dirichlet boundary condition

Alternatively, one can specify the value of the derivative


at the boundary points
– These are termed Neumann boundary conditions

Specifically, we will focus on insulated boundary


conditions where the derivative at the boundaries are
zero

42
The Crank-Nicolson Method

Insulated Boundaries

Suppose you have a metal bar in contact with a body at


100 oC
– If the bar is insulated, over time, the entire length of the bar will
be at 100 oC

0 oC 100 oC

43
The Crank-Nicolson Method

Insulated Boundaries

At time t = 0, one end of the bar is brought in contact


with a heat sink at 0 oC; the other end is insulated

0 oC 100 oC

44
The Crank-Nicolson Method

Insulated Boundaries

Over time, the bar continues to cool

0 oC 100 oC

45
The Crank-Nicolson Method

Insulated Boundaries

The cooling process will be much slower

0 oC 100 oC

46
The Crank-Nicolson Method

Insulated Boundaries

Even the furthest end, however, will begin to cool after


some time

0 oC 42 oC

47
The Crank-Nicolson Method

Insulated Boundaries

Until, ultimately, the entire bar is at 0 oC

0 oC 0 oC

48
The Crank-Nicolson Method

Insulated Boundaries

The mathematical property of an insulated boundary is


that there is no transfer w.r.t. space of the property
(temperature or concentration) across that boundary:

u  a, tk 1   0
x
or

u  b, tk 1   0
x

49
The Crank-Nicolson Method

Insulated Boundaries

We could use the O(h) approximations:


 u  a  h, t   u  a, t   u  b, t   u  b  h, t 
u  a, t   u  b, t  
x h x h

However, as other approximations of the 2nd derivative


are O(h2), we will use:
 3u  a, t   4u  a  h, t   u  a  2h, t 
u  a, t  
x 2h
 u  b  2h, t   4u  b  h, t   3u  b, t 
u  b, t  
x 2h

50
The Crank-Nicolson Method

Insulated Boundaries

Thus, our approximations of the insulated boundary


conditions
 
u  a, tk 1   0 u  b, tk 1   0
x x

are

u  a  2h, tk 1   4u  a  h, tk 1   3u  a, tk 1 
0
2h
3u  b, tk 1   4u  b  h, tk 1   u  b  2h, tk 1 
0
2h

51
The Crank-Nicolson Method

Insulated Boundaries

First multiply by 2h:


u  a  2h, tk 1   4u  a  h, tk 1   3u  a, tk 1   0
3u  b, tk 1   4u  b  h, tk 1   u b  2h, tk 1   0
Next, substitute
u3,k 1  4u2,k 1  3u1, k 1  0
3unx ,k 1  4unx 1,k 1  unx  2,k 1  0
Finally, solve for u1,k + 1 and unx ,k + 1 :

4 1 4 1
u1,k 1  u2,k 1  u3,k 1 unx ,k 1  unx 1,k 1  unx  2,k 1
3 3 3 3

52
The Crank-Nicolson Method

Insulated Boundaries

The first and last linear equations we prepared use both


u1, k + 1 and unx , k + 1, respectively

ru1,k 1  2 1  r  u2,k 1  ru3,k 1  2u2,k  r  u1, k  2u2, k  u3, k 

runx 2, 1 
 2 1  r  unx 1,k 1  runx ,k 1  2unx 1,k  r unx 2,k  2unx 1,k  unx ,k 

53
The Crank-Nicolson Method

Insulated Boundaries

Applying our substitutions:


4 1
u1,k 1  u2,k 1  u3,k 1
3 3
4 
r  u2,k 1  u3,k 1   2 1  r  u2, k 1  ru3, k 1  2u2, k  r  u1, k  2u2, k  u3, k 
1
3 3 
4 
runx  2, 1  2 1  r  u nx 1, k 1  r  nx 1,k 1
3
u 
1
3
u


nx  2, k 1   2unx 1, k  r unx  2, k  2unx 1, k  unx , k 
4 1
unx ,k 1  unx 1,k 1  unx  2,k 1
3 3

54
The Crank-Nicolson Method

Insulated Boundaries

Thus, the first and last equations simplify to:

 2 
ru3, k 1  2u2, k  r  u1, k  2u2, k  u3, k 
2
 2  r  2,k 1
u 
 3  3
 2 
2
 runx  2,
3
1  

2  
r  unx 1,k 1  2unx 1,k  r unx  2,k  2unx 1,k  unx ,k
3 

55
The Crank-Nicolson Method

Insulated Boundaries

Recall our original system Mx = b

 2 1  r  r   2u2,k  r  u1,k  2u2,k  u3,k   rabndry  tk 1  


   
 r 2 1  r  r   3,k
2u  r  2,k 3,k 4,k 
u  2u  u 
   
 r 2 1  r     2u 4, k  r  u 3, k  2u 4, k  u 5, k  
  u intr   
   r   

 r 2 1  r  r 
 


2unx  2,k  r unx 3,k  2unx  2, k  unx 1, k  


 r 
2 1  r    2u
 nx 1,k  
 r unx  2,k  2unx 1,k  unx , k  rbbndry  tk 1  

56
The Crank-Nicolson Method

Insulated Boundaries

Two changes are required if the left boundary is insulated:


– m1,1 and m1,2 are modified
– The original change to b1 is no longer necessary
2 2
2 r  r
3 3
 2 1  r  r   2u2,k  r  u1,k  2u2,k  u3,k   rabndry  tk 1  
   
  r 2 1  r   r   2u3,k  r  u2,k  2u3,k  u4,k  
   
  r 2 1  r     2u4,k  r  u3,k  2u4,k  u5,k  
  uintr  
   r   

 r 2 1  r  r 
  2u


nx  2, k  r unx 3, k  2unx  2, k  unx 1, k 


 r 2 1  r    2u
 nx 1,k  
 r unx  2,k  2unx 1,k  unx , k  rbbndry  tk 1  

57
The Crank-Nicolson Method

Insulated Boundaries

Two changes are required if the right boundary is insulated:


– mn x – 2, nx – 2 and mnx – 2, nx – 3 are modified
– The original change to bnx – 2 is no longer necessary

 2 1  r  r   2u2,k  r  u1,k  2u2,k  u3,k   rabndry  tk 1  


   
 r 2 1  r  r   3,k
2u  r  2,k 3,k 4,k 
u  2 u  u 
   
 r 2 1  r     2u 4, k  r  u 3, k  2u 4, k  u 5, k  
  u intr   
   r 2 2  
  r 2  r2u  r u  2u  u   
 r 2 1  r  3 r  3  nx 2,k nx 3, k nx  2, k nx 1, k


 r 
2 1  r    2u
 nx 1,k  
 r unx  2,k  2unx 1,k  unx , k  rbbndry  tk 1  

58
The Crank-Nicolson Method

Insulated Boundaries

How do we indicate an insulated boundary?


– One of the best ideas I have found is to have the boundary
function return NaN
– Recall that NaN is the result of floating-point operations such as
0/0:
>> 0/0
ans =
NaN

– It is also appropriate: an insulated boundary has an undefined


temperature

59
The Crank-Nicolson Method

Insulated Boundaries

For example, the following would implement an insulated


boundary at the left-hand end point:

function u = u3c_bndry(t)
u = [0*t + NaN;
0*t + 2];
end

60
The Crank-Nicolson Method

Insulated Boundaries

Problem: IEEE 754 standard requires that NaN ≠ NaN:


>> NaN == NaN
ans =
0

>> NaN ~= NaN


ans =
1

Solution: use the isnan command:


>> isnan( NaN )
ans =
1

61
The Crank-Nicolson Method

Insulated Boundaries

Suppose that our system begins as follows:


>> [x3c, t3c, U3c] = crank_nicolson1d( 1.5, [0 2], 6, [0 1], 9, @u3c_init, @u3c_bndry );

1 NaN NaN NaN NaN NaN NaN NaN NaN


1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 2 2 2 2 2 2 2 2

t
2
 1.1719
h

62
The Crank-Nicolson Method

Insulated Boundaries

Suppose that our system begins as follows:


>> [x3c, t3c, U3c] = crank_nicolson1d( 1.5, [0 2], 6, [0 1], 9, @u3c_init, @u3c_bndry );

1 NaN NaN NaN NaN NaN NaN NaN NaN


1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 2 2 2 2 2 2 2 2

The first system of equations yields the solution


1.0070
1.0250
1.0858
1.2929
63
The Crank-Nicolson Method

Insulated Boundaries

These values are assigned to the 2nd column:

1 NaN NaN NaN NaN NaN NaN NaN NaN


1 1.0070 0 0 0 0 0 0 0
1 1.0250 0 0 0 0 0 0 0
1 1.0858 0 0 0 0 0 0 0
1 1.2929 0 0 0 0 0 0 0
1 2 2 2 2 2 2 2 2

The first system of equations yields the solution


1.0070
1.0250
1.0858
1.2929
64
The Crank-Nicolson Method

Insulated Boundaries
4 1
Now we reuse the formula: u1,2  u2,2  u3,2
3 3
1 1.0010 NaN NaN NaN NaN NaN NaN NaN
1 1.0070 0 0 0 0 0 0 0
1 1.0250 0 0 0 0 0 0 0
1 1.0858 0 0 0 0 0 0 0
1 1.2929 0 0 0 0 0 0 0
1 2 2 2 2 2 2 2 2

The first system of equations yields the solution


1.0070
1.0250
1.0858
1.2929
65
The Crank-Nicolson Method

Insulated Boundaries

Repeating the process...

1 1.0010 NaN NaN NaN NaN NaN NaN NaN


1 1.0070 0 0 0 0 0 0 0
1 1.0250 0 0 0 0 0 0 0
1 1.0858 0 0 0 0 0 0 0
1 1.2929 0 0 0 0 0 0 0
1 2 2 2 2 2 2 2 2

The second system of equations yields the solution


1.0404
1.1077
1.2735
1.6133
66
The Crank-Nicolson Method

Insulated Boundaries

Copy the values:

1 1.0010 NaN NaN NaN NaN NaN NaN NaN


1 1.0070 1.0404 0 0 0 0 0 0
1 1.0250 1.1077 0 0 0 0 0 0
1 1.0858 1.2735 0 0 0 0 0 0
1 1.2929 1.6133 0 0 0 0 0 0
1 2 2 2 2 2 2 2 2

The second system of equations yields the solution


1.0404
1.1077
1.2735
1.6133
67
The Crank-Nicolson Method

Insulated Boundaries
4 1
And use the formula: u1,2  u2,2  u3,2
3 3
1 1.0010 1.0179 NaN NaN NaN NaN NaN NaN
1 1.0070 1.0404 0 0 0 0 0 0
1 1.0250 1.1077 0 0 0 0 0 0
1 1.0858 1.2735 0 0 0 0 0 0
1 1.2929 1.6133 0 0 0 0 0 0
1 2 2 2 2 2 2 2 2

The second system of equations yields the solution


1.0404
1.1077
1.2735
1.6133
68
The Crank-Nicolson Method

Insulated Boundaries

If the insulated boundary condition is at the other end,


we would use the formula:
4 1
unx ,k 1  unx 1,k 1  unx  2,k 1
3 3
to calculate the missing entry

69
The Crank-Nicolson Method

Step 3: Solving

We only need two small changes:


– First, in the argument checking, nx ≥ 4
– Second, for each time step from 1 to nt – 1, we will, however,
have to perform the following:
3a. Set up the system of linear equations and modify:
– The vector if it is a Dirichlet boundary condition
– The matrix if it is an insulated boundaries
3b. Solve the system, and
3c. Copy the values back to U in the next column
– If the boundaries are insulated in that column, use the
appropriate formula to find the end points

70
The Crank-Nicolson Method

Examples

Ultimately, we get the image:


[x3c, t3c, U3c] = crank_nicolson1d( 1.5, [0 2], 6, [0 1], 9, @u3c_init, @u3c_bndry );
mesh( t3c, x3c, U3c )

71
The Crank-Nicolson Method

Examples

If we increase the resolution:


[x3d, t3d, U3d] = crank_nicolson1d( 1.5, [0 2], 20, [0 1], 100, @u3c_init, @u3c_bndry );
mesh( t3d, x3d, U3d )

72
The Crank-Nicolson Method

Examples

After three seconds, the temperature near the insulated


boundary has increased significantly
[x3e, t3e, U3e] = crank_nicolson1d( 1.5, [0 2], 20, [0 3], 600, @u3c_init, @u3c_bndry );
mesh( t3e, x3e, U3e )
frames = animate( U3e );
frames2gif( frames, 'U3e.gif' );

73
The Crank-Nicolson Method

Summary

We have looked at the heat-conduction/diffusion


equation
– We developed the Crank-Nicolson method
– You will implement the algorithm
– Unlike the previous implementation, there are less
t
restrictions on
h2
• Large values of this ratio may cause transient oscillations
– We defined insulated boundaries
• Considered their approximation using Matlab

74
The Crank-Nicolson Method

References

[1] Glyn James, Modern Engineering Mathematics, 4th Ed., Prentice


Hall, 2007, p.782.

[2] Glyn James, Advanced Modern Engineering Mathematics, 4th Ed.,


Prentice Hall, 2011, p.164.

75

You might also like