#set document(title: "5.1 Polar Coordinates and the Jacobian", 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)Polar Coordinates and the Jacobian #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Objectives] - See the polar area element on a mesh, where grid cells visibly widen in proportion to r. - Derive dA = r dr dθ from the geometry of one cell instead of taking it on faith. - Set up and evaluate a volume integral in polar coordinates that rectangular coordinates make miserable. ] A double integral is a refined sum over cells. In rectangular coordinates the cells are congruent little squares, each of area #math.equation(block: false, alt: "Δ x Δ y")[$Δ x Δ y$], and nobody thinks twice. But regions with a center — disks, rings, anything round — beg to be chopped along rings and rays instead, and then something changes: the cells are #emph[not] congruent. Every cell in one ring matches its neighbors, but the rings themselves widen as they move outward. The area element must record that widening, and the figure lets you measure it before any formula claims it. {"camera":{"fov":50,"position":\[5.5,4,4.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":"e893eac6-6a61-4ad6-bf18-b9e87de13f67","metadata":{"alt\_text":"A flat disk meshed by a coarse polar grid of 12 rings and 12 wedges, whose cells visibly widen toward the rim, beneath a dome-shaped paraboloid carrying the same coarse polar mesh. A hidden Cartesian wireframe of the same paraboloid, with equal square cells, can be toggled on for contrast.","created\_at":"2026-07-07T00:00:00.000Z","description":"Workbook scene: coarse (resolution 12) wireframe polar grid r in \[0,2\] at z=0, the paraboloid z=4-r^2 built on the same polar mesh, and a hidden Cartesian-mesh copy z=4-x^2-y^2 for comparison. Built for cranking resolution live to watch cell areas scale like r dr dtheta.","tags":\["workbook","calc3","polar-coordinates","jacobian","double-integrals"\],"updated\_at":"2026-07-07T00:00:00.000Z"},"objects":\[{"id":"78a0bf31-1f54-431b-9989-1cef792ecb8e","kind":"parametric-surface","label":{"text":"flat polar grid","visible":true},"resolution":12,"style":{"colormap":"grayscale","doubleSided":true,"opacity":0.85,"wireframe":true,"wireframeColor":"\#334155"},"uDomain":\[0,2\],"vDomain":\[0,6.283185307179586\],"visible":true,"xExpr":"u\*cos(v)","yExpr":"u\*sin(v)","zExpr":"0"},{"id":"5c7b0b1a-6464-4fa2-84ad-67d84721c85e","kind":"parametric-surface","label":{"text":"z = 4 - r^2 on the polar grid","visible":true},"resolution":12,"style":{"colormap":"coolwarm","doubleSided":true,"opacity":0.9,"wireframe":true,"wireframeColor":"\#1e293b"},"uDomain":\[0,2\],"vDomain":\[0,6.283185307179586\],"visible":true,"xExpr":"u\*cos(v)","yExpr":"u\*sin(v)","zExpr":"4 - u^2"},{"expression":"4 - x^2 - y^2","id":"553c1aae-02e8-460f-8163-4018209e00e4","kind":"explicit-surface","label":{"text":"Cartesian mesh: z = 4 - x^2 - y^2","visible":true},"resolution":12,"style":{"colormap":"viridis","doubleSided":true,"opacity":0.9,"wireframe":true,"wireframeColor":"\#334155"},"visible":false,"xDomain":\[-2,2\],"yDomain":\[-2,2\]}\],"title":"Why r dr dtheta","version":1} Two coarse wireframe objects: a flat disk at #math.equation(block: false, alt: "z equals 0")[$z = 0$] meshed by a polar grid of rings and wedges (resolution 12, so the cells are countable), and the dome #math.equation(block: false, alt: "z equals 4 minus r squared")[$z = 4 − r^(2)$] carrying the same coarse polar mesh. A third object — a Cartesian-mesh copy of the dome, with identical square cells — waits hidden in the object list for the contrast step. === Explore + Orbit until you look straight down the #math.equation(block: false, alt: "z")[$z$]-axis, so the flat grid reads like a dartboard. Count the cells in the innermost ring and in the outermost. Same count — same size? + Each cell is approximately a rectangle, one side running radially and one side running along the arc. Moving from center to rim, which side length stays fixed and which one grows? + Write, before touching anything, a formula for the approximate area of a cell at radius #math.equation(block: false, alt: "r")[$r$] with radial step #math.equation(block: false, alt: "Δ r")[$Δ r$] and angular step #math.equation(block: false, alt: "Δ θ")[$Δ θ$]. + Now interrogate the mesh: retype the flat grid's resolution field from 12 to 24, then 64, then 128. At every fineness, cells within one ring stay congruent, and cell area keeps growing in proportion to #math.equation(block: false, alt: "r")[$r$] — compare a cell near #math.equation(block: false, alt: "r equals 1")[$r = 1$] with one near #math.equation(block: false, alt: "r equals 2")[$r = 2$] at each level and watch the ratio stay locked near #math.equation(block: false, alt: "2")[$2$]. The factor of #math.equation(block: false, alt: "r")[$r$] is a property of polar coordinates, not of any particular mesh. + Set the resolution back to 12. Reveal the hidden Cartesian-mesh dome with its eye toggle (hide the two polar objects for a clean look) and orbit straight down: every Cartesian cell is an identical square, so #math.equation(block: false, alt: "d A equals d x d y")[$d A = d x d y$] needs no correction. Explain why summing #math.equation(block: false, alt: "f times Δ r Δ θ")[$f · Δ r Δ θ$] over the #emph[polar] cells — with no #math.equation(block: false, alt: "r")[$r$] — would overweight the cells near the center. + Restore the polar objects. The colored dome is the integrand #math.equation(block: false, alt: "f equals 4 minus r squared")[$f = 4 − r^(2)$] riding the same grid: each cell contributes height times #math.equation(block: false, alt: "r Δ r Δ θ")[$r Δ r Δ θ$] of volume. Set up the volume both ways — the example below finishes the story. === One cell, measured exactly The cell between radii #math.equation(block: false, alt: "r")[$r$] and #math.equation(block: false, alt: "r plus Δ r")[$r + Δ r$], spanning an angle #math.equation(block: false, alt: "Δ θ")[$Δ θ$], is a slice of a ring. Its exact area is the difference of two circular sectors: #math.equation(block: true, alt: "the fraction 1 over 2 open parenthesis r plus Δ r close parenthesis squared Δ θ minus the fraction 1 over 2 r squared Δ θ equals open parenthesis r plus the fraction Δ r over 2 close parenthesis Δ r Δ θ ,")[$frac(1, 2) ( r + Δ r )^(2) Δ θ − frac(1, 2) r^(2) Δ θ = ( r + frac(Δ r, 2) ) Δ r Δ θ ,$] which is #math.equation(block: false, alt: "r Δ r Δ θ")[$r Δ r Δ θ$] up to a vanishing correction — arc length #math.equation(block: false, alt: "r Δ θ")[$r Δ θ$] times radial step #math.equation(block: false, alt: "Δ r")[$Δ r$], exactly what steps 2 and 3 measured. Refining the mesh turns the sum #math.equation(block: false, alt: "∑ f times r Δ r Δ θ")[$∑ f · r Δ r Δ θ$] into the integral #math.equation(block: false, alt: "∬ f r d r d θ")[$∬ f r d r d θ$]. The extra #math.equation(block: false, alt: "r")[$r$] is the local area-scaling of the map #math.equation(block: false, alt: "open parenthesis r , θ close parenthesis ↦ open parenthesis r cos θ , r sin θ close parenthesis")[$( r , θ ) ↦ ( r cos θ , r sin θ )$] — its #strong[Jacobian], a name the next section grows into a general tool. {"functions":\["r\*cos(t)","r\*sin(t)"\],"variables":\["r","t"\]} r The area-scaling factor of #math.equation(block: false, alt: "open parenthesis r , θ close parenthesis ↦ open parenthesis r cos θ , r sin θ close parenthesis")[$( r , θ ) ↦ ( r cos θ , r sin θ )$], computed from the map itself rather than read off the ring-slice picture. It is the same #math.equation(block: false, alt: "r")[$r$] the mesh above made you count, and the same #math.equation(block: false, alt: "r")[$r$] that turns #math.equation(block: false, alt: "d A")[$d A$] into #math.equation(block: false, alt: "r d r d θ")[$r d r d θ$]. (#math.equation(block: false, alt: "t")[$t$] stands for #math.equation(block: false, alt: "θ")[$θ$].) #examplebox("Example 1")[The volume under the dome, both ways][ Find the volume of the solid below #math.equation(block: false, alt: "z equals 4 minus x squared minus y squared")[$z = 4 − x^(2) − y^(2)$] and above the disk #math.equation(block: false, alt: "x squared plus y squared less than or equal to 4")[$x^(2) + y^(2) ≤ 4$]. In rectangular coordinates the volume is #math.equation(block: true, alt: "V equals ∫ minus 2 2 ∫ minus the square root of 4 minus x squared the square root of 4 minus x squared open parenthesis 4 minus x squared minus y squared close parenthesis d y d x ,")[$V = ∫_(− 2)^(2) ∫_(− sqrt(4 − x^(2)))^(sqrt(4 − x^(2))) ( 4 − x^(2) − y^(2) ) d y d x ,$] with square roots in the limits and worse ahead — legal, but miserable. In polar coordinates the region is #math.equation(block: false, alt: "0 less than or equal to r less than or equal to 2")[$0 ≤ r ≤ 2$], #math.equation(block: false, alt: "0 less than or equal to θ less than or equal to 2 π")[$0 ≤ θ ≤ 2 π$], the integrand is #math.equation(block: false, alt: "4 minus r squared")[$4 − r^(2)$], and the area element supplies the #math.equation(block: false, alt: "r")[$r$] you counted on the mesh: #math.equation(block: true, alt: "V equals ∫ 0 2 π ∫ 0 2 open parenthesis 4 minus r squared close parenthesis r d r d θ equals ∫ 0 2 π [ 2 r squared minus the fraction r to the power 4 over 4 ] 0 2 d θ equals ∫ 0 2 π open parenthesis 8 minus 4 close parenthesis d θ equals 8 π .")[$V = ∫_(0)^(2 π) ∫_(0)^(2) ( 4 − r^(2) ) r d r d θ = ∫_(0)^(2 π) attach([ 2 r^(2) − frac(r^(4), 4) ], t: 2, b: 0) d θ = ∫_(0)^(2 π) ( 8 − 4 ) d θ = 8 π .$] Note where the #math.equation(block: false, alt: "r")[$r$] did its work: it turned #math.equation(block: false, alt: "open parenthesis 4 minus r squared close parenthesis d r")[$( 4 − r^(2) ) d r$] into #math.equation(block: false, alt: "open parenthesis 4 r minus r cubed close parenthesis d r")[$( 4 r − r^(3) ) d r$], an antiderivative you can finish in your head — and it weighted each ring by its true share of area, which is what makes the answer #emph[correct] and not merely easy. ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #math.equation(block: false, alt: "d A equals r d r d θ")[$d A = r d r d θ$] is bookkeeping for a geometric fact you can see at any resolution: polar cells are arc length times radial step, and arcs lengthen with #math.equation(block: false, alt: "r")[$r$]. When an area element in any coordinate system looks arbitrary, ask what its mesh cells look like — the next section asks exactly that, for every map at once. ]