Journey 06 — Limits
Constant-A requirement, when to use SolvSRK instead, and survived=False on blow-up.
Prerequisites: Journey 05 complete. Scenario: What SolvLRDE is for, and what belongs to SolvSRK / SolvJump
Key APIs
solvlrde.solve()result['survived']result['failure_mode']
Concepts to internalize
- Not nonlinear — no rhs callback; linearize first or use SolvSRK.
- Not a trajectory — one T per call; loop if you need multiple times.
- vs SolvSRK mode 1 — Talbot inside SRK is for rhs-callback IVPs; standalone SolvLRDE is for matrix A you already hold.
Important code
The guided tour script wraps this pattern. Copy the production shape into your pipeline:
# Nonlinear? No entry point — use SolvSRK:
# solvsrk.run_profile(token, ..., rhs_fn=rhs)
# Parameter sweeps — orchestrate yourself or use SolvJumpAct-by-act walkthrough
Act 1 — The one hard requirement: constant, linear A
SolvLRDE solves y' = A y + b where A and b are CONSTANT. That linearity is exactly what lets it skip time-stepping and integrate a contour instead. If your dynamics are nonlinear (y' = f(t, y) with y appearing nonlinearly) or A changes with time, SolvLRDE cannot represent the problem - there is no rhs-function entry point on purpose.
Act 2 — Nonlinear -> use SolvSRK
A reactor with y' = -kyy, a pendulum with sin(theta), Robertson kinetics - all nonlinear. Reach for SolvSRK (resonix_solvsrk): it takes a Python rhs(t, y), integrates nonlinear IVPs to the horizon.
- Nonlinear IVP -> solvsrk.run(cfg, ndim, t0, t_end, y0, rhs_fn=...)
Act 3 — Many parameter sets -> use SolvJump
If A is linear but you need y(T) for hundreds of parameterizations and want the best shortlisted, that is a study, not a solve. SolvJump (resonix_solvjump) runs the sweep, caches a fast path, and writes receipts.
Act 4 — Honest refusal on blow-up
Even within its domain, SolvLRDE reports failure instead of returning junk. A = [[1.0]] is y' = +y; at T=800 the exact answer exp(800) overflows double precision. The solver flags it (survived=False) rather than emitting inf.
| Field | Value | Notes |
|---|---|---|
survived | True | |
status | ok | |
y | -3.549e-12 | |
message | (none) |
Act 5 — Summary
SolvLRDE: constant-A linear systems, any horizon, cost independent of T, immune to stiffness. SolvSRK: nonlinear / general stiff IVPs. SolvJump: parameter studies on top of either.
Guided tour output
Verified console capture from 06_limits.py:
What SolvLRDE is for, and what belongs to SolvSRK / SolvJump
-- Act 1 - The one hard requirement: constant, linear A --
-> SolvLRDE solves y' = A y + b where A and b are CONSTANT. That linearity is exactly what lets it skip time-stepping and integrate a contour instead. If your dynamics are nonlinear (y' = f(t, y) with y appearing nonlinearly) or A changes with time, SolvLRDE cannot represent the problem - there is no rhs-function entry point on purpose.
-- Act 2 - Nonlinear -> use SolvSRK --
-> A reactor with y' = -k*y*y, a pendulum with sin(theta), Robertson kinetics - all nonlinear. Reach for SolvSRK (resonix_solvsrk): it takes a Python rhs(t, y), integrates nonlinear IVPs to the horizon.
log: Nonlinear IVP -> solvsrk.run(cfg, ndim, t0, t_end, y0, rhs_fn=...)
-- Act 3 - Many parameter sets -> use SolvJump --
-> If A is linear but you need y(T) for hundreds of parameterizations and want the best shortlisted, that is a study, not a solve. SolvJump (resonix_solvjump) runs the sweep, caches a fast path, and writes receipts.
-- Act 4 - Honest refusal on blow-up --
-> Even within its domain, SolvLRDE reports failure instead of returning junk. A = [[1.0]] is y' = +y; at T=800 the exact answer exp(800) overflows double precision. The solver flags it (survived=False) rather than emitting inf.
survived: True
status: ok
y: -3.549e-12
message: (none)
-- Act 5 - Summary --
-> SolvLRDE: constant-A linear systems, any horizon, cost independent of T, immune to stiffness. SolvSRK: nonlinear / general stiff IVPs. SolvJump: parameter studies on top of either.
-- Run complete --
next_journey: (end of suite - see examples/PROGRESSION.md)Run it
cd python
# Guided tour — narrated scenario walkthrough (recommended first run):
python examples/journeys/06_limits.py
# Production one-liner — same API call you ship:
python examples/journeys/06_limits.pyWhat comes next
Pick your vertical SKU walkthrough (07–12) in SKU_PROGRESSION.md.