#set document(title: "3.3 Partial Derivatives as Slices", 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")) == 3.3#h(0.6em)Partial Derivatives as Slices #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Objectives] - Define each partial derivative as the slope of a one-variable slice curve. - Drive two slice curves across a surface with sliders and read the sign and size of each partial from the scene. - Compute both partial derivatives of a function and evaluate them at a point. ] A surface has no single slope: stand on a hillside and the steepness depends on which way you face. Calculus handles this the way it handles everything — by reducing to a problem already solved. Freeze one variable and the surface collapses to a #emph[curve], and curves we know how to differentiate. Fix #math.equation(block: false, alt: "y equals b")[$y = b$] and the slice #math.equation(block: false, alt: "z equals f open parenthesis x , b close parenthesis")[$z = f ( x , b )$] is an ordinary one-variable graph; its derivative at #math.equation(block: false, alt: "x equals a")[$x = a$] is the #strong[partial derivative] #math.equation(block: true, alt: "f sub x open parenthesis a , b close parenthesis equals lim sub h → 0 the fraction f open parenthesis a plus h , b close parenthesis minus f open parenthesis a , b close parenthesis over h ,")[$f_(x) ( a , b ) = lim_(h → 0) frac(f ( a + h , b ) − f ( a , b ), h) ,$] the slope of the surface at #math.equation(block: false, alt: "open parenthesis a , b close parenthesis")[$( a , b )$] #emph[in the #math.equation(block: false, alt: "x")[$x$]-direction]. Freezing #math.equation(block: false, alt: "x equals a")[$x = a$] instead gives #math.equation(block: false, alt: "f sub y open parenthesis a , b close parenthesis")[$f_(y) ( a , b )$], the slope in the #math.equation(block: false, alt: "y")[$y$]-direction. The figure makes both slices into objects you can drive. {"camera":{"fov":50,"position":\[7,6.5,5.5\],"projection":"perspective","target":\[0,1.5,0\]},"grid":{"axisColors":{"x":"\#ef4444","y":"\#22c55e","z":"\#3b82f6"},"divisions":10,"gridColor":"\#e5e7eb","showAxes":true,"showLabels":true,"size":10,"visible":true},"id":"8d0521e3-b723-4199-954e-68e79f1fea95","metadata":{"alt\_text":"A translucent dome-shaped surface, the elliptic paraboloid z = 4 - x squared over 2 - y squared over 3, with two thick curves lying on its skin: a red parabola running in the x-direction at the fixed depth y = b, and a green parabola running in the y-direction at the fixed position x = a. Slider b slides the red curve forward and back across the dome and slider a slides the green curve left and right; the two curves always cross at the single point (a, b) on the surface, and the slope of each curve at that crossing is the corresponding partial derivative.","created\_at":"2026-08-01T00:00:00.000Z","description":"Authored book scene: explicit surface z = 4 - x^2/2 - y^2/3 on \[-2,2\]^2 with two lifted slice curves, (t, b, f(t,b)) in red and (a, t, f(a,t)) in green, driven by sliders a and b in \[-2, 2\]. Built so partial derivatives read as slopes of one-variable slice curves.","tags":\["book","calc3","partial-derivatives","slices","slider"\],"updated\_at":"2026-08-01T00:00:00.000Z"},"objects":\[{"id":"167cb1d1-de33-4abe-abf6-2939890f793f","kind":"parameter","label":{"text":"a (x-value of the green slice)","visible":true},"max":2,"min":-2,"name":"a","step":0.1,"value":1,"visible":true},{"id":"a42013a3-0683-4adb-9193-dcc1b12fc906","kind":"parameter","label":{"text":"b (y-value of the red slice)","visible":true},"max":2,"min":-2,"name":"b","step":0.1,"value":-0.5,"visible":true},{"expression":"4 - x^2/2 - y^2/3","id":"afcd6dad-9935-40b1-b38d-fe4c22797181","kind":"explicit-surface","label":{"text":"z = 4 - x^2/2 - y^2/3","visible":true},"resolution":96,"style":{"colormap":"viridis","doubleSided":true,"opacity":0.55,"wireframe":false,"wireframeColor":"\#000000"},"visible":true,"xDomain":\[-2,2\],"yDomain":\[-2,2\]},{"id":"3d4aace2-9ef9-4848-8a51-abe08a04e391","kind":"parametric-curve","label":{"text":"x-slice at y = b (slope = df/dx)","visible":true},"samples":200,"style":{"color":"\#ef4444","dash":\[\],"lineWidth":5},"tDomain":\[-2,2\],"visible":true,"xExpr":"t","yExpr":"b","zExpr":"4 - t^2/2 - b^2/3"},{"id":"8b3de2f5-e5f9-449b-aae1-e189c9715b7d","kind":"parametric-curve","label":{"text":"y-slice at x = a (slope = df/dy)","visible":true},"samples":200,"style":{"color":"\#16a34a","dash":\[\],"lineWidth":5},"tDomain":\[-2,2\],"visible":true,"xExpr":"a","yExpr":"t","zExpr":"4 - a^2/2 - t^2/3"}\],"title":"Partial derivatives as slice curves on a surface","version":1} The translucent dome #math.equation(block: false, alt: "z equals 4 minus x squared / 2 minus y squared / 3")[$z = 4 − x^(2) / 2 − y^(2) / 3$] with two thick curves lying on its skin: a red #math.equation(block: false, alt: "x")[$x$]-direction slice at the fixed depth #math.equation(block: false, alt: "y equals b")[$y = b$] and a green #math.equation(block: false, alt: "y")[$y$]-direction slice at the fixed position #math.equation(block: false, alt: "x equals a")[$x = a$]. Sliders #math.equation(block: false, alt: "a")[$a$] and #math.equation(block: false, alt: "b")[$b$] (each running #math.equation(block: false, alt: "minus 2")[$− 2$] to #math.equation(block: false, alt: "2")[$2$], starting at #math.equation(block: false, alt: "a equals 1")[$a = 1$], #math.equation(block: false, alt: "b equals minus 0.5")[$b = − 0.5$]) drag the two curves across the dome; they always cross at the single surface point #math.equation(block: false, alt: "open parenthesis a , b , f open parenthesis a , b close parenthesis close parenthesis")[$( a , b , f ( a , b ) )$], where the red curve's slope is #math.equation(block: false, alt: "f sub x")[$f_(x)$] and the green curve's slope is #math.equation(block: false, alt: "f sub y")[$f_(y)$]. === Explore + Orbit until you sight straight down the #math.equation(block: false, alt: "y")[$y$]-axis, so the red slice flattens into a one-variable graph. What familiar curve is it? Now sight down the #math.equation(block: false, alt: "x")[$x$]-axis and read the green slice the same way. + Drag the #math.equation(block: false, alt: "b")[$b$] slider slowly from #math.equation(block: false, alt: "minus 2")[$− 2$] to #math.equation(block: false, alt: "2")[$2$]. The red curve sweeps across the dome — but watch its #emph[shape]. Why does the parabola stay congruent to itself, only shifting in height? (Look at how #math.equation(block: false, alt: "b")[$b$] enters #math.equation(block: false, alt: "z equals 4 minus t squared / 2 minus b squared / 3")[$z = 4 − t^(2) / 2 − b^(2) / 3$].) + One of the two slices is noticeably flatter than the other. Predict which from the expression — is it the #math.equation(block: false, alt: "x squared / 2")[$x^(2) / 2$] or the #math.equation(block: false, alt: "y squared / 3")[$y^(2) / 3$] term that makes a shallower parabola? — then orbit to check. + Set both sliders to #math.equation(block: false, alt: "0")[$0$]. The two curves now crest together at the summit #math.equation(block: false, alt: "open parenthesis 0 , 0 , 4 close parenthesis")[$( 0 , 0 , 4 )$], and each has slope zero there. What does that pair of zero slopes say about the summit — and what will we call such points in the next chapter? + Return the sliders to #math.equation(block: false, alt: "a equals 1")[$a = 1$], #math.equation(block: false, alt: "b equals minus 0.5")[$b = − 0.5$] and zoom in on the crossing point. Decide the #emph[sign] of each slope by eye: walking east (increasing #math.equation(block: false, alt: "x")[$x$]), does the red curve climb or fall? Walking north along the green curve? The example below puts numbers to both. === Differentiating with one eye closed Computing a partial derivative needs no new rules: differentiate as in one-variable calculus, treating the frozen variable as a constant. The notation #math.equation(block: false, alt: "∂ f / ∂ x")[$∂ f / ∂ x$] (or #math.equation(block: false, alt: "f sub x")[$f_(x)$]) simply records which variable moved. Both partials together will feed everything that follows — tangent planes in the next section, the gradient in the next chapter — but each one, alone, is just the slope of a slice curve you could draw in Chapter 1 of any calculus book. #examplebox("Example 1")[Two slopes at one point of the dome][ For #math.equation(block: false, alt: "f open parenthesis x , y close parenthesis equals 4 minus x squared / 2 minus y squared / 3")[$f ( x , y ) = 4 − x^(2) / 2 − y^(2) / 3$], compute #math.equation(block: false, alt: "f sub x")[$f_(x)$] and #math.equation(block: false, alt: "f sub y")[$f_(y)$], evaluate both at the scene's starting point #math.equation(block: false, alt: "open parenthesis a , b close parenthesis equals open parenthesis 1 , minus the fraction 1 over 2 close parenthesis")[$( a , b ) = ( 1 , − frac(1, 2) )$], and check the signs against the figure. Treat #math.equation(block: false, alt: "y")[$y$] as a constant and differentiate in #math.equation(block: false, alt: "x")[$x$]: the terms #math.equation(block: false, alt: "4")[$4$] and #math.equation(block: false, alt: "minus y squared / 3")[$− y^(2) / 3$] die, leaving #math.equation(block: false, alt: "f sub x equals minus x")[$f_(x) = − x$]. Treat #math.equation(block: false, alt: "x")[$x$] as a constant instead: #math.equation(block: false, alt: "f sub y equals minus the fraction 2 y over 3")[$f_(y) = − frac(2 y, 3)$]. At #math.equation(block: false, alt: "open parenthesis 1 , minus the fraction 1 over 2 close parenthesis")[$( 1 , − frac(1, 2) )$]: #math.equation(block: true, alt: "f sub x open parenthesis 1 , minus the fraction 1 over 2 close parenthesis equals minus 1 , f sub y open parenthesis 1 , minus the fraction 1 over 2 close parenthesis equals minus the fraction 2 over 3 times open parenthesis minus the fraction 1 over 2 close parenthesis equals the fraction 1 over 3 .")[$f_(x) ( 1 , − frac(1, 2) ) = − 1 , #h(2em) f_(y) ( 1 , − frac(1, 2) ) = − frac(2, 3) · ( − frac(1, 2) ) = frac(1, 3) .$] The crossing point sits at height #math.equation(block: false, alt: "f open parenthesis 1 , minus the fraction 1 over 2 close parenthesis equals 4 minus the fraction 1 over 2 minus the fraction 1 over 12 equals the fraction 41 over 12 approximately equals 3.42")[$f ( 1 , − frac(1, 2) ) = 4 − frac(1, 2) − frac(1, 12) = frac(41, 12) ≈ 3.42$]. So walking east from there, the red slice #emph[falls] at one unit of height per unit of run (#math.equation(block: false, alt: "f sub x equals minus 1")[$f_(x) = − 1$] — the point is on the far side of the crest in #math.equation(block: false, alt: "x")[$x$]), while walking north the green slice #emph[climbs] at a gentle #math.equation(block: false, alt: "the fraction 1 over 3")[$frac(1, 3)$] (#math.equation(block: false, alt: "f sub y greater than 0")[$f_(y) > 0$] — the point sits south of the crest in #math.equation(block: false, alt: "y")[$y$], so north is uphill). Both signs match what the scene shows, and the size difference matches step 3: this dome is stiffer in #math.equation(block: false, alt: "x")[$x$] than in #math.equation(block: false, alt: "y")[$y$]. ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ A partial derivative is not a new kind of derivative — it is the old one, applied to a slice. When a formula full of #math.equation(block: false, alt: "∂")[$∂$] signs turns opaque, find the slice curve it is talking about and ask what its slope is doing. ]