#set document(title: "4.8 D’Alembert Solution of The 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.8#h(0.6em)D’Alembert Solution of The Wave Equation We have solved the wave equation by using Fourier series. But it is often more convenient to use the so-called #emph[d’Alembert solution to the wave]#emph[equation].#math.equation(block: false, alt: "to the power 1")[$1$] While this solution can be derived using Fourier series as well, it is really an awkward use of those concepts. It is easier and more instructive to derive this solution by making a correct change of variables to get an equation that can be solved by simple integration. Suppose we have the 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) .$] We wish to solve the equation (4.8.1) given the conditions #math.equation(block: true, alt: "y open parenthesis 0 , t close parenthesis equals y open parenthesis L , t close parenthesis equals 0 for all t ,; y open parenthesis x , 0 close parenthesis equals f open parenthesis x close parenthesis 0 less than x less than L ,; y sub t open parenthesis x , 0 close parenthesis equals g open parenthesis x close parenthesis 0 less than x less than L .")[$y ( 0 , t ) = y ( L , t ) = 0 "for all " t , \ y ( x , 0 ) = f ( x ) 0 < x < L , \ y_(t) ( x , 0 ) = g ( x ) 0 < x < L .$] === Change of Variables We will transform the equation into a simpler form where it can be solved by simple integration. We change variables to #math.equation(block: false, alt: "ξ equals x minus a t")[$ξ = x − a t$], #math.equation(block: false, alt: "η equals x plus a t")[$η = x + a t$]. The chain rule says: #math.equation(block: true, alt: "the fraction ∂ over ∂ x equals the fraction ∂ ξ over ∂ x the fraction ∂ over ∂ ξ plus the fraction ∂ η over ∂ x the fraction ∂ over ∂ η equals the fraction ∂ over ∂ ξ plus the fraction ∂ over ∂ η ,; the fraction ∂ over ∂ t equals the fraction ∂ ξ over ∂ t the fraction ∂ over ∂ ξ plus the fraction ∂ η over ∂ t the fraction ∂ over ∂ η equals minus a the fraction ∂ over ∂ ξ plus a the fraction ∂ over ∂ η .")[$frac(∂, ∂ x) = frac(∂ ξ, ∂ x) frac(∂, ∂ ξ) + frac(∂ η, ∂ x) frac(∂, ∂ η) = frac(∂, ∂ ξ) + frac(∂, ∂ η) , \ frac(∂, ∂ t) = frac(∂ ξ, ∂ t) frac(∂, ∂ ξ) + frac(∂ η, ∂ t) frac(∂, ∂ η) = − a frac(∂, ∂ ξ) + a frac(∂, ∂ η) .$] We compute #math.equation(block: true, alt: "y sub x x equals the fraction ∂ squared y over ∂ x squared equals open parenthesis the fraction ∂ over ∂ ξ plus the fraction ∂ over ∂ η close parenthesis open parenthesis the fraction ∂ y over ∂ ξ plus the fraction ∂ y over ∂ η close parenthesis equals the fraction ∂ squared y over ∂ ξ squared plus 2 the fraction ∂ squared y over ∂ ξ ∂ η plus the fraction ∂ squared y over ∂ η squared ,; y sub t t equals the fraction ∂ squared y over ∂ squared equals open parenthesis minus a the fraction ∂ over ∂ ξ plus a the fraction ∂ over ∂ η close parenthesis open parenthesis minus a the fraction ∂ y over ∂ ξ plus a the fraction ∂ y over ∂ η close parenthesis equals a squared the fraction ∂ squared y over ∂ ξ squared minus 2 a squared the fraction ∂ squared y over ∂ ξ ∂ η plus a squared the fraction ∂ s")[$y_(x x) = frac(∂^(2) y, ∂ x^(2)) = ( frac(∂, ∂ ξ) + frac(∂, ∂ η) ) ( frac(∂ y, ∂ ξ) + frac(∂ y, ∂ η) ) = frac(∂^(2) y, ∂ ξ^(2)) + 2 frac(∂^(2) y, ∂ ξ ∂ η) + frac(∂^(2) y, ∂ η^(2)) , \ y_(t t) = frac(∂^(2) y, ∂^(2)) = ( − a frac(∂, ∂ ξ) + a frac(∂, ∂ η) ) ( − a frac(∂ y, ∂ ξ) + a frac(∂ y, ∂ η) ) = a^(2) frac(∂^(2) y, ∂ ξ^(2)) − 2 a^(2) frac(∂^(2) y, ∂ ξ ∂ η) + a^(2) frac(∂^(2) y, ∂ η^(2)) .$] In the above computations, we used the fact from calculus that #math.equation(block: false, alt: "the fraction ∂ squared y over ∂ ξ ∂ η equals the fraction ∂ squared y over ∂ η ∂ ξ")[$frac(∂^(2) y, ∂ ξ ∂ η) = frac(∂^(2) y, ∂ η ∂ ξ)$]. We plug what we got into the wave equation, #math.equation(block: true, alt: "0 equals a squared y sub x x minus y sub t t equals 4 a squared the fraction ∂ squared y over ∂ ξ ∂ η equals 4 a squared y sub ξ η .")[$0 = a^(2) y_(x x) − y_(t t) = 4 a^(2) frac(∂^(2) y, ∂ ξ ∂ η) = 4 a^(2) y_(ξ η) .$] Therefore, the wave equation (4.8.1) transforms into #math.equation(block: false, alt: "y sub ξ η equals 0")[$y_(ξ η) = 0$]. It is easy to find the general solution to this equation by integrating twice. Keeping #math.equation(block: false, alt: "ξ")[$ξ$] constant, we integrate with respect to #math.equation(block: false, alt: "η")[$η$] first#math.equation(block: false, alt: "squared")[$2$] and notice that the constant of integration depends on #math.equation(block: false, alt: "ξ")[$ξ$]; for each #math.equation(block: false, alt: "ξ")[$ξ$] we might get a different constant of integration. We get #math.equation(block: false, alt: "y sub ξ equals C open parenthesis ξ close parenthesis")[$y_(ξ) = C ( ξ )$]. Next, we integrate with respect to #math.equation(block: false, alt: "ξ")[$ξ$] and notice that the constant of integration must depend on #math.equation(block: false, alt: "η")[$η$]. Thus, #math.equation(block: false, alt: "y equals ∫ C open parenthesis ξ close parenthesis d ξ plus B open parenthesis η close parenthesis")[$y = ∫ C ( ξ ) d ξ + B ( η )$]. The solution must, therefore, be of the following form for some functions #math.equation(block: false, alt: "A open parenthesis ξ close parenthesis")[$A ( ξ )$] and #math.equation(block: false, alt: "B open parenthesis η close parenthesis")[$B ( η )$] : #math.equation(block: true, alt: "y equals A open parenthesis ξ close parenthesis plus B open parenthesis η close parenthesis equals A open parenthesis x minus a t close parenthesis plus B open parenthesis x plus a t close parenthesis .")[$y = A ( ξ ) + B ( η ) = A ( x − a t ) + B ( x + a t ) .$] The solution is a superposition of two functions (waves) traveling at speed #math.equation(block: false, alt: "a")[$a$] in opposite directions. The coordinates #math.equation(block: false, alt: "ξ")[$ξ$] and #math.equation(block: false, alt: "η")[$η$] are called the #emph[characteristic coordinates], and a similar technique can be applied to more complicated hyperbolic PDE. And in fact, in #link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/1%3A_First_order_ODEs/1.9%3A_First_Order_Linear_PDE")[Section 1.9] it is used to solve first order linear PDE. Basically, to solve the wave equation (or more general hyperbolic equations) we find certain characteristic curves along which the equation is really just an ODE, or a pair of ODEs. In this case these are the curves where #math.equation(block: false, alt: "ξ")[$ξ$] and #math.equation(block: false, alt: "η")[$η$] are constant. === D’Alembert’s Formula We know what any solution must look like, but we need to solve for the given side conditions. We will just give the formula and see that it works. First let #math.equation(block: false, alt: "F open parenthesis x close parenthesis")[$F ( x )$] denote the odd extension of #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$], and let #math.equation(block: false, alt: "G open parenthesis x close parenthesis")[$G ( x )$] denote the odd extension of #math.equation(block: false, alt: "g open parenthesis x close parenthesis")[$g ( x )$]. Define #math.equation(block: true, alt: "A open parenthesis x close parenthesis equals the fraction 1 over 2 F open parenthesis x close parenthesis minus the fraction 1 over 2 a ∫ 0 x G open parenthesis s close parenthesis d s , B open parenthesis x close parenthesis equals the fraction 1 over 2 F open parenthesis x close parenthesis plus the fraction 1 over 2 a ∫ 0 x G open parenthesis s close parenthesis d s .")[$A ( x ) = frac(1, 2) F ( x ) − frac(1, 2 a) ∫_(0)^(x) G ( s ) d s , #h(1em) B ( x ) = frac(1, 2) F ( x ) + frac(1, 2 a) ∫_(0)^(x) G ( s ) d s .$] We claim this #math.equation(block: false, alt: "A open parenthesis x close parenthesis")[$A ( x )$] and #math.equation(block: false, alt: "B open parenthesis x close parenthesis")[$B ( x )$] give the solution. Explicitly, the solution is #math.equation(block: false, alt: "y open parenthesis x , t close parenthesis equals A open parenthesis x minus a t close parenthesis plus B open parenthesis x plus a t close parenthesis")[$y ( x , t ) = A ( x − a t ) + B ( x + a t )$] or in other words: #math.equation(block: true, alt: "y open parenthesis x , t close parenthesis equals the fraction 1 over 2 F open parenthesis x minus a t close parenthesis minus the fraction 1 over 2 a ∫ 0 x minus a t G open parenthesis s close parenthesis d s plus the fraction 1 over 2 F open parenthesis x plus a t close parenthesis plus the fraction 1 over 2 a ∫ 0 x plus a t G open parenthesis s close parenthesis d s; equals the fraction F open parenthesis x minus a t close parenthesis plus F open parenthesis x plus a t close parenthesis over 2 plus the fraction 1 over 2 a ∫ x minus a t x plus a t G open parenthesis s close parenthesis d s .")[$y ( x , t ) = frac(1, 2) F ( x − a t ) − frac(1, 2 a) ∫_(0)^(x − a t) G ( s ) d s + frac(1, 2) F ( x + a t ) + frac(1, 2 a) ∫_(0)^(x + a t) G ( s ) d s \ = frac(F ( x − a t ) + F ( x + a t ), 2) + frac(1, 2 a) ∫_(x − a t)^(x + a t) G ( s ) d s .$] Let us check that the d’Alembert formula really works. #math.equation(block: true, alt: "y open parenthesis x , 0 close parenthesis equals the fraction 1 over 2 F open parenthesis x close parenthesis minus the fraction 1 over 2 a ∫ 0 x G open parenthesis s close parenthesis d s plus the fraction 1 over 2 F open parenthesis x close parenthesis plus the fraction 1 over 2 a ∫ 0 x G open parenthesis s close parenthesis d s equals F open parenthesis x close parenthesis .")[$y ( x , 0 ) = frac(1, 2) F ( x ) − frac(1, 2 a) ∫_(0)^(x) G ( s ) d s + frac(1, 2) F ( x ) + frac(1, 2 a) ∫_(0)^(x) G ( s ) d s = F ( x ) .$] So far so good. Assume for simplicity #math.equation(block: false, alt: "F")[$F$] is differentiable. And we use the first form of (4.8.3) as it is easier to differentiate. By the fundamental theorem of calculus we have #math.equation(block: true, alt: "y sub t open parenthesis x , t close parenthesis equals the fraction minus a over 2 F prime open parenthesis x minus a t close parenthesis plus the fraction 1 over 2 G open parenthesis x minus a t close parenthesis plus the fraction a over 2 F prime open parenthesis x plus a t close parenthesis plus the fraction 1 over 2 G open parenthesis x plus a t close parenthesis .")[$y_(t) ( x , t ) = frac(− a, 2) F^(′) ( x − a t ) + frac(1, 2) G ( x − a t ) + frac(a, 2) F^(′) ( x + a t ) + frac(1, 2) G ( x + a t ) .$] So #math.equation(block: true, alt: "y sub t open parenthesis x , 0 close parenthesis equals the fraction minus a over 2 F prime open parenthesis x close parenthesis plus the fraction 1 over 2 G open parenthesis x close parenthesis plus the fraction a over 2 F prime open parenthesis x close parenthesis plus the fraction 1 over 2 G open parenthesis x close parenthesis equals G open parenthesis x close parenthesis .")[$y_(t) ( x , 0 ) = frac(− a, 2) F^(′) ( x ) + frac(1, 2) G ( x ) + frac(a, 2) F^(′) ( x ) + frac(1, 2) G ( x ) = G ( x ) .$] Yay! We’re smoking now. OK, now the boundary conditions. Note that #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 )$] are odd. Also #math.equation(block: false, alt: "∫ 0 x G open parenthesis s close parenthesis d s")[$∫_(0)^(x) G ( s ) d s$] is an even function of #math.equation(block: false, alt: "x")[$x$] because #math.equation(block: false, alt: "G open parenthesis x close parenthesis")[$G ( x )$] is odd (to see this fact, do the substitution #math.equation(block: false, alt: "s equals minus v")[$s = − v$]). So #math.equation(block: true, alt: "y open parenthesis 0 , t close parenthesis equals the fraction 1 over 2 F open parenthesis minus a t close parenthesis minus the fraction 1 over 2 a ∫ 0 minus a t G open parenthesis s close parenthesis d s plus the fraction 1 over 2 F open parenthesis a t close parenthesis plus the fraction 1 over 2 a ∫ 0 a t G open parenthesis s close parenthesis d s; equals the fraction minus 1 over 2 F open parenthesis a t close parenthesis minus the fraction 1 over 2 a ∫ 0 a t G open parenthesis s close parenthesis d s plus the fraction 1 over 2 F open parenthesis a t close parenthesis plus the fraction 1 over 2 a ∫ 0 a t G open parenthesis s close parenthesis d s equals 0 .")[$y ( 0 , t ) = frac(1, 2) F ( − a t ) − frac(1, 2 a) ∫_(0)^(− a t) G ( s ) d s + frac(1, 2) F ( a t ) + frac(1, 2 a) ∫_(0)^(a t) G ( s ) d s \ = frac(− 1, 2) F ( a t ) − frac(1, 2 a) ∫_(0)^(a t) G ( s ) d s + frac(1, 2) F ( a t ) + frac(1, 2 a) ∫_(0)^(a t) G ( s ) d s = 0 .$] Note that #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 )$] are #math.equation(block: false, alt: "2 L")[$2 L$] periodic. We compute #math.equation(block: true, alt: "y open parenthesis L , t close parenthesis equals the fraction 1 over 2 F open parenthesis L minus a t close parenthesis minus the fraction 1 over 2 a ∫ 0 L minus a t G open parenthesis s close parenthesis d s plus the fraction 1 over 2 F open parenthesis L plus a t close parenthesis plus the fraction 1 over 2 a ∫ 0 L plus a t G open parenthesis s close parenthesis d s; equals the fraction 1 over 2 F open parenthesis minus L minus a t close parenthesis minus the fraction 1 over 2 a ∫ 0 L G open parenthesis s close parenthesis d s minus the fraction 1 over 2 a ∫ 0 minus a t G open parenthesis s close parenthesis d s plus; equals the fraction 1 over 2 F open parenthesis L plus a t close parenthesis plus the fraction 1 over 2 a ∫ 0 L G open parenthesis s close parenthesis d s plus the fractio")[$y ( L , t ) = frac(1, 2) F ( L − a t ) − frac(1, 2 a) ∫_(0)^(L − a t) G ( s ) d s + frac(1, 2) F ( L + a t ) + frac(1, 2 a) ∫_(0)^(L + a t) G ( s ) d s \ = frac(1, 2) F ( − L − a t ) − frac(1, 2 a) ∫_(0)^(L) G ( s ) d s − frac(1, 2 a) ∫_(0)^(− a t) G ( s ) d s + \ = frac(1, 2) F ( L + a t ) + frac(1, 2 a) ∫_(0)^(L) G ( s ) d s + frac(1, 2 a) ∫_(0)^(a t) G ( s ) d s \ = frac(− 1, 2) F ( L + a t ) − frac(1, 2 a) ∫_(0)^(a t) G ( s ) d s + frac(1, 2) F ( L + a t ) + frac(1, 2 a) ∫_(0)^(a t) G ( s ) d s = 0 .$] And voilà, it works. #examplebox("Example 1")[][ D’Alembert says that the solution is a superposition of two functions (waves) moving in the opposite direction at “speed” #math.equation(block: false, alt: "a")[$a$]. To get an idea of how it works, let us work out an example. Consider the simpler setup #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 1 , 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 0 .")[$y_(t t) = y_(x x) , \ y ( 0 , t ) = y ( 1 , t ) = 0 , \ y ( x , 0 ) = f ( x ) , \ y_(t) ( x , 0 ) = 0 .$] Here #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$] is an impulse of height 1 centered at #math.equation(block: false, alt: "x equals 0.5")[$x = 0.5$]: #math.equation(block: true, alt: "0 i f 0 less than or equal to x less than 0.45 ,; 20 open parenthesis x minus 0.45 close parenthesis i f 0.45 less than or equal to x less than 0.5 ,; 20 open parenthesis 0.55 minus x close parenthesis i f 0.5 less than or equal to x less than 0.55; 0 i f 0.55 less than or equal to x less than or equal to 1 .")[$0 upright(i) upright(f) 0 ≤ x < 0.45 , \ 20 ( x − 0.45 ) upright(i) upright(f) 0.45 ≤ x < 0.5 , \ 20 ( 0.55 − x ) upright(i) upright(f) 0.5 ≤ x < 0.55 \ 0 upright(i) upright(f) 0.55 ≤ x ≤ 1 .$] The graph of this impulse is the top left plot in Figure #math.equation(block: false, alt: "1")[$1$]. Let #math.equation(block: false, alt: "F open parenthesis x close parenthesis")[$F ( x )$] be the odd periodic extension of #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$]. Then from (4.8.3) we know that the solution is given as #math.equation(block: true, alt: "y open parenthesis x , t close parenthesis equals the fraction F open parenthesis x minus t close parenthesis plus F open parenthesis x plus t close parenthesis over 2 .")[$y ( x , t ) = frac(F ( x − t ) + F ( x + t ), 2) .$] It is not hard to compute specific values of #math.equation(block: false, alt: "y open parenthesis x , t close parenthesis")[$y ( x , t )$]. For example, to compute #math.equation(block: false, alt: "y open parenthesis 0.1 , 0.6 close parenthesis")[$y ( 0.1 , 0.6 )$] we notice #math.equation(block: false, alt: "x minus t equals minus 0.5")[$x − t = − 0.5$] and #math.equation(block: false, alt: "x plus t equals 0.7")[$x + t = 0.7$]. Now #math.equation(block: false, alt: "F open parenthesis minus 0.5 close parenthesis equals minus f open parenthesis 0.5 close parenthesis equals minus 20 open parenthesis 0.55 minus 0.5 close parenthesis equals minus 1")[$F ( − 0.5 ) = − f ( 0.5 ) = − 20 ( 0.55 − 0.5 ) = − 1$] and #math.equation(block: false, alt: "F open parenthesis 0.7 close parenthesis equals f open parenthesis 0.7 close parenthesis equals 0")[$F ( 0.7 ) = f ( 0.7 ) = 0$]. Hence #math.equation(block: false, alt: "y open parenthesis 0.1 , 0.6 close parenthesis equals the fraction minus 1 plus 0 over 2 equals minus 0.5")[$y ( 0.1 , 0.6 ) = frac(− 1 + 0, 2) = − 0.5$]. As you can see the d’Alembert solution is much easier to actually compute and to plot than the Fourier series solution. See Figure #math.equation(block: false, alt: "1")[$1$] for plots of the solution #math.equation(block: false, alt: "y")[$y$] for several different #math.equation(block: false, alt: "t")[$t$]. Lebl's example — the string of length 1 with fixed ends, plucked into an impulse of height 1 centered at x = 0.5. The heavy curve is y = (F(x − t) + F(x + t))/2 on the string itself; the dashed curve is that same formula continued past the ends — the phantom image waves, running on the odd 2-periodic extension F, which is what forces y(0, t) = y(1, t) = 0. Drag Time t: the impulse halves into two waves walking apart, the string goes momentarily flat at t = 0.5, the pulse re-forms upside down at t = 1, and everything returns at t = 2. The corners never smooth out, and Lebl's hand-computed value y(0.1, 0.6) = −0.5 sits at the bottom of the left-hand trough. {"functions":\[{"color":"\#6b3fa0","domain":null,"expression":"(sign(x-s-2\*round((x-s)/2))\*((1-20\*abs(abs(x-s-2\*round((x-s)/2))-0.5))+abs(1-20\*abs(abs(x-s-2\*round((x-s)/2))-0.5)))/2+sign(x+s-2\*round((x+s)/2))\*((1-20\*abs(abs(x+s-2\*round((x+s)/2))-0.5))+abs(1-20\*abs(abs(x+s-2\*round((x+s)/2))-0.5)))/2)/2","expression2":"","id":"ext","inequality":"lt","lineDash":\[5,4\],"lineWidth":1.5,"mode":"cartesian","tMax":10,"tMin":-10,"variable":"x","visible":true},{"color":"\#2e6b3f","domain":null,"expression":"1","expression2":"t","id":"end1","inequality":"lt","lineDash":\[3,3\],"lineWidth":1,"mode":"parametric","tMax":1.2,"tMin":-1.2,"variable":"t","visible":true},{"color":"\#1f4e79","domain":\[0,1\],"expression":"(sign(x-s-2\*round((x-s)/2))\*((1-20\*abs(abs(x-s-2\*round((x-s)/2))-0.5))+abs(1-20\*abs(abs(x-s-2\*round((x-s)/2))-0.5)))/2+sign(x+s-2\*round((x+s)/2))\*((1-20\*abs(abs(x+s-2\*round((x+s)/2))-0.5))+abs(1-20\*abs(abs(x+s-2\*round((x+s)/2))-0.5)))/2)/2","expression2":"","id":"string","inequality":"lt","lineDash":\[\],"lineWidth":3,"mode":"cartesian","tMax":10,"tMin":-10,"variable":"x","visible":true}\],"grid":{"axisColor":"\#333333","gridColor":"\#cccccc","majorSpacing":1,"minorGridColor":"\#eeeeee","showAxes":true,"showLabels":true},"parameters":\[{"id":"s","label":"Time t","max":2,"min":0,"name":"s","step":0.02,"unit":"","value":0.2}\],"title":"d'Alembert solution: two waves on a plucked string","version":1,"viewport":{"centerX":0.5,"centerY":0,"scale":190}} #figure(figph[Four panels of the d'Alembert solution, x from 0 to 1: a triangular pulse of height 1 at x equals 0.5 splits into two half-height pulses that travel apart to the ends and bounce back flipped to minus 0.5.], alt: "Four panels of the d'Alembert solution, x from 0 to 1: a triangular pulse of height 1 at x equals 0.5 splits into two half-height pulses that travel apart to the ends and bounce back flipped to minus 0.5.", caption: [Figure #math.equation(block: false, alt: "1")[$1$]: Plot of the d'Alembert solution for #math.equation(block: false, alt: "t equals 0")[$t = 0$], #math.equation(block: false, alt: "t equals 0.2")[$t = 0.2$], #math.equation(block: false, alt: "t equals 0.4")[$t = 0.4$], and #math.equation(block: false, alt: "t equals 0.6")[$t = 0.6$].]) ] === Another Way to Solve for the Side Conditions It is perhaps easier and more useful to memorize the procedure rather than the formula itself. The important thing to remember is that a solution to the wave equation is a superposition of two waves traveling in opposite directions. That is, #math.equation(block: true, alt: "y open parenthesis x , t close parenthesis equals A open parenthesis x minus a t close parenthesis plus B open parenthesis x plus a t close parenthesis .")[$y ( x , t ) = A ( x − a t ) + B ( x + a t ) .$] If you think about it, the exact formulas for #math.equation(block: false, alt: "A")[$A$] and #math.equation(block: false, alt: "B")[$B$] are not hard to guess once you realize what kind of side conditions #math.equation(block: false, alt: "y open parenthesis x , t close parenthesis")[$y ( x , t )$] is supposed to satisfy. Let us give the formula again, but slightly differently. Best approach is to do this in stages. When #math.equation(block: false, alt: "g open parenthesis x close parenthesis equals 0")[$g ( x ) = 0$] (and hence #math.equation(block: false, alt: "G open parenthesis x close parenthesis equals 0")[$G ( x ) = 0$]) we have the solution #math.equation(block: true, alt: "the fraction F open parenthesis x minus a t close parenthesis plus F open parenthesis x plus a t close parenthesis over 2 .")[$frac(F ( x − a t ) + F ( x + a t ), 2) .$] On the other hand, when #math.equation(block: false, alt: "f open parenthesis x close parenthesis equals 0")[$f ( x ) = 0$] (and hence #math.equation(block: false, alt: "F open parenthesis x close parenthesis equals 0")[$F ( x ) = 0$]), we let #math.equation(block: true, alt: "H open parenthesis x close parenthesis equals ∫ 0 x G open parenthesis s close parenthesis d s .")[$H ( x ) = ∫_(0)^(x) G ( s ) d s .$] The solution in this case is #math.equation(block: true, alt: "the fraction 1 over 2 a ∫ x minus a t x plus a t G open parenthesis s close parenthesis d s equals the fraction minus H open parenthesis x minus a t close parenthesis plus H open parenthesis x plus a t close parenthesis over 2 a .")[$frac(1, 2 a) ∫_(x − a t)^(x + a t) G ( s ) d s = frac(− H ( x − a t ) + H ( x + a t ), 2 a) .$] By superposition we get a solution for the general side conditions (4.8.2) (when neither #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$] nor #math.equation(block: false, alt: "g open parenthesis x close parenthesis")[$g ( x )$] are identically zero). #math.equation(block: true, alt: "y open parenthesis x , t close parenthesis equals the fraction F open parenthesis x minus a t close parenthesis plus F open parenthesis x plus a t close parenthesis over 2 plus the fraction minus H open parenthesis x minus a t close parenthesis plus H open parenthesis x plus a t close parenthesis over 2 a .")[$y ( x , t ) = frac(F ( x − a t ) + F ( x + a t ), 2) + frac(− H ( x − a t ) + H ( x + a t ), 2 a) .$] Do note the minus sign before the #math.equation(block: false, alt: "H")[$H$], and the #math.equation(block: false, alt: "a")[$a$] in the second denominator. #notebox("Your Turn", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Check that the new formula (4.8.4) satisfies the side conditions (4.8.2). ] #strong[Warning]: Make sure you use the odd extensions #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 )$], when you have formulas for #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 )$]. The thing is, those formulas in general hold only for #math.equation(block: false, alt: "0 less than x less than L")[$0 < x < L$], and are not usually equal to #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 )$] for other #math.equation(block: false, alt: "x")[$x$]. === Remarks Let us remark that the formula #math.equation(block: false, alt: "y open parenthesis x , t close parenthesis equals A open parenthesis x minus a t close parenthesis plus B open parenthesis x plus a t close parenthesis")[$y ( x , t ) = A ( x − a t ) + B ( x + a t )$] is the reason why the solution of the wave equation doesn’t get as time goes on, that is, why in the examples where the initial conditions had corners, the solution also has corners at every time #math.equation(block: false, alt: "t")[$t$]. The corners bring us to another interesting remark. Nobody ever notices at first that our example solutions are not even differentiable (they have corners): In Example #math.equation(block: false, alt: "1")[$1$] above, the solution is not differentiable whenever #math.equation(block: false, alt: "x equals t plus 0.5")[$x = t + 0.5$] or #math.equation(block: false, alt: "x equals minus t plus 0.5")[$x = − t + 0.5$] for example. Really to be able to compute #math.equation(block: false, alt: "u sub x x")[$u_(x x)$] or #math.equation(block: false, alt: "u sub t t")[$u_(t t)$], you need not one, but two derivatives. Fear not, we could think of a shape that is very nearly #math.equation(block: false, alt: "F open parenthesis x close parenthesis")[$F ( x )$] but does have two derivatives by rounding the corners a little bit, and then the solution would be very nearly #math.equation(block: false, alt: "the fraction F open parenthesis x minus t close parenthesis plus F open parenthesis x plus t close parenthesis over 2")[$frac(F ( x − t ) + F ( x + t ), 2)$] and nobody would notice the switch. One final remark is what the d’Alembert solution tells us about what part of the initial conditions influence the solution at a certain point. We can figure this out by Let us suppose that the string is very long (perhaps infinite) for simplicity. Since the solution at time #math.equation(block: false, alt: "t")[$t$] is #math.equation(block: true, alt: "y open parenthesis x , t close parenthesis equals the fraction F open parenthesis x minus a t close parenthesis plus F open parenthesis x plus a t close parenthesis over 2 plus the fraction 1 over 2 a ∫ x minus a t x plus a t G open parenthesis s close parenthesis d s ,")[$y ( x , t ) = frac(F ( x − a t ) + F ( x + a t ), 2) + frac(1, 2 a) ∫_(x − a t)^(x + a t) G ( s ) d s ,$] we notice that we have only used the initial conditions in the interval #math.equation(block: false, alt: "[ x minus a t , x plus a t ]")[$[ x − a t , x + a t ]$]. These two endpoints are called the #emph[wavefronts], as that is where the wave front is given an initial (#math.equation(block: false, alt: "t equals 0")[$t = 0$]) disturbance at #math.equation(block: false, alt: "x")[$x$]. So if #math.equation(block: false, alt: "a equals 1")[$a = 1$], an observer sitting at #math.equation(block: false, alt: "x equals 0")[$x = 0$] at time #math.equation(block: false, alt: "t equals 1")[$t = 1$] has only seen the initial conditions for #math.equation(block: false, alt: "x")[$x$] in the range #math.equation(block: false, alt: "[ minus 1 , 1 ]")[$[ − 1 , 1 ]$] and is blissfully unaware of anything else. This is why for example we do not know that a supernova has occurred in the universe until we see its light, millions of years from the time when it did in fact happen. === Footnotes \[1\] Named after the French mathematician #link("http://en.Wikipedia.org/wiki/D%27Alembert")[Jean le Rond d’Alembert] (1717 – 1783). \[2\] There is nothing special about #math.equation(block: false, alt: "η")[$η$], you can integrate with #math.equation(block: false, alt: "ξ")[$ξ$] first, if you wish. - - #link("http://www.jirka.org/diffyqs/")[Jiří Lebl] (#link("http://www.math.okstate.edu/")[Oklahoma State University]).These pages were supported by NSF grants DMS-0900885 and DMS-1362337.