#set document(title: "5.3 Steady Periodic Solutions", 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")) == 5.3#h(0.6em)Steady Periodic Solutions === Forced Vibrating String Consider a guitar string of length #math.equation(block: false, alt: "L")[$L$]. We studied this setup in Section 4.7. Let #math.equation(block: false, alt: "x")[$x$] be the position on the string, #math.equation(block: false, alt: "t")[$t$] the time, and #math.equation(block: false, alt: "y")[$y$] the displacement of the string. See Figure #math.equation(block: false, alt: "1")[$1$]. #figure(figph[Graph of a vibrating string], alt: "Graph of a vibrating string", caption: [Figure #math.equation(block: false, alt: "1")[$1$]: Vibrating string.]) The problem is governed by the equations #math.equation(block: true, alt: "y sub t t equals a squared y sub x x ,; y open parenthesis 0 , t close parenthesis equals 0 , y open parenthesis L , t close parenthesis equals 0 ,; y open parenthesis x , 0 close parenthesis equals f open parenthesis x close parenthesis , y sub t open parenthesis x , 0 close parenthesis equals g open parenthesis x close parenthesis .")[$y_(t t) = a^(2) y_(x x) , \ y ( 0 , t ) = 0 , y ( L , t ) = 0 , \ y ( x , 0 ) = f ( x ) , y_(t) ( x , 0 ) = g ( x ) .$] We saw previously that the solution is of the form #math.equation(block: true, alt: "y equals ∑ n equals 1 infinity open parenthesis A sub n cos open parenthesis the fraction n π a over L t close parenthesis plus B sub n sin open parenthesis the fraction n π a over L t close parenthesis close parenthesis sin open parenthesis the fraction n π over L x close parenthesis ,")[$y = ∑_(n = 1)^(∞) ( A_(n) cos ( frac(n π a, L) t ) + B_(n) sin ( frac(n π a, L) t ) ) sin ( frac(n π, L) x ) ,$] where #math.equation(block: false, alt: "A sub n")[$A_(n)$] and #math.equation(block: false, alt: "B sub n")[$B_(n)$] were determined by the initial conditions. The natural frequencies of the system are the (circular) frequencies #math.equation(block: false, alt: "the fraction n π a over L")[$frac(n π a, L)$] for integers #math.equation(block: false, alt: "n greater than or equal to 1")[$n ≥ 1$]. But these are free vibrations. What if there is an external force acting on the string. Let us assume say air vibrations (noise), for example a second string. Or perhaps a jet engine. For simplicity, assume nice pure sound and assume the force is uniform at every position on the string. Let us say #math.equation(block: false, alt: "F open parenthesis t close parenthesis equals F sub 0 cos open parenthesis ω t close parenthesis")[$F ( t ) = F_(0) cos ( ω t )$] as force per unit mass. Then our wave equation becomes (remember force is mass times acceleration) #math.equation(block: true, alt: "y sub t t equals a squared y sub x x plus F sub 0 cos open parenthesis ω t close parenthesis ,")[$y_(t t) = a^(2) y_(x x) + F_(0) cos ( ω t ) ,$] with the same boundary conditions of course. We want to find the solution here that satisfies the above equation and #math.equation(block: true, alt: "y open parenthesis 0 , t close parenthesis equals 0 , y open parenthesis L , t close parenthesis equals 0 , y open parenthesis x , 0 close parenthesis equals 0 , y sub t open parenthesis x , 0 close parenthesis equals 0 .")[$y ( 0 , t ) = 0 , " " " " " " " " " " y ( L , t ) = 0 , " " " " " " " " " " y ( x , 0 ) = 0 , " " " " " " " " " " y_(t) ( x , 0 ) = 0 .$] That is, the string is initially at rest. First we find a particular solution #math.equation(block: false, alt: "y sub p")[$y_(p)$] of (5.3.2) that satisfies #math.equation(block: false, alt: "y open parenthesis 0 , t close parenthesis equals y open parenthesis L , t close parenthesis equals 0")[$y ( 0 , t ) = y ( L , t ) = 0$]. We define the functions #math.equation(block: false, alt: "f")[$f$] and #math.equation(block: false, alt: "g")[$g$] as #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals minus y sub p open parenthesis x , 0 close parenthesis , g open parenthesis x close parenthesis equals minus the fraction ∂ y sub p over ∂ t open parenthesis x , 0 close parenthesis .")[$f ( x ) = − y_(p) ( x , 0 ) , " " " " " " " " " " g ( x ) = − frac(∂ y_(p), ∂ t) ( x , 0 ) .$] We then find solution #math.equation(block: false, alt: "y sub c")[$y_(c)$] of (5.3.1). If we add the two solutions, we find that #math.equation(block: false, alt: "y equals y sub c plus y sub p")[$y = y_(c) + y_(p)$] solves (5.3.2) with the initial conditions. #notebox("Your Turn", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Check that #math.equation(block: false, alt: "y equals y sub c plus y sub p")[$y = y_(c) + y_(p)$] solves (5.3.2) and the side conditions (5.3.3). ] So the big issue here is to find the particular solution #math.equation(block: false, alt: "y sub p")[$y_(p)$]. We look at the equation and we make an educated guess #math.equation(block: true, alt: "y sub p open parenthesis x , t close parenthesis equals X open parenthesis x close parenthesis cos open parenthesis ω t close parenthesis .")[$y_(p) ( x , t ) = X ( x ) cos ( ω t ) .$] We plug in to get #math.equation(block: true, alt: "minus ω squared X cos open parenthesis ω t close parenthesis equals a squared X double prime cos open parenthesis ω t close parenthesis ,")[$− ω^(2) X cos ( ω t ) = a^(2) X^(″) cos ( ω t ) ,$] or #math.equation(block: false, alt: "minus ω X equals a squared X double prime plus F sub 0")[$− ω X = a^(2) X^(″) + F_(0)$] after canceling the cosine. We know how to find a general solution to this equation (it is a nonhomogeneous constant coefficient equation). The general solution is #math.equation(block: true, alt: "X open parenthesis x close parenthesis equals A cos open parenthesis the fraction ω over a x close parenthesis plus B sin open parenthesis the fraction ω over a x close parenthesis minus the fraction F sub 0 over ω squared .")[$X ( x ) = A cos ( frac(ω, a) x ) + B sin ( frac(ω, a) x ) − frac(F_(0), ω^(2)) .$] The endpoint conditions imply #math.equation(block: false, alt: "X open parenthesis 0 close parenthesis equals X open parenthesis L close parenthesis equals 0")[$X ( 0 ) = X ( L ) = 0$]. So #math.equation(block: true, alt: "0 equals X open parenthesis 0 close parenthesis equals A minus the fraction F sub 0 over ω squared ,")[$0 = X ( 0 ) = A − frac(F_(0), ω^(2)) ,$] or #math.equation(block: false, alt: "A equals the fraction F sub 0 over ω squared")[$A = frac(F_(0), ω^(2))$], and also #math.equation(block: true, alt: "0 equals X open parenthesis L close parenthesis equals the fraction F sub 0 over ω squared cos open parenthesis the fraction ω L over a close parenthesis plus B sin open parenthesis the fraction ω L over a close parenthesis minus the fraction F sub 0 over ω squared .")[$0 = X ( L ) = frac(F_(0), ω^(2)) cos ( frac(ω L, a) ) + B sin ( frac(ω L, a) ) − frac(F_(0), ω^(2)) .$] Assuming that #math.equation(block: false, alt: "sin open parenthesis the fraction ω L over a close parenthesis")[$sin ( frac(ω L, a) )$] is not zero we can solve for #math.equation(block: false, alt: "B")[$B$] to get #math.equation(block: true, alt: "B equals the fraction minus F sub 0 open parenthesis cos open parenthesis the fraction ω L over a close parenthesis minus 1 close parenthesis over minus ω squared sin open parenthesis the fraction ω L over a close parenthesis .")[$B = frac(− F_(0) ( cos ( frac(ω L, a) ) − 1 ), − ω^(2) sin ( frac(ω L, a) )) .$] Therefore, #math.equation(block: true, alt: "X open parenthesis x close parenthesis equals the fraction F sub 0 over ω squared open parenthesis cos open parenthesis the fraction ω over a x close parenthesis minus the fraction cos open parenthesis the fraction ω L over a close parenthesis minus 1 over sin open parenthesis the fraction ω L over a close parenthesis sin open parenthesis the fraction ω over a x close parenthesis minus 1 close parenthesis .")[$X ( x ) = frac(F_(0), ω^(2)) ( cos ( frac(ω, a) x ) − frac(cos ( frac(ω L, a) ) − 1, sin ( frac(ω L, a) )) sin ( frac(ω, a) x ) − 1 ) .$] The particular solution #math.equation(block: false, alt: "y sub p")[$y_(p)$] we are looking for is #math.equation(block: true, alt: "y sub p open parenthesis x , t close parenthesis equals the fraction F sub 0 over ω squared open parenthesis cos open parenthesis the fraction ω over a x close parenthesis minus the fraction cos open parenthesis the fraction ω L over a close parenthesis minus 1 over sin open parenthesis the fraction ω L over a close parenthesis sin open parenthesis the fraction ω over a x close parenthesis minus 1 close parenthesis cos open parenthesis ω t close parenthesis .")[$y_(p) ( x , t ) = frac(F_(0), ω^(2)) ( cos ( frac(ω, a) x ) − frac(cos ( frac(ω L, a) ) − 1, sin ( frac(ω L, a) )) sin ( frac(ω, a) x ) − 1 ) cos ( ω t ) .$] #notebox("Your Turn", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Check that #math.equation(block: false, alt: "y sub p")[$y_(p)$] works. ] Now we get to the point that we skipped. Suppose that #math.equation(block: false, alt: "sin open parenthesis the fraction ω L over a close parenthesis equals 0")[$sin ( frac(ω L, a) ) = 0$]. What this means is that #math.equation(block: false, alt: "ω")[$ω$] is equal to one of the natural frequencies of the system, i.e. a multiple of #math.equation(block: false, alt: "the fraction π a over L")[$frac(π a, L)$]. We notice that if #math.equation(block: false, alt: "ω")[$ω$] is not equal to a multiple of the base frequency, but is very close, then the coefficient #math.equation(block: false, alt: "B")[$B$] in (5.3.4) seems to become very large. But let us not jump to conclusions just yet. When #math.equation(block: false, alt: "ω equals the fraction n π a over L")[$ω = frac(n π a, L)$] for #math.equation(block: false, alt: "n")[$n$] even, then #math.equation(block: false, alt: "cos open parenthesis the fraction ω L over a close parenthesis equals 1")[$cos ( frac(ω L, a) ) = 1$] and hence we really get that #math.equation(block: false, alt: "B equals 0")[$B = 0$]. So resonance occurs only when both #math.equation(block: false, alt: "cos open parenthesis the fraction ω L over a close parenthesis equals minus 1")[$cos ( frac(ω L, a) ) = − 1$] and #math.equation(block: false, alt: "sin open parenthesis the fraction ω L over a close parenthesis equals 0")[$sin ( frac(ω L, a) ) = 0$]. That is when #math.equation(block: false, alt: "ω equals the fraction n π a over L")[$ω = frac(n π a, L)$] for odd #math.equation(block: false, alt: "n")[$n$]. The steady periodic shape X(x) of the forced string at t = 0, built from this section's worked example — F₀ = 1, L = 1, a = 1 — with its ω = 1 promoted to a slider. The dashed curve is the steady deflection x(1−x)/2 the string would hold under a constant load; drag ω down to 0.2 and X settles onto it. Drag upward instead and at ω = π the curve flies clean off the frame: resonance. Carry on to 2π, where sin(ωL/a) vanishes exactly as it did at π, and nothing happens — cos(ωL/a) = 1 there kills the numerator too, so the shape passes smoothly through as a shallow dip. 3π blows up again; 4π is quiet again. Resonance really does strike only at odd multiples of πa/L. {"functions":\[{"color":"\#1f4e79","domain":\[0,1\],"expression":"(1/w^2)\*(cos(w\*x) - ((cos(w)-1)/sin(w))\*sin(w\*x) - 1)","expression2":"","id":"steady-shape","inequality":"lt","lineDash":\[\],"lineWidth":2.5,"mode":"cartesian","tMax":10,"tMin":-10,"variable":"x","visible":true},{"color":"\#6b3fa0","domain":\[0,1\],"expression":"x\*(1-x)/2","expression2":"","id":"static-sag","inequality":"lt","lineDash":\[6,4\],"lineWidth":1.5,"mode":"cartesian","tMax":10,"tMin":-10,"variable":"x","visible":true}\],"grid":{"axisColor":"\#333333","gridColor":"\#cccccc","majorSpacing":0.1,"minorGridColor":"\#eeeeee","showAxes":true,"showLabels":true},"parameters":\[{"id":"param-w","label":"Forcing frequency \\u03c9","max":13,"min":0.2,"name":"w","step":0.02,"unit":"rad/s","value":1}\],"title":"Forced string: steady periodic shape vs \\u03c9","version":1,"viewport":{"centerX":0.5,"centerY":0,"scale":620}} We could again solve for the resonance solution if we wanted to, but it is, in the right sense, the limit of the solutions as #math.equation(block: false, alt: "ω")[$ω$] gets close to a resonance frequency. In real life, pure resonance never occurs anyway. The above calculation explains why a string will begin to vibrate if the identical string is plucked close by. In the absence of friction this vibration would get louder and louder as time goes on. On the other hand, you are unlikely to get large vibration if the forcing frequency is not close to a resonance frequency even if you have a jet engine running close to the string. That is, the amplitude will not keep increasing unless you tune to just the right frequency. Similar resonance phenomena occur when you break a wine glass using human voice (yes this is possible, but not easy#math.equation(block: false, alt: "to the power 1")[$1$]) if you happen to hit just the right frequency. Remember a glass has much purer sound, i.e. it is more like a vibraphone, so there are far fewer resonance frequencies to hit. When the forcing function is more complicated, you decompose it in terms of the Fourier series and apply the above result. You may also need to solve the above problem if the forcing function is a sine rather than a cosine, but if you think about it, the solution is almost the same. #examplebox("Example 1")[][ Let us do the computation for specific values. Suppose #math.equation(block: false, alt: "F sub 0 equals 1")[$F_(0) = 1$] and #math.equation(block: false, alt: "ω equals 1")[$ω = 1$] and #math.equation(block: false, alt: "L equals 1")[$L = 1$] and #math.equation(block: false, alt: "a equals 1")[$a = 1$]. Then #math.equation(block: true, alt: "y sub p open parenthesis x , t close parenthesis equals open parenthesis cos open parenthesis x close parenthesis minus the fraction cos open parenthesis 1 close parenthesis minus 1 over sin open parenthesis 1 close parenthesis sin open parenthesis x close parenthesis minus 1 close parenthesis cos open parenthesis t close parenthesis .")[$y_(p) ( x , t ) = ( cos ( x ) − frac(cos ( 1 ) − 1, sin ( 1 )) sin ( x ) − 1 ) cos ( t ) .$] Write #math.equation(block: false, alt: "B equals the fraction cos open parenthesis 1 close parenthesis minus 1 over sin open parenthesis 1 close parenthesis")[$B = frac(cos ( 1 ) − 1, sin ( 1 ))$] for simplicity. Then plug in #math.equation(block: false, alt: "t equals 0")[$t = 0$] to get #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals minus y sub p open parenthesis x , 0 close parenthesis equals minus cos x plus B sin x plus 1 ,")[$f ( x ) = − y_(p) ( x , 0 ) = − cos x + B sin x + 1 ,$] and after differentiating in #math.equation(block: false, alt: "t")[$t$] we see that #math.equation(block: false, alt: "g open parenthesis x close parenthesis equals minus the fraction ∂ y sub P over ∂ t open parenthesis x , 0 close parenthesis equals 0")[$g ( x ) = − frac(∂ y_(P), ∂ t) ( x , 0 ) = 0$]. Hence to find #math.equation(block: false, alt: "y sub c")[$y_(c)$] we need to solve the problem #math.equation(block: true, alt: "y sub t t equals y sub x x ,; y open parenthesis 0 , t close parenthesis equals 0 , y open parenthesis 1 , t close parenthesis equals 0 ,; y open parenthesis x , 0 close parenthesis equals minus cos x plus B sin x plus 1 ,; y sub t open parenthesis x , 0 close parenthesis equals 0 .")[$y_(t t) = y_(x x) , \ y ( 0 , t ) = 0 , #h(1em) y ( 1 , t ) = 0 , \ y ( x , 0 ) = − cos x + B sin x + 1 , \ y_(t) ( x , 0 ) = 0 .$] Note that the formula that we use to define #math.equation(block: false, alt: "y open parenthesis x , 0 close parenthesis")[$y ( x , 0 )$] is not odd, hence it is not a simple matter of plugging in to apply the D’Alembert formula directly! You must define #math.equation(block: false, alt: "F")[$F$] to be the odd, 2-periodic extension of #math.equation(block: false, alt: "y open parenthesis x , 0 close parenthesis")[$y ( x , 0 )$]. Then our solution would look like #math.equation(block: true, alt: "y open parenthesis x , t close parenthesis equals the fraction F open parenthesis x plus t close parenthesis plus F open parenthesis x minus t close parenthesis over 2 plus open parenthesis cos open parenthesis x close parenthesis minus the fraction cos open parenthesis 1 close parenthesis minus 1 over sin open parenthesis 1 close parenthesis sin open parenthesis x close parenthesis minus 1 close parenthesis cos open parenthesis t close parenthesis .")[$y ( x , t ) = frac(F ( x + t ) + F ( x − t ), 2) + ( cos ( x ) − frac(cos ( 1 ) − 1, sin ( 1 )) sin ( x ) − 1 ) cos ( t ) .$] #figure(figph[Plot of the surface in R^3], alt: "Plot of the surface in R^3", caption: [Figure #math.equation(block: false, alt: "2")[$2$]: Plot of #math.equation(block: false, alt: "y open parenthesis x , t close parenthesis equals the fraction F open parenthesis x plus t close parenthesis plus F open parenthesis x minus t close parenthesis over 2 plus open parenthesis cos open parenthesis x close parenthesis minus the fraction cos open parenthesis 1 close parenthesis minus 1 over sin open parenthesis 1 close parenthesis sin open parenthesis x close parenthesis minus 1 close parenthesis cos open parenthesis t close parenthesis")[$y ( x , t ) = frac(F ( x + t ) + F ( x − t ), 2) + ( cos ( x ) − frac(cos ( 1 ) − 1, sin ( 1 )) sin ( x ) − 1 ) cos ( t )$].]) ] It is not hard to compute specific values for an odd extension of a function and hence (5.3.5) is a wonderful solution to the problem. For example it is very easy to have a computer do it, unlike a series solution. A plot is given in Figure #math.equation(block: false, alt: "2")[$2$]. === Underground Temperature Oscillations Let #math.equation(block: false, alt: "u open parenthesis x , t close parenthesis")[$u ( x , t )$] be the temperature at a certain location at depth #math.equation(block: false, alt: "x")[$x$] underground at time #math.equation(block: false, alt: "t")[$t$]. See Figure #math.equation(block: false, alt: "3")[$3$]. The temperature #math.equation(block: false, alt: "u")[$u$] satisfies the heat equation #math.equation(block: false, alt: "u sub t equals k u sub x x")[$u_(t) = k u_(x x)$], where #math.equation(block: false, alt: "k")[$k$] is the diffusivity of the soil. We know the temperature at the surface #math.equation(block: false, alt: "u open parenthesis 0 , t close parenthesis")[$u ( 0 , t )$] from weather records. Let us assume for simplicity that #math.equation(block: true, alt: "u open parenthesis 0 , t close parenthesis equals T sub 0 plus A sub 0 cos open parenthesis ω t close parenthesis ,")[$u ( 0 , t ) = T_(0) + A_(0) cos ( ω t ) ,$] where #math.equation(block: false, alt: "T sub 0")[$T_(0)$] is the yearly mean temperature, and #math.equation(block: false, alt: "t equals 0")[$t = 0$] is midsummer (you can put negative sign above to make it midwinter if you wish). #math.equation(block: false, alt: "A sub 0")[$A_(0)$] gives the typical variation for the year. That is, the hottest temperature is #math.equation(block: false, alt: "T sub 0 plus A sub 0")[$T_(0) + A_(0)$] and the coldest is #math.equation(block: false, alt: "T sub 0 minus A sub 0")[$T_(0) − A_(0)$]. For simplicity, we will assume that #math.equation(block: false, alt: "T sub 0 equals 0")[$T_(0) = 0$]. The frequency #math.equation(block: false, alt: "ω")[$ω$] is picked depending on the units of #math.equation(block: false, alt: "t")[$t$], such that when #math.equation(block: false, alt: "t equals 1")[$t = 1$], then #math.equation(block: false, alt: "ω t equals 2 π")[$ω t = 2 π$]. For example if #math.equation(block: false, alt: "t")[$t$] is in years, then #math.equation(block: false, alt: "ω equals 2 π")[$ω = 2 π$]. It seems reasonable that the temperature at depth #math.equation(block: false, alt: "x")[$x$] will also oscillate with the same frequency. This, in fact, will be the steady periodic solution, independent of the initial conditions. So we are looking for a solution of the form #math.equation(block: true, alt: "u open parenthesis x , t close parenthesis equals V open parenthesis x close parenthesis cos open parenthesis ω t close parenthesis plus W open parenthesis x close parenthesis sin open parenthesis ω t close parenthesis .")[$u ( x , t ) = V ( x ) cos ( ω t ) + W ( x ) sin ( ω t ) .$] for the problem #math.equation(block: true, alt: "u sub t equals k u sub x x , u open parenthesis 0 , t close parenthesis equals A sub 0 cos open parenthesis ω t close parenthesis .")[$u_(t) = k u_(x x ,) " " " " " " " " " " " " u ( 0 , t ) = A_(0) cos ( ω t ) .$] We will employ the complex exponential here to make calculations simpler. Suppose we have a complex valued function #math.equation(block: true, alt: "h open parenthesis x , t close parenthesis equals X open parenthesis x close parenthesis e to the power i ω t .")[$h ( x , t ) = X ( x ) e^(i ω t) .$] We will look for an #math.equation(block: false, alt: "h")[$h$] such that #math.equation(block: false, alt: "R e h equals u")[$upright(R) upright(e) h = u$]. To find an #math.equation(block: false, alt: "h")[$h$], whose real part satisfies (5.3.6), we look for an #math.equation(block: false, alt: "h")[$h$] such that #math.equation(block: true, alt: "h sub t equals k h sub x x , h open parenthesis 0 , t close parenthesis equals A sub 0 e to the power i ω t .")[$h_(t) = k h_(x x ,) " " " " " " " " " " " " h ( 0 , t ) = A_(0) e^(i ω t) .$] #notebox("Your Turn", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Suppose #math.equation(block: false, alt: "h")[$h$] satisfies (5.3.7). Use #link("http://www.jirka.org/diffyqs/htmlver/diffyqsse13.html#x18-42005r2")[Euler’s formula] for the complex exponential to check that #math.equation(block: false, alt: "u equals R e h")[$u = upright(R) upright(e) #h(0.222em) h$] satisfies (5.3.6). ] Substitute #math.equation(block: false, alt: "h")[$h$] into (5.3.7). #math.equation(block: true, alt: "i ω X e to the power i ω t equals k X double prime e to the power i ω t .")[$i ω X e^(i ω t) = k X^(″) e^(i ω t) .$] Hence, #math.equation(block: true, alt: "k X double prime minus i ω X equals 0 ,")[$k X^(″) − i ω X = 0 ,$] or #math.equation(block: true, alt: "X double prime minus α squared X equals 0 ,")[$X^(″) − α^(2) X = 0 ,$] where #math.equation(block: false, alt: "α equals ± the square root of the fraction i ω over k")[$α = ± sqrt(frac(i ω, k))$]. Note that #math.equation(block: false, alt: "± the square root of i equals ± the fraction 1 equals i over the square root of 2")[$± sqrt(i) = ± frac(1 = i, sqrt(2))$] so you could simplify to #math.equation(block: false, alt: "α equals ± open parenthesis 1 plus i close parenthesis the square root of the fraction ω over 2 k")[$α = ± ( 1 + i ) sqrt(frac(ω, 2 k))$]. Hence the general solution is #math.equation(block: true, alt: "X open parenthesis x close parenthesis equals A e to the power minus open parenthesis 1 plus i close parenthesis the square root of the fraction ω over 2 k x plus B e to the power open parenthesis 1 plus i close parenthesis the square root of the fraction ω over 2 k x .")[$X ( x ) = A e^(− ( 1 + i ) sqrt(frac(ω, 2 k) x)) + B e^(( 1 + i ) sqrt(frac(ω, 2 k) x)) .$] We assume that an #math.equation(block: false, alt: "X open parenthesis x close parenthesis")[$X ( x )$] that solves the problem must be bounded as #math.equation(block: false, alt: "x → infinity")[$x → ∞$] since #math.equation(block: false, alt: "u open parenthesis x , t close parenthesis")[$u ( x , t )$] should be bounded (we are not worrying about the earth core!). If you use #link("http://www.jirka.org/diffyqs/htmlver/diffyqsse13.html#x18-42005r2")[Euler’s formula] to expand the complex exponentials, you will note that the second term will be unbounded (if #math.equation(block: false, alt: "B not equal to 0")[$B ≠ 0$]), while the first term is always bounded. Hence #math.equation(block: false, alt: "B equals 0")[$B = 0$]. #notebox("Your Turn", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Use #link("http://www.jirka.org/diffyqs/htmlver/diffyqsse13.html#x18-42005r2")[Euler’s formula] to show that #math.equation(block: false, alt: "e to the power open parenthesis 1 plus i close parenthesis the square root of the fraction ω over 2 k x")[$e^(( 1 + i ) sqrt(frac(ω, 2 k) x))$] is unbounded as #math.equation(block: false, alt: "x → infinity")[$x → ∞$], while #math.equation(block: false, alt: "e to the power minus open parenthesis 1 plus i close parenthesis the square root of the fraction ω over 2 k x")[$e^(− ( 1 + i ) sqrt(frac(ω, 2 k) x))$] is bounded as #math.equation(block: false, alt: "x → infinity")[$x → ∞$]. ] Furthermore, #math.equation(block: false, alt: "X open parenthesis 0 close parenthesis equals A sub 0")[$X ( 0 ) = A_(0)$] since #math.equation(block: false, alt: "h open parenthesis 0 , t close parenthesis equals A sub 0 e to the power i ω t")[$h ( 0 , t ) = A_(0) e^(i ω t)$]. Thus #math.equation(block: false, alt: "A equals A sub 0")[$A = A_(0)$]. This means that #math.equation(block: true, alt: "h open parenthesis x , t close parenthesis equals A sub 0 e to the power minus open parenthesis 1 plus i close parenthesis the square root of the fraction ω over 2 k x e to the power i ω t equals A sub 0 e to the power minus open parenthesis 1 plus i close parenthesis the square root of the fraction ω over 2 k x plus i ω t equals A sub 0 e to the power minus the square root of the fraction ω over 2 k x e to the power i open parenthesis ω t minus the square root of the fraction ω over 2 k x close parenthesis .")[$h ( x , t ) = A_(0) e^(− ( 1 + i ) sqrt(frac(ω, 2 k) x)) e^(i ω t) = A_(0) e^(− ( 1 + i ) sqrt(frac(ω, 2 k)) x + i ω t) = A_(0) e^(− sqrt(frac(ω, 2 k)) x) e^(i ( ω t − sqrt(frac(ω, 2 k)) x )) .$] We will need to get the real part of #math.equation(block: false, alt: "h")[$h$], so we apply #link("http://www.jirka.org/diffyqs/htmlver/diffyqsse13.html#x18-42005r2")[Euler’s formula] to get #math.equation(block: true, alt: "h open parenthesis x , t close parenthesis equals A sub 0 e to the power minus the square root of the fraction ω over 2 k x open parenthesis cos open parenthesis ω t minus the square root of the fraction ω over 2 k x close parenthesis plus i sin open parenthesis ω t minus the square root of the fraction ω over 2 k x close parenthesis close parenthesis .")[$h ( x , t ) = A_(0) e^(− sqrt(frac(ω, 2 k)) x) ( cos ( ω t − sqrt(frac(ω, 2 k) x) ) + i sin ( ω t − sqrt(frac(ω, 2 k) x) ) ) .$] Then finally #math.equation(block: true, alt: "u open parenthesis x , t close parenthesis equals R e h open parenthesis x , t close parenthesis equals A sub 0 e to the power minus the square root of the fraction ω over 2 k x cos open parenthesis ω t minus the square root of the fraction ω over 2 k x close parenthesis .")[$u ( x , t ) = upright(R) upright(e) h ( x , t ) = A_(0) e^(− sqrt(frac(ω, 2 k)) x) cos ( ω t − sqrt(frac(ω, 2 k)) x ) .$] Yay! Notice the phase is different at different depths. At depth the phase is delayed by #math.equation(block: false, alt: "x the square root of the fraction ω over 2 k")[$x sqrt(frac(ω, 2 k))$]. For example in cgs units (centimeters-grams-seconds) we have #math.equation(block: false, alt: "k equals 0.005")[$k = 0.005$] (typical value for soil), #math.equation(block: false, alt: "ω equals the fraction 2 π over seconds in a year equals the fraction 2 π over 31 , 557 , 341 approximately equals 1.99 times 10 to the power minus 7")[$ω = frac(2 π, "seconds in a year") = frac(2 π, 31 "," 557 "," 341) ≈ 1.99 × 10^(− 7)$]. Then if we compute where the phase shift #math.equation(block: false, alt: "x the square root of the fraction ω over 2 k equals π")[$x sqrt(frac(ω, 2 k)) = π$] we find the depth in centimeters where the seasons are reversed. That is, we get the depth at which summer is the coldest and winter is the warmest. We get approximately #math.equation(block: false, alt: "700")[$700$] centimeters, which is approximately #math.equation(block: false, alt: "23")[$23$] feet below ground. Be careful not to jump to conclusions. The temperature swings decay rapidly as you dig deeper. The amplitude of the temperature swings is #math.equation(block: false, alt: "A sub 0 e to the power minus the square root of the fraction ω over 2 k x")[$A_(0) e^(− sqrt(frac(ω, 2 k)) x)$]. This function decays very quickly as #math.equation(block: false, alt: "x")[$x$] (the depth) grows. Let us again take typical parameters as above. We will also assume that our surface temperature swing is #math.equation(block: false, alt: "± 15 degrees")[$± 15^(∘)$] Celsius, that is, #math.equation(block: false, alt: "A sub 0 equals 15")[$A_(0) = 15$]. Then the maximum temperature variation at #math.equation(block: false, alt: "700")[$700$] centimeters is only #math.equation(block: false, alt: "± 0.66 degrees")[$± 0.66^(∘)$] Celsius. The section's own solution — a surface swing of A₀ = 15 °C damped and phase-shifted by √(ω/2k) — plotted against depth in feet with the book's soil value k = 0.005, giving a decay constant of 0.136 per foot. Drag the time-of-year slider from midsummer (ωt = 0) to midwinter (ωt = π) and watch the warm band march downward: past about 12 ft the ground already sits on the opposite side of the axis from the surface, reaching full reversal near 23 ft — the flipped season the text describes. The dashed envelope is the amplitude: it has collapsed to the book's ±0.66 °C by 23 ft and is indistinguishable from zero by 50 ft, which is why a wine cellar works. {"functions":\[{"color":"\#1f4e79","domain":\[0,51\],"expression":"15\*exp(-0.136\*x)\*cos(w - 0.136\*x)","expression2":"","id":"temp-profile","inequality":"lt","lineDash":\[\],"lineWidth":2.5,"mode":"cartesian","tMax":10,"tMin":-10,"variable":"x","visible":true},{"color":"\#b8442a","domain":\[0,51\],"expression":"15\*exp(-0.136\*x)","expression2":"","id":"envelope-upper","inequality":"lt","lineDash":\[6,4\],"lineWidth":1.5,"mode":"cartesian","tMax":10,"tMin":-10,"variable":"x","visible":true},{"color":"\#b8442a","domain":\[0,51\],"expression":"-15\*exp(-0.136\*x)","expression2":"","id":"envelope-lower","inequality":"lt","lineDash":\[6,4\],"lineWidth":1.5,"mode":"cartesian","tMax":10,"tMin":-10,"variable":"x","visible":true}\],"grid":{"axisColor":"\#333333","gridColor":"\#cccccc","majorSpacing":5,"minorGridColor":"\#eeeeee","showAxes":true,"showLabels":true},"parameters":\[{"id":"param-w","label":"Time of year (\\u03c9t)","max":6.2832,"min":0,"name":"w","step":0.02,"unit":"rad","value":0}\],"title":"Underground temperature vs depth","version":1,"viewport":{"centerX":24,"centerY":0,"scale":14.2}} You need not dig very deep to get an effective “refrigerator,” with nearly constant temperature. That is why wines are kept in a cellar; you need consistent temperature. The temperature differential could also be used for energy. A home could be heated or cooled by taking advantage of the above fact. Even without the earth core you could heat a home in the winter and cool it in the summer. The earth core makes the temperature higher the deeper you dig, although you need to dig somewhat deep to feel a difference. We did not take that into account above. === Footnotes \[1\] Mythbusters, episode 31, Discovery Channel, originally aired may 18th 2005.