#set document(title: "4.7 One Dimensional Wave Equation", 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.7#h(0.6em)One Dimensional Wave Equation Imagine we have a tensioned guitar string of length #math.equation(block: false, alt: "L")[$L$]. Suppose we only consider vibrations in one direction. That is, let #math.equation(block: false, alt: "x")[$x$] denote the position along the string, let #math.equation(block: false, alt: "t")[$t$] denote time, and let #math.equation(block: false, alt: "y")[$y$] denote the displacement of the string from the rest position. See Figure #math.equation(block: false, alt: "1")[$1$]. #figure(figph[Diagram of a vibrating string of length L over a faint guitar outline, pulled up into a sharp triangular peak at its midpoint, with an arrow there labelled y for displacement.], alt: "Diagram of a vibrating string of length L over a faint guitar outline, pulled up into a sharp triangular peak at its midpoint, with an arrow there labelled y for displacement.", caption: [Figure #math.equation(block: false, alt: "1")[$1$]: Vibrating string of length #math.equation(block: false, alt: "L")[$L$], #math.equation(block: false, alt: "x")[$x$] is position, #math.equation(block: false, alt: "y")[$y$] is displacement.]) The equation that governs this setup is the so-called #emph[one-dimensional wave equation]: #math.equation(block: true, alt: "y sub t t equals a squared y sub x x ,")[$y_(t t) = a^(2) y_(x x) ,$] for some constant #math.equation(block: false, alt: "a greater than 0")[$a > 0$]. The intuition is similar to the heat equation, replacing velocity with acceleration: the acceleration at a specific point is proportional to the second derivative of the shape of the string. In other words when the string is concave down then #math.equation(block: false, alt: "u sub x x")[$u_(x x)$] is negative and the string wants to accelerate downwards, so #math.equation(block: false, alt: "u sub t t")[$u_(t t)$] should be negative. And vice versa. The wave equation is an example of a hyperbolic PDE. Assume that the ends of the string are fixed in place: #math.equation(block: true, alt: "y open parenthesis 0 , t close parenthesis equals 0 and y open parenthesis L , t close parenthesis equals 0 .")[$y ( 0 , t ) = 0 #h(1em) "and" #h(1em) y ( L , t ) = 0 .$] Note that we have two conditions along the #math.equation(block: false, alt: "x")[$x$] axis as there are two derivatives in the #math.equation(block: false, alt: "x")[$x$] direction. There are also two derivatives along the #math.equation(block: false, alt: "t")[$t$] direction and hence we need two further conditions here. We need to know the initial position and the initial velocity of the string. That is, for some known functions #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$] and #math.equation(block: false, alt: "g open parenthesis x close parenthesis")[$g ( x )$], we impose #math.equation(block: true, alt: "y open parenthesis x , 0 close parenthesis equals f open parenthesis x close parenthesis and y sub t open parenthesis x , 0 close parenthesis equals g open parenthesis x close parenthesis .")[$y ( x , 0 ) = f ( x ) #h(1em) "and" #h(1em) y_(t) ( x , 0 ) = g ( x ) .$] As the equation is again linear, superposition works just as it did for the heat equation. And again we will use separation of variables to find enough building-block solutions to get the overall solution. There is one change however. It will be easier to solve two separate problems and add their solutions. The two problems we will solve are #math.equation(block: true, alt: "w sub t t equals a squared w sub x x ,; w open parenthesis 0 , t close parenthesis equals w open parenthesis L , t close parenthesis equals 0 ,; w open parenthesis x , 0 close parenthesis equals 0 for 0 less than x less than L ,; w sub t open parenthesis x , 0 close parenthesis equals g open parenthesis x close parenthesis for 0 less than x less than L ,")[$w_(t t) = a^(2) w_(x x) , \ w ( 0 , t ) = w ( L , t ) = 0 , \ w ( x , 0 ) = 0 #h(2em) "for " #h(0.278em) 0 < x < L , \ w_(t) ( x , 0 ) = g ( x ) #h(2em) "for " #h(0.278em) 0 < x < L ,$] and #math.equation(block: true, alt: "z sub t t equals a squared z sub x x ,; z open parenthesis 0 , t close parenthesis equals z open parenthesis L , t close parenthesis equals 0 ,; z open parenthesis x , 0 close parenthesis equals f open parenthesis x close parenthesis for 0 less than x less than L ,; z sub t open parenthesis x , 0 close parenthesis equals 0 for 0 less than x less than L .")[$z_(t t) = a^(2) z_(x x) , \ z ( 0 , t ) = z ( L , t ) = 0 , \ z ( x , 0 ) = f ( x ) #h(2em) "for " #h(0.278em) 0 < x < L , \ z_(t) ( x , 0 ) = 0 #h(2em) "for " #h(0.278em) 0 < x < L .$] The principle of superposition implies that #math.equation(block: false, alt: "y equals w plus z")[$y = w + z$] solves the wave equation and furthermore #math.equation(block: false, alt: "y open parenthesis x , 0 close parenthesis equals w open parenthesis x , 0 close parenthesis plus z open parenthesis x , 0 close parenthesis equals f open parenthesis x close parenthesis")[$y ( x , 0 ) = w ( x , 0 ) + z ( x , 0 ) = f ( x )$] and #math.equation(block: false, alt: "y sub t open parenthesis x , 0 close parenthesis equals w sub t open parenthesis x , 0 close parenthesis plus z sub t open parenthesis x , 0 close parenthesis equals g open parenthesis x close parenthesis")[$y_(t) ( x , 0 ) = w_(t) ( x , 0 ) + z_(t) ( x , 0 ) = g ( x )$]. Hence, #math.equation(block: false, alt: "y")[$y$] is a solution to #math.equation(block: true, alt: "y sub t t equals a squared y sub x x ,; y open parenthesis 0 , t close parenthesis equals y open parenthesis L , t close parenthesis equals 0 ,; y open parenthesis x , 0 close parenthesis equals f open parenthesis x close parenthesis for 0 less than x less than L ,; y sub t open parenthesis x , 0 close parenthesis equals g open parenthesis x close parenthesis for 0 less than x less than L .")[$y_(t t) = a^(2) y_(x x) , \ y ( 0 , t ) = y ( L , t ) = 0 , \ y ( x , 0 ) = f ( x ) #h(2em) "for " #h(0.278em) 0 < x < L , \ y_(t) ( x , 0 ) = g ( x ) #h(2em) "for " #h(0.278em) 0 < x < L .$] The reason for all this complexity is that superposition only works for homogeneous conditions such as #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$], #math.equation(block: false, alt: "y open parenthesis x , 0 close parenthesis equals 0")[$y ( x , 0 ) = 0$], or #math.equation(block: false, alt: "y sub t open parenthesis x , 0 close parenthesis equals 0")[$y_(t) ( x , 0 ) = 0$]. Therefore, we will be able to use the idea of separation of variables to find many building-block solutions solving all the homogeneous conditions. We can then use them to construct a solution solving the remaining nonhomogeneous condition. Let us start with (4.7.1). We try a solution of the form #math.equation(block: false, alt: "w open parenthesis x , t close parenthesis equals X open parenthesis x close parenthesis T open parenthesis t close parenthesis")[$w ( x , t ) = X ( x ) T ( t )$] again. We plug into the wave equation to obtain #math.equation(block: true, alt: "X open parenthesis x close parenthesis T double prime open parenthesis t close parenthesis equals a squared X double prime open parenthesis x close parenthesis T open parenthesis t close parenthesis .")[$X ( x ) T^(″) ( t ) = a^(2) X^(″) ( x ) T ( t ) .$] Rewriting we get #math.equation(block: true, alt: "the fraction T double prime open parenthesis t close parenthesis over a squared T open parenthesis t close parenthesis equals the fraction X double prime open parenthesis x close parenthesis over X open parenthesis x close parenthesis .")[$frac(T^(″) ( t ), a^(2) T ( t )) = frac(X^(″) ( x ), X ( x )) .$] Again, left hand side depends only on #math.equation(block: false, alt: "t")[$t$] and the right hand side depends only on #math.equation(block: false, alt: "x")[$x$]. Therefore, both equal a constant, which we will denote by #math.equation(block: false, alt: "minus λ")[$− λ$]. #math.equation(block: true, alt: "the fraction T double prime open parenthesis t close parenthesis over a squared T open parenthesis t close parenthesis equals minus λ equals the fraction X double prime open parenthesis x close parenthesis over X open parenthesis x close parenthesis .")[$frac(T^(″) ( t ), a^(2) T ( t )) = − λ = frac(X^(″) ( x ), X ( x )) .$] We solve to get two ordinary differential equations #math.equation(block: true, alt: "X double prime open parenthesis x close parenthesis plus λ X open parenthesis x close parenthesis equals 0 ,; T double prime open parenthesis t close parenthesis plus λ a squared T open parenthesis t close parenthesis equals 0 .")[$X^(″) ( x ) + λ X ( x ) = 0 , \ T^(″) ( t ) + λ a^(2) T ( t ) = 0 .$] The conditions #math.equation(block: false, alt: "0 equals w open parenthesis 0 , t close parenthesis equals X open parenthesis 0 close parenthesis T open parenthesis t close parenthesis")[$0 = w ( 0 , t ) = X ( 0 ) T ( t )$] implies #math.equation(block: false, alt: "X open parenthesis 0 close parenthesis equals 0")[$X ( 0 ) = 0$] and #math.equation(block: false, alt: "w open parenthesis L , t close parenthesis equals 0")[$w ( L , t ) = 0$] implies that #math.equation(block: false, alt: "X open parenthesis L close parenthesis equals 0")[$X ( L ) = 0$]. Therefore, the only nontrivial solutions for the first equation are when #math.equation(block: false, alt: "λ equals λ sub n equals the fraction n squared π squared over L squared")[$λ = λ_(n) = frac(n^(2) π^(2), L^(2))$] and they are #math.equation(block: true, alt: "X sub n open parenthesis x close parenthesis equals sin open parenthesis the fraction n π over L x close parenthesis .")[$X_(n) ( x ) = sin ( frac(n π, L) x ) .$] The general solution for #math.equation(block: false, alt: "T")[$T$] for this particular #math.equation(block: false, alt: "λ sub n")[$λ_(n)$] is #math.equation(block: true, alt: "T sub n open parenthesis t close parenthesis equals A cos open parenthesis the fraction n π a over L t close parenthesis plus B sin open parenthesis the fraction n π a over L t close parenthesis .")[$T_(n) ( t ) = A cos ( frac(n π a, L) t ) + B sin ( frac(n π a, L) t ) .$] We also have the condition that #math.equation(block: false, alt: "w open parenthesis x , 0 close parenthesis equals 0")[$w ( x , 0 ) = 0$] or #math.equation(block: false, alt: "X open parenthesis x close parenthesis T open parenthesis 0 close parenthesis equals 0")[$X ( x ) T ( 0 ) = 0$]. This implies that #math.equation(block: false, alt: "T open parenthesis 0 close parenthesis equals 0")[$T ( 0 ) = 0$], which in turn forces #math.equation(block: false, alt: "A equals 0")[$A = 0$]. It is convenient to pick #math.equation(block: false, alt: "B equals the fraction L over n π a")[$B = frac(L, n π a)$] (you will see why in a moment) and hence #math.equation(block: true, alt: "T sub n open parenthesis t close parenthesis equals the fraction L over n π a sin open parenthesis the fraction n π a over L t close parenthesis .")[$T_(n) ( t ) = frac(L, n π a) sin ( frac(n π a, L) t ) .$] Our building-block solutions are #math.equation(block: true, alt: "w sub n open parenthesis x , t close parenthesis equals the fraction L over n π a sin open parenthesis the fraction n π over L x close parenthesis sin open parenthesis the fraction n π a over L t close parenthesis .")[$w_(n) ( x , t ) = frac(L, n π a) sin ( frac(n π, L) x ) sin ( frac(n π a, L) t ) .$] We differentiate in #math.equation(block: false, alt: "t")[$t$], that is #math.equation(block: true, alt: "the fraction ∂ w sub n over ∂ t open parenthesis x , t close parenthesis equals sin open parenthesis the fraction n π over L x close parenthesis cos open parenthesis the fraction n π a over L t close parenthesis .")[$frac(∂ w_(n), ∂ t) ( x , t ) = sin ( frac(n π, L) x ) cos ( frac(n π a, L) t ) .$] Hence, #math.equation(block: true, alt: "the fraction ∂ w sub n over ∂ t open parenthesis x , 0 close parenthesis equals sin open parenthesis the fraction n π over L x close parenthesis .")[$frac(∂ w_(n), ∂ t) ( x , 0 ) = sin ( frac(n π, L) x ) .$] We expand #math.equation(block: false, alt: "g open parenthesis x close parenthesis")[$g ( x )$] in terms of these sines as #math.equation(block: true, alt: "g open parenthesis x close parenthesis equals ∑ n equals 1 infinity b sub n sin open parenthesis the fraction n π over L x close parenthesis .")[$g ( x ) = ∑_(n = 1)^(∞) b_(n) sin ( frac(n π, L) x ) .$] Using superposition we can just write down the solution to (4.7.1) as a series #math.equation(block: true, alt: "w open parenthesis x , t close parenthesis equals ∑ n equals 1 infinity b sub n w sub n open parenthesis x , t close parenthesis equals ∑ n equals 1 infinity b sub n the fraction L over n π a sin open parenthesis the fraction n π over L x close parenthesis sin open parenthesis the fraction n π a over L t close parenthesis .")[$w ( x , t ) = ∑_(n = 1)^(∞) b_(n) w_(n) ( x , t ) = ∑_(n = 1)^(∞) b_(n) frac(L, n π a) sin ( frac(n π, L) x ) sin ( frac(n π a, L) t ) .$] #notebox("Your Turn", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Check that #math.equation(block: false, alt: "w open parenthesis x , 0 close parenthesis equals 0")[$w ( x , 0 ) = 0$] and #math.equation(block: false, alt: "w sub t open parenthesis x , 0 close parenthesis equals g open parenthesis x close parenthesis")[$w_(t) ( x , 0 ) = g ( x )$]. ] Similarly we proceed to solve (4.7.2). We again try #math.equation(block: false, alt: "z open parenthesis x , y close parenthesis equals X open parenthesis x close parenthesis T open parenthesis t close parenthesis")[$z ( x , y ) = X ( x ) T ( t )$]. The procedure works exactly the same at first. We obtain #math.equation(block: true, alt: "X double prime open parenthesis x close parenthesis plus λ X open parenthesis x close parenthesis equals 0 ,; T double prime open parenthesis t close parenthesis plus λ a squared T open parenthesis t close parenthesis equals 0 .")[$X^(″) ( x ) + λ X ( x ) = 0 , \ T^(″) ( t ) + λ a^(2) T ( t ) = 0 .$] and the conditions #math.equation(block: false, alt: "X open parenthesis 0 close parenthesis equals 0")[$X ( 0 ) = 0$], #math.equation(block: false, alt: "X open parenthesis L close parenthesis equals 0")[$X ( L ) = 0$]. So again #math.equation(block: false, alt: "λ equals λ sub n equals the fraction n squared π squared over L squared")[$λ = λ_(n) = frac(n^(2) π^(2), L^(2))$] and #math.equation(block: true, alt: "X sub n open parenthesis x close parenthesis equals sin open parenthesis the fraction n π over L x close parenthesis .")[$X_(n) ( x ) = sin ( frac(n π, L) x ) .$] This time the condition on #math.equation(block: false, alt: "T")[$T$] is #math.equation(block: false, alt: "T prime open parenthesis 0 close parenthesis equals 0")[$T^(′) ( 0 ) = 0$]. Thus we get that #math.equation(block: false, alt: "B equals 0")[$B = 0$] and we take #math.equation(block: true, alt: "T sub n open parenthesis t close parenthesis equals cos open parenthesis the fraction n π a over L t close parenthesis .")[$T_(n) ( t ) = cos ( frac(n π a, L) t ) .$] Our building-block solution will be #math.equation(block: true, alt: "z sub n open parenthesis x , t close parenthesis equals sin open parenthesis the fraction n π over L x close parenthesis cos open parenthesis the fraction n π a over L t close parenthesis .")[$z_(n) ( x , t ) = sin ( frac(n π, L) x ) cos ( frac(n π a, L) t ) .$] As #math.equation(block: false, alt: "z sub n open parenthesis x , 0 close parenthesis equals sin open parenthesis the fraction n π over L x close parenthesis")[$z_(n) ( x , 0 ) = sin ( frac(n π, L) x )$], we expand #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$] in terms of these sines as #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals ∑ n equals 1 infinity c sub n sin open parenthesis the fraction n π over L x close parenthesis .")[$f ( x ) = ∑_(n = 1)^(∞) c_(n) sin ( frac(n π, L) x ) .$] And we write down the solution to (4.7.2) as a series #math.equation(block: true, alt: "z open parenthesis x , t close parenthesis equals ∑ n equals 1 infinity c sub n z sub n open parenthesis x , t close parenthesis equals ∑ n equals 1 infinity c sub n sin open parenthesis the fraction n π over L x close parenthesis cos open parenthesis the fraction n π a over L t close parenthesis .")[$z ( x , t ) = ∑_(n = 1)^(∞) c_(n) z_(n) ( x , t ) = ∑_(n = 1)^(∞) c_(n) sin ( frac(n π, L) x ) cos ( frac(n π a, L) t ) .$] #notebox("Your Turn", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Fill in the details in the derivation of the solution of (4.7.2). Check that the solution satisfies all the side conditions. ] Putting these two solutions together, let us state the result as a theorem. #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Take the equation #math.equation(block: true, alt: "y sub t t equals a squared y sub x x ,; y open parenthesis 0 , t close parenthesis equals y open parenthesis L , t close parenthesis equals 0 ,; y open parenthesis x , 0 close parenthesis equals f open parenthesis x close parenthesis for 0 less than x less than L ,; y sub t open parenthesis x , 0 close parenthesis equals g open parenthesis x close parenthesis for 0 less than x less than L ,")[$y_(t t) = a^(2) y_(x x) , \ y ( 0 , t ) = y ( L , t ) = 0 , \ y ( x , 0 ) = f ( x ) #h(2em) "for " #h(0.278em) 0 < x < L , \ y_(t) ( x , 0 ) = g ( x ) #h(2em) "for " #h(0.278em) 0 < x < L ,$] where #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals ∑ n equals 1 infinity c sub n sin open parenthesis the fraction n π over L x close parenthesis ,")[$f ( x ) = ∑_(n = 1)^(∞) c_(n) sin ( frac(n π, L) x ) ,$] and #math.equation(block: true, alt: "g open parenthesis x close parenthesis equals ∑ n equals 1 infinity b sub n sin open parenthesis the fraction n π over L x close parenthesis .")[$g ( x ) = ∑_(n = 1)^(∞) b_(n) sin ( frac(n π, L) x ) .$] Then the solution #math.equation(block: false, alt: "y open parenthesis x , t close parenthesis")[$y ( x , t )$] can be written as a sum of the solutions of (4.7.4) and (4.7.5). In other words, #math.equation(block: true, alt: "y open parenthesis x , t close parenthesis equals ∑ n equals 1 infinity b sub n the fraction L over n π a sin open parenthesis the fraction n π over L x close parenthesis sin open parenthesis the fraction n π a over L t close parenthesis plus c sub n sin open parenthesis the fraction n π over L x close parenthesis cos open parenthesis the fraction n π a over L t close parenthesis; equals ∑ n equals 1 infinity sin open parenthesis the fraction n π over L x close parenthesis [ b sub n the fraction L over n π a sin open parenthesis the fraction n π a over L t close parenthesis plus c sub n cos open parenthesis the fraction n π a over L t close parenthesis ] .")[$y ( x , t ) = ∑_(n = 1)^(∞) b_(n) frac(L, n π a) sin ( frac(n π, L) x ) sin ( frac(n π a, L) t ) + c_(n) sin ( frac(n π, L) x ) cos ( frac(n π a, L) t ) \ = ∑_(n = 1)^(∞) sin ( frac(n π, L) x ) [ b_(n) frac(L, n π a) sin ( frac(n π a, L) t ) + c_(n) cos ( frac(n π a, L) t ) ] .$] ] #examplebox("Example 1")[][ Let us try a simple example of a plucked string. Suppose that a string of length 2 is plucked in the middle such that it has the initial shape given in Figure #math.equation(block: false, alt: "2")[$2$]. That is #math.equation(block: true, alt: "0.1 x i f 0 less than or equal to x less than or equal to 1 ,; 0.1 open parenthesis 2 minus x close parenthesis i f 1 less than x less than or equal to 2")[$0.1 x upright(i) upright(f) " " 0 ≤ x ≤ 1 , \ 0.1 ( 2 − x ) upright(i) upright(f) " " 1 < x ≤ 2$] #figure(figph[Plot of the initial shape of a plucked string: a tent of two straight segments rising from 0 at the origin to a sharp corner at height 0.1 at x equals 1, then back to 0 at x equals 2.], alt: "Plot of the initial shape of a plucked string: a tent of two straight segments rising from 0 at the origin to a sharp corner at height 0.1 at x equals 1, then back to 0 at x equals 2.", caption: [Figure #math.equation(block: false, alt: "2")[$2$]: Initial shape of a plucked string from Example #math.equation(block: false, alt: "1")[$1$].]) The string starts at rest (#math.equation(block: false, alt: "g open parenthesis x close parenthesis equals 0")[$g ( x ) = 0$]). Suppose that #math.equation(block: false, alt: "a equals 1")[$a = 1$] in the wave equation for simplicity. In other words, we wish 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 y open parenthesis 2 , t close parenthesis equals 0 ,; y open parenthesis x , 0 close parenthesis equals f open parenthesis x close parenthesis and y sub t open parenthesis x , 0 close parenthesis equals 0 .")[$y_(t t) = y_(x x) , \ y ( 0 , t ) = y ( 2 , t ) = 0 , \ y ( x , 0 ) = f ( x ) #h(1em) "and" #h(1em) y_(t) ( x , 0 ) = 0 .$] We leave it to the reader to compute the sine series of #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$]. The series will be #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals ∑ n equals 1 infinity the fraction 0.8 over n squared π squared sin open parenthesis the fraction n π over 2 close parenthesis sin open parenthesis the fraction n π over 2 x close parenthesis .")[$f ( x ) = ∑_(n = 1)^(∞) frac(0.8, n^(2) π^(2)) sin ( frac(n π, 2) ) sin ( frac(n π, 2) x ) .$] Note that #math.equation(block: false, alt: "sin open parenthesis the fraction n π over 2 close parenthesis")[$sin ( frac(n π, 2) )$] is the sequence #math.equation(block: false, alt: "1 , 0 , minus 1 , 0 , 1 , 0 , minus 1 , …")[$1 , 0 , − 1 , 0 , 1 , 0 , − 1 , …$] for #math.equation(block: false, alt: "n equals 1 , 2 , 3 , 4 , …")[$n = 1 , 2 , 3 , 4 , …$]. Therefore, #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals the fraction 0.8 over π squared sin open parenthesis the fraction π over 2 x close parenthesis minus the fraction 0.8 over 9 π squared sin open parenthesis the fraction 3 π over 2 x close parenthesis plus the fraction 0.8 over 25 π squared sin open parenthesis the fraction 5 π over 2 x close parenthesis minus ⋯")[$f ( x ) = frac(0.8, π^(2)) sin ( frac(π, 2) x ) − frac(0.8, 9 π^(2)) sin ( frac(3 π, 2) x ) + frac(0.8, 25 π^(2)) sin ( frac(5 π, 2) x ) − ⋯$] The solution #math.equation(block: false, alt: "y open parenthesis x , t close parenthesis")[$y ( x , t )$] is given by #math.equation(block: true, alt: "y open parenthesis x , t close parenthesis equals ∑ n equals 1 infinity the fraction 0.8 over n squared π squared sin open parenthesis the fraction n π over 2 close parenthesis sin open parenthesis the fraction n π over 2 x close parenthesis cos open parenthesis the fraction n π over 2 t close parenthesis; equals ∑ m equals 1 infinity the fraction 0.8 open parenthesis minus 1 close parenthesis to the power m plus 1 over open parenthesis 2 m minus 1 close parenthesis squared π squared sin open parenthesis the fraction open parenthesis 2 m minus 1 close parenthesis π over 2 x close parenthesis cos open parenthesis the fraction open parenthesis 2 m minus 1 close parenthesis π over 2 t close parenthesis; equals the fraction 0.8 over π squared sin open parenthesis the fraction π over 2 x close")[$y ( x , t ) = ∑_(n = 1)^(∞) frac(0.8, n^(2) π^(2)) sin ( frac(n π, 2) ) sin ( frac(n π, 2) x ) cos ( frac(n π, 2) t ) \ = ∑_(m = 1)^(∞) frac(0.8 attach(( − 1 ), t: m + 1), attach(( 2 m − 1 ), t: 2) π^(2)) sin ( frac(( 2 m − 1 ) π, 2) x ) cos ( frac(( 2 m − 1 ) π, 2) t ) \ = frac(0.8, π^(2)) sin ( frac(π, 2) x ) cos ( frac(π, 2) t ) − frac(0.8, 9 π^(2)) sin ( frac(3 π, 2) x ) cos ( frac(3 π, 2) t ) \ + frac(0.8, 25 π^(2)) sin ( frac(5 π, 2) x ) cos ( frac(5 π, 2) t ) − ⋯$] See Figure #math.equation(block: false, alt: "3")[$3$] for a plot for #math.equation(block: false, alt: "0 less than t less than 3")[$0 < t < 3$]. Notice that unlike the heat equation, the solution does not become "smoother," the "sharp edges" remain. We will see the reason for this behavior in the next section where we derive the solution to the wave equation in a different way. The displacement surface u(x, t) = cos(2 n t) sin(n x) for a standing mode of the string, time along the second axis. Contrast with the heat surface in 4.6: the wave carries its shape forever - the amplitude never decays, it only oscillates. Higher modes oscillate faster in both x and t. {"camera":{"fov":50,"position":\[4.8,5.8,3.2\],"projection":"perspective","target":\[1.6,1.5,0.0\]},"id":"lebl-wave-mode-surface","metadata":{"alt\_text":"A 3D surface of one standing wave mode u(x,t) = cos(2 n t) sin(n x), x from 0 to pi along the string and time t from 0 to 3 on the second axis. The surface is a corrugated sheet: sinusoidal humps in x that flip up and down periodically in t without ever shrinking - unlike the heat equation there is no decay. Raising the mode-number slider adds more humps and faster oscillation."},"objects":\[{"id":"lebl-wave-mode-surface-p-a","kind":"parameter","label":{"text":"mode number n","visible":true},"max":5,"min":1,"name":"a","step":1,"value":1,"visible":true},{"expression":"cos(2\*a\*y)\*sin(a\*x)","id":"lebl-wave-mode-surface-s","kind":"explicit-surface","label":{"text":"u(x,t), t along the y-axis","visible":true},"resolution":96,"style":{"colormap":"viridis","doubleSided":true,"opacity":1,"wireframe":false,"wireframeColor":"\#000000"},"visible":true,"xDomain":\[0,3.14159\],"yDomain":\[0,3\]}\],"title":"Wave equation mode: u(x,t) = cos(2 n t) sin(n x)","version":1} #figure(figph[Three-dimensional surface of string displacement over x from 0 to 2 and time 0 to 3. The tent of height 0.1 sinks to flat at t equals 1, to a trough about 0.1 deep at t equals 2, then back to flat by t equals 3, ends pinned at zero.], alt: "Three-dimensional surface of string displacement over x from 0 to 2 and time 0 to 3. The tent of height 0.1 sinks to flat at t equals 1, to a trough about 0.1 deep at t equals 2, then back to flat by t equals 3, ends pinned at zero.", caption: [Figure #math.equation(block: false, alt: "3")[$3$]: Shape of the plucked string for #math.equation(block: false, alt: "0 less than t less than 3")[$0 < t < 3$].]) Make sure you understand what the plot, such as the one in the figure, is telling you. For each fixed #math.equation(block: false, alt: "t")[$t$], you can think of the function #math.equation(block: false, alt: "y open parenthesis x , t close parenthesis")[$y ( x , t )$] as just a function of #math.equation(block: false, alt: "x")[$x$]. This function gives you the shape of the string at time #math.equation(block: false, alt: "t")[$t$]. See Figure #math.equation(block: false, alt: "4")[$4$] for plots of at #math.equation(block: false, alt: "y")[$y$] as a function of #math.equation(block: false, alt: "x")[$x$] at several different values of #math.equation(block: false, alt: "t")[$t$]. On this plot you can see the sharp edges remaining much better. #figure(figph[Four panels of the plucked string, x from 0 to 2 and y within plus or minus 0.10, each piecewise linear with ends pinned at zero: a tent peaking at 0.1, a trapezoid flat at 0.06, a lower one at 0.02, then its mirror at minus 0.02.], alt: "Four panels of the plucked string, x from 0 to 2 and y within plus or minus 0.10, each piecewise linear with ends pinned at zero: a tent peaking at 0.1, a trapezoid flat at 0.06, a lower one at 0.02, then its mirror at minus 0.02.", caption: [Figure #math.equation(block: false, alt: "4")[$4$]: Plucked string for #math.equation(block: false, alt: "t equals 0")[$t = 0$], #math.equation(block: false, alt: "t equals 0.4")[$t = 0.4$], #math.equation(block: false, alt: "t equals 0.8")[$t = 0.8$], and #math.equation(block: false, alt: "t equals 1.2")[$t = 1.2$].]) ] One thing to take away from all this is how a guitar sounds. Notice that the (angular) frequencies that come up in the solution are #math.equation(block: false, alt: "n the fraction π a over L")[$n frac(π a, L)$]. That is, there is a certain base #emph[fundamental frequency] #math.equation(block: false, alt: "the fraction π a over L")[$frac(π a, L)$], and then we also get all the multiples of this frequency, which in music are called the #emph[overtones]. Which overtones appear and with what amplitude is what musicians call the #emph[timbre] of the note. Mathematicians usually call this the #emph[spectrum]. Because all the frequencies are multiples of one frequency (the fundamental) we get a nice pleasing sound. The fundamental frequency #math.equation(block: false, alt: "the fraction π a over L")[$frac(π a, L)$] increases as we decrease length #math.equation(block: false, alt: "L")[$L$]. That is, if we place a finger on the fingerboard and then pluck a string we get a higher note. The constant #math.equation(block: false, alt: "a")[$a$] is given by #math.equation(block: true, alt: "a equals the square root of the fraction T over ρ ,")[$a = sqrt(frac(T, ρ)) ,$] where #math.equation(block: false, alt: "T")[$T$] is tension and #math.equation(block: false, alt: "ρ")[$ρ$] is the linear density of the string. Tightening the string (turning the tuning peg on a guitar) increases #math.equation(block: false, alt: "a")[$a$] and hence produces a higher fundamental frequency (a higher note). On the other hand using a heavier string reduces #math.equation(block: false, alt: "a")[$a$] and produces a lower fundamental frequency (a lower note). A bass guitar has longer thicker strings, while a ukulele has short strings made of lighter material. Something rather interesting is the almost symmetry between space and time. In its simplest form we see this symmetry in the solutions #math.equation(block: true, alt: "sin open parenthesis the fraction n π over L x close parenthesis sin open parenthesis the fraction n π a over L t close parenthesis .")[$sin ( frac(n π, L) x ) sin ( frac(n π a, L) t ) .$] Except for the #math.equation(block: false, alt: "a")[$a$], time and space are just the same. In general, the solution for a fixed #math.equation(block: false, alt: "x")[$x$] is a Fourier series in #math.equation(block: false, alt: "t")[$t$], for a fixed #math.equation(block: false, alt: "t")[$t$] it is a Fourier series in #math.equation(block: false, alt: "x")[$x$], and the coefficients are related. If the shape #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$] or the initial velocity have lots of corners, then the sound wave will have lots of corners. That is because the Fourier coefficients of the initial shape decay to zero (as #math.equation(block: false, alt: "n → infinity")[$n → ∞$]) at the same rate as the Fourier coefficients of the wave in time (for some fixed #math.equation(block: false, alt: "x")[$x$]). So if you use a sharp object to pick the string, you get a sharper sound with lots of high frequency components, while if you use your thumb, you get a softer sound without so many high overtones. Similarly if you pluck close to the bridge, you are getting a pluck that looks more like the sawtooth, and you get an even sharper sound. In fact, if you look at the formula for the solution, you see that for any fixed #math.equation(block: false, alt: "x")[$x$] we get an almost arbitrary Fourier series in #math.equation(block: false, alt: "t")[$t$], everything except the constant term. You can essentially obtain any sound you want by plucking the string in just the right way. Of course we are considering an ideal string of no stiffness and no air resistance. Those variables clearly impact the sound as well.