9.3
116 3D: Equilibria and local linearization
procedure
(jacobian3d field point [ #:time time #:derivative derivative #:step step #:domain domain]) → jacobian3d-result? field : any/c point : vec3? time : finite-real? = 0 derivative : (or/c false/c procedure?) = #f step : (or/c false/c positive?) = #f domain : (or/c false/c procedure?) = #f
Returns an immutable local derivative matrix for
an ODE field at point. An analytic #:derivative follows the
field’s usual (x y z) or (time x y z) calling convention and
must return a finite linear3. Otherwise the result uses deterministic
scale-aware symmetric finite differences. The optional #:domain
predicate receives a vec3; it is the only reason a one-sided stencil
is used. The result records its method, coordinate steps, total evaluations,
and a local first-versus-second-order error indicator where it is available.
procedure
(jacobian3d-result? value) → boolean?
value : any/c
Recognizes the transparent
immutable result record returned by jacobian3d. Its constructor and
accessors begin with jacobian3d-result-.
procedure
(equilibrium-points3d field seeds [ #:solver solver #:jacobian derivative #:merge-distance merge-distance #:domain domain #:time time #:cancellation-token cancellation-token]) → equilibrium-search3d? field : any/c seeds : seed-set3d? solver : equilibrium-solver3d? = default-equilibrium-solver3d derivative : (or/c false/c procedure?) = #f merge-distance : positive? = 1e-6 domain : (or/c false/c procedure?) = #f time : finite-real? = 0 cancellation-token : any/c = #f
Runs
bounded damped Newton searches from precisely the declared seed order. A
successful root is clustered against earlier successful roots only, so the
earliest seed is its canonical representative. Failed seeds remain as
equilibrium-seed-result3d? entries with an explicit status such as
'singular-jacobian, 'out-of-domain, 'stalled, or
'iteration-limit. A cancellation token is checked between seed
searches and Newton/backtracking iterations; it raises instead of returning a
partial root collection.
procedure
(equilibrium-search3d? value) → boolean?
value : any/c
Recognizes the
immutable search result. Its seeds, roots, seed-results, and
diagnostics accessors retain all seed outcomes rather than only the
converged representatives.
procedure
(equilibrium-seed-result3d? value) → boolean?
value : any/c
Recognizes one
immutable seed outcome. Its accessors begin with equilibrium-seed-result3d-.
procedure
(equilibrium-solver3d residual-tolerance step-tolerance maximum-iterations damping minimum-damping) → equilibrium-solver3d? residual-tolerance : positive? step-tolerance : positive? maximum-iterations : exact-positive-integer? damping : positive? minimum-damping : positive?
Constructs
the explicit tolerances and deterministic backtracking schedule used by an
equilibrium search.
procedure
(equilibrium-solver3d? value) → boolean?
value : any/c
Recognizes an
equilibrium solver settings value.
The default
bounded damped Newton settings.
procedure
(eigensystem3d-of matrix [ #:tolerance tolerance]) → eigensystem3d? matrix : linear3? tolerance : positive? = 1e-10
Computes a bounded deterministic real 3×3 eigensystem.
Eigenvalues are ordered by real component, then imaginary component, with the
positive member of a conjugate pair first. Real eigenvectors use the sign whose
largest-magnitude component is positive. Diagnostics report the characteristic
discriminant and near-defect tolerance rather than concealing numerically
ambiguous cases.
procedure
(eigensystem3d? value) → boolean?
value : any/c
Recognizes immutable
eigensystem data. Its accessors begin with eigensystem3d-.
procedure
(linearize3d field point [ #:time time #:jacobian derivative #:tolerance tolerance]) → linearization3d? field : any/c point : vec3? time : finite-real? = 0 derivative : (or/c false/c procedure?) = #f tolerance : positive? = 1e-8
Combines
a Jacobian and deterministic eigensystem at a point. It classifies sink,
source, saddle, spiral sink/source, center-like, nonhyperbolic, or indeterminate
using the declared tolerance; complex pairs expose complementary invariant-plane
data where a stable real normal is available.
procedure
(linearization3d? value) → boolean?
value : any/c
Recognizes an immutable
local linearization. Its accessors begin with linearization3d-.
procedure
(linearization-diagram3d value [ #:id id #:scale scale]) → group3d? value : linearization3d? id : symbol? = 'linearization scale : positive? = 1
Lowers
the retained real eigendirections to named finite 3D diagram lines. Stable,
unstable, and center directions receive separately configurable stroke styles.
The finite extent is explicitly author-chosen by scale; invariant planes
remain data because no universal plane-patch size is mathematically correct.