#set document(title: "4.9 Steady State Temperature and the Laplacian", author: "Jiří Lebl") #set page(width: 8.5in, height: auto, margin: 1in) #import "@preview/cetz:0.5.2" #set text(font: ("STIX Two Text", "Libertinus Serif", "New Computer Modern"), size: 10.5pt, lang: "en") #show math.equation: set text(font: ("STIX Two Math", "New Computer Modern Math")) #set par(justify: true, leading: 0.62em, spacing: 0.9em) #set enum(spacing: 1.1em) // room between list items so tall inline fractions don't collide #set list(spacing: 1.1em) #set table(stroke: 0.5pt + rgb("#c7ccd3")) #let BLUE = rgb("#183B6F") // brand navy — section bars + example/solution labels (white on navy 11.09:1) #let ORANGE = rgb("#A94509") // brand primary-700 — AA-safe deep orange for TEXT (5.93:1 on white; raw brand #F37021 is 2.94:1 and must never carry text) #let RED = rgb("#DC2626") // brand error-600 #let GREEN = rgb("#059669") // brand success-600 (decoration only; small green text uses green-text #007942) #show heading.where(level: 1): it => block(width: 100%, above: 0pt, below: 16pt, fill: gradient.linear(BLUE, rgb("#2C5AA0")), inset: (x: 14pt, y: 12pt), radius: 3pt, text(fill: white, weight: "bold", size: 19pt, it.body)) #show heading.where(level: 2): it => block(width: 100%, above: 18pt, below: 10pt, fill: BLUE, inset: (x: 10pt, y: 6pt), radius: 2pt, text(fill: white, weight: "bold", size: 12pt, it.body)) #show heading.where(level: 3): it => text(fill: ORANGE, weight: "bold", size: 12.5pt, it.body) #show heading.where(level: 4): it => text(fill: BLUE, weight: "bold", size: 10.5pt, it.body) #let examplebox(label, title, body) = block(width: 100%, breakable: true, fill: rgb("#EFF1F5"), stroke: 0.5pt + rgb("#CFDDF0"), radius: 4pt, inset: 10pt, above: 12pt, below: 12pt)[ #block(below: 6pt)[#box(fill: BLUE, inset: (x: 6pt, y: 2pt), radius: 2pt, text(fill: white, weight: "bold", size: 8.5pt, label)) #h(0.4em) #strong[#title]] #body] // rail = decorative left rule (raw brand token); labelcolor = AA-safe label text shade #let notebox(label, rail, labelcolor, tint, body) = block(width: 100%, breakable: true, fill: tint, stroke: (left: 3pt + rail), inset: (left: 10pt, rest: 8pt), radius: (right: 4pt), above: 11pt, below: 11pt)[ #text(fill: labelcolor, weight: "bold", size: 7.5pt, tracking: 0.5pt)[#upper(label)] #linebreak() #body] #let solutionbox(body) = block(above: 4pt, below: 8pt)[ #text(fill: BLUE, weight: "bold", size: 8.5pt)[Solution] #linebreak() #body] #let figph(msg) = block(width: 100%, height: 60pt, fill: rgb("#f6f7f9"), stroke: (paint: rgb("#c7ccd3"), dash: "dashed"), radius: 4pt, inset: 10pt)[ #align(center + horizon, text(fill: rgb("#889"), style: "italic", size: 9pt, msg))] // Standardize inlined figure sizes: measure the natural CeTZ canvas, then scale to a // consistent envelope (aspect-aware; see build_typst.py FIG_* constants). Unlike the // print preamble, dimensions are FLOORED: in an editor a user can trim a figure to a // degenerate 1-D shape (a bare line), and w/h or tw/w would then divide by zero. #let _STD_W = 3.5 #let _WIDE_W = 5.6 #let _MAX_H = 3.4 #let _ASPECT_WIDE = 2.2 #let _UPSCALE_MAX = 1.15 #let stdfig(body) = context { let m = measure(body) let w = calc.max(m.width / 1in, 0.01) let h = calc.max(m.height / 1in, 0.01) let tw = if w / h > _ASPECT_WIDE { _WIDE_W } else { _STD_W } let s = calc.min(tw / w, _MAX_H / h, _UPSCALE_MAX) align(center, box(scale(x: s * 100%, y: s * 100%, reflow: true, body))) } #show figure: set block(breakable: false) #set figure(gap: 8pt) #show figure.caption: set text(size: 8.5pt, fill: rgb("#555")) == 4.9#h(0.6em)Steady State Temperature and the Laplacian Suppose we have an insulated wire, a plate, or a 3-dimensional object. We apply certain fixed temperatures on the ends of the wire, the edges of the plate, or on all sides of the 3-dimensional object. We wish to find out what is the steady state temperature distribution. That is, we wish to know what will be the temperature after long enough period of time. We are really looking for a solution to the heat equation that is not dependent on time. Let us first solve the problem in one space variable. We are looking for a function #math.equation(block: false, alt: "u")[$u$] that satisfies #math.equation(block: true, alt: "u sub t equals k u sub x x ,")[$u_(t) = k u_(x x) ,$] but such that #math.equation(block: false, alt: "u sub t equals 0")[$u_(t) = 0$] for all #math.equation(block: false, alt: "x")[$x$] and #math.equation(block: false, alt: "t")[$t$]. Hence, we are looking for a function of #math.equation(block: false, alt: "x")[$x$] alone that satisfies #math.equation(block: false, alt: "u sub x x equals 0")[$u_(x x) = 0$]. It is easy to solve this equation by integration and we see that #math.equation(block: false, alt: "u equals A x plus B")[$u = A x + B$] for some constants #math.equation(block: false, alt: "A")[$A$] and #math.equation(block: false, alt: "B")[$B$]. Suppose we have an insulated wire, and we apply constant temperature #math.equation(block: false, alt: "T sub 1")[$T_(1)$] at one end (say where #math.equation(block: false, alt: "x equals 0")[$x = 0$]) and #math.equation(block: false, alt: "T sub 2")[$T_(2)$] on the other end (at #math.equation(block: false, alt: "x equals L")[$x = L$] where #math.equation(block: false, alt: "L")[$L$] is the length of the wire). Then our steady state solution is #math.equation(block: true, alt: "u open parenthesis x close parenthesis equals the fraction T sub 2 minus T sub 1 over L x plus T sub 1 .")[$u ( x ) = frac(T_(2) − T_(1), L) x + T_(1) .$] This solution agrees with our common sense intuition with how the heat should be distributed in the wire. So in one dimension, the steady state solutions are basically just straight lines. Things are more complicated in two or more space dimensions. Let us restrict to two space dimensions for simplicity. The heat equation in two space variables is #math.equation(block: true, alt: "u sub t equals k open parenthesis u sub x x plus u sub y y close parenthesis ,")[$u_(t) = k ( u_(x x) + u_(y y) ) ,$] or more commonly written as #math.equation(block: false, alt: "u sub t equals k Δ u")[$u_(t) = k Δ u$] or #math.equation(block: false, alt: "u sub t equals k ∇ squared u")[$u_(t) = k ∇^(2) u$]. Here the #math.equation(block: false, alt: "Δ")[$Δ$] and #math.equation(block: false, alt: "∇ squared")[$∇^(2)$] symbols mean #math.equation(block: false, alt: "the fraction ∂ squared over ∂ x squared plus the fraction ∂ squared over ∂ y squared")[$frac(∂^(2), ∂ x^(2)) + frac(∂^(2), ∂ y^(2))$]. We will use #math.equation(block: false, alt: "Δ")[$Δ$] from now on. The reason for using such a notation is that you can define #math.equation(block: false, alt: "Δ")[$Δ$] to be the right thing for any number of space dimensions and then the heat equation is always #math.equation(block: false, alt: "u sub t equals k Δ u")[$u_(t) = k Δ u$]. The operator #math.equation(block: false, alt: "Δ")[$Δ$] is called the #strong[Laplacian]. OK, now that we have notation out of the way, let us see what does an equation for the steady state solution look like. We are looking for a solution to Equation (4.9.1) that does not depend on #math.equation(block: false, alt: "t")[$t$], or in other words #math.equation(block: false, alt: "u sub t equals 0")[$u_(t) = 0$]. Hence we are looking for a function #math.equation(block: false, alt: "u open parenthesis x , y close parenthesis")[$u ( x , y )$] such that #math.equation(block: true, alt: "Δ u equals u sub x x plus u sub y y equals 0 .")[$Δ u = u_(x x) + u_(y y) = 0 .$] This equation is called the #emph[Laplace equation]#math.equation(block: false, alt: "to the power 1")[$1$]. Solutions to the Laplace equation are called #strong[harmonic functions] and have many nice properties and applications far beyond the steady state heat problem. Harmonic functions in two variables are no longer just linear (plane graphs). For example, you can check that the functions #math.equation(block: false, alt: "x squared minus y squared")[$x^(2) − y^(2)$] and #math.equation(block: false, alt: "x y")[$x y$] are harmonic. However, if you remember your multi-variable calculus we note that if #math.equation(block: false, alt: "u sub x x")[$u_(x x)$] is positive, #math.equation(block: false, alt: "u")[$u$] is concave up in the #math.equation(block: false, alt: "x")[$x$] direction, then #math.equation(block: false, alt: "u sub y y")[$u_(y y)$] must be negative and #math.equation(block: false, alt: "u")[$u$] must be concave down in the #math.equation(block: false, alt: "y")[$y$] direction. Therefore, a harmonic function can never have any “hilltop” or “valley” on the graph. This observation is consistent with our intuitive idea of steady state heat distribution; the hottest or coldest spot will not be inside. Commonly the Laplace equation is part of a so-called#emph[Dirichlet problem]#math.equation(block: false, alt: "squared")[$2$]. That is, we have a region in the #math.equation(block: false, alt: "x y")[$x y$]-plane and we specify certain values along the boundaries of the region. We then try to find a solution #math.equation(block: false, alt: "u")[$u$] defined on this region such that #math.equation(block: false, alt: "u")[$u$] agrees with the values we specified on the boundary. For simplicity, we consider a rectangular region. Also for simplicity we specify boundary values to be zero at 3 of the four edges and only specify an arbitrary function at one edge. As we still have the principle of superposition, we can use this simpler solution to derive the general solution for arbitrary boundary values by solving 4 different problems, one for each edge, and adding those solutions together. This setup is left as an exercise. We wish to solve the following problem. Let #math.equation(block: false, alt: "h")[$h$] and #math.equation(block: false, alt: "w")[$w$] be the height and width of our rectangle, with one corner at the origin and lying in the first quadrant. #math.equation(block: true, alt: "Δ u equals 0 ,; u open parenthesis 0 , y close parenthesis equals 0 for 0 less than y less than h ,; u open parenthesis x , h close parenthesis equals 0 for 0 less than x less than w ,; u open parenthesis w , y close parenthesis equals 0 for 0 less than y less than h ,; u open parenthesis x , 0 close parenthesis equals f open parenthesis x close parenthesis for 0 less than x less than w .")[$Δ u = 0 , \ u ( 0 , y ) = 0 "for " 0 < y < h , \ u ( x , h ) = 0 "for " 0 < x < w , \ u ( w , y ) = 0 "for " 0 < y < h , \ u ( x , 0 ) = f ( x ) "for " 0 < x < w .$] #figure(figph[Diagram of a rectangle with corners (0,0), (w,0), (0,h) and (w,h) and delta u equals 0 inside; the left, right and top edges are labelled u equals 0 and the bottom edge u equals f of x.], alt: "Diagram of a rectangle with corners (0,0), (w,0), (0,h) and (w,h) and delta u equals 0 inside; the left, right and top edges are labelled u equals 0 and the bottom edge u equals f of x.", caption: [Figure #math.equation(block: false, alt: "1")[$1$]]) The method we apply is separation of variables. Again, we will come up with enough building-block solutions satisfying all the homogeneous boundary conditions (all conditions except (4.9.6)). We notice that superposition still works for the equation and all the homogeneous conditions. Therefore, we can use the Fourier series for #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$] to solve the problem as before. We try #math.equation(block: false, alt: "u open parenthesis x , y close parenthesis equals X open parenthesis x close parenthesis Y open parenthesis y close parenthesis")[$u ( x , y ) = X ( x ) Y ( y )$]. We plug #math.equation(block: false, alt: "u")[$u$] into the equation to get #math.equation(block: true, alt: "X double prime Y plus X Y double prime equals 0 .")[$X^(″) Y + X Y^(″) = 0 .$] We put the #math.equation(block: false, alt: "X")[$X$]s on one side and the #math.equation(block: false, alt: "Y")[$Y$]s on the other to get #math.equation(block: true, alt: "minus the fraction X double prime over X equals the fraction Y double prime over Y .")[$− frac(X^(″), X) = frac(Y^(″), Y) .$] The left hand side only depends on #math.equation(block: false, alt: "x")[$x$] and the right hand side only depends on #math.equation(block: false, alt: "y")[$y$]. Therefore, there is some constant #math.equation(block: false, alt: "λ")[$λ$] such that #math.equation(block: false, alt: "λ equals the fraction minus X double prime over X equals the fraction Y double prime over Y")[$λ = frac(− X^(″), X) = frac(Y^(″), Y)$]. And we get two equations #math.equation(block: true, alt: "X double prime plus λ X equals 0 , Y double prime minus λ Y equals 0 .")[$X^(″) + λ X = 0 , Y^(″) − λ Y = 0 .$] Furthermore, the homogeneous boundary conditions imply that #math.equation(block: false, alt: "X open parenthesis 0 close parenthesis equals X open parenthesis w close parenthesis equals 0")[$X ( 0 ) = X ( w ) = 0$] and #math.equation(block: false, alt: "Y open parenthesis h close parenthesis equals 0")[$Y ( h ) = 0$]. Taking the equation for #math.equation(block: false, alt: "X")[$X$] we have already seen that we have a nontrivial solution if and only if #math.equation(block: false, alt: "λ equals λ sub n equals the fraction n squared π squared over w squared")[$λ = λ_(n) = frac(n^(2) π^(2), w^(2))$] and the solution is a multiple of #math.equation(block: true, alt: "X sub n open parenthesis x close parenthesis equals sin open parenthesis the fraction n π over w x close parenthesis .")[$X_(n) ( x ) = sin ( frac(n π, w) x ) .$] For these given #math.equation(block: false, alt: "λ sub n")[$λ_(n)$], the general solution for #math.equation(block: false, alt: "Y")[$Y$] (one for each #math.equation(block: false, alt: "n")[$n$]) is #math.equation(block: true, alt: "Y sub n open parenthesis y close parenthesis equals A sub n cosh open parenthesis the fraction n π over w y close parenthesis plus B sub n sinh open parenthesis the fraction n π over w y close parenthesis .")[$Y_(n) ( y ) = A_(n) cosh ( frac(n π, w) y ) + B_(n) sinh ( frac(n π, w) y ) .$] We only have one condition on #math.equation(block: false, alt: "Y sub n")[$Y_(n)$] and hence we can pick one of #math.equation(block: false, alt: "A sub n")[$A_(n)$] or #math.equation(block: false, alt: "B sub n")[$B_(n)$] to be something convenient. It will be useful to have #math.equation(block: false, alt: "Y sub n open parenthesis 0 close parenthesis equals 1")[$Y_(n) ( 0 ) = 1$], so we let #math.equation(block: false, alt: "A sub n equals 1")[$A_(n) = 1$]. Setting #math.equation(block: false, alt: "Y sub n open parenthesis h close parenthesis equals 0")[$Y_(n) ( h ) = 0$] and solving for #math.equation(block: false, alt: "B sub n")[$B_(n)$] we get that #math.equation(block: true, alt: "B sub n equals the fraction minus cosh open parenthesis the fraction n π h over w close parenthesis over sinh open parenthesis the fraction n π h over w close parenthesis .")[$B_(n) = frac(− cosh ( frac(n π h, w) ), sinh ( frac(n π h, w) )) .$] After we plug the #math.equation(block: false, alt: "A sub n")[$A_(n)$] and #math.equation(block: false, alt: "B sub n")[$B_(n)$] we into (4.9.7) and simplify, we find #math.equation(block: true, alt: "Y sub n open parenthesis y close parenthesis equals the fraction sinh open parenthesis the fraction n π open parenthesis h minus y close parenthesis over w close parenthesis over sinh open parenthesis the fraction n π h over w close parenthesis .")[$Y_(n) ( y ) = frac(sinh ( frac(n π ( h − y ), w) ), sinh ( frac(n π h, w) )) .$] We define #math.equation(block: false, alt: "u sub n open parenthesis x , y close parenthesis equals X sub n open parenthesis x close parenthesis Y sub n open parenthesis y close parenthesis")[$u_(n) ( x , y ) = X_(n) ( x ) Y_(n) ( y )$]. And note that #math.equation(block: false, alt: "u sub n")[$u_(n)$] satisfies (4.9.2) - (4.9.5). Observe that #math.equation(block: true, alt: "u sub n open parenthesis x , 0 close parenthesis equals X sub n open parenthesis x close parenthesis Y sub n open parenthesis 0 close parenthesis equals sin open parenthesis the fraction n π over w x close parenthesis .")[$u_(n) ( x , 0 ) = X_(n) ( x ) Y_(n) ( 0 ) = sin ( frac(n π, w) x ) .$] Suppose #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals ∑ n equals 1 infinity b sub n sin open parenthesis the fraction n π x over w close parenthesis .")[$f ( x ) = ∑_(n = 1)^(∞) b_(n) sin ( frac(n π x, w) ) .$] Then we get a solution of (4.9.2) - (4.9.6) of the following form. #math.equation(block: true, alt: "u open parenthesis x , y close parenthesis equals ∑ n equals 1 infinity b sub n u sub n open parenthesis x , y close parenthesis equals ∑ n equals 1 infinity b sub n sin open parenthesis the fraction n π over w x close parenthesis open parenthesis the fraction sinh open parenthesis the fraction n π open parenthesis h minus y close parenthesis over w close parenthesis over sinh open parenthesis the fraction n π h over w close parenthesis close parenthesis .")[$u ( x , y ) = ∑_(n = 1)^(∞) b_(n) u_(n) ( x , y ) = ∑_(n = 1)^(∞) b_(n) sin ( frac(n π, w) x ) ( frac(sinh ( frac(n π ( h − y ), w) ), sinh ( frac(n π h, w) )) ) .$] As #math.equation(block: false, alt: "u sub n")[$u_(n)$] satisfies Equation (4.9.2) - (4.9.5) and any linear combination (finite or infinite) of #math.equation(block: false, alt: "u sub n")[$u_(n)$] must also satisfy (4.9.2) - (4.9.5), we see that #math.equation(block: false, alt: "u")[$u$] must satisfy Equations (4.9.2) - (4.9.5). By plugging in #math.equation(block: false, alt: "y equals 0")[$y = 0$] it is easy to see that #math.equation(block: false, alt: "u")[$u$] satisfies (4.9.6) as well. #examplebox("Example 1")[][ Suppose that we take #math.equation(block: false, alt: "w equals h equals π")[$w = h = π$] and we let #math.equation(block: false, alt: "f open parenthesis x close parenthesis equals π")[$f ( x ) = π$]. We compute the sine series for the function #math.equation(block: false, alt: "π")[$π$] (we will get the square wave). We find that for #math.equation(block: false, alt: "0 less than x less than π")[$0 < x < π$] we have #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals ∑ n equals 1 n o d d infinity the fraction 4 over n sin open parenthesis n x close parenthesis .")[$f ( x ) = ∑_(limits(n = 1)_(n " " upright(o) upright(d) upright(d)))^(∞) frac(4, n) sin ( n x ) .$] Therefore the solution #math.equation(block: false, alt: "u open parenthesis x , y close parenthesis")[$u ( x , y )$], see Figure #math.equation(block: false, alt: "2")[$2$], to the corresponding Dirichlet problem is given as #math.equation(block: true, alt: "u open parenthesis x , y close parenthesis equals ∑ n equals 1 n o d d infinity the fraction 4 over n sin open parenthesis n x close parenthesis open parenthesis the fraction sinh open parenthesis n open parenthesis π minus y close parenthesis close parenthesis over sinh open parenthesis n π close parenthesis close parenthesis .")[$u ( x , y ) = ∑_(limits(n = 1)_(n " " upright(o) upright(d) upright(d)))^(∞) frac(4, n) sin ( n x ) ( frac(sinh ( n ( π − y ) ), sinh ( n π )) ) .$] #figure(figph[Three-dimensional surface of the steady state temperature on a square plate, x and y from 0 to about 3.14. One edge is a red ridge held at the maximum 3.142; the surface falls away smoothly to zero along the other three sides.], alt: "Three-dimensional surface of the steady state temperature on a square plate, x and y from 0 to about 3.14. One edge is a red ridge held at the maximum 3.142; the surface falls away smoothly to zero along the other three sides.", caption: [Figure #math.equation(block: false, alt: "2")[$2$]: Steady state temperature of a square plate, three sides held at zero and one side held at #math.equation(block: false, alt: "π")[$π$].]) This scenario corresponds to the steady state temperature on a square plate of width #math.equation(block: false, alt: "π")[$π$] with 3 sides held at 0 degrees and one side held at #math.equation(block: false, alt: "π")[$π$] degrees. If we have arbitrary initial data on all sides, then we solve four problems, each using one piece of nonhomogeneous data. Then we use the principle of superposition to add up all four solutions to have a solution to the original problem. A different way to visualize solutions of the Laplace equation is to take a wire and bend it so that it corresponds to the graph of the temperature above the boundary of your region. Cut a rubber sheet in the shape of your region—a square in our case—and stretch it fixing the edges of the sheet to the wire. The rubber sheet is a good approximation of the graph of the solution to the Laplace equation with the given boundary data. ] === Footnotes \[1\] Named after the French mathematician Pierre-Simon, marquis de Laplace (1749–1827). \[2\] Named after the German mathematician Johann Peter Gustav Lejeune Dirichlet (1805–1859).