Dynamics core

Leaky integrators and periodic-pulse steady states, with proofs.

Repository
dynamics-core on GitHub
Cite
doi:10.5281/zenodo.24038470 (all versions, via Zenodo)
Layer
Layer 0
Licence
Apache-2.0
Status
released

Claims

ClaimLevelStatementEvidence
dynamics:RELAX-COMPOSE v1.0.0 P Relaxing a leaky integrator for dt₁ and then for dt₂ is the same as relaxing it for dt₁ + dt₂: a·e^(−dt₁/τ)·e^(−dt₂/τ) = a·e^(−(dt₁+dt₂)/τ).
dynamics:HALF-LIFE v1.0.0 P After one half-life, τ·ln 2, exactly half of the state is left.
dynamics:PEAK-AFTER-N v1.0.0 P The peaks of pulses of size h with residual factor r per period, A(n+1) = A(n)·r + h with A(1) = h, have the closed form A(n) = h·(1 − rⁿ)/(1 − r) for every r ≠ 1.
dynamics:STEADY-STATE v1.0.0 P For 0 ≤ r < 1 the peaks tend to the steady peak h/(1 − r) as the number of pulses grows.
dynamics:STEADY-TROUGH v1.0.0 P The steady peak h/(1 − r) is the fixed point of 'relax for one period, then add h', and relaxing it for one period gives the steady trough h·r/(1 − r).
dynamics:PEAKS-INCREASE v1.0.0 P For h > 0 and 0 < r < 1 the peaks strictly increase with every pulse and always stay below the steady peak h/(1 − r).
dynamics:FRACTION-REACHED v1.0.0 P For h > 0 and r < 1, the n-th peak reaches the fraction p of the steady peak exactly when rⁿ ≤ 1 − p.
dynamics:SUMMATION-MONOTONE v1.0.0 P For τ > 0 the summation ratio 1/(1 − e^(−T/τ)) strictly decreases as the period T > 0 grows and tends to 1 as T → ∞: pulses far apart stop adding up.
dynamics:HUMAN-SPIKES-BARELY-ADD-UP v1.0.0 P With τ = 75 s, spikes 10 minutes (600 s) apart leave r = e^(−8), and for every period of at least 600 s the summation ratio is between 1 and 1.0004: what is left of all earlier spikes adds at most 0.04 % to each peak.
dynamics:SPIKE-PEAK v1.0.0 P For rise, decay > 0 the spike shape (1 − e^(−s/rise))·e^(−s/decay) is largest at s* = rise·ln(1 + decay/rise) > 0, over every real s.
dynamics:PULSES-TO-FRACTION-EXACT v1.0.0 T pulses_to_fraction(p, T, τ) returns the smallest n ≥ 1 with rⁿ ≤ 1 − p, deciding each candidate in double-double arithmetic. It matches a 400-digit reference on every case, including p one double either side of 1 − rⁿ, a subnormal period and an exact tie, where the floating-point formula ⌈ln(1 − p)/ln r⌉ can be off by one.
  • Uses: dynamics:FRACTION-REACHED@1dynamics:PEAKS-INCREASE@1
dynamics:SUMMATION-AT-HZ v1.0.0 T summation_ratio_at_hz(f, τ) is summation_ratio(1/f, τ), with the period computed by rhythm-units' period_from_hz.
  • Uses: rhythm:FREQ-PERIOD-INVERSE@1
dynamics:IMPLEMENTATIONS-AGREE v1.0.0 T The Rust crate, the Python bindings and the WebAssembly bindings all match golden vectors computed by an independent 400-digit decimal reference: within 1e-13 relative, and pulse counts exactly.
dynamics:INPUT-VALIDATION v1.0.0 T Every function rejects time constants, periods, pulse sizes and frequencies that are not finite and positive, elapsed times and states that are negative or not finite, p outside (0, 1), pulse counts that are not whole numbers of at least 1 (and, in JavaScript, counts above 2^53, which are never wrapped or truncated) and results that overflow or exceed 2^53 pulses; Python raises ValueError (TypeError for a count that is not an int, OverflowError for an int count outside the 64-bit range) and JavaScript throws an Error.
dynamics:TAU-75S v1.0.0 M The project's egg-activation model reads calcium spikes with a CaMKII-like leaky integrator whose time constant is 75 s. (Mus musculus; Model parameter, chosen so that the integrator is back near baseline about 5 minutes after a calcium rise, as reported for CaMKII activity in mouse eggs)

Depends on

Used by

Posts about this repo

No posts about this repo yet.