#set document(title: "2.1 The Three Damping Regimes", 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")) == 2.1#h(0.6em)The Three Damping Regimes #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Objectives] - Write down the characteristic equation of a constant-coefficient second-order equation and interpret its roots. - Distinguish underdamped, critically damped, and overdamped motion by the sign of the discriminant. - Explain why the real part of a root controls decay and the imaginary part controls oscillation. ] A mass on a spring, slowed by friction and pushed by nothing, obeys #math.equation(block: true, alt: "x double prime plus 2 a x prime plus open parenthesis a squared plus b squared close parenthesis x equals 0 .")[$x^(″) + 2 a x^(′) + ( a^(2) + b^(2) ) x = 0 .$] The coefficients are written in this particular way because of what happens next. Guessing #math.equation(block: false, alt: "x equals e to the power r t")[$x = e^(r t)$] and substituting turns the differential equation into an ordinary algebraic one — the #emph[characteristic equation] #math.equation(block: true, alt: "r squared plus 2 a r plus open parenthesis a squared plus b squared close parenthesis equals 0 ,")[$r^(2) + 2 a r + ( a^(2) + b^(2) ) = 0 ,$] whose roots are #math.equation(block: false, alt: "r equals minus a ± i b")[$r = − a ± i b$]. The guess pays off because differentiating an exponential returns the same exponential times a constant, so the whole equation collapses to a polynomial. The roots then tell you everything: the general solution is built from #math.equation(block: false, alt: "e to the power minus a t cos b t")[$e^(− a t) cos b t$] and #math.equation(block: false, alt: "e to the power minus a t sin b t")[$e^(− a t) sin b t$], a decaying amplitude #math.equation(block: false, alt: "e to the power minus a t")[$e^(− a t)$] multiplying an oscillation of frequency #math.equation(block: false, alt: "b")[$b$]. The real part #math.equation(block: false, alt: "minus a")[$− a$] is the decay rate; the imaginary part #math.equation(block: false, alt: "b")[$b$] is the ringing. One particular solution, with #math.equation(block: false, alt: "x open parenthesis 0 close parenthesis equals 1")[$x ( 0 ) = 1$] and a specific starting velocity, is #math.equation(block: true, alt: "x open parenthesis t close parenthesis equals e to the power minus a t open parenthesis cos b t plus the fraction 1 over 2 sin b t close parenthesis ,")[$x ( t ) = e^(− a t) ( cos b t + frac(1, 2) sin b t ) ,$] and that is what the figure below plots. Both parameters are live. {"camera":{"fov":50,"position":\[7.5,0,12\],"projection":"perspective","target":\[7.5,0,0\]},"grid":{"axisColors":{"x":"\#ef4444","y":"\#22c55e","z":"\#3b82f6"},"divisions":16,"gridColor":"\#e5e7eb","showAxes":true,"showLabels":true,"size":16,"visible":true},"id":"7e1089f3-a291-4f99-a725-18a16e1687b2","metadata":{"alt\_text":"A red oscillating curve that starts at height 1 and wiggles along the horizontal time axis inside a shrinking envelope. The slider a controls the damping: at a = 0 the wiggles keep full size forever, and as a grows they die out faster until barely one swing survives. The slider b sets how many oscillations fit in the window.","created\_at":"2026-08-01T00:00:00.000Z","description":"The damped-oscillation family x(t) = exp(-a t)\*(cos(b t) + 0.5 sin(b t)) on t in \[0, 15\], with damping slider a in \[0, 2\] and frequency slider b in \[0.5, 5\]; sweeping a walks the response from sustained oscillation toward the overdamped look.","tags":\["diffeq","second-order","damping","oscillation","slider"\],"updated\_at":"2026-08-01T00:00:00.000Z"},"objects":\[{"id":"ebb987ec-51e0-4355-a179-17df597f754d","kind":"parameter","label":{"text":"a = damping","visible":true},"max":2,"min":0,"name":"a","step":0.05,"value":0.3,"visible":true},{"id":"6fd01723-07bc-42fb-840c-e34ea4005c08","kind":"parameter","label":{"text":"b = frequency","visible":true},"max":5,"min":0.5,"name":"b","step":0.05,"value":3,"visible":true},{"id":"8bfa01ed-4126-48b5-979d-58213fcf897b","kind":"parametric-curve","label":{"text":"x(t) = e^(-at)(cos bt + 0.5 sin bt)","visible":true},"samples":1500,"style":{"color":"\#ef4444","dash":\[\],"lineWidth":4},"tDomain":\[0,15\],"visible":true,"xExpr":"t","yExpr":"exp(-a\*t)\*(cos(b\*t) + 0.5\*sin(b\*t))","zExpr":"0"}\],"title":"Damped vibrations x(t) = e^(-at)(cos bt + 0.5 sin bt)","version":1} Damped free vibration #math.equation(block: false, alt: "x open parenthesis t close parenthesis equals e to the power minus a t open parenthesis cos b t plus the fraction 1 over 2 sin b t close parenthesis")[$x ( t ) = e^(− a t) ( cos b t + frac(1, 2) sin b t )$]. The slider #math.equation(block: false, alt: "a")[$a$] is the damping and the slider #math.equation(block: false, alt: "b")[$b$] the oscillation frequency; together they are the real and imaginary parts of the characteristic roots. === Explore + #strong[Observe.] Set #math.equation(block: false, alt: "a equals 0")[$a = 0$], #math.equation(block: false, alt: "b equals 3")[$b = 3$]. With no damping the motion repeats forever at constant amplitude. Count how many complete oscillations fit in the window, and predict what setting #math.equation(block: false, alt: "b equals 1.5")[$b = 1.5$] will do to that count before you try it. + #strong[Predict.] Keeping #math.equation(block: false, alt: "b equals 3")[$b = 3$], what changes as #math.equation(block: false, alt: "a")[$a$] grows from #math.equation(block: false, alt: "0")[$0$] to #math.equation(block: false, alt: "0.5")[$0.5$] — the #emph[height] of the wiggles, the #emph[spacing] of the wiggles, or both? Commit to an answer. + #strong[Verify.] Drag #math.equation(block: false, alt: "a")[$a$] to #math.equation(block: false, alt: "0.5")[$0.5$] and check. The curve stays inside an invisible envelope #math.equation(block: false, alt: "± C e to the power minus a t")[$± C e^(− a t)$]; the wiggle spacing is set by #math.equation(block: false, alt: "b")[$b$] alone. Confirm the two sliders act independently. + #strong[Observe.] Now push #math.equation(block: false, alt: "a")[$a$] to #math.equation(block: false, alt: "2")[$2$] with #math.equation(block: false, alt: "b")[$b$] still at #math.equation(block: false, alt: "3")[$3$]. How many times does the curve cross zero before it becomes indistinguishable from the axis? Compare with the count at #math.equation(block: false, alt: "a equals 0.3")[$a = 0.3$]. + #strong[Predict, then verify.] Set #math.equation(block: false, alt: "a equals 2")[$a = 2$] and drag #math.equation(block: false, alt: "b")[$b$] down to #math.equation(block: false, alt: "0.5")[$0.5$]. The curve barely completes a single swing. What would #math.equation(block: false, alt: "b equals 0")[$b = 0$] mean for the characteristic roots, and what shape would the motion have? === Connect Written in the standard form #math.equation(block: false, alt: "x double prime plus p x prime plus q x equals 0")[$x^(″) + p x^(′) + q x = 0$], the roots are #math.equation(block: false, alt: "r equals open parenthesis minus p ± the square root of p squared minus 4 q close parenthesis / 2")[$r = ( − p ± sqrt(p^(2) − 4 q) ) / 2$], and the sign of the discriminant #math.equation(block: false, alt: "p squared minus 4 q")[$p^(2) − 4 q$] splits behavior into three cases. When #math.equation(block: false, alt: "p squared less than 4 q")[$p^(2) < 4 q$] the roots are complex, #math.equation(block: false, alt: "minus a ± i b")[$− a ± i b$] with #math.equation(block: false, alt: "b greater than 0")[$b > 0$]: #emph[underdamped] motion, oscillating inside a decaying envelope, everything the figure shows with #math.equation(block: false, alt: "b")[$b$] positive. When #math.equation(block: false, alt: "p squared greater than 4 q")[$p^(2) > 4 q$] both roots are real and negative: #emph[overdamped] motion, a sum of two decaying exponentials that crosses zero at most once and never oscillates. The boundary case #math.equation(block: false, alt: "p squared equals 4 q")[$p^(2) = 4 q$] gives a repeated real root and is called #emph[critically damped]; its solutions are #math.equation(block: false, alt: "open parenthesis c sub 1 plus c sub 2 t close parenthesis e to the power minus a t")[$( c_(1) + c_(2) t ) e^(− a t)$], and among all damping choices it returns the mass to rest fastest without overshoot. That last fact is engineering, not trivia. A screen door closer, a car's shock absorber, and an instrument needle are all deliberately tuned near critical damping — enough resistance to kill the ringing, not so much that the return crawls. In the figure, dragging #math.equation(block: false, alt: "a")[$a$] upward with #math.equation(block: false, alt: "b")[$b$] fixed walks you toward that tuning: the oscillations you have to eliminate are visible right up to the point where the last one disappears. #examplebox("Example 1")[Reading the roots][ Classify the motion of #math.equation(block: false, alt: "x double prime plus 4 x prime plus 13 x equals 0")[$x^(″) + 4 x^(′) + 13 x = 0$] and write the general solution. Then state which slider settings in the figure correspond to it. The characteristic equation is #math.equation(block: false, alt: "r squared plus 4 r plus 13 equals 0")[$r^(2) + 4 r + 13 = 0$], with discriminant #math.equation(block: false, alt: "16 minus 52 equals minus 36 less than 0")[$16 − 52 = − 36 < 0$], so the roots are complex: #math.equation(block: false, alt: "r equals open parenthesis minus 4 ± 6 i close parenthesis / 2 equals minus 2 ± 3 i")[$r = ( − 4 ± 6 i ) / 2 = − 2 ± 3 i$]. The motion is underdamped, and the general solution is #math.equation(block: false, alt: "x equals e to the power minus 2 t open parenthesis c sub 1 cos 3 t plus c sub 2 sin 3 t close parenthesis")[$x = e^(− 2 t) ( c_(1) cos 3 t + c_(2) sin 3 t )$]. That is the figure with #math.equation(block: false, alt: "a equals 2")[$a = 2$] and #math.equation(block: false, alt: "b equals 3")[$b = 3$] — visibly one or two swings before the amplitude collapses. For contrast, #math.equation(block: false, alt: "x double prime plus 8 x prime plus 13 x equals 0")[$x^(″) + 8 x^(′) + 13 x = 0$] has discriminant #math.equation(block: false, alt: "64 minus 52 equals 12 greater than 0")[$64 − 52 = 12 > 0$] and real roots near #math.equation(block: false, alt: "minus 1.35")[$− 1.35$] and #math.equation(block: false, alt: "minus 6.65")[$− 6.65$]: overdamped, no oscillation at all, a case the figure cannot draw because it has no complex pair to plot. ]