#set document(title: "5.4 Stokes' Theorem: Two Caps, One Boundary", 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.4#h(0.6em)Stokes' Theorem: Two Caps, One Boundary #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Objectives] - State Stokes' Theorem and pair the boundary's direction with the cap's normal by the right-hand rule. - Verify that circulation around a rim equals curl flux through a flat cap, by direct computation. - Use surface-independence to evaluate the flux through a curved cap without integrating over it. ] The last section computed a circulation of #math.equation(block: false, alt: "4.5 π")[$4.5 π$] around a circle and called it a hint. Here is the theorem it hints at. #strong[Stokes' Theorem] says that the circulation of a field around a closed curve equals the flux of its #strong[curl] through #emph[any] surface that has the curve as boundary: #math.equation(block: true, alt: "∮ sub ∂ S 𝐅 times d 𝐫 equals ∬ sub S open parenthesis ∇ times 𝐅 close parenthesis times d 𝐒 ,")[$∮_(∂ S) 𝐅 · d 𝐫 = ∬_(S) ( ∇ × 𝐅 ) · d 𝐒 ,$] provided the curve's direction and the surface's normal are paired by the right-hand rule. The startling word is #emph[any]. Hang two utterly different surfaces on the same rim and the theorem demands they collect identical curl flux — the cap is disposable, and only the boundary owns the answer. The figure stages exactly that confrontation. {"camera":{"fov":50,"position":\[5.5,4,3.5\],"projection":"perspective","target":\[0,0,1\]},"grid":{"axisColors":{"x":"\#ef4444","y":"\#22c55e","z":"\#3b82f6"},"divisions":10,"gridColor":"\#e5e7eb","showAxes":true,"showLabels":true,"size":10,"visible":true},"id":"e49e52ae-2335-42f3-8b66-4c31379e0233","metadata":{"alt\_text":"A dark circle of radius 1.5 in the xy-plane, spanned by two translucent surfaces that share it as their rim: a flat yellow-toned disk and a dome-shaped purple-orange paraboloid rising above it. A field of arrows circulates counterclockwise around the z-axis, threading through both surfaces.","created\_at":"2026-07-07T00:00:00.000Z","description":"Workbook scene for Stokes' Theorem surface-independence: boundary circle x^2+y^2=2.25 at z=0, a flat disk cap and a paraboloid cap z=2.25-r^2 sharing that boundary, and the rotational field F=(-y,x,0) with uniform curl (0,0,2).","tags":\["workbook","calc3","stokes-theorem","curl","surface-integral"\],"updated\_at":"2026-07-07T00:00:00.000Z"},"objects":\[{"id":"dd9f5aec-eb7f-401d-a5c4-a980f67d88c3","kind":"parametric-curve","label":{"text":"boundary circle r = 1.5","visible":true},"samples":300,"style":{"color":"\#111827","dash":\[\],"lineWidth":4},"tDomain":\[0,6.283185307179586\],"visible":true,"xExpr":"1.5\*cos(t)","yExpr":"1.5\*sin(t)","zExpr":"0"},{"id":"87f8c981-84f1-413d-b6c5-6d8947d34c5b","kind":"parametric-surface","label":{"text":"flat disk cap","visible":true},"resolution":40,"style":{"colormap":"cividis","doubleSided":true,"opacity":0.5,"wireframe":false,"wireframeColor":"\#000000"},"uDomain":\[0,1.5\],"vDomain":\[0,6.283185307179586\],"visible":true,"xExpr":"u\*cos(v)","yExpr":"u\*sin(v)","zExpr":"0"},{"id":"584f0717-ab49-423b-b041-356ab785705b","kind":"parametric-surface","label":{"text":"paraboloid cap z = 2.25 - r^2","visible":true},"resolution":48,"style":{"colormap":"plasma","doubleSided":true,"opacity":0.5,"wireframe":false,"wireframeColor":"\#000000"},"uDomain":\[0,1.5\],"vDomain":\[0,6.283185307179586\],"visible":true,"xExpr":"u\*cos(v)","yExpr":"u\*sin(v)","zExpr":"2.25 - u^2"},{"density":6,"id":"351d8f23-aab5-4c45-b3af-8a2793bab6aa","kind":"vector-field","label":{"text":"F = (-y, x, 0)","visible":true},"pExpr":"-y","qExpr":"x","rExpr":"0","style":{"arrowScale":0.35,"colorByMagnitude":true,"colormap":"viridis","fixedColor":"\#f97316"},"visible":true,"xDomain":\[-2,2\],"yDomain":\[-2,2\],"zDomain":\[-0.5,2.5\]}\],"title":"Two Caps, One Boundary","version":1} A dark circle of radius #math.equation(block: false, alt: "1.5")[$1.5$] in the #math.equation(block: false, alt: "x y")[$x y$]-plane — the boundary — spanned by two translucent caps that share it as their rim: a flat yellow-toned disk and a purple-orange paraboloid dome, #math.equation(block: false, alt: "z equals 2.25 minus r squared")[$z = 2.25 − r^(2)$]. Threading both, a field of arrows circulates counterclockwise around the #math.equation(block: false, alt: "z")[$z$]-axis: #math.equation(block: false, alt: "𝐅 equals open parenthesis minus y , x , 0 close parenthesis")[$𝐅 = ( − y , x , 0 )$], the non-conservative field from the previous section, its components independent of height. === Explore + Orbit slowly and confirm the two facts everything below rests on: both surfaces hang on the #emph[same] dark rim, and the field looks identical at every height — no #math.equation(block: false, alt: "z")[$z$] appears in its components. + Look straight down the #math.equation(block: false, alt: "z")[$z$]-axis. The arrows circulate counterclockwise around the boundary. Curl your right hand's fingers that way: your thumb points #math.equation(block: false, alt: "plus z")[$+ z$]. That pairing — counterclockwise rim, upward normals — fixes every sign below. + The dome clearly has more surface area than the disk, and both sit in the same swirling field. Predict, with one sentence of reasoning: does more curl flux pass through the dome? + Compute #math.equation(block: false, alt: "∇ times 𝐅")[$∇ × 𝐅$] (the example below checks you). It comes out the same #emph[constant vertical] vector everywhere — which makes the disk's flux a mental computation and sets up the trap in step 3. + Orbit to a low side view and look at the dome near its rim, where it rises steeply — nearly vertical. How much of a purely vertical curl vector passes through a nearly vertical patch of surface? So where on the dome is its flux actually collected? + Suppose the rim were traversed clockwise seen from above. What happens to the circulation's sign, and which way must both caps' normals point for the theorem to still balance? === The boundary owns the answer Why should the cap not matter? Two caps on one rim, taken together (one normal flipped), enclose a solid region — and curl fields send zero net flux out of any closed surface. So whatever flux enters through one cap leaves through the other: hang any surface on the rim and the total is fixed by the rim alone. That is why the theorem writes #math.equation(block: false, alt: "∂ S")[$∂ S$] on one side: only boundary data survives. In practice you read the equation right-to-left — replace a hard surface with an easy one, or with the boundary curve itself. #examplebox("Example 1")[One rim, one number, three ways][ For #math.equation(block: false, alt: "𝐅 equals open parenthesis minus y , x , 0 close parenthesis")[$𝐅 = ( − y , x , 0 )$] and the circle #math.equation(block: false, alt: "x squared plus y squared equals 2.25")[$x^(2) + y^(2) = 2.25$] in the #math.equation(block: false, alt: "x y")[$x y$]-plane, oriented counterclockwise from above: compute the curl, the flux through the flat disk, the circulation around the rim, and deduce the flux through the paraboloid dome #math.equation(block: false, alt: "z equals 2.25 minus r squared")[$z = 2.25 − r^(2)$]. The curl of #math.equation(block: false, alt: "open parenthesis P , Q , R close parenthesis equals open parenthesis minus y , x , 0 close parenthesis")[$( P , Q , R ) = ( − y , x , 0 )$] is #math.equation(block: true, alt: "∇ times 𝐅 equals open parenthesis R sub y minus Q sub z , P sub z minus R sub x , Q sub x minus P sub y close parenthesis equals open parenthesis 0 , 0 , 1 minus open parenthesis minus 1 close parenthesis close parenthesis equals open parenthesis 0 , 0 , 2 close parenthesis ,")[$∇ × 𝐅 = ( R_(y) − Q_(z) , P_(z) − R_(x) , Q_(x) − P_(y) ) = ( 0 , 0 , 1 − ( − 1 ) ) = ( 0 , 0 , 2 ) ,$] the same vertical vector at every point in space. The disk's upward unit normal is #math.equation(block: false, alt: "𝐤")[$𝐤$], so its flux needs no integral: #math.equation(block: false, alt: "2 times area equals 2 π open parenthesis 1.5 close parenthesis squared equals 4.5 π")[$2 × "area" = 2 π ( 1.5 )^(2) = 4.5 π$]. The rim circulation was the previous section's computation: #math.equation(block: false, alt: "𝐅 open parenthesis 𝐫 open parenthesis t close parenthesis close parenthesis times 𝐫 prime open parenthesis t close parenthesis equals 2.25")[$𝐅 ( 𝐫 ( t ) ) · 𝐫^(′) ( t ) = 2.25$] on #math.equation(block: false, alt: "𝐫 open parenthesis t close parenthesis equals open parenthesis 1.5 cos t , 1.5 sin t , 0 close parenthesis")[$𝐫 ( t ) = ( 1.5 cos t , 1.5 sin t , 0 )$], giving #math.equation(block: false, alt: "2.25 times 2 π equals 4.5 π")[$2.25 · 2 π = 4.5 π$]. Equality of the two is Stokes' Theorem, verified by hand. And the dome? It hangs on the same rim with the same orientation, so its curl flux is #emph[forced] to be #math.equation(block: false, alt: "4.5 π")[$4.5 π$] — not more, despite the extra area. Geometry agrees with the bookkeeping: near the rim the dome is nearly vertical, and a vertical patch collects nothing from a vertical curl vector; the dome gathers its #math.equation(block: false, alt: "4.5 π")[$4.5 π$] near the top, where it flattens out — and its shadow on the floor is the very disk we already integrated. ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ Circulation around the boundary, curl flux through any cap — one number, owned by the rim. When a surface integral looks hopeless, Stokes' Theorem is permission to swap the surface for a better one, or for its boundary; the answer was never the cap's to begin with. ]