#set document(title: "2.3 Higher order linear ODEs", 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")) == 2.3#h(0.6em)Higher order linear ODEs Equations that appear in applications tend to be second order, although higher order equations do appear from time to time. Hence, it is a generally assumed that the world is “second order” from a modern physics perspective. The basic results about linear ODEs of higher order are essentially the same as for second order equations, with 2 replaced by #math.equation(block: false, alt: "n")[$n$]. The important concept of linear independence is somewhat more complicated when more than two functions are involved. For higher order constant coefficient ODEs, the methods are also somewhat harder to apply, but we will not dwell on these complications. We can always use the methods for systems of linear equations to solve higher order constant coefficient equations. So let us start with a general homogeneous linear equation: #math.equation(block: true, alt: "y to the power open parenthesis n close parenthesis plus p sub n minus 1 open parenthesis x close parenthesis y to the power open parenthesis n minus 1 close parenthesis plus . . . plus p sub 1 open parenthesis x close parenthesis y prime plus p sub o open parenthesis x close parenthesis y equals f open parenthesis x close parenthesis")[$y^(( n )) + p_(n − 1) ( x ) y^(( n − 1 )) + . . . + p_(1) ( x ) y^(′) + p_(o) ( x ) y = f ( x )$] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #strong[Superposition] Suppose #math.equation(block: false, alt: "y sub 1 , y sub 2 , and so on , y sub n")[$y_(1) , y_(2) , … , y_(n)$] are solutions of the homogeneous equation (Equation \\ref{2.3.1}). Then #math.equation(block: true, alt: "y open parenthesis x close parenthesis equals C sub 1 y sub 1 open parenthesis x close parenthesis plus C sub 2 y sub 2 open parenthesis x close parenthesis plus . . . plus C sub n y sub n open parenthesis x close parenthesis")[$y ( x ) = C_(1) y_(1) ( x ) + C_(2) y_(2) ( x ) + . . . + C_(n) y_(n) ( x )$] also solves Equation \\ref{2.3.1} for arbitrary constants #math.equation(block: false, alt: "C sub 1 , . . . . C sub n")[$C_(1) , . . . . C_(n)$]. ] In other words, a linear combination of solutions to Equation \\ref{2.3.1} is also a solution to Equation \\ref{2.3.1}. We also have the existence and uniqueness theorem for nonhomogeneous linear equations. #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #strong[Existence and Uniqueness] Suppose #math.equation(block: false, alt: "p sub o")[$p_(o)$] through #math.equation(block: false, alt: "p sub n minus 1")[$p_(n − 1)$], and #math.equation(block: false, alt: "f")[$f$] are continuous functions on some interval #math.equation(block: false, alt: "I , a")[$I , a$] is a number in #math.equation(block: false, alt: "I")[$I$], and #math.equation(block: false, alt: "b sub 0 , b sub 1 , and so on , b sub n minus 1")[$b_(0) , b_(1) , … , b_(n − 1)$] are constants. The equation #math.equation(block: true, alt: "y to the power open parenthesis n close parenthesis plus p sub n minus 1 open parenthesis x close parenthesis y to the power open parenthesis n minus 1 close parenthesis plus . . . plus p sub 1 open parenthesis x close parenthesis y prime plus p sub o open parenthesis x close parenthesis y equals f open parenthesis x close parenthesis")[$y^(( n )) + p_(n − 1) ( x ) y^(( n − 1 )) + . . . + p_(1) ( x ) y^(′) + p_(o) ( x ) y = f ( x )$] has exactly one solution #math.equation(block: false, alt: "y open parenthesis x close parenthesis")[$y ( x )$] defined on the same interval #math.equation(block: false, alt: "I")[$I$] satisfying the initial conditions #math.equation(block: true, alt: "y open parenthesis a close parenthesis equals b sub 0 , y prime open parenthesis a close parenthesis equals b sub 1 , and so on , y to the power open parenthesis n minus 1 close parenthesis open parenthesis a close parenthesis equals b sub n minus 1")[$y ( a ) = b_(0) , #h(1em) y^(′) ( a ) = b_(1) , #h(1em) … , #h(1em) y^(( n − 1 )) ( a ) = b_(n − 1)$] ] === Linear Independence When we had two functions #math.equation(block: false, alt: "y sub 1")[$y_(1)$] and #math.equation(block: false, alt: "y sub 2")[$y_(2)$] we said they were linearly independent if one was not the multiple of the other. Same idea holds for #math.equation(block: false, alt: "n")[$n$] functions. In this case it is easier to state as follows. The functions #math.equation(block: false, alt: "y sub 1 , y sub 2 , and so on , y sub n")[$y_(1) , y_(2) , … , y_(n)$] are linearly independent if #math.equation(block: true, alt: "c sub 1 y sub 1 plus c sub 2 y sub 2 plus and so on plus c sub n y sub n equals 0")[$c_(1) y_(1) + c_(2) y_(2) + … + c_(n) y_(n) = 0$] has only the trivial solution #math.equation(block: false, alt: "c sub 1 equals c sub 2 equals and so on equals c sub n equals 0")[$c_(1) = c_(2) = … = c_(n) = 0$], where the equation must hold for all #math.equation(block: false, alt: "x")[$x$]. If we can solve equation with some constants where for example #math.equation(block: false, alt: "c sub 1 not equal to 0")[$c_(1) ≠ 0$], then we can solve for #math.equation(block: false, alt: "y sub 1")[$y_(1)$] as a linear combination of the others. If the functions are not linearly independent, they are linearly dependent. #examplebox("Example 1")[][ Show that #math.equation(block: false, alt: "e to the power x")[$e^(x)$], #math.equation(block: false, alt: "e to the power 2 x")[$e^(2 x)$], and #math.equation(block: false, alt: "e to the power 3 x")[$e^(3 x)$] are linearly independent functions. #solutionbox[ Let us give several ways to show this fact. Many textbooks introduce Wronskians, but that is really not necessary to solve this example. Let us write down #math.equation(block: true, alt: "c sub 1 e to the power x plus c sub 2 e to the power 2 x plus c sub 3 e to the power 3 x equals 0")[$c_(1) e^(x) + c_(2) e^(2 x) + c_(3) e^(3 x) = 0$] We use rules of exponentials and write #math.equation(block: false, alt: "z equals e to the power x")[$z = e^(x)$]. Then we have #math.equation(block: true, alt: "c sub 1 z plus c sub 2 z squared plus c sub 3 z cubed equals 0")[$c_(1) z + c_(2) z^(2) + c_(3) z^(3) = 0$] The left hand side is a third degree polynomial in #math.equation(block: false, alt: "z")[$z$]. It can either be identically zero, or it can have at most 3 zeros. Therefore, it is identically zero, #math.equation(block: false, alt: "c sub 1 equals c sub 2 equals c sub 3 equals 0")[$c_(1) = c_(2) = c_(3) = 0$], and the functions are linearly independent. Let us try another way. As before we write #math.equation(block: true, alt: "c sub 1 e to the power x plus c sub 2 e to the power 2 x plus c sub 3 e to the power 3 x equals 0")[$c_(1) e^(x) + c_(2) e^(2 x) + c_(3) e^(3 x) = 0$] This equation has to hold for all #math.equation(block: false, alt: "x")[$x$]. What we could do is divide through by #math.equation(block: false, alt: "e to the power 3 x")[$e^(3 x)$] to get #math.equation(block: true, alt: "c sub 1 e to the power minus 2 x plus c sub 2 e to the power minus x plus c sub 3 equals 0")[$c_(1) e^(− 2 x) + c_(2) e^(− x) + c_(3) = 0$] As the equation is true for all #math.equation(block: false, alt: "x")[$x$], let #math.equation(block: false, alt: "x → infinity")[$x → ∞$]. After taking the limit we see that #math.equation(block: false, alt: "c sub 3 equals 0")[$c_(3) = 0$]. Hence our equation becomes #math.equation(block: true, alt: "c sub 1 e to the power x plus c sub 2 e to the power 2 x equals 0")[$c_(1) e^(x) + c_(2) e^(2 x) = 0$] Rinse, repeat! How about yet another way. We again write #math.equation(block: true, alt: "c sub 1 e to the power x plus c sub 2 e to the power 2 x plus c sub 3 e to the power 3 x equals 0")[$c_(1) e^(x) + c_(2) e^(2 x) + c_(3) e^(3 x) = 0$] We can evaluate the equation and its derivatives at different values of #math.equation(block: false, alt: "x")[$x$] to obtain equations for #math.equation(block: false, alt: "c sub 1")[$c_(1)$], #math.equation(block: false, alt: "c sub 2")[$c_(2)$], and #math.equation(block: false, alt: "c sub 3")[$c_(3)$]. Let us first divide by #math.equation(block: false, alt: "e to the power x")[$e^(x)$] for simplicity. #math.equation(block: true, alt: "c sub 1 plus c sub 2 e to the power x plus c sub 3 e to the power 2 x equals 0")[$c_(1) + c_(2) e^(x) + c_(3) e^(2 x) = 0$] We set #math.equation(block: false, alt: "x equals 0")[$x = 0$] to get the equation #math.equation(block: false, alt: "c sub 1 plus c sub 2 plus c sub 3 equals 0")[$c_(1) + c_(2) + c_(3) = 0$]. Now differentiate both sides #math.equation(block: true, alt: "c sub 2 e to the power x plus 2 c sub 3 e to the power 2 x equals 0")[$c_(2) e^(x) + 2 c_(3) e^(2 x) = 0$] We set #math.equation(block: false, alt: "x equals 0")[$x = 0$] to get #math.equation(block: false, alt: "c sub 2 plus 2 c sub 3 equals 0")[$c_(2) + 2 c_(3) = 0$]. We divide by #math.equation(block: false, alt: "e to the power x")[$e^(x)$] again and differentiate to get #math.equation(block: false, alt: "2 c sub 3 e to the power x equals 0")[$2 c_(3) e^(x) = 0$]. It is clear that #math.equation(block: false, alt: "c sub 3")[$c_(3)$] is zero. Then #math.equation(block: false, alt: "c sub 2")[$c_(2)$] must be zero as #math.equation(block: false, alt: "c sub 2 equals minus 2 c sub 3")[$c_(2) = − 2 c_(3)$], and #math.equation(block: false, alt: "c sub 1")[$c_(1)$] must be zero because #math.equation(block: false, alt: "c sub 1 plus c sub 2 plus c sub 3 equals 0")[$c_(1) + c_(2) + c_(3) = 0$]. There is no one best way to do it. All of these methods are perfectly valid. The important thing is to understand why the functions are linearly independent. ] ] #examplebox("Example 2")[][ On the other hand, the functions #math.equation(block: false, alt: "e to the power x , e to the power minus x")[$e^(x) , e^(− x)$] and #math.equation(block: false, alt: "cosh x")[$cosh x$] are linearly dependent. Simply apply definition of the hyperbolic cosine: #math.equation(block: true, alt: "cosh x equals the fraction e to the power x plus e to the power minus x over 2 or 2 cosh x minus e to the power x minus e to the power minus x equals 0")[$cosh x = frac(e^(x) + e^(− x), 2) #h(1em) "or" #h(1em) 2 cosh x − e^(x) − e^(− x) = 0$] ] === Constant Coefficient Higher Order ODEs When we have a higher order constant coefficient homogeneous linear equation, the song and dance is exactly the same as it was for second order. We just need to find more solutions. If the equation is #math.equation(block: false, alt: "n to the power t h")[$n^(t h)$] order we need to find #math.equation(block: false, alt: "n")[$n$] linearly independent solutions. It is best seen by example. #examplebox("Example 3")[Third order ODE with Constant Coefficients][ Find the general solution to #math.equation(block: true, alt: "y to the power ‴ minus 3 double prime minus y prime plus 3 y equals 0")[$y^(‴) − 3^(″) − y^(′) + 3 y = 0$] #solutionbox[ Try: #math.equation(block: false, alt: "y equals e to the power r x")[$y = e^(r x)$]. We plug in and get #math.equation(block: true, alt: "r cubed e to the power r x ⏟ y to the power ‴ minus 3 r squared e to the power r x ⏟ y double prime minus r e to the power r x ⏟ y prime plus 3 e to the power r x ⏟ y equals 0 .")[$limits(underbrace(r^(3) e^(r x)))_(y^(‴)) − 3 limits(underbrace(r^(2) e^(r x)))_(y^(″)) − limits(underbrace(r e^(r x)))_(y^(′)) + 3 limits(underbrace(e^(r x)))_(y) = 0 .$] We divide through by #math.equation(block: false, alt: "e to the power r x")[$e^(r x)$]. Then #math.equation(block: true, alt: "r cubed minus 3 r squared minus r plus 3 equals 0")[$r^(3) − 3 r^(2) − r + 3 = 0$] The trick now is to find the roots. There is a formula for the roots of degree 3 and 4 polynomials, but it is very complicated. There is no formula for higher degree polynomials. That does not mean that the roots do not exist. There are always #math.equation(block: false, alt: "n")[$n$] roots for an #math.equation(block: false, alt: "n to the power t h")[$n^(t h)$] degree polynomial. They may be repeated and they may be complex. Computers are pretty good at finding roots approximately for reasonable size polynomials. A good place to start is to plot the polynomial and check where it is zero. We can also simply try plugging in. We just start plugging in numbers #math.equation(block: false, alt: "r equals minus 2 , minus 1 , 0 , 1 , 2 , and so on")[$r = − 2 , − 1 , 0 , 1 , 2 , …$] and see if we get a hit (we can also try complex numbers). Even if we do not get a hit, we may get an indication of where the root is. For example, we plug #math.equation(block: false, alt: "r equals minus 2")[$r = − 2$] into our polynomial and get -15; we plug in #math.equation(block: false, alt: "r equals 0")[$r = 0$] and get 3. That means there is a root between #math.equation(block: false, alt: "r equals minus 2")[$r = − 2$] and #math.equation(block: false, alt: "r equals 0")[$r = 0$], because the sign changed. If we find one root, say #math.equation(block: false, alt: "r sub 1")[$r_(1)$], then we know #math.equation(block: false, alt: "open parenthesis r minus r sub 1 close parenthesis")[$( r − r_(1) )$] is a factor of our polynomial. Polynomial long division can then be used. A good strategy is to begin with #math.equation(block: false, alt: "r equals minus 1")[$r = − 1$], 1, or 0. These are easy to compute. Our polynomial happens to have two such roots, #math.equation(block: false, alt: "r sub 1 equals minus 1")[$r_(1) = − 1$] and #math.equation(block: false, alt: "r sub 2 equals 1")[$r_(2) = 1$] and. There should be three roots and the last root is reasonably easy to find. The constant term in a monic#math.equation(block: false, alt: "to the power 1")[$1$] polynomial such as this is the multiple of the negations of all the roots because #math.equation(block: false, alt: "r cubed minus 3 r squared minus r plus 3 equals open parenthesis r minus r sub 1 close parenthesis open parenthesis r minus r sub 2 close parenthesis open parenthesis r minus r sub 3 close parenthesis")[$r^(3) − 3 r^(2) − r + 3 = ( r − r_(1) ) ( r − r_(2) ) ( r − r_(3) )$]. So #math.equation(block: true, alt: "3 equals open parenthesis minus r sub 1 close parenthesis open parenthesis minus r sub 2 close parenthesis open parenthesis minus r sub 3 close parenthesis equals open parenthesis 1 close parenthesis open parenthesis minus 1 close parenthesis open parenthesis minus r sub 3 close parenthesis equals r sub 3")[$3 = ( − r_(1) ) ( − r_(2) ) ( − r_(3) ) = ( 1 ) ( − 1 ) ( − r_(3) ) = r_(3)$] You should check that #math.equation(block: false, alt: "r sub 3 equals 3")[$r_(3) = 3$] really is a root. Hence we know that #math.equation(block: false, alt: "e to the power minus x")[$e^(− x)$], #math.equation(block: false, alt: "e to the power x")[$e^(x)$], and #math.equation(block: false, alt: "e to the power 3 x")[$e^(3 x)$] are solutions to (2.3.2). They are linearly independent as can easily be checked, and there are three of them, which happens to be exactly the number we need. Hence the general solution is #math.equation(block: true, alt: "y equals C sub 1 e to the power minus x plus C sub 2 e to the power x plus C sub 3 e to the power 3 x")[$y = C_(1) e^(− x) + C_(2) e^(x) + C_(3) e^(3 x)$] Suppose we were given some initial conditions #math.equation(block: false, alt: "y open parenthesis 0 close parenthesis equals 1 , y prime open parenthesis 0 close parenthesis equals 2")[$y ( 0 ) = 1 , y^(′) ( 0 ) = 2$], and #math.equation(block: false, alt: "y double prime open parenthesis 0 close parenthesis equals 3")[$y^(″) ( 0 ) = 3$]. Then #math.equation(block: true, alt: "1 equals y open parenthesis 0 close parenthesis equals C sub 1 plus C sub 2 plus C sub 3; 2 equals y prime open parenthesis 0 close parenthesis equals minus C sub 1 plus C sub 2 plus 3 C sub 3; 3 equals y double prime open parenthesis 0 close parenthesis equals C sub 1 plus C sub 2 plus 9 C sub 3")[$1 = y ( 0 ) = C_(1) + C_(2) + C_(3) \ 2 = y^(′) ( 0 ) = − C_(1) + C_(2) + 3 C_(3) \ 3 = y^(″) ( 0 ) = C_(1) + C_(2) + 9 C_(3)$] It is possible to find the solution by high school algebra, but it would be a pain. The sensible way to solve a system of equations such as this is to use matrix algebra, see#link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/3%3A_Systems_of_ODEs/3.2%3A_Matrices_and_linear_systems")[Section 3.2] or Appendix A. For now we note that the solution is #math.equation(block: false, alt: "C sub 1 equals minus the fraction 1 over 4")[$C_(1) = − frac(1, 4)$], #math.equation(block: false, alt: "C sub 2 equals 1")[$C_(2) = 1$], and #math.equation(block: false, alt: "C sub 3 equals the fraction 1 over 4")[$C_(3) = frac(1, 4)$]. The specific solution to the ODE is #math.equation(block: true, alt: "y equals minus the fraction 1 over 4 e to the power minus x plus e to the power x plus the fraction 1 over 4 e to the power 3 x")[$y = − frac(1, 4) e^(− x) + e^(x) + frac(1, 4) e^(3 x)$] Next, suppose that we have real roots, but they are repeated. Let us say we have a root #math.equation(block: false, alt: "r")[$r$] repeated #math.equation(block: false, alt: "k")[$k$] times. In the spirit of the second order solution, and for the same reasons, we have the solutions #math.equation(block: true, alt: "e to the power r x , x e to the power r x , x squared e to the power r x , and so on , x to the power k minus 1 e to the power r x")[$e^(r x) , x e^(r x) , x^(2) e^(r x) , … , x^(k − 1) e^(r x)$] We take a linear combination of these solutions to find the general solution. ] ] #examplebox("Example 4")[][ Solve #math.equation(block: true, alt: "y to the power open parenthesis 4 close parenthesis minus 3 y to the power ‴ plus 3 y double prime minus y prime equals 0")[$y^(( 4 )) − 3 y^(‴) + 3 y^(″) − y^(′) = 0$] #solutionbox[ We note that the characteristic equation is #math.equation(block: true, alt: "r to the power 4 minus 3 r cubed plus 3 r squared minus r equals 0")[$r^(4) − 3 r^(3) + 3 r^(2) − r = 0$] By inspection we note that #math.equation(block: false, alt: "r to the power 4 minus 3 r cubed plus 3 r squared minus r equals r open parenthesis r minus 1 close parenthesis cubed")[$r^(4) − 3 r^(3) + 3 r^(2) − r = r attach(( r − 1 ), t: 3)$]. Hence the roots given with multiplicity are #math.equation(block: false, alt: "r equals 0 , 1 , 1 , 1")[$r = 0 , 1 , 1 , 1$]. Thus the general solution is #math.equation(block: true, alt: "y equals open parenthesis C sub 1 plus C sub 2 plus C sub 3 x squared close parenthesis e to the power x ⏟ terms coming from r = 1 plus C sub 4 ⏟ from r = 0")[$y = limits(underbrace(( C_(1) + C_(2) + C_(3) x^(2) ) e^(x)))_("terms coming from r = 1") + limits(underbrace(C_(4)))_("from r = 0")$] The case of complex roots is similar to second order equations. Complex roots always come in pairs #math.equation(block: false, alt: "r equals α ± i β")[$r = α ± i β$]. Suppose we have two such complex roots, each repeated #math.equation(block: false, alt: "k")[$k$] times. The corresponding solution is #math.equation(block: true, alt: "open parenthesis C sub 0 plus C sub 1 x plus and so on plus C sub k minus 1 x to the power k minus 1 close parenthesis e to the power a x cos open parenthesis β x close parenthesis plus open parenthesis D sub 0 plus D sub 1 x plus and so on plus D sub k minus 1 x to the power k minus 1 close parenthesis e to the power a x sin open parenthesis β x close parenthesis")[$( C_(0) + C_(1) x + … + C_(k − 1) x^(k − 1) ) e^(a x) cos ( β x ) + ( D_(0) + D_(1) x + … + D_(k − 1) x^(k − 1) ) e^(a x) sin ( β x )$] where #math.equation(block: false, alt: "C sub 0 , and so on , C sub k minus 1 , D sub 0 , and so on , D sub k minus 1")[$C_(0) , … , C_(k − 1) , D_(0) , … , D_(k − 1)$] are arbitrary constants. ] ] #examplebox("Example 5")[][ Solve #math.equation(block: true, alt: "y to the power open parenthesis 4 close parenthesis minus 4 y to the power ‴ plus 8 y double prime minus 8 y prime plus 4 y equals 0")[$y^(( 4 )) − 4 y^(‴) + 8 y^(″) − 8 y^(′) + 4 y = 0$] #solutionbox[ The characteristic equation is #math.equation(block: true, alt: "r to the power 4 minus 4 r cubed plus 8 r squared minus 8 r plus 4 equals 0; open parenthesis r squared minus 2 r plus 2 close parenthesis squared equals 0; open parenthesis open parenthesis r minus 1 close parenthesis squared plus 1 close parenthesis squared equals 0")[$r^(4) − 4 r^(3) + 8 r^(2) − 8 r + 4 = 0 \ attach(( r^(2) − 2 r + 2 ), t: 2) = 0 \ attach(( attach(( r − 1 ), t: 2) + 1 ), t: 2) = 0$] Hence the roots are #math.equation(block: false, alt: "1 ± i")[$1 ± i$], both with multiplicity 2. Hence the general solution to the ODE is #math.equation(block: true, alt: "y equals open parenthesis C sub 1 plus C sub 2 x close parenthesis e to the power x cos x plus open parenthesis C sub 3 plus C sub 4 x close parenthesis e to the power x sin x")[$y = ( C_(1) + C_(2) x ) e^(x) cos x + ( C_(3) + C_(4) x ) e^(x) sin x$] The way we solved the characteristic equation above is really by guessing or by inspection. It is not so easy in general. We could also have asked a computer or an advanced calculator for the roots. ] ] === Footnotes \[1\] The word monic means that the coefficient of the top degree #math.equation(block: false, alt: "r to the power d")[$r^(d)$], in our case #math.equation(block: false, alt: "r cubed")[$r^(3)$], is #math.equation(block: false, alt: "1")[$1$]. === Outside Links - After reading this lecture, it may be good to try Project III from the IODE website: www.math.uiuc.edu/iode/.