Fourier's Approach to Heat Flow 

restart; -1; with(plots); -1; with(plottools); -1

 

Consider the infinite rectangular lamina, 2 units wide. 

display(polygon([[0, -1], [0, 1], [10, 1], [9, -1]], color = cyan), scaling = constrained, view = ([-1 .. 11, -2 .. 2])); 1
display(polygon([[0, -1], [0, 1], [10, 1], [9, -1]], color = cyan), scaling = constrained, view = ([-1 .. 11, -2 .. 2])); 1
 

 

Plot 

 

 

The equation that models heat flow in this lamina is given by 

 

Fourier was interested in the equilibrium solution where and chose the boundary conditions: 

and  As well as bounded as . 

 

He assumed that Substituting this into the equation gives  

 

Since we can separate this equation into two functions one in x only and one in y only it must be the 

case that 

a constant. 

This gives two separate equations:  

 

 

bounded 

 

We solve the equation for G first.  We have .  Using the boundary conditions 

we have  

and  

For arbitrary values of  λ this system will have only the trivial solution and we want a nontrivial solution.  Adding these 

equations gives: .  If we take or λ.  Since  

does not satisfy the boundary conditions we take   We obtain then an infinite number of solutions given by 

 

For the equation we have  If we require that be 

bounded then and so  Therefore we obtain the solutions 

 

This then gives the equilibrium solutions as 

 

Fourier then noted that, the principle of superposition, that the general solution has the form 

 

and from the boundary condition we have to choose the values to satisfy 

(A) 

Fourier differentiated this expression and infinite number of times and generated a system for the infinite number of unknowns 

.  He offered no justification why term-by-term differentiation was possible.  Later on he noted the orthogonality of the functions 

on the interval [-1, 1]. i.e. 

assume(n, posint); 1; assume(m, posint); 1 

int(cos(1/2*(2*m-1)*Pi*y)*cos(1/2*(2*n-1)*Pi*y), y = -1 .. 1) 

0 

int(cos(1/2*(2*n-1)*Pi*y)^2, y = -1 .. 1) 

1 

Fourier then multiplies (A) by and integrates term-by-term, again with no justification.   

Note that the only nonzero term is when and we arrive at 

assume(k, posint); 1 

a[k] := int(cos(1/2*(2*k-1)*Pi*y), y = -1 .. 1) 

4*(-1)^(1+k)/((2*k-1)*Pi) 

a[k] := unapply(a[k], k) 

proc (k) options operator, arrow; 4*(-1)^(k+1)/((2*k-1)*Pi) end proc 

The solution is then given by the infinite series 

 

Let's consider partial sums of this function. 

v := proc (x, y, n) options operator, arrow; sum(a[k](k)*exp(-1/2*(2*k-1)*x*Pi)*cos(1/2*(2*k-1)*Pi*y), k = 1 .. n) end proc 

proc (x, y, n) options operator, arrow; sum(a[k](k)*exp(-1/2*(2*k-1)*x*Pi)*cos(1/2*(2*k-1)*Pi*y), k = 1 .. n) end proc 

Graphs of this function for and various values of are shown below. 

plot({v(0, y, 4), v(0, y, 1), v(0, y, 2), v(0, y, 8), v(0, y, 16)}, y = -3 .. 3, color = ([red, blue, yellow, green, brown]), thickness = 1, title =
plot({v(0, y, 4), v(0, y, 1), v(0, y, 2), v(0, y, 8), v(0, y, 16)}, y = -3 .. 3, color = ([red, blue, yellow, green, brown]), thickness = 1, title =
plot({v(0, y, 4), v(0, y, 1), v(0, y, 2), v(0, y, 8), v(0, y, 16)}, y = -3 .. 3, color = ([red, blue, yellow, green, brown]), thickness = 1, title =
 

 

Plot 

 

How do these partial sums converge to the square wave. 

animate(plot, [v(0, y, n), y = -1 .. 1, color = red, scaling = constrained, thickness = 2], n = 1 .. 30, frames = 30); 1 

 

Plot 

 

 

Notice that it overshoots near the enpoints of the interval.  This is known and the Gibbs-Wilbraham phenomenom. 

For a three dimensional veiw of the solution we plot the temperature variation on the rectangle [0, 2]×[-1,1]. 

plot3d(v(x, y, 30), x = 0 .. 2, y = -1 .. 1, style = patchcontour, shading = zhue, axes = framed, scaling = constrained, orientation = ([40, 60]), title =
plot3d(v(x, y, 30), x = 0 .. 2, y = -1 .. 1, style = patchcontour, shading = zhue, axes = framed, scaling = constrained, orientation = ([40, 60]), title =
 

 

Plot 

 

Also 

plt1 := animate(spacecurve, [[s, t, v(s, t, 30)], t = -1 .. 1, color = gold, thickness = 2], s = 0 .. 2, frames = 30); -1 

display(plt1, orientation = ([40, 60]), axes = framed, scaling = constrained, insequence = true); 1 

 

Plot 

 

 

Back