#set document(title: "5.1 The Directions a Matrix Cannot Turn", author: "XYZ Homework") #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)The Directions a Matrix Cannot Turn #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Objectives] - Discover eigenvectors by observation, as the directions along which a matrix's arrows lie on their own line. - Read an eigenvalue's sign and magnitude from arrow direction and arrow length along an invariant line. - Verify observed eigenpairs algebraically and recover them from the characteristic polynomial. ] Take the #math.equation(block: false, alt: "3 times 3")[$3 × 3$] matrix #math.equation(block: false, alt: "A")[$A$] whose rows are #math.equation(block: false, alt: "open parenthesis 2 , 1 , 0 close parenthesis")[$( 2 , 1 , 0 )$], #math.equation(block: false, alt: "open parenthesis 1 , 2 , 0 close parenthesis")[$( 1 , 2 , 0 )$], and #math.equation(block: false, alt: "open parenthesis 0 , 0 , minus 1 close parenthesis")[$( 0 , 0 , − 1 )$]. Fed a vector #math.equation(block: false, alt: "𝐯")[$𝐯$], it hands back #math.equation(block: false, alt: "A 𝐯")[$A 𝐯$] pointing somewhere else — for #emph[almost] every #math.equation(block: false, alt: "𝐯")[$𝐯$]. This section is a hunt for the exceptions: the directions #math.equation(block: false, alt: "A")[$A$] cannot turn. The figure plots #math.equation(block: false, alt: "A")[$A$] as a field of arrows. At each grid point #math.equation(block: false, alt: "open parenthesis x , y , z close parenthesis")[$( x , y , z )$], an arrow shows #math.equation(block: false, alt: "A open parenthesis x , y , z close parenthesis")[$A ( x , y , z )$], computed componentwise as #math.equation(block: false, alt: "open parenthesis 2 x plus y , x plus 2 y , minus z close parenthesis")[$( 2 x + y , #h(0.278em) x + 2 y , #h(0.278em) − z )$], and the arrows are colored by length — dark purple for short, yellow for long. Threaded through the field are four straight lines through the origin: solid red along #math.equation(block: false, alt: "open parenthesis 1 , 1 , 0 close parenthesis")[$( 1 , 1 , 0 )$], solid blue along #math.equation(block: false, alt: "open parenthesis 1 , minus 1 , 0 close parenthesis")[$( 1 , − 1 , 0 )$], solid green along the #math.equation(block: false, alt: "z")[$z$]-axis, and a dashed gray line along the #math.equation(block: false, alt: "x")[$x$]-axis. Three of them are genuinely special. One is a decoy. {"camera":{"fov":50,"position":\[6,4.5,4\],"projection":"perspective","target":\[0,0,0\]},"grid":{"axisColors":{"x":"\#ef4444","y":"\#22c55e","z":"\#3b82f6"},"divisions":10,"gridColor":"\#e5e7eb","showAxes":true,"showLabels":true,"size":10,"visible":true},"id":"4ba30de7-6b02-43c5-b51c-a92fb21cd309","metadata":{"alt\_text":"A cube-shaped grid of small arrows for the vector field F(x) = Ax, colored by magnitude from dark purple (short) to yellow (long). Four straight lines run through the origin: a solid red line along the direction (1, 1, 0), a solid blue line along (1, -1, 0), a solid green line along the z-axis, and a dashed gray line along the x-axis. Arrows sitting on the red, blue, and green lines point exactly along those lines; arrows on the dashed gray line point noticeably off it.","created\_at":"2026-07-07T00:00:00.000Z","description":"Workbook scene: vector field F(x) = Ax for A = \[\[2,1,0\],\[1,2,0\],\[0,0,-1\]\] with three candidate eigen-lines (red (1,1,0), blue (1,-1,0), green z-axis) and one dashed gray decoy line along the x-axis.","tags":\["workbook","linear-algebra","eigenvectors","vector-field"\],"updated\_at":"2026-07-07T00:00:00.000Z"},"objects":\[{"density":5,"id":"f5a1d736-2a5b-4b8d-a424-02636938f5cd","kind":"vector-field","label":{"text":"F(x) = Ax","visible":true},"pExpr":"2\*x + y","qExpr":"x + 2\*y","rExpr":"-z","style":{"arrowScale":0.25,"colorByMagnitude":true,"colormap":"viridis","fixedColor":"\#ffffff"},"visible":true,"xDomain":\[-2,2\],"yDomain":\[-2,2\],"zDomain":\[-2,2\]},{"id":"f6b18a2a-41eb-44dc-8c9a-65c81d1ecb1a","kind":"parametric-curve","label":{"text":"red line: (t, t, 0)","visible":true},"samples":100,"style":{"color":"\#ef4444","dash":\[\],"lineWidth":3},"tDomain":\[-2.5,2.5\],"visible":true,"xExpr":"t","yExpr":"t","zExpr":"0"},{"id":"47163dd4-e3b3-4e8e-92ca-f29e51f6b951","kind":"parametric-curve","label":{"text":"blue line: (t, -t, 0)","visible":true},"samples":100,"style":{"color":"\#3b82f6","dash":\[\],"lineWidth":3},"tDomain":\[-2.5,2.5\],"visible":true,"xExpr":"t","yExpr":"-t","zExpr":"0"},{"id":"247f5870-3fc3-4f16-b3f7-1ada18ae21a1","kind":"parametric-curve","label":{"text":"green line: (0, 0, t)","visible":true},"samples":100,"style":{"color":"\#22c55e","dash":\[\],"lineWidth":3},"tDomain":\[-2.5,2.5\],"visible":true,"xExpr":"0","yExpr":"0","zExpr":"t"},{"id":"9545ca93-7353-449b-bd93-39d78e98abf4","kind":"parametric-curve","label":{"text":"gray line: (t, 0, 0)","visible":true},"samples":100,"style":{"color":"\#9ca3af","dash":\[5,5\],"lineWidth":3},"tDomain":\[-2.5,2.5\],"visible":true,"xExpr":"t","yExpr":"0","zExpr":"0"}\],"title":"The directions the matrix cannot turn","version":1} The vector field #math.equation(block: false, alt: "F open parenthesis 𝐱 close parenthesis equals A 𝐱")[$F ( 𝐱 ) = A 𝐱$] for the matrix with rows #math.equation(block: false, alt: "open parenthesis 2 , 1 , 0 close parenthesis")[$( 2 , 1 , 0 )$], #math.equation(block: false, alt: "open parenthesis 1 , 2 , 0 close parenthesis")[$( 1 , 2 , 0 )$], #math.equation(block: false, alt: "open parenthesis 0 , 0 , minus 1 close parenthesis")[$( 0 , 0 , − 1 )$], with arrows colored by length. Four candidate lines pass through the origin: red along #math.equation(block: false, alt: "open parenthesis 1 , 1 , 0 close parenthesis")[$( 1 , 1 , 0 )$], blue along #math.equation(block: false, alt: "open parenthesis 1 , minus 1 , 0 close parenthesis")[$( 1 , − 1 , 0 )$], green along the #math.equation(block: false, alt: "z")[$z$]-axis, and a dashed gray decoy along the #math.equation(block: false, alt: "x")[$x$]-axis. === Explore the figure + Orbit slowly. Most arrows point #emph[off] whatever line they sit near — the matrix is turning those vectors. On which of the four marked lines do the arrows lie exactly along the line itself? + Zoom in on the dashed gray line near #math.equation(block: false, alt: "open parenthesis 1 , 0 , 0 close parenthesis")[$( 1 , 0 , 0 )$] and read the field formula there: #math.equation(block: false, alt: "F open parenthesis 1 , 0 , 0 close parenthesis equals open parenthesis 2 , 1 , 0 close parenthesis")[$F ( 1 , 0 , 0 ) = ( 2 , 1 , 0 )$]. The arrow visibly leaves the #math.equation(block: false, alt: "x")[$x$]-axis — that is why this line is drawn dashed. Looking special is not being special; the field is the test. + On each line that passes the test, note whether the arrows point #emph[outward] (away from the origin, with the position vector) or #emph[inward] (back toward it). One of the three solid lines disagrees with the other two. + Now use the colors. At equal distances from the origin, the red line carries the long yellow arrows, roughly three times the position vector; the blue line's arrows match the position vector in length; the green line's match it too — but reversed. Three lines, three different stretch factors. === Naming what you found A nonzero vector #math.equation(block: false, alt: "𝐯")[$𝐯$] with #math.equation(block: false, alt: "A 𝐯 equals λ 𝐯")[$A 𝐯 = λ 𝐯$] is an #strong[eigenvector] of #math.equation(block: false, alt: "A")[$A$], and the scalar #math.equation(block: false, alt: "λ")[$λ$] is its #strong[eigenvalue]. The equation says exactly what you hunted for: the line through #math.equation(block: false, alt: "𝐯")[$𝐯$] is invariant — #math.equation(block: false, alt: "A")[$A$] may stretch, shrink, or flip vectors on it, but cannot turn them off it. The arrows encode #math.equation(block: false, alt: "λ")[$λ$]: outward means #math.equation(block: false, alt: "λ greater than 0")[$λ > 0$], inward means #math.equation(block: false, alt: "λ less than 0")[$λ < 0$], and the length ratio is #math.equation(block: false, alt: "| λ |")[$| λ |$]. Check the three catches by arithmetic: #math.equation(block: false, alt: "A open parenthesis 1 , 1 , 0 close parenthesis equals open parenthesis 3 , 3 , 0 close parenthesis equals 3 open parenthesis 1 , 1 , 0 close parenthesis")[$A ( 1 , 1 , 0 ) = ( 3 , 3 , 0 ) = 3 ( 1 , 1 , 0 )$], so #math.equation(block: false, alt: "λ equals 3")[$λ = 3$] on the red line; #math.equation(block: false, alt: "A open parenthesis 1 , minus 1 , 0 close parenthesis equals open parenthesis 1 , minus 1 , 0 close parenthesis")[$A ( 1 , − 1 , 0 ) = ( 1 , − 1 , 0 )$], so #math.equation(block: false, alt: "λ equals 1")[$λ = 1$] on the blue line — invariant #emph[pointwise], the field there merely restating each position; and #math.equation(block: false, alt: "A open parenthesis 0 , 0 , 1 close parenthesis equals open parenthesis 0 , 0 , minus 1 close parenthesis equals minus 1 open parenthesis 0 , 0 , 1 close parenthesis")[$A ( 0 , 0 , 1 ) = ( 0 , 0 , − 1 ) = − 1 ( 0 , 0 , 1 )$], so #math.equation(block: false, alt: "λ equals minus 1")[$λ = − 1$] on the green line. The inward green arrows are not a failure of invariance — they are the visual signature of a negative eigenvalue. The decoy fails outright: #math.equation(block: false, alt: "A open parenthesis 1 , 0 , 0 close parenthesis equals open parenthesis 2 , 1 , 0 close parenthesis")[$A ( 1 , 0 , 0 ) = ( 2 , 1 , 0 )$] is no multiple of #math.equation(block: false, alt: "open parenthesis 1 , 0 , 0 close parenthesis")[$( 1 , 0 , 0 )$]. Observation found these lines; algebra can find them blind. Rearranged, the eigenvector equation says #math.equation(block: false, alt: "open parenthesis A minus λ I close parenthesis 𝐯 equals 0")[$( A − λ I ) 𝐯 = 0$] has a #emph[nonzero] solution — which, by the last chapter, happens exactly when #math.equation(block: false, alt: "A minus λ I")[$A − λ I$] collapses: #math.equation(block: false, alt: "det open parenthesis A minus λ I close parenthesis equals 0")[$det ( A − λ I ) = 0$]. That determinant, as a function of #math.equation(block: false, alt: "λ")[$λ$], is the #strong[characteristic polynomial]. #examplebox("Example 1")[The characteristic polynomial confirms the hunt][ Compute #math.equation(block: false, alt: "det open parenthesis A minus λ I close parenthesis")[$det ( A − λ I )$] for the matrix above and verify its roots are the three numbers read off the screen. Subtracting #math.equation(block: false, alt: "λ")[$λ$] down the diagonal, #math.equation(block: false, alt: "A minus λ I")[$A − λ I$] has rows #math.equation(block: false, alt: "open parenthesis 2 minus λ , 1 , 0 close parenthesis")[$( 2 − λ , 1 , 0 )$], #math.equation(block: false, alt: "open parenthesis 1 , 2 minus λ , 0 close parenthesis")[$( 1 , 2 − λ , 0 )$], #math.equation(block: false, alt: "open parenthesis 0 , 0 , minus 1 minus λ close parenthesis")[$( 0 , 0 , − 1 − λ )$]. The third row and column touch the rest of the matrix only through zeros, so the determinant factors into the upper-left #math.equation(block: false, alt: "2 times 2")[$2 × 2$] block times the corner entry: #math.equation(block: false, alt: "det open parenthesis A minus λ I close parenthesis equals open parenthesis open parenthesis 2 minus λ close parenthesis squared minus 1 close parenthesis open parenthesis minus 1 minus λ close parenthesis")[$det ( A − λ I ) = ( ( 2 − λ )^(2) − 1 ) ( − 1 − λ )$]. Expanding the block, #math.equation(block: false, alt: "open parenthesis 2 minus λ close parenthesis squared minus 1 equals λ squared minus 4 λ plus 3 equals open parenthesis λ minus 1 close parenthesis open parenthesis λ minus 3 close parenthesis")[$( 2 − λ )^(2) − 1 = λ^(2) − 4 λ + 3 = ( λ − 1 ) ( λ − 3 )$], so #math.equation(block: false, alt: "det open parenthesis A minus λ I close parenthesis equals minus open parenthesis λ minus 3 close parenthesis open parenthesis λ minus 1 close parenthesis open parenthesis λ plus 1 close parenthesis")[$det ( A − λ I ) = − ( λ − 3 ) ( λ − 1 ) ( λ + 1 )$]. The roots are #math.equation(block: false, alt: "λ equals 3")[$λ = 3$], #math.equation(block: false, alt: "1")[$1$], and #math.equation(block: false, alt: "minus 1")[$− 1$] — precisely the outward triple stretch on red, the pointwise fix on blue, and the inward flip on green. ] {"matrix":"\[\[2-L,1,0\],\[1,2-L,0\],\[0,0,-1-L\]\]"} -(L-3)\*(L-1)\*(L+1) The characteristic polynomial of the same matrix the figure draws, expanded by a computer algebra system rather than by hand — and checked against the factored form worked out above. Its roots are the three stretch factors you read off the arrows: #math.equation(block: false, alt: "3")[$3$] on red, #math.equation(block: false, alt: "1")[$1$] on blue, #math.equation(block: false, alt: "minus 1")[$− 1$] on green. (#math.equation(block: false, alt: "L")[$L$] stands for #math.equation(block: false, alt: "λ")[$λ$].) #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ An eigenvector is a direction the matrix cannot turn; an eigenvalue is what the matrix does along it instead. You found three by looking, then confirmed them by solving #math.equation(block: false, alt: "det open parenthesis A minus λ I close parenthesis equals 0")[$det ( A − λ I ) = 0$] — the algebraic machine that finds invariant directions without a picture. The next section asks how it fares when nobody has drawn candidate lines for you. ]