#set document(title: "4.2 Reading Critical Points from the Map", 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")) == 4.2#h(0.6em)Reading Critical Points from the Map #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Objectives] - Classify critical points as maxima, minima, or saddles from contour signatures alone. - Locate critical points by solving both partial-derivative equations and confirm each classification with the second derivative test. - Explain what an unlabeled contour map cannot decide, and which second derivative breaks the tie. ] Where #math.equation(block: false, alt: "∇ f equals 0")[$∇ f = 0$], the terrain is momentarily flat: no direction climbs and none falls, to first order. Such #strong[critical points] are where maxima and minima hide — but flatness alone does not say which, and a third possibility lurks: the saddle, uphill one way and downhill another. A contour map betrays the character of each critical point by a visual signature, and the discipline of this section is to #emph[read the map before touching the algebra]. {"camera":{"fov":50,"position":\[1,9,1\],"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":"48a2da3e-2abb-4800-8434-df7f4648cfd6","metadata":{"alt\_text":"A top-down view of a seventeen-level contour map of f(x,y) = x^3/3 - x + y^3/3 - y: two families of nested oval contours sit in opposite corners of the square, and in the other two corners the contour lines cross themselves in X shapes. A translucent surface of the same function and four small colored marker points at its critical points are present but hidden.","created\_at":"2026-07-07T00:00:00.000Z","description":"Workbook scene: map-first classification of the four critical points of f(x,y) = x^3/3 - x + y^3/3 - y at (1,1), (-1,-1), (1,-1), (-1,1); the surface and labeled marker points start hidden and are revealed to verify predictions.","tags":\["workbook","calc3","critical-points","second-derivative-test","contours"\],"updated\_at":"2026-07-07T00:00:00.000Z"},"objects":\[{"expression":"x^3/3 - x + y^3/3 - y","id":"0877f1a3-f891-4513-89e1-99603d540021","kind":"contour-plot","label":{"text":"contour map of f","visible":true},"levels":17,"style":{"color":"\#111827","dash":\[\],"lineWidth":2},"visible":true,"xDomain":\[-2.5,2.5\],"yDomain":\[-2.5,2.5\],"zOffset":0},{"expression":"x^3/3 - x + y^3/3 - y","id":"052555a0-2ecf-4436-aa3d-bc3d2efe93d4","kind":"explicit-surface","label":{"text":"z = x^3/3 - x + y^3/3 - y","visible":true},"resolution":128,"style":{"colormap":"viridis","doubleSided":true,"opacity":0.55,"wireframe":false,"wireframeColor":"\#000000"},"visible":false,"xDomain":\[-2.5,2.5\],"yDomain":\[-2.5,2.5\]},{"color":"\#3b82f6","id":"b834fde2-cbe4-4572-9271-8cb4e83cdd84","kind":"point","label":{"text":"min?","visible":true},"radius":0.09,"visible":false,"x":1,"y":1,"z":-1.3333333333333333},{"color":"\#ef4444","id":"e9f2307d-c301-4121-aba3-611966f55af7","kind":"point","label":{"text":"max?","visible":true},"radius":0.09,"visible":false,"x":-1,"y":-1,"z":1.3333333333333333},{"color":"\#f59e0b","id":"7dfeb5c0-a6b7-489f-ab20-04de0290a12a","kind":"point","label":{"text":"saddle?","visible":true},"radius":0.09,"visible":false,"x":1,"y":-1,"z":0},{"color":"\#f59e0b","id":"2fb55ccb-e798-41a5-8bc5-1a2eed5a4182","kind":"point","label":{"text":"saddle?","visible":true},"radius":0.09,"visible":false,"x":-1,"y":1,"z":0}\],"title":"Reading the map before the math","version":1} A straight-down view of a seventeen-level contour map of #math.equation(block: false, alt: "f open parenthesis x , y close parenthesis equals x cubed / 3 minus x plus y cubed / 3 minus y")[$f ( x , y ) = x^(3) / 3 − x + y^(3) / 3 − y$] — just the map, like a hiker's chart. Two corners hold families of nested ovals, around #math.equation(block: false, alt: "open parenthesis 1 , 1 close parenthesis")[$( 1 , 1 )$] and #math.equation(block: false, alt: "open parenthesis minus 1 , minus 1 close parenthesis")[$( − 1 , − 1 )$]; near #math.equation(block: false, alt: "open parenthesis 1 , minus 1 close parenthesis")[$( 1 , − 1 )$] and #math.equation(block: false, alt: "open parenthesis minus 1 , 1 close parenthesis")[$( − 1 , 1 )$] the level curves instead cross themselves in an X. The surface and four labeled marker points wait hidden in the object list — leave them hidden until told. === Explore + Zoom in on the corners near #math.equation(block: false, alt: "open parenthesis 1 , minus 1 close parenthesis")[$( 1 , − 1 )$] and #math.equation(block: false, alt: "open parenthesis minus 1 , 1 close parenthesis")[$( − 1 , 1 )$] and describe what the contour lines do there. A curve that passes through itself in an X is something no contour of Chapter 3's two-hill map ever did. + On a hiking map, what does a family of nested closed loops around a point mean about the terrain? What would a trail through the X-point feel like underfoot — and why is "flat exactly at the crossing, tilted all around it" the only consistent answer? + Classify all four points — #math.equation(block: false, alt: "open parenthesis 1 , 1 close parenthesis")[$( 1 , 1 )$], #math.equation(block: false, alt: "open parenthesis minus 1 , minus 1 close parenthesis")[$( − 1 , − 1 )$], #math.equation(block: false, alt: "open parenthesis 1 , minus 1 close parenthesis")[$( 1 , − 1 )$], #math.equation(block: false, alt: "open parenthesis minus 1 , 1 close parenthesis")[$( − 1 , 1 )$] — as local max, local min, or saddle, using only the map. Write all four down before revealing anything. + One classification the unlabeled map #emph[cannot] make: of the two nested-oval families, which is the peak and which the pit? Explain why the map alone is ambiguous — then commit to a guess anyway. + Reveal the four marker points and then the surface with their eye toggles, and orbit down from the top view. Which oval family holds the blue marker (the pit)? Was your step 4 guess right — and your step 3 reads? + The saddle values here are exactly #math.equation(block: false, alt: "f equals 0")[$f = 0$], and the contour sheet starts at #math.equation(block: false, alt: "z equals 0")[$z = 0$]. Drag the contour plot's z-offset slowly up and down through #math.equation(block: false, alt: "0")[$0$]: the sheet passes through #emph[both] saddle points at once, because the X-shaped curve is the level curve at saddle height. Nested ovals never touch their center point this way. (The level count of 17 is deliberate — an odd count places one level exactly at #math.equation(block: false, alt: "0")[$0$]; nudge the Levels control to an even count and the X dissolves into nearby hyperbola pairs. Set it back.) === The second derivative test The signatures you just used are what the #strong[second derivative test] formalizes. Near a critical point, #math.equation(block: false, alt: "f")[$f$] is well approximated by a quadratic; the number #math.equation(block: true, alt: "D equals f sub x x f sub y y minus f x y 2")[$D = f_(x x) f_(y y) − f_(x y)^(2)$] decides that quadratic's shape. If #math.equation(block: false, alt: "D greater than 0")[$D > 0$] the quadratic is a bowl — upright if #math.equation(block: false, alt: "f sub x x greater than 0")[$f_(x x) > 0$] (local minimum), inverted if #math.equation(block: false, alt: "f sub x x less than 0")[$f_(x x) < 0$] (local maximum) — and its level curves are nested ovals. If #math.equation(block: false, alt: "D less than 0")[$D < 0$] it is a saddle, and the level curve through the critical value crosses itself there: the X. If #math.equation(block: false, alt: "D equals 0")[$D = 0$] the test is silent. Step 4's ambiguity is real mathematics: oval #emph[shape] determines the sign of #math.equation(block: false, alt: "D")[$D$], but peak-versus-pit needs the sign of #math.equation(block: false, alt: "f sub x x")[$f_(x x)$] (or labeled heights) — shapes alone cannot supply it. #examplebox("Example 1")[Four critical points, classified twice][ Find all critical points of #math.equation(block: false, alt: "f open parenthesis x , y close parenthesis equals x cubed / 3 minus x plus y cubed / 3 minus y")[$f ( x , y ) = x^(3) / 3 − x + y^(3) / 3 − y$] and classify each with the second derivative test; then match the results to the map's signatures and markers. The partials #math.equation(block: false, alt: "f sub x equals x squared minus 1")[$f_(x) = x^(2) − 1$] and #math.equation(block: false, alt: "f sub y equals y squared minus 1")[$f_(y) = y^(2) − 1$] vanish when #math.equation(block: false, alt: "x equals ± 1")[$x = ± 1$] and #math.equation(block: false, alt: "y equals ± 1")[$y = ± 1$]: four critical points. The second derivatives are #math.equation(block: false, alt: "f sub x x equals 2 x")[$f_(x x) = 2 x$], #math.equation(block: false, alt: "f sub y y equals 2 y")[$f_(y y) = 2 y$], #math.equation(block: false, alt: "f sub x y equals 0")[$f_(x y) = 0$], so #math.equation(block: true, alt: "D equals open parenthesis 2 x close parenthesis open parenthesis 2 y close parenthesis minus 0 equals 4 x y .")[$D = ( 2 x ) ( 2 y ) − 0 = 4 x y .$] At #math.equation(block: false, alt: "open parenthesis 1 , 1 close parenthesis")[$( 1 , 1 )$]: #math.equation(block: false, alt: "D equals 4 greater than 0")[$D = 4 > 0$] and #math.equation(block: false, alt: "f sub x x equals 2 greater than 0")[$f_(x x) = 2 > 0$] — a local minimum, with #math.equation(block: false, alt: "f equals the fraction 1 over 3 minus 1 plus the fraction 1 over 3 minus 1 equals minus the fraction 4 over 3")[$f = frac(1, 3) − 1 + frac(1, 3) − 1 = − frac(4, 3)$]; this is the blue marker in the pit. At #math.equation(block: false, alt: "open parenthesis minus 1 , minus 1 close parenthesis")[$( − 1 , − 1 )$]: #math.equation(block: false, alt: "D equals 4 greater than 0")[$D = 4 > 0$] but #math.equation(block: false, alt: "f sub x x equals minus 2 less than 0")[$f_(x x) = − 2 < 0$] — a local maximum, #math.equation(block: false, alt: "f equals the fraction 4 over 3")[$f = frac(4, 3)$], the red marker. At #math.equation(block: false, alt: "open parenthesis 1 , minus 1 close parenthesis")[$( 1 , − 1 )$] and #math.equation(block: false, alt: "open parenthesis minus 1 , 1 close parenthesis")[$( − 1 , 1 )$]: #math.equation(block: false, alt: "D equals minus 4 less than 0")[$D = − 4 < 0$] — saddles, and indeed #math.equation(block: false, alt: "f equals the fraction 1 over 3 minus 1 minus the fraction 1 over 3 plus 1 equals 0")[$f = frac(1, 3) − 1 − frac(1, 3) + 1 = 0$] at both, which is why one contour level drawn at height #math.equation(block: false, alt: "0")[$0$] produces both X's. Every algebraic verdict matches a signature you read in step 3 — and only the sign of #math.equation(block: false, alt: "f sub x x")[$f_(x x)$] separated the two oval families. ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Ovals mean #math.equation(block: false, alt: "D greater than 0")[$D > 0$], an X means #math.equation(block: false, alt: "D less than 0")[$D < 0$] — the map hands you the sign of #math.equation(block: false, alt: "D")[$D$] for free. What it cannot hand you is peak versus pit; that costs one second derivative. Read the map first, then let the algebra sign the verdict. ]