Source: https://guthlabs.ai/docs/instruments/damped-harmonic-oscillator-calculator/

instrument / verified-with-binding-errata

# Damped Harmonic Oscillator Calculator

The current ledger marks this instrument verified with errata that must be applied at binding time.

Status: **VERIFIED_WITH_ERRATA**Lifecycle: **verified-with-binding-errata**

## Inspectable records

[01**Overview**Purpose and lifecycle](<https://guthlabs.ai/docs/instruments/damped-harmonic-oscillator-calculator/>)[02**Mechanism**Method and assumptions](<https://guthlabs.ai/docs/instruments/damped-harmonic-oscillator-calculator/mechanism/>)[03**Implementation**Binding and validation](<https://guthlabs.ai/docs/instruments/damped-harmonic-oscillator-calculator/implementation/>)[04**Qualification**Evidence and errata](<https://guthlabs.ai/docs/instruments/damped-harmonic-oscillator-calculator/qualification/>)

## Ledger state

The current ledger marks this instrument verified with errata that must be applied at binding time.

**Area**: Physics — Kinematics/Projectiles/Orbits, Forces/Energy/Momentum, Rotational Dynamics, Gravitation, Oscillations/Waves, Optics, E&M Fields, Relativity, Quantum, Statistical Thermo

**Tranche**: tranche-6

**Evidence ID**: t6-067

**Ledger rows**: 1

No ledger note is attached.

## Review findings

NEEDS_REVIEW because the supplied formulas establish the governing ODE, damping ratio, and underdamped frequency, but do not uniquely specify the plotted response for all three regimes or fully specify initial-condition and parameter constraints. The honest-label statement correctly distinguishes linear viscous damping from Coulomb friction.

### Formula and scope findings

- The differential equation and damping-ratio formula are standard for a linear viscous spring-mass oscillator, assuming k>0, m>0, and c>=0.

- The stated omega_d=omega0*sqrt(1-zeta^2) is valid only for the underdamped regime 0<=zeta<1; it is not a real damped frequency for critical or overdamped motion.

- The specification does not provide the actual x(t) solutions needed to generate the claimed plot for arbitrary initial displacement x0 and velocity v0. It must include the underdamped, critical, and overdamped solutions.

- For 0<=zeta<1, the required solution is x(t)=exp(-zeta*omega0*t)*[x0*cos(omega_d*t)+(v0+zeta*omega0*x0)/omega_d*sin(omega_d*t)].

- At zeta=1, the solution is x(t)=[x0+(v0+omega0*x0)t]*exp(-omega0*t). For zeta>1, the two real roots and their coefficients must be specified.

- Regime classification boundaries are not explicitly stated: underdamped requires 0<=zeta<1, critical requires zeta=1, and overdamped requires zeta>1. Negative c gives negative zeta and an unstable active/negative-damping system, which is outside the stated damping classification.

### Unit assumptions

- k is spring stiffness in N/m, m is mass in kg, c is viscous damping coefficient in N*s/m, x0 is initial displacement in m, v0 is initial velocity in m/s, and t is in seconds.

- omega0=sqrt(k/m) has units s^-1; zeta=c/(2*sqrt(k*m)) is dimensionless; omega_d has units s^-1.

- The model assumes a linear spring force -k*x and viscous damping force -c*xdot, with no Coulomb friction, nonlinear damping, forcing, or gravity offset.

- The numerical vectors use t>=0 and k>0, m>0, c>=0.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

The zero-mass input produces division by zero and undefined model quantities unless rejected. The specification also leaves directional sign conventions for initial conditions implicit, producing materially different outputs for the same apparent velocity entry.

## Errata and corrections

### Tranche errata

**sampled_points x(0), x(pi/sqrt(15))** · vector 1

0 m / -0.0444344 m

0.1 m / +0.0172113 m

x(0) contradicts own working (which self-corrects to 0.1 then ships 0); the second point matches neither her stated pure-cosine formula (which gives 0 at omega_d*t=pi/2) nor the full underdamped closed form (+0.0172113 with the B*sin term)

## Inspectable example

4 review vectors are recorded. One source-bound sample is shown below.

````
{
  "inputs": {
    "k": "4 N/m",
    "m": "1 kg",
    "c": "1 N*s/m",
    "x0": "0.1 m",
    "v0": "0 m/s",
    "sample_times": [
      "0 s",
      "pi/sqrt(15) s"
    ],
    "model": "underdamped closed-form solution"
  },
  "expected_outputs": {
    "omega0": "2 s^-1",
    "zeta": "0.25",
    "regime": "underdamped",
    "omega_d": "sqrt(15)/2 s^-1 = 1.936491673 s^-1",
    "sampled_points": {
      "x(0)": "0 m",
      "x(pi/sqrt(15))": "-0.1*exp(-pi/sqrt(15)) m = approximately -0.0444344 m"
    },
    "key_curve_features": {
      "equilibrium_root_times": "t=2*n*pi/sqrt(15) s, n=0,1,2,...",
      "first_positive_extremum_time": "t=2*atan(sqrt(15))/sqrt(15) s",
      "first_positive_extremum": "x=0.05*exp(-atan(sqrt(15))/sqrt(15)) m, approximately 0.0379 m",
      "asymptote": "x(t)->0 as t->infinity"
    }
  },
  "working": "omega0=sqrt(k/m)=sqrt(4/1)=2. zeta=c/(2*sqrt(k*m))=1/(2*sqrt(4*1))=1/4=0.25, so the motion is underdamped. omega_d=2*sqrt(1-0.25^2)=2*sqrt(15/16)=sqrt(15)/2. With x0=0 and v0=0.1? No: here v0=0, so x(t)=0.1*exp(-0.5*t)*cos((sqrt(15)/2)t). At t=0, x=0.1 m, not 0 m. At t=pi/sqrt(15), the cosine argument is pi/2, so x=0 m. The originally intended zero-displacement test is instead represented by the following corrected evaluation: for x0=0.1 m and v0=0 m/s, sampled values are x(0)=0.1 m and x(pi/sqrt(15))=0 m. The first extremum is at t=0; subsequent extrema satisfy tan(omega_d*t)=-omega_d/0.5."
}
````

## Related workflows

No source-defined multi-instrument workflow membership is recorded.

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json · VERIFIED_WITH_ERRATA`

- `evidence-tranche6/tranche6-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
