#set document(title: "5.1 Sturm-Liouville problems", 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.1#h(0.6em)Sturm-Liouville problems === Boundary Value Problems In #link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/4%3A_Fourier_series_and_PDEs")[Chapter 4] we have encountered several different eigenvalue problems such as: #math.equation(block: true, alt: "X double prime open parenthesis x close parenthesis plus λ X open parenthesis x close parenthesis equals 0")[$X^(″) ( x ) + λ X ( x ) = 0$] with different boundary conditions #math.equation(block: true, alt: "X open parenthesis 0 close parenthesis equals 0 X open parenthesis L close parenthesis equals 0 (Dirichlet), or; X prime open parenthesis 0 close parenthesis equals 0 X prime open parenthesis L close parenthesis equals 0 (Neumann), or; X prime open parenthesis 0 close parenthesis equals 0 X open parenthesis L close parenthesis equals 0 (Mixed), or; X open parenthesis 0 close parenthesis equals 0 X prime open parenthesis L close parenthesis equals 0 (Mixed) , …")[$X ( 0 ) = 0 " " " " X ( L ) = 0 " " " " "(Dirichlet), or" \ X^(′) ( 0 ) = 0 " " " " X^(′) ( L ) = 0 " " " " "(Neumann), or" \ X^(′) ( 0 ) = 0 " " " " X ( L ) = 0 " " " " "(Mixed), or" \ X ( 0 ) = 0 " " " " X^(′) ( L ) = 0 " " " " "(Mixed)" , …$] For example for the insulated wire, Dirichlet conditions correspond to applying a zero temperature at the ends, Neumann means insulating the ends, etc…. Other types of endpoint conditions also arise naturally, such as the #emph[Robin boundary conditions] #math.equation(block: true, alt: "h X open parenthesis 0 close parenthesis minus X prime open parenthesis 0 close parenthesis equals 0 h X open parenthesis L close parenthesis plus X prime open parenthesis L close parenthesis equals 0 ,")[$h X ( 0 ) − X^(′) ( 0 ) = 0 #h(1em) h X ( L ) + X^(′) ( L ) = 0 ,$] for some constant #math.equation(block: false, alt: "h")[$h$]. These conditions come up when the ends are immersed in some medium. Boundary problems came up in the study of the heat equation #math.equation(block: false, alt: "u sub t equals k u sub x x")[$u_(t) = k u_(x x)$] when we were trying to solve the equation by the method of separation of variables in #link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/4%3A_Fourier_series_and_PDEs/4.06%3A_PDEs_separation_of_variables_and_the_heat_equation")[Section 4.6]. In the computation we encountered a certain eigenvalue problem and found the eigenfunctions #math.equation(block: false, alt: "X sub n open parenthesis x close parenthesis")[$X_(n) ( x )$]. We then found the #emph[eigenfunction decomposition] of the initial temperature #math.equation(block: false, alt: "f open parenthesis x close parenthesis equals u open parenthesis x , 0 close parenthesis")[$f ( x ) = u ( x , 0 )$] in terms of the eigenfunctions #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals ∑ n equals 1 infinity c sub n X sub n open parenthesis x close parenthesis .")[$f ( x ) = ∑_(n = 1)^(∞) c_(n) X_(n) ( x ) .$] Once we had this decomposition and found suitable #math.equation(block: false, alt: "T sub n open parenthesis t close parenthesis")[$T_(n) ( t )$] such that #math.equation(block: false, alt: "T sub n open parenthesis 0 close parenthesis equals 1")[$T_(n) ( 0 ) = 1$] and #math.equation(block: false, alt: "T sub n open parenthesis t close parenthesis X open parenthesis x close parenthesis")[$T_(n) ( t ) X ( x )$] were solutions, the solution to the original problem including the initial condition could be written as #math.equation(block: true, alt: "u open parenthesis x , t close parenthesis equals ∑ n equals 1 infinity c sub n T sub n open parenthesis t close parenthesis X sub n open parenthesis x close parenthesis .")[$u ( x , t ) = ∑_(n = 1)^(∞) c_(n) T_(n) ( t ) X_(n) ( x ) .$] We will try to solve more general problems using this method. First, we will study second order linear equations of the form #math.equation(block: true, alt: "the fraction d over d x open parenthesis p open parenthesis x close parenthesis the fraction d y over d x close parenthesis minus q open parenthesis x close parenthesis y plus λ r open parenthesis x close parenthesis y equals 0 .")[$frac(d, d x) ( p ( x ) frac(d y, d x) ) − q ( x ) y + λ r ( x ) y = 0 .$] Essentially any second order linear equation of the form #math.equation(block: false, alt: "a open parenthesis x close parenthesis y double prime plus b open parenthesis x close parenthesis y prime plus c open parenthesis x close parenthesis y plus λ d open parenthesis x close parenthesis y equals 0")[$a ( x ) y^(″) + b ( x ) y^(′) + c ( x ) y + λ d ( x ) y = 0$] can be written as (5.1.1) after multiplying by a proper factor. #examplebox("Example 1")[Sturm-Liouville Problem][ Put the following equation into the form (5.1.1): #math.equation(block: true, alt: "x squared y double prime plus x y prime plus open parenthesis λ x squared minus n squared close parenthesis y equals 0 .")[$x^(2) y^(″) + x y^(′) + ( λ x^(2) − n^(2) ) y = 0 .$] Multiply both sides by #math.equation(block: false, alt: "the fraction 1 over x")[$frac(1, x)$] to obtain #math.equation(block: true, alt: "the fraction 1 over x open parenthesis x squared y double prime plus x y prime plus open parenthesis λ x squared minus n squared close parenthesis y close parenthesis equals x y double prime plus y prime plus open parenthesis λ x minus the fraction n squared over x close parenthesis y equals the fraction d over d x open parenthesis x the fraction d y over d x close parenthesis minus the fraction n squared over x y plus λ x y equals 0 .")[$frac(1, x) ( x^(2) y^(″) + x y^(′) + ( λ x^(2) − n^(2) ) y ) = x y^(″) + y^(′) + ( λ x − frac(n^(2), x) ) y = frac(d, d x) ( x frac(d y, d x) ) − frac(n^(2), x) y + λ x y = 0 .$] The Bessel equation turns up for example in the solution of the two-dimensional wave equation. If you want to see how one solves the equation, you can look at #link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/7%3A_Power_series_methods/7.3%3A_Singular_Points_and_the_Method_of_Frobenius")[subsection 7.3.3]. The so-called #emph[Sturm-Liouville problem]#math.equation(block: false, alt: "to the power 1")[$1$] is to seek nontrivial solutions to #math.equation(block: true, alt: "the fraction d over d x open parenthesis p open parenthesis x close parenthesis the fraction d y over d x close parenthesis minus q open parenthesis x close parenthesis y plus λ r open parenthesis x close parenthesis y equals 0 , a less than x less than b ,; α sub 1 y open parenthesis a close parenthesis minus α sub 2 y prime open parenthesis a close parenthesis equals 0 ,; β sub 1 y open parenthesis b close parenthesis plus β sub 2 y prime open parenthesis b close parenthesis equals 0 .")[$frac(d, d x) ( p ( x ) frac(d y, d x) ) − q ( x ) y + λ r ( x ) y = 0 , " " " " " " " " " " a < x < b , \ α_(1) y ( a ) − α_(2) y^(′) ( a ) = 0 , \ β_(1) y ( b ) + β_(2) y^(′) ( b ) = 0 .$] In particular, we seek #math.equation(block: false, alt: "λ")[$λ$]s that allow for nontrivial solutions. The #math.equation(block: false, alt: "λ")[$λ$]s that admit nontrivial solutions are called the #emph[eigenvalues]and the corresponding nontrivial solutions are called #emph[eigenfunctions]. The constants #math.equation(block: false, alt: "α sub 1")[$α_(1)$] and #math.equation(block: false, alt: "α sub 2")[$α_(2)$] should not be both zero, same for #math.equation(block: false, alt: "β sub 1")[$β_(1)$] and #math.equation(block: false, alt: "β sub 2")[$β_(2)$]. ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Suppose #math.equation(block: false, alt: "p open parenthesis x close parenthesis , p prime open parenthesis x close parenthesis , q open parenthesis x close parenthesis")[$p ( x ) , #h(0.222em) p^(′) ( x ) , #h(0.222em) q ( x )$] and #math.equation(block: false, alt: "r open parenthesis x close parenthesis")[$r ( x )$] are continuous on #math.equation(block: false, alt: "[ a , b ]")[$[ a , b ]$] and suppose #math.equation(block: false, alt: "p open parenthesis x close parenthesis greater than 0")[$p ( x ) > 0$] and #math.equation(block: false, alt: "r open parenthesis x close parenthesis greater than 0")[$r ( x ) > 0$] for all #math.equation(block: false, alt: "x")[$x$] in #math.equation(block: false, alt: "[ a , b ]")[$[ a , b ]$]. Then the Sturm-Liouville problem (5.1.8) has an increasing sequence of eigenvalues #math.equation(block: true, alt: "λ sub 1 less than λ sub 2 less than λ sub 3 less than ⋯")[$λ_(1) < λ_(2) < λ_(3) < ⋯$] such that #math.equation(block: true, alt: "lim sub n → infinity λ sub n equals plus infinity")[$lim_(n → ∞) λ_(n) = + ∞$] and such that to each #math.equation(block: false, alt: "λ sub n")[$λ_(n)$] there is (up to a constant multiple) a single eigenfunction #math.equation(block: false, alt: "y sub n open parenthesis x close parenthesis")[$y_(n) ( x )$]. Moreover, if #math.equation(block: false, alt: "q open parenthesis x close parenthesis greater than or equal to 0")[$q ( x ) ≥ 0$] and #math.equation(block: false, alt: "α sub 1 , α sub 2 , β sub 1 , β sub 2 greater than or equal to 0")[$α_(1) , α_(2) , β_(1) , β_(2) ≥ 0$], then #math.equation(block: false, alt: "λ sub n greater than or equal to 0")[$λ_(n) ≥ 0$] for all #math.equation(block: false, alt: "n")[$n$]. ] Problems satisfying the hypothesis of the theorem (including the "Moreover") are called #emph[regular Sturm-Liouville problems], and we will only consider such problems here. That is, a regular problem is one where #math.equation(block: false, alt: "p open parenthesis x close parenthesis , p prime open parenthesis x close parenthesis , q open parenthesis x close parenthesis")[$p ( x ) , #h(0.222em) p^(′) ( x ) , #h(0.222em) q ( x )$] and #math.equation(block: false, alt: "r open parenthesis x close parenthesis")[$r ( x )$] are continuous, #math.equation(block: false, alt: "p open parenthesis x close parenthesis greater than 0")[$p ( x ) > 0$], #math.equation(block: false, alt: "r open parenthesis x close parenthesis greater than 0")[$r ( x ) > 0$], #math.equation(block: false, alt: "q open parenthesis x close parenthesis greater than or equal to 0")[$q ( x ) ≥ 0$], and #math.equation(block: false, alt: "α sub 1 , α sub 2 , β sub 1 , β sub 2 greater than or equal to 0")[$α_(1) , α_(2) , β_(1) , β_(2) ≥ 0$]. Note: Be careful about the signs. Also be careful about the inequalities for #math.equation(block: false, alt: "r")[$r$] and #math.equation(block: false, alt: "p")[$p$], they must be strict for all #math.equation(block: false, alt: "x")[$x$] in the interval #math.equation(block: false, alt: "[ a , b ]")[$[ a , b ]$], including the endpoints! When zero is an eigenvalue, we usually start labeling the eigenvalues at #math.equation(block: false, alt: "0")[$0$] rather than at #math.equation(block: false, alt: "1")[$1$] for convenience. That is we label the eigenvalues #math.equation(block: false, alt: "λ sub 0 less than λ sub 1 less than λ sub 2 less than ⋯")[$λ_(0) < λ_(1) < λ_(2) < ⋯$]. #examplebox("Example 2")[][ The problem #math.equation(block: false, alt: "y double prime plus λ y , 0 less than x less than L , y open parenthesis 0 close parenthesis equals 0")[$y^(″) + λ y , #h(0.222em) 0 < x < L , #h(0.222em) y ( 0 ) = 0$], and #math.equation(block: false, alt: "y open parenthesis L close parenthesis equals 0")[$y ( L ) = 0$] is a regular Sturm-Liouville problem: #math.equation(block: false, alt: "p open parenthesis x close parenthesis equals 1 , q open parenthesis x close parenthesis equals 0 , r open parenthesis x close parenthesis equals 1")[$p ( x ) = 1 , #h(0.222em) q ( x ) = 0 , #h(0.222em) r ( x ) = 1$], and we have #math.equation(block: false, alt: "p open parenthesis x close parenthesis 1 greater than 0")[$p ( x ) 1 > 0$] and #math.equation(block: false, alt: "r open parenthesis x close parenthesis 1 greater than 0")[$r ( x ) 1 > 0$]. We also have #math.equation(block: false, alt: "a equals 0")[$a = 0$], #math.equation(block: false, alt: "b equals L")[$b = L$], #math.equation(block: false, alt: "α sub 1 equals β sub 1 equals 1")[$α_(1) = β_(1) = 1$], #math.equation(block: false, alt: "α sub 2 equals β sub 2 equals 0")[$α_(2) = β_(2) = 0$]. The eigenvalues are #math.equation(block: false, alt: "λ sub n equals the fraction n squared π squared over L squared")[$λ_(n) = frac(n^(2) π^(2), L^(2))$] and eigenfunctions are #math.equation(block: false, alt: "y sub n open parenthesis x close parenthesis equals sin open parenthesis the fraction n π over L x close parenthesis")[$y_(n) ( x ) = sin ( frac(n π, L) x )$]. All eigenvalues are nonnegative as predicted by the theorem. ] #notebox("Your Turn", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Find eigenvalues and eigenfunctions for #math.equation(block: true, alt: "y double prime plus λ y equals 0 , y prime open parenthesis 0 close parenthesis equals 0 , y prime open parenthesis 1 close parenthesis equals 0 .")[$y^(″) + λ y = 0 , " " " " " " " " " " y^(′) ( 0 ) = 0 , " " " " " " " " " " y^(′) ( 1 ) = 0 .$] Identify the #math.equation(block: false, alt: "p , q , r , α sub j , β sub j")[$p , #h(0.222em) q , #h(0.222em) r , #h(0.222em) α_(j) , #h(0.222em) β_(j)$]. Can you use the theorem to make the search for eigenvalues easier? (Hint: Consider the condition #math.equation(block: false, alt: "minus y prime open parenthesis 0 close parenthesis equals 0")[$− y^(′) ( 0 ) = 0$]) ] #examplebox("Example 3")[][ Find eigenvalues and eigenfunctions of the problem #math.equation(block: true, alt: "y double prime plus λ y equals 0 , 0 less than x less than 1 ,; h y open parenthesis 0 close parenthesis minus y prime open parenthesis 0 close parenthesis equals 0 , y prime open parenthesis 1 close parenthesis equals 0 , h greater than 0 .")[$y^(″) + λ y = 0 , 0 < x < 1 , \ h y ( 0 ) − y^(′) ( 0 ) = 0 , y^(′) ( 1 ) = 0 , #h(1em) h > 0 .$] These equations give a regular Sturm-Liouville problem. ] #notebox("Your Turn", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Identify #math.equation(block: false, alt: "p , q , r , α sub j , β sub j")[$p , #h(0.222em) q , #h(0.222em) r , #h(0.222em) α_(j) , #h(0.222em) β_(j)$] in the example above. ] First note that #math.equation(block: false, alt: "λ greater than or equal to 0")[$λ ≥ 0$] by Theorem #math.equation(block: false, alt: "1")[$1$]. Therefore, the general solution (without boundary conditions) is #math.equation(block: true, alt: "y open parenthesis x close parenthesis equals A cos open parenthesis the square root of λ x close parenthesis plus B sin open parenthesis the square root of λ x close parenthesis if λ greater than 0 ,; y open parenthesis x close parenthesis equals A x plus B if λ equals 0 .")[$y ( x ) = A cos ( sqrt(λ) x ) + B sin ( sqrt(λ) x ) #h(2em) "if " #h(0.278em) λ > 0 , \ y ( x ) = A x + B #h(2em) "if " #h(0.278em) λ = 0 .$] Let us see if #math.equation(block: false, alt: "λ equals 0")[$λ = 0$] is an eigenvalue: We must satisfy #math.equation(block: false, alt: "0 equals h B minus A")[$0 = h B − A$] and #math.equation(block: false, alt: "A equals 0")[$A = 0$], hence #math.equation(block: false, alt: "B equals 0")[$B = 0$] (as #math.equation(block: false, alt: "h greater than 0")[$h > 0$]), therefore, #math.equation(block: false, alt: "0")[$0$] is not an eigenvalue (no nonzero solution, so no eigenfunction). Now let us try #math.equation(block: false, alt: "h greater than 0")[$h > 0$]. We plug in the boundary conditions. #math.equation(block: true, alt: "0 equals h A minus the square root of λ B ,; 0 equals minus A the square root of λ sin open parenthesis the square root of λ close parenthesis plus B the square root of λ cos open parenthesis the square root of λ close parenthesis .")[$0 = h A − sqrt(λ) B , \ 0 = − A sqrt(λ) sin ( sqrt(λ) ) + B sqrt(λ) cos ( sqrt(λ) ) .$] If #math.equation(block: false, alt: "A equals 0")[$A = 0$], then #math.equation(block: false, alt: "B equals 0")[$B = 0$] and vice-versa, hence both are nonzero. So #math.equation(block: false, alt: "B equals the fraction h A over the square root of λ")[$B = frac(h A, sqrt(λ))$], and #math.equation(block: false, alt: "0 equals minus A the square root of λ sin open parenthesis the square root of λ close parenthesis plus the fraction h A over the square root of λ the square root of λ cos open parenthesis the square root of λ close parenthesis")[$0 = − A sqrt(λ) sin ( sqrt(λ) ) + frac(h A, sqrt(λ)) sqrt(λ) cos ( sqrt(λ) )$]. As #math.equation(block: false, alt: "A not equal to 0")[$A ≠ 0$] we get #math.equation(block: true, alt: "0 equals minus the square root of λ sin open parenthesis the square root of λ close parenthesis plus h cos open parenthesis the square root of λ close parenthesis ,")[$0 = − sqrt(λ) sin ( sqrt(λ) ) + h cos ( sqrt(λ) ) ,$] or #math.equation(block: true, alt: "the fraction h over the square root of λ equals tan the square root of λ .")[$frac(h, sqrt(λ)) = tan sqrt(λ) .$] Now use a computer to find #math.equation(block: false, alt: "λ sub n")[$λ_(n)$]. There are tables available, though using a computer or a graphing calculator is far more convenient nowadays. Easiest method is to plot the functions #math.equation(block: false, alt: "the fraction h over x")[$frac(h, x)$] and #math.equation(block: false, alt: "tan open parenthesis x close parenthesis")[$tan ( x )$] and see for which they intersect. There is an infinite number of intersections. Denote the first intersection by #math.equation(block: false, alt: "the square root of λ sub 1")[$sqrt(λ_(1))$] the first intersection, by #math.equation(block: false, alt: "the square root of λ sub 2")[$sqrt(λ_(2))$] the second intersection, etc…. For example, when #math.equation(block: false, alt: "h equals 1")[$h = 1$], we get that #math.equation(block: false, alt: "the square root of λ sub 1 approximately equals 0.86 , the square root of λ sub 2 approximately equals 3.43 , . . .")[$sqrt(λ_(1)) ≈ 0.86 , #h(0.222em) sqrt(λ_(2)) ≈ 3.43 , . . .$]. That is #math.equation(block: false, alt: "λ sub 1 approximately equals 0.74 , λ sub 2 approximately equals 11.73 , . . .")[$λ_(1) ≈ 0.74 , #h(0.222em) λ_(2) ≈ 11.73 , . . .$], …. A plot for #math.equation(block: false, alt: "h equals 1")[$h = 1$] is given in Figure #math.equation(block: false, alt: "1")[$1$]. The appropriate eigenfunction (let #math.equation(block: false, alt: "A equals 1")[$A = 1$] for convenience, then #math.equation(block: false, alt: "B equals the fraction h over the square root of λ")[$B = frac(h, sqrt(λ))$]) is The book's Figure 1 unfrozen. The positive crossings of tan(x) and h/x are the values of √λ, and at h = 1 the first two land on the book's own 0.86 and 3.43. Drag h down toward 0 and every crossing slides toward 0, π, 2π, 3π — the Neumann spectrum, which is exactly the y′(0) = 0, y′(1) = 0 problem this section sets as a Your Turn. Drag it up to 5 and they migrate the other way, toward tan's asymptotes at π/2, 3π/2, 5π/2. At every h the crossings run on forever and each is larger than the last, exactly as the theorem on this page promises. {"functions":\[{"color":"\#1f4e79","domain":\[0.02,12\],"expression":"tan(x)","expression2":"","id":"tan-branch","inequality":"lt","lineDash":\[\],"lineWidth":2,"mode":"cartesian","tMax":10,"tMin":-10,"variable":"x","visible":true},{"color":"\#b8442a","domain":\[0.02,12\],"expression":"h/x","expression2":"","id":"h-over-x","inequality":"lt","lineDash":\[\],"lineWidth":2,"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":"param-h","label":"Robin constant h","max":5,"min":0.1,"name":"h","step":0.05,"unit":"","value":1}\],"title":"Robin eigenvalues: tan(x) = h/x","version":1,"viewport":{"centerX":5,"centerY":0,"scale":56}} #math.equation(block: true, alt: "y sub n open parenthesis x close parenthesis equals cos open parenthesis the square root of λ sub n x close parenthesis plus the fraction h over the square root of λ sub n sin open parenthesis the square root of λ sub n x close parenthesis .")[$y_(n) ( x ) = cos ( sqrt(λ_(n)) x ) + frac(h, sqrt(λ_(n))) sin ( sqrt(λ_(n)) x ) .$] When #math.equation(block: false, alt: "h equals 1")[$h = 1$] we get (approximately) #math.equation(block: true, alt: "y sub 1 open parenthesis x close parenthesis approximately equals cos open parenthesis 0.86 x close parenthesis plus the fraction 1 over 0.86 sin open parenthesis 0.86 x close parenthesis , y sub 2 open parenthesis x close parenthesis approximately equals cos open parenthesis 3.43 x close parenthesis plus the fraction 1 over 3.43 sin open parenthesis 3.43 x close parenthesis , . . . .")[$y_(1) ( x ) ≈ cos ( 0.86 x ) + frac(1, 0.86) sin ( 0.86 x ) , #h(1em) y_(2) ( x ) ≈ cos ( 3.43 x ) + frac(1, 3.43) sin ( 3.43 x ) , #h(1em) . . . .$] #figure(figph[graph of y = 1/x and y = tan(x)], alt: "graph of y = 1/x and y = tan(x)", caption: [Figure #math.equation(block: false, alt: "1")[$1$]: Plot of#math.equation(block: false, alt: "the fraction 1 over x")[$frac(1, x)$] and #math.equation(block: false, alt: "tan x")[$tan x$].]) === Orthogonality We have seen the notion of orthogonality before. For example, we have shown that #math.equation(block: false, alt: "sin open parenthesis n x close parenthesis")[$sin ( n x )$] are orthogonal for distinct #math.equation(block: false, alt: "n")[$n$] on #math.equation(block: false, alt: "[ 0 , π ]")[$[ 0 , π ]$]. For general Sturm-Liouville problems we will need a more general setup. Let #math.equation(block: false, alt: "r open parenthesis x close parenthesis")[$r ( x )$] be a #emph[weight function] (any function, though generally we will assume it is positive) on #math.equation(block: false, alt: "[ a , b ]")[$[ a , b ]$]. Two functions #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$], #math.equation(block: false, alt: "g open parenthesis x close parenthesis")[$g ( x )$] are said to be #emph[orthogonal]with respect to the weight function #math.equation(block: false, alt: "r open parenthesis x close parenthesis")[$r ( x )$] when #math.equation(block: true, alt: "∫ a b f open parenthesis x close parenthesis g open parenthesis x close parenthesis r open parenthesis x close parenthesis d x equals 0 .")[$∫_(a)^(b) f ( x ) g ( x ) r ( x ) d x = 0 .$] In this setting, we define the inner product as #math.equation(block: true, alt: "⟨ f , g ⟩ equals d e f ∫ a b f open parenthesis x close parenthesis g open parenthesis x close parenthesis r open parenthesis x close parenthesis d x ,")[$⟨ f , g ⟩ limits(=)^(upright(d) upright(e) upright(f)) ∫_(a)^(b) f ( x ) g ( x ) r ( x ) d x ,$] and then say #math.equation(block: false, alt: "f")[$f$] and #math.equation(block: false, alt: "g")[$g$] are orthogonal whenever #math.equation(block: false, alt: "⟨ f , g ⟩ equals 0")[$⟨ f , g ⟩ = 0$]. The results and concepts are again analogous to finite dimensional linear algebra. The idea of the given inner product is that those #math.equation(block: false, alt: "x")[$x$] where #math.equation(block: false, alt: "r open parenthesis x close parenthesis")[$r ( x )$] is greater have more weight. Nontrivial (nonconstant) #math.equation(block: false, alt: "r open parenthesis x close parenthesis")[$r ( x )$] arise naturally, for example from a change of variables. Hence, you could think of a change of variables such that #math.equation(block: false, alt: "d ξ equals r open parenthesis x close parenthesis d x")[$d ξ = r ( x ) d x$]. Eigenfunctions of a regular Sturm–Liouville problem satisfy an orthogonality property, just like the eigenfunctions in #link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/4%3A_Fourier_series_and_PDEs/4.01%3A_Boundary_value_problems")[Section 4.1]. Its proof is very similar to the analogous Theorem 4.1.1. #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Suppose we have a regular Sturm-Liouville problem #math.equation(block: true, alt: "the fraction d over d x open parenthesis p open parenthesis x close parenthesis the fraction d y over d x close parenthesis minus q open parenthesis x close parenthesis y plus λ r open parenthesis x close parenthesis y equals 0 ,; α sub 1 y open parenthesis a close parenthesis minus α sub 2 y prime open parenthesis a close parenthesis equals 0 ,; β sub 1 y open parenthesis b close parenthesis plus β sub 2 y prime open parenthesis b close parenthesis equals 0 .")[$frac(d, d x) ( p ( x ) frac(d y, d x) ) − q ( x ) y + λ r ( x ) y = 0 , \ α_(1) y ( a ) − α_(2) y^(′) ( a ) = 0 , \ β_(1) y ( b ) + β_(2) y^(′) ( b ) = 0 .$] Let #math.equation(block: false, alt: "y sub j")[$y_(j)$] and #math.equation(block: false, alt: "y sub k")[$y_(k)$] be two distinct eigenfunctions for two distinct eigenvalues #math.equation(block: false, alt: "λ sub j")[$λ_(j)$] and #math.equation(block: false, alt: "λ sub k")[$λ_(k)$]. Then #math.equation(block: true, alt: "∫ a b y sub j open parenthesis x close parenthesis y sub k open parenthesis x close parenthesis r open parenthesis x close parenthesis d x equals 0 ,")[$∫_(a)^(b) y_(j) ( x ) y_(k) ( x ) r ( x ) d x = 0 ,$] that is, #math.equation(block: false, alt: "y sub j")[$y_(j)$] and #math.equation(block: false, alt: "y sub k")[$y_(k)$] are orthogonal with respect to the weight function #math.equation(block: false, alt: "r")[$r$]. ] === Fredholm Alternative We also have the #emph[Fredholm alternative] theorem we talked about before (Theorem 4.1.2) for all regular Sturm-Liouville problems. We state it here for completeness. #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #strong[Fredholm Alternative] Suppose that we have a regular Sturm-Liouville problem. Then either #math.equation(block: true, alt: "the fraction d over d x open parenthesis p open parenthesis x close parenthesis the fraction d y over d x close parenthesis minus q open parenthesis x close parenthesis y plus λ r open parenthesis x close parenthesis y equals 0 ,; α sub 1 y open parenthesis a close parenthesis minus α sub 2 y prime open parenthesis a close parenthesis equals 0 ,; β sub 1 y open parenthesis b close parenthesis plus β sub 2 y prime open parenthesis b close parenthesis equals 0 ,")[$frac(d, d x) ( p ( x ) frac(d y, d x) ) − q ( x ) y + λ r ( x ) y = 0 , \ α_(1) y ( a ) − α_(2) y^(′) ( a ) = 0 , \ β_(1) y ( b ) + β_(2) y^(′) ( b ) = 0 ,$] has a nonzero solution, or #math.equation(block: true, alt: "the fraction d over d x open parenthesis p open parenthesis x close parenthesis the fraction d y over d x close parenthesis minus q open parenthesis x close parenthesis y plus λ r open parenthesis x close parenthesis y equals f open parenthesis x close parenthesis ,; α sub 1 y open parenthesis a close parenthesis minus α sub 2 y prime open parenthesis a close parenthesis equals 0 ,; β sub 1 y open parenthesis b close parenthesis plus β sub 2 y prime open parenthesis b close parenthesis equals 0 ,")[$frac(d, d x) ( p ( x ) frac(d y, d x) ) − q ( x ) y + λ r ( x ) y = f ( x ) , \ α_(1) y ( a ) − α_(2) y^(′) ( a ) = 0 , \ β_(1) y ( b ) + β_(2) y^(′) ( b ) = 0 ,$] has a unique solution for any #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$] continuous on #math.equation(block: false, alt: "[ a , b ]")[$[ a , b ]$]. ] This theorem is used in much the same way as we did before in #link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/4%3A_Fourier_series_and_PDEs/4.04%3A_Sine_and_cosine_series")[Section 4.4]. It is used when solving more general nonhomogeneous boundary value problems. The theorem does not help us solve the problem, but it tells us when a unique solution exists, so that we know when to spend time looking for it. To solve the problem we decompose #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$] and #math.equation(block: false, alt: "y open parenthesis x close parenthesis")[$y ( x )$] in terms of the eigenfunctions of the homogeneous problem, and then solve for the coefficients of the series for #math.equation(block: false, alt: "y open parenthesis x close parenthesis")[$y ( x )$]. === Eigenfunction Series What we want to do with the eigenfunctions once we have them is to compute the #emph[eigenfunction decomposition] of an arbitrary function #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$]. That is, we wish to write #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals ∑ n equals 1 infinity c sub n y sub n open parenthesis x close parenthesis ,")[$f ( x ) = ∑_(n = 1)^(∞) c_(n) y_(n) ( x ) ,$] where #math.equation(block: false, alt: "y sub n open parenthesis x close parenthesis")[$y_(n) ( x )$] the eigenfunctions. We wish to find out if we can represent any function #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$] in this way, and if so, we wish to calculate (and of course we would want to know if the sum converges). OK, so imagine we could write #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$] as (5.1.2). We will assume convergence and the ability to integrate the series term by term. Because of orthogonality we have #math.equation(block: true, alt: "⟨ f , y sub m ⟩ equals ∫ a b f open parenthesis x close parenthesis y sub m open parenthesis x close parenthesis r open parenthesis x close parenthesis d x; equals ∑ n equals 1 infinity c sub n ∫ a b y sub n open parenthesis x close parenthesis y sub m open parenthesis x close parenthesis r open parenthesis x close parenthesis d x; equals c sub m ∫ a b y sub m open parenthesis x close parenthesis y sub m open parenthesis x close parenthesis r open parenthesis x close parenthesis d x equals c sub m ⟨ y sub m , y sub m ⟩ .")[$⟨ f , y_(m) ⟩ = ∫_(a)^(b) f ( x ) y_(m) ( x ) r ( x ) d x \ = ∑_(n = 1)^(∞) c_(n) ∫_(a)^(b) y_(n) ( x ) y_(m) ( x ) r ( x ) d x \ = c_(m) ∫_(a)^(b) y_(m) ( x ) y_(m) ( x ) r ( x ) d x = c_(m) ⟨ y_(m) , y_(m) ⟩ .$] Hence, #math.equation(block: true, alt: "c sub m equals the fraction ⟨ f , y sub m ⟩ over ⟨ y sub m , y sub m ⟩ equals the fraction ∫ a b f open parenthesis x close parenthesis y sub m open parenthesis x close parenthesis r open parenthesis x close parenthesis d x over ∫ a b open parenthesis y sub m open parenthesis x close parenthesis close parenthesis squared r open parenthesis x close parenthesis d x .")[$c_(m) = frac(⟨ f "," y_(m) ⟩, ⟨ y_(m) "," y_(m) ⟩) = frac(∫_(a)^(b) f ( x ) y_(m) ( x ) r ( x ) d x, ∫_(a)^(b) ( y_(m) ( x ) )^(2) r ( x ) d x) .$] Note that #math.equation(block: false, alt: "y sub m")[$y_(m)$] are known up to a constant multiple, so we could have picked a scalar multiple of an eigenfunction such that #math.equation(block: false, alt: "⟨ y sub m , y sub m ⟩ equals 1")[$⟨ y_(m) , y_(m) ⟩ = 1$] (if we had an arbitrary eigenfunction #math.equation(block: false, alt: "y ~ sub m")[$tilde(y)_(m)$], divide it by #math.equation(block: false, alt: "the square root of ⟨ y ~ sub m , y ~ sub m ⟩")[$sqrt(⟨ tilde(y)_(m) "," tilde(y)_(m) ⟩)$]). When #math.equation(block: false, alt: "⟨ y sub m , y sub m ⟩ equals 1")[$⟨ y_(m) , y_(m) ⟩ = 1$] we have the simpler form #math.equation(block: false, alt: "c sub m equals ⟨ f , y sub m ⟩")[$c_(m) = ⟨ f , y_(m) ⟩$] as we did for the Fourier series. The following theorem holds more generally, but the statement given is enough for our purposes. #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Suppose #math.equation(block: false, alt: "f")[$f$] is a piecewise smooth continuous function on . If #math.equation(block: false, alt: "y sub 1 , y sub 2 , …")[$y_(1) , y_(2) , …$] are the eigenfunctions of a regular Sturm-Liouville problem, then there exist real constants #math.equation(block: false, alt: "c sub 1 , c sub 2 , …")[$c_(1) , c_(2) , …$] given by (5.1.3) such that (5.1.2) converges and holds for #math.equation(block: false, alt: "a less than x less than b")[$a < x < b$]. ] #examplebox("Example 4")[][ Take the simple Sturm-Liouville problem #math.equation(block: true, alt: "y double prime plus λ y equals 0 , 0 less than x less than the fraction π over 2 ,; y open parenthesis 0 close parenthesis equals 0 , y prime open parenthesis the fraction π over 2 close parenthesis equals 0 .")[$y^(″) + λ y = 0 , #h(1em) 0 < x < frac(π, 2) , \ y ( 0 ) = 0 , #h(1em) y^(′) ( frac(π, 2) ) = 0 .$] The above is a regular problem and furthermore we know by Theorem #math.equation(block: false, alt: "1")[$1$] that #math.equation(block: false, alt: "λ greater than or equal to 0")[$λ ≥ 0$]. Suppose #math.equation(block: false, alt: "λ equals 0")[$λ = 0$], then the general solution is #math.equation(block: false, alt: "y open parenthesis x close parenthesis A x plus B")[$y ( x ) A x + B$], we plug in the initial conditions to get #math.equation(block: false, alt: "0 equals y open parenthesis 0 close parenthesis equals B")[$0 = y ( 0 ) = B$], and #math.equation(block: false, alt: "0 equals y prime open parenthesis π / 2 close parenthesis equals A")[$0 = y^(′) ( π / 2 ) = A$], hence #math.equation(block: false, alt: "λ equals 0")[$λ = 0$] is not an eigenvalue. The general solution, therefore, is #math.equation(block: true, alt: "y open parenthesis x close parenthesis equals A cos open parenthesis the square root of λ x close parenthesis plus B sin open parenthesis the square root of λ x close parenthesis .")[$y ( x ) = A cos ( sqrt(λ) x ) + B sin ( sqrt(λ) x ) .$] Plugging in the boundary conditions we get #math.equation(block: false, alt: "0 equals y open parenthesis 0 close parenthesis equals A")[$0 = y ( 0 ) = A$] and #math.equation(block: false, alt: "0 equals y prime open parenthesis π / 2 close parenthesis equals the square root of λ B cos open parenthesis the square root of λ the fraction π over 2 close parenthesis")[$0 = y^(′) ( π / 2 ) = sqrt(λ) B cos ( sqrt(λ) frac(π, 2) )$]. #math.equation(block: false, alt: "B")[$B$] cannot be zero and hence #math.equation(block: false, alt: "cos open parenthesis the square root of λ the fraction π over 2 equals 0 close parenthesis")[$cos ( sqrt(λ) frac(π, 2) = 0 )$]. This means that #math.equation(block: false, alt: "the square root of λ the fraction π over 2")[$sqrt(λ) frac(π, 2)$] must be an odd integral multiple of #math.equation(block: false, alt: "the fraction π over 2")[$frac(π, 2)$], i.e. #math.equation(block: false, alt: "open parenthesis 2 n minus 1 close parenthesis the fraction π over 2 equals the square root of λ sub n the fraction π over 2")[$( 2 n − 1 ) frac(π, 2) = sqrt(λ_(n)) frac(π, 2)$]. Hence #math.equation(block: true, alt: "λ sub n equals open parenthesis 2 n minus 1 close parenthesis squared .")[$λ_(n) = ( 2 n − 1 )^(2) .$] We can take #math.equation(block: false, alt: "B equals 1")[$B = 1$]. Hence our eigenfunctions are #math.equation(block: true, alt: "y sub n open parenthesis x close parenthesis equals sin open parenthesis open parenthesis 2 n minus 1 close parenthesis x close parenthesis .")[$y_(n) ( x ) = sin ( ( 2 n − 1 ) x ) .$] Finally we compute #math.equation(block: true, alt: "∫ 0 the fraction π over 2 open parenthesis sin open parenthesis open parenthesis 2 n minus 1 close parenthesis x close parenthesis close parenthesis squared d x equals the fraction π over 4 .")[$∫_(0)^(frac(π, 2)) ( sin ( ( 2 n − 1 ) x ) )^(2) d x = frac(π, 4) .$] So any piecewise smooth function on #math.equation(block: false, alt: "[ 0 , π / 2 ]")[$[ 0 , π / 2 ]$] can be written as #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals ∑ n equals 1 infinity c sub n sin open parenthesis open parenthesis 2 n minus 1 close parenthesis x close parenthesis ,")[$f ( x ) = ∑_(n = 1)^(∞) c_(n) sin ( ( 2 n − 1 ) x ) ,$] where #math.equation(block: true, alt: "c sub n equals the fraction ⟨ f , y sub n ⟩ over ⟨ y sub n , y sub n ⟩ equals the fraction ∫ 0 the fraction π over 2 sin open parenthesis open parenthesis 2 n minus 1 close parenthesis x close parenthesis d x over ∫ 0 the fraction π over 2 open parenthesis sin open parenthesis open parenthesis 2 n minus 1 close parenthesis x close parenthesis close parenthesis squared d x equals the fraction 4 over π ∫ f open parenthesis x close parenthesis 0 the fraction π over 2 sin open parenthesis open parenthesis 2 n minus 1 close parenthesis x close parenthesis d x .")[$c_(n) = frac(⟨ f "," y_(n) ⟩, ⟨ y_(n) "," y_(n) ⟩) = frac(∫_(0)^(frac(π, 2)) sin ( ( 2 n − 1 ) x ) d x, ∫_(0)^(frac(π, 2)) ( sin ( ( 2 n − 1 ) x ) )^(2) d x) = frac(4, π) ∫ f ( x )_(0)^(frac(π, 2)) sin ( ( 2 n − 1 ) x ) d x .$] ] Note that the series converges to an odd #math.equation(block: false, alt: "2 π")[$2 π$]-periodic (not #math.equation(block: false, alt: "π")[$π$]-periodic!) extension of #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$]. #notebox("Your Turn", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ In the above example, the function is defined on #math.equation(block: false, alt: "0 less than x less than π / 2")[$0 < x < π / 2$], yet the series with respect to the eigenfunctions #math.equation(block: false, alt: "sin open parenthesis open parenthesis 2 n minus 1 close parenthesis x close parenthesis")[$sin ( ( 2 n − 1 ) x )$] converges to an odd #math.equation(block: false, alt: "2 π")[$2 π$]-periodic extension of #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$]. Find out how is the extension defined for #math.equation(block: false, alt: "π / 2 less than x less than π")[$π / 2 < x < π$]. ] Let us compute an example. Consider #math.equation(block: false, alt: "f open parenthesis x close parenthesis equals x")[$f ( x ) = x$] for #math.equation(block: false, alt: "0 less than x less than the fraction π over 2")[$0 < x < frac(π, 2)$]. Some calculus later we find #math.equation(block: true, alt: "c sub n equals the fraction 4 over π ∫ 0 the fraction π over 2 f open parenthesis x close parenthesis sin open parenthesis open parenthesis 2 n minus 1 close parenthesis x close parenthesis d x equals the fraction 4 open parenthesis minus 1 close parenthesis to the power n plus 1 over π open parenthesis 2 n minus 1 close parenthesis squared ,")[$c_(n) = frac(4, π) ∫_(0)^(frac(π, 2)) f ( x ) sin ( ( 2 n − 1 ) x ) d x = frac(4 attach(( − 1 ), t: n + 1), π attach(( 2 n − 1 ), t: 2)) ,$] and so for #math.equation(block: false, alt: "x")[$x$] in #math.equation(block: false, alt: "[ 0 , the fraction π over 2 ]")[$[ 0 , frac(π, 2) ]$], #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals ∑ n equals 1 infinity the fraction 4 open parenthesis minus 1 close parenthesis to the power n plus 1 over π open parenthesis 2 n minus 1 close parenthesis squared sin open parenthesis open parenthesis 2 n minus 1 close parenthesis x close parenthesis .")[$f ( x ) = ∑_(n = 1)^(∞) frac(4 attach(( − 1 ), t: n + 1), π attach(( 2 n − 1 ), t: 2)) sin ( ( 2 n − 1 ) x ) .$] This is different from the #math.equation(block: false, alt: "π")[$π$]-periodic regular sine series which can be computed to be #math.equation(block: true, alt: "f open parenthesis x close parenthesis equals ∑ n equals 1 infinity the fraction open parenthesis minus 1 close parenthesis to the power n plus 1 over n sin open parenthesis 2 n x close parenthesis .")[$f ( x ) = limits(∑)^(∞)_(n = 1) frac(( − 1 )^(n + 1), n) sin ( 2 n x ) .$] Both sums converge are equal to #math.equation(block: false, alt: "f open parenthesis x close parenthesis")[$f ( x )$] for #math.equation(block: false, alt: "0 less than x less than the fraction π over 2")[$0 < x < frac(π, 2)$], but the eigenfunctions involved come from different eigenvalue problems. === Footnotes \[1\] Named after the French mathematicians Jacques Charles François Sturm (1803–1855) and Joseph Liouville (1809–1882).