#set document(title: "8.1 Linearization, Critical Points, and Equilibria", 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")) == 8.1#h(0.6em)Linearization, Critical Points, and Equilibria Except for a few brief detours in #link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/1%3A_First_order_ODEs")[Chapter 1], we considered mostly linear equations. Linear equations suffice in many applications, but in reality most phenomena require nonlinear equations. Nonlinear equations, however, are notoriously more difficult to understand than linear ones, and many strange new phenomena appear when we allow our equations to be nonlinear. Not to worry, we did not waste all this time studying linear equations. Nonlinear equations can often be approximated by linear ones if we only need a solution "locally," for example, only for a short period of time, or only for certain parameters. Understanding linear equations can also give us qualitative understanding about a more general nonlinear problem. The idea is similar to what you did in calculus in trying to approximate a function by a line with the right slope. In #link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/2%3A_Higher_order_linear_ODEs/2.4%3A_Mechanical_Vibrations")[Section 2.4] we looked at the pendulum of mass #math.equation(block: false, alt: "m")[$m$] and length #math.equation(block: false, alt: "L")[$L$]. The goal was to solve for the angle #math.equation(block: false, alt: "θ open parenthesis t close parenthesis")[$θ ( t )$] as a function of the time #math.equation(block: false, alt: "t")[$t$]. The equation for the setup is the nonlinear equation #math.equation(block: true, alt: "θ double prime plus the fraction g over L sin θ equals 0 .")[$θ^(″) + frac(g, L) sin θ = 0 .$] #figure(figph[Picture of a pendulum of mass m, length L and angle theta.], alt: "Picture of a pendulum of mass m, length L and angle theta.", caption: [Figure #math.equation(block: false, alt: "1")[$1$]]) Instead of solving this equation, we solved the rather easier linear equation #math.equation(block: true, alt: "θ double prime plus the fraction g over L θ equals 0 .")[$θ^(″) + frac(g, L) θ = 0 .$] While the solution to the linear equation is not exactly what we were looking for, it is rather close to the original, as long as the angle #math.equation(block: false, alt: "θ")[$θ$] is small and the time period involved is short. You might ask: Why don't we just solve the nonlinear problem? Well, it might be very difficult, impractical, or impossible to solve analytically,depending on the equation in question. We may not even be interested in the actual solution, we might only be interested in some qualitative idea of what the solution is doing. For example, what happens as time goes to infinity? === Autonomous Systems and Phase Plane Analysis We restrict our attention to a two dimensional autonomous system #math.equation(block: true, alt: "x prime equals f open parenthesis x , y close parenthesis , y prime equals g open parenthesis x , y close parenthesis ,")[$x^(′) = f ( x , y ) , #h(2em) y^(′) = g ( x , y ) ,$] where #math.equation(block: false, alt: "f open parenthesis x , y close parenthesis")[$f ( x , y )$] and #math.equation(block: false, alt: "g open parenthesis x , y close parenthesis")[$g ( x , y )$] are functions of two variables, and the derivatives are taken with respect to time #math.equation(block: false, alt: "t")[$t$]. Solutions are functions #math.equation(block: false, alt: "x open parenthesis t close parenthesis")[$x ( t )$] and #math.equation(block: false, alt: "y open parenthesis t close parenthesis")[$y ( t )$] such that #math.equation(block: true, alt: "x prime open parenthesis t close parenthesis equals f open parenthesis x open parenthesis t close parenthesis , y open parenthesis t close parenthesis close parenthesis , y prime open parenthesis t close parenthesis equals g open parenthesis x open parenthesis t close parenthesis , y open parenthesis t close parenthesis close parenthesis .")[$x^(′) ( t ) = f ( x ( t ) , y ( t ) ) , #h(2em) y^(′) ( t ) = g ( x ( t ) , y ( t ) ) .$] The way we will analyze the system is very similar to #link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/1%3A_First_order_ODEs/1.6%3A_Autonomous_equations")[Section 1.6], where we studied a single autonomous equation. The ideas in two dimensions are the same, but the behavior can be far more complicated. It may be best to think of the system of equations as the single vector equation #math.equation(block: true, alt: "[ to the power x; y equals [ f open parenthesis x , y close parenthesis; g open parenthesis x , y close parenthesis ] .")[$\[^(x \ y) = \[ f \( x , y \) \ g \( x , y \) \] .$] As in #link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/3%3A_Systems_of_ODEs/3.1%3A_Introduction_to_Systems_of_ODEs")[Section 3.1] we draw the #emph[phase portrait] (or #emph[phase diagram]), where each point #math.equation(block: false, alt: "open parenthesis x , y close parenthesis")[$( x , y )$] corresponds to a specific state of the system. We draw the #emph[vector field]given at each point #math.equation(block: false, alt: "open parenthesis x , y close parenthesis")[$( x , y )$] by the vector #math.equation(block: false, alt: "[ f open parenthesis x , y close parenthesis; g open parenthesis x , y close parenthesis ]")[$[ f ( x , y ) \ g ( x , y ) ]$]. And as before if we find solutions, we draw the trajectories by plotting all points #math.equation(block: false, alt: "open parenthesis x open parenthesis t close parenthesis , y open parenthesis t close parenthesis close parenthesis")[$( x ( t ) , y ( t ) )$] for a certain range of #math.equation(block: false, alt: "t")[$t$]. #examplebox("Example 1")[][ Consider the second order equation #math.equation(block: false, alt: "x double prime equals minus x plus x squared")[$x^(″) = − x + x^(2)$]. Write this equation as a first order nonlinear system #math.equation(block: true, alt: "x prime equals y , y prime equals minus x plus x squared .")[$x^(′) = y , #h(2em) y^(′) = − x + x^(2) .$] The phase portrait with some trajectories is drawn in Figure #math.equation(block: false, alt: "2")[$2$]. #figure(figph[Phase portrait with some trajectories of x'=y, y' = -x+x^2], alt: "Phase portrait with some trajectories of x'=y, y' = -x+x^2", caption: [Figure #math.equation(block: false, alt: "2")[$2$]: Phase portrait with some trajectories of #math.equation(block: false, alt: "x prime equals y")[$x^(′) = y$], #math.equation(block: false, alt: "y prime equals minus x plus x squared")[$y^(′) = − x + x^(2)$].]) From the phase portrait it should be clear that even this simple system has fairly complicated behavior. Some trajectories keep oscillating around the origin, and some go off towards infinity. We will return to this example often, and analyze it completely in this (and the next) section. ] If we zoom into the diagram near a point where #math.equation(block: false, alt: "[ f open parenthesis x , y close parenthesis; g open parenthesis x , y close parenthesis ]")[$[ f ( x , y ) \ g ( x , y ) ]$] is not zero, then nearby the arrows point generally in essentially that same direction and have essentially the same magnitude. In other words the behavior is not that interesting near such a point. We are of course assuming that #math.equation(block: false, alt: "f open parenthesis x , y close parenthesis")[$f ( x , y )$] and #math.equation(block: false, alt: "g open parenthesis x , y close parenthesis")[$g ( x , y )$] are continuous. Let us concentrate on those points in the phase diagram above where the trajectories seem to start, end, or go around. We see two such points: #math.equation(block: false, alt: "open parenthesis 0 , 0 close parenthesis")[$( 0 , 0 )$] and #math.equation(block: false, alt: "open parenthesis 1 , 0 close parenthesis")[$( 1 , 0 )$]. The trajectories seem to go around the point #math.equation(block: false, alt: "open parenthesis 0 , 0 close parenthesis")[$( 0 , 0 )$], and they seem to either go in or out of the point #math.equation(block: false, alt: "open parenthesis 1 , 0 close parenthesis")[$( 1 , 0 )$]. These points are precisely those points where the derivatives of both #math.equation(block: false, alt: "x")[$x$] and #math.equation(block: false, alt: "y")[$y$] are zero. Let us define the #emph[critical points] as the points #math.equation(block: false, alt: "open parenthesis x , y close parenthesis")[$( x , y )$] such that #math.equation(block: true, alt: "[ f open parenthesis x , y close parenthesis; g open parenthesis x , y close parenthesis ] equals 0 → .")[$[ f ( x , y ) \ g ( x , y ) ] = arrow(0) .$] In other words, the points where both #math.equation(block: false, alt: "f open parenthesis x , y close parenthesis equals 0")[$f ( x , y ) = 0$] and #math.equation(block: false, alt: "g open parenthesis x , y close parenthesis equals 0")[$g ( x , y ) = 0$]. The critical points are where the behavior of the system is in some sense the most complicated. If #math.equation(block: false, alt: "[ f open parenthesis x , y close parenthesis; g open parenthesis x , y close parenthesis ]")[$[ f ( x , y ) \ g ( x , y ) ]$] is zero, then nearby, the vector can point in any direction whatsoever. Also, the trajectories are either going towards, away from, or around these points, so if we are looking for long term behavior of the system, we should look at what happens there. Critical points are also sometimes called #emph[equilibria], since we have so-called #emph[equilibrium solutions] at critical points. If #math.equation(block: false, alt: "open parenthesis x sub 0 , y sub 0 close parenthesis")[$( x_(0) , y_(0) )$] is a critical point, then we have the solutions #math.equation(block: true, alt: "x open parenthesis t close parenthesis equals x sub 0 , y open parenthesis t close parenthesis equals y sub 0 .")[$x ( t ) = x_(0) , #h(1em) y ( t ) = y_(0) .$] In Example #math.equation(block: false, alt: "1")[$1$], there are two equilibrium solutions: #math.equation(block: true, alt: "x open parenthesis t close parenthesis equals 0 , y open parenthesis t close parenthesis equals 0 , and x open parenthesis t close parenthesis equals 1 , y open parenthesis t close parenthesis equals 0 .")[$x ( t ) = 0 , #h(1em) y ( t ) = 0 , #h(2em) "and" #h(2em) x ( t ) = 1 , #h(1em) y ( t ) = 0 .$] Compare this discussion on equilibria to the discussion in #link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/1%3A_First_order_ODEs/1.6%3A_Autonomous_equations")[Section 1.6]. The underlying concept is exactly the same. === Linearization In #link("https://math.libretexts.org/Bookshelves/Differential_Equations/Differential_Equations_for_Engineers_(Lebl)/3%3A_Systems_of_ODEs/3.5%3A_Two_dimensional_systems_and_their_vector_fields")[Section 3.5] we studied the behavior of a homogeneous linear system of two equations near a critical point. For a linear system of two variables the only critical point is generally the origin #math.equation(block: false, alt: "open parenthesis 0 , 0 close parenthesis")[$( 0 , 0 )$]. Let us put the understanding we gained in that section to good use understanding what happens near critical points of nonlinear systems. In calculus we learned to estimate a function by taking its derivative and linearizing. We work similarly with nonlinear systems of ODE. Suppose #math.equation(block: false, alt: "open parenthesis x sub 0 , y sub 0 close parenthesis")[$( x_(0) , y_(0) )$] is a critical point. First change variables to #math.equation(block: false, alt: "open parenthesis u , v close parenthesis")[$( u , v )$], so that #math.equation(block: false, alt: "open parenthesis u , v close parenthesis equals open parenthesis 0 , 0 close parenthesis")[$( u , v ) = ( 0 , 0 )$] corresponds to #math.equation(block: false, alt: "open parenthesis x sub 0 , y sub 0 close parenthesis")[$( x_(0) , y_(0) )$]. That is, #math.equation(block: true, alt: "u equals x minus x sub 0 , v equals y minus y sub 0 .")[$u = x − x_(0) , #h(2em) v = y − y_(0) .$] Next we need to find the derivative. In multivariable calculus you may have seen that the several variables version of the derivative is the #emph[Jacobian matrix]#math.equation(block: false, alt: "to the power 1")[$1$]. The Jacobian matrix of the vector-valued function #math.equation(block: false, alt: "[ f open parenthesis x , y close parenthesis; g open parenthesis x , y close parenthesis ]")[$[ f ( x , y ) \ g ( x , y ) ]$] at #math.equation(block: false, alt: "open parenthesis x sub 0 , y sub 0 close parenthesis")[$( x_(0) , y_(0) )$] is #math.equation(block: true, alt: "[ the fraction ∂ f over ∂ x open parenthesis x sub 0 , y sub 0 close parenthesis the fraction ∂ f over ∂ y open parenthesis x sub 0 , y sub 0 close parenthesis; the fraction ∂ g over ∂ x open parenthesis x sub 0 , y sub 0 close parenthesis the fraction ∂ g over ∂ y open parenthesis x sub 0 , y sub 0 close parenthesis ] .")[$[ frac(∂ f, ∂ x) ( x_(0) , y_(0) ) " " " " " " " " frac(∂ f, ∂ y) ( x_(0) , y_(0) ) \ frac(∂ g, ∂ x) ( x_(0) , y_(0) ) " " " " " " " " frac(∂ g, ∂ y) ( x_(0) , y_(0) ) ] .$] This matrix gives the best linear approximation as #math.equation(block: false, alt: "u")[$u$] and #math.equation(block: false, alt: "v")[$v$] (and therefore #math.equation(block: false, alt: "x")[$x$] and #math.equation(block: false, alt: "y")[$y$]) vary. We define the #emph[linearization] of the equation (8.1.1) as the linear system #math.equation(block: true, alt: "[ to the power u; v equals [ the fraction ∂ f over ∂ x open parenthesis x sub 0 , y sub 0 close parenthesis the fraction ∂ f over ∂ y open parenthesis x sub 0 , y sub 0 close parenthesis; the fraction ∂ g over ∂ x open parenthesis x sub 0 , y sub 0 close parenthesis the fraction ∂ g over ∂ y open parenthesis x sub 0 , y sub 0 close parenthesis ] [ u; v ] .")[$\[^(u \ v) = \[ frac(∂ f, ∂ x) \( x_(0) , y_(0) \) " " " " " " " " frac(∂ f, ∂ y) \( x_(0) , y_(0) \) \ frac(∂ g, ∂ x) \( x_(0) , y_(0) \) " " " " " " " " frac(∂ g, ∂ y) \( x_(0) , y_(0) \) \] \[ u \ v \] .$] #examplebox("Example 2")[][ Let us keep with the same equations as Example #math.equation(block: false, alt: "1")[$1$]: #math.equation(block: false, alt: "x prime equals y")[$x^(′) = y$], #math.equation(block: false, alt: "y prime equals minus x plus x squared")[$y^(′) = − x + x^(2)$]. There are two critical points, #math.equation(block: false, alt: "open parenthesis 0 , 0 close parenthesis")[$( 0 , 0 )$]and #math.equation(block: false, alt: "open parenthesis 1 , 0 close parenthesis")[$( 1 , 0 )$]. The Jacobian matrix at any point is #math.equation(block: true, alt: "[ the fraction ∂ f over ∂ x open parenthesis x , y close parenthesis the fraction ∂ f over ∂ y open parenthesis x , y close parenthesis; the fraction ∂ g over ∂ x open parenthesis x , y close parenthesis the fraction ∂ g over ∂ y open parenthesis x , y close parenthesis ] equals [ 0, 1; minus 1 plus 2 x, 0 ] .")[$[ frac(∂ f, ∂ x) ( x , y ) " " " " " " " " frac(∂ f, ∂ y) ( x , y ) \ frac(∂ g, ∂ x) ( x , y ) " " " " " " " " frac(∂ g, ∂ y) ( x , y ) ] = [ 0 & 1 \ − 1 + 2 x & 0 ] .$] Therefore at #math.equation(block: false, alt: "open parenthesis 0 , 0 close parenthesis")[$( 0 , 0 )$], we have #math.equation(block: false, alt: "u equals x")[$u = x$] and #math.equation(block: false, alt: "v equals y")[$v = y$], and the linearization is #math.equation(block: true, alt: "[ to the power u; v equals [ 0, 1; minus 1, 0 ] [ u; v ] ,")[$\[^(u \ v) = \[ 0 & 1 \ − 1 & 0 \] \[ u \ v \] ,$] where #math.equation(block: false, alt: "u equals x")[$u = x$] and #math.equation(block: false, alt: "v equals y")[$v = y$]. At the point #math.equation(block: false, alt: "open parenthesis 1 , 0 close parenthesis")[$( 1 , 0 )$], we have #math.equation(block: false, alt: "u equals x minus 1")[$u = x − 1$] and #math.equation(block: false, alt: "v equals y")[$v = y$], and the linearization is #math.equation(block: true, alt: "[ to the power u; v equals [ 0, 1; 1, 0 ] [ u; v ] .")[$\[^(u \ v) = \[ 0 & 1 \ 1 & 0 \] \[ u \ v \] .$] The phase diagrams of the two linearizations at the point #math.equation(block: false, alt: "open parenthesis 0 , 0 close parenthesis")[$( 0 , 0 )$] and #math.equation(block: false, alt: "open parenthesis 1 , 0 close parenthesis")[$( 1 , 0 )$] are given in Figure #math.equation(block: false, alt: "3")[$3$]. Note that the variables are now #math.equation(block: false, alt: "u")[$u$] and #math.equation(block: false, alt: "v")[$v$]. Compare Figure #math.equation(block: false, alt: "3")[$3$] with Figure #math.equation(block: false, alt: "2")[$2$], and look especially at the behavior near the critical points. The book's own Jacobian J(x,y) = \[\[0, 1\], \[-1+2x, 0\]\] for x′ = y, y′ = −x + x², with the base point's x-coordinate c on a slider. At c = 0 this is exactly the linearization at the critical point (0, 0), and at c = 1 exactly the one at (1, 0) — the two panels of the book's Figure 3, just below. Drag c and watch λ = ±√(2c−1) travel: the center's closed orbits flatten, collapse at c = 1/2 into a line of equilibria where both eigenvalues are 0, then open into the saddle's two straight-line eigendirections. Only c = 0 and c = 1 sit at critical points; in between you are watching the Jacobian itself change. {"functions":\[{"color":"\#1f4e79","domain":null,"expression":"","expression2":"","id":"fn-jacobian-family","inequality":"lt","lineDash":\[\],"lineWidth":2,"matrix":\["0","1","-1+2\*c","0"\],"mode":"phase-plane","seed":null,"tMax":10,"tMin":-10,"variable":"x","visible":true}\],"grid":{"axisColor":"\#333333","gridColor":"\#cccccc","majorSpacing":1,"minorGridColor":"\#eeeeee","showAxes":true,"showLabels":true},"parameters":\[{"id":"p-c","label":"Base point x-coordinate","max":1,"min":0,"name":"c","step":0.05,"value":0}\],"title":"Linearization family: center to saddle","version":1,"viewport":{"centerX":0,"centerY":0,"scale":80}} #figure(figph[Phase diagrams at the critical points (0,0), ellipses, and (1,0), hyperbolas, of x'=y, y'=-x+x^2.], alt: "Phase diagrams at the critical points (0,0), ellipses, and (1,0), hyperbolas, of x'=y, y'=-x+x^2.", caption: [Figure #math.equation(block: false, alt: "3")[$3$]: Phase diagram with some trajectories of linearizations at the critical points #math.equation(block: false, alt: "open parenthesis 0 , 0 close parenthesis")[$( 0 , 0 )$] (left) and #math.equation(block: false, alt: "open parenthesis 1 , 0 close parenthesis")[$( 1 , 0 )$] (right) of #math.equation(block: false, alt: "x prime equals y")[$x^(′) = y$], #math.equation(block: false, alt: "y prime equals minus x plus x squared")[$y^(′) = − x + x^(2)$].]) ] === Footnotes \[1\] Named for the German mathematician #link("http://en.Wikipedia.org/wiki/Carl_Gustav_Jacob_Jacobi")[Carl Gustav Jacob Jacobi] (1804–1851).