Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Michie-King anisotropy validation

San Diego State University

The Michie (1963) radial-anisotropy term on King’s (1966) lowered cutoff: a self-consistent, radially anisotropic cluster model. Test file: tests/validation/test_michie_physics.py (see the test dashboard for the live per-suite count); figures: scripts/validate_michie.py. Theory at Michie-King anisotropic model.

What is verified

Each row maps to assertions in test_michie_physics.py. Measured values are regenerated by scripts/validate_michie.py. All use W0=7W_0=7, rc=1r_c=1, with ra=8rcr_a=8\,r_c for the anisotropic case (it truncates: rt/rc56r_t/r_c\simeq56) and ra=104rcr_a=10^4\,r_c for the isotropic limit.

Property

Tolerance (as tested)

Measured

Anchor

Isotropic limit: ρMichie(ra ⁣ ⁣)=ρKing\rho_{\rm Michie}(r_a\!\to\!\infty)=\rho_{\rm King}

10-2 max rel

2.7×1032.7\times10^{-3}

rar_a\to\infty recovers King

King-limit convergence (ra/rcr_a/r_c\to\infty)

<102<10^{-2} at ra=103r_a=10^3

2.0×1032.0\times10^{-3}

monotone-ish \to grid floor

Anisotropy β(r)\beta(r) vs DF oracle

<0.05<0.05 per bin

max dev 0.027

2nd moments of the exact DF

β\beta below Osipkov-Merritt ceiling

β<r2/(r2+ra2)\beta < r^2/(r^2+r_a^2)

True (all bins)

lowering term breaks f(Q)f(Q)

β\beta isotropic at center, radial outward

β(0) ⁣ ⁣0\beta(0)\!\approx\!0, increasing

0.030.480.03 \to 0.48

Michie anisotropy

More anisotropic \Rightarrow more extended

rt(aniso)>rt(iso)r_t(\text{aniso}) > r_t(\text{iso})

56.0>33.856.0 > 33.8

radial-orbit support

Virial ratio Q=T/VQ=T/|V| (unscaled)

Q0.5<0.05|Q-0.5|<0.05

0.501

2T+V=02T+V=0, self-consistent σ\sigma

Bound fraction (vvescv\le v_{\rm esc})

100%

100.00%

vesc=σ2W(r)v_{\rm esc}=\sigma\sqrt{2W(r)}

Over-anisotropy guarded

raises ValueError

raised (ra=0.1r_a=0.1)

no finite tidal radius

Sampling differentiability (W0,rc,MW_0, r_c, M)

AD == central-FD

rel err 1×1071\times10^{-7}, 1×1081\times10^{-8}, 7×1077\times10^{-7}

diffrax ODE + scan sampling

Figures

Generated by scripts/validate_michie.py (PASS/FAIL per panel; PNG + PDF vector).

The anisotropy signature. Sampled \beta(r)=1-\sigma_t^2/2\sigma_r^2 (points)
tracks the Michie-King DF oracle (solid, the 2nd-moment integral of the exact
DF) to max deviation 0.027 — and both sit well below the pure Osipkov-Merritt
ceiling r^2/(r^2+r_a^2) (dotted). \beta\to0 at the isotropic core, grows
radially outward, and turns back toward isotropy at the tidal boundary.

Figure 1:The anisotropy signature. Sampled β(r)=1σt2/2σr2\beta(r)=1-\sigma_t^2/2\sigma_r^2 (points) tracks the Michie-King DF oracle (solid, the 2nd-moment integral of the exact DF) to max deviation 0.027 — and both sit well below the pure Osipkov-Merritt ceiling r2/(r2+ra2)r^2/(r^2+r_a^2) (dotted). β0\beta\to0 at the isotropic core, grows radially outward, and turns back toward isotropy at the tidal boundary.

Table-routed draws vs the exact (u_r,u_t) quadrature oracle (W_0=7,
r_a=8, N=2\times10^4). Since the 2026-06 memory batch,
MichieVelocityDF draws speeds from the anisotropic CDF table at g=1
(Michie ≡ LIMEPY g{=}1 anisotropic — change-of-variables proven and
brute-force verified), with the original 2-D quadrature retained as
speed_method="quadrature". (a) Speed distributions: KS D = 6.7\times10^{-3}
(gate <0.02; unpaired comparison — the two paths consume keys in different
orders). (b) Measured \beta(r): \max|\Delta\beta| = 0.042 (gate <0.06).
Script: scripts/validate_speed_routing.py; see
performance & memory.

Figure 2:Table-routed draws vs the exact (ur,ut)(u_r,u_t) quadrature oracle (W0=7W_0=7, ra=8r_a=8, N=2×104N=2\times10^4). Since the 2026-06 memory batch, MichieVelocityDF draws speeds from the anisotropic CDF table at g=1g=1 (Michie ≡ LIMEPY g=1g{=}1 anisotropic — change-of-variables proven and brute-force verified), with the original 2-D quadrature retained as speed_method="quadrature". (a) Speed distributions: KS D=6.7×103D = 6.7\times10^{-3} (gate <0.02<0.02; unpaired comparison — the two paths consume keys in different orders). (b) Measured β(r)\beta(r): maxΔβ=0.042\max|\Delta\beta| = 0.042 (gate <0.06<0.06). Script: scripts/validate_speed_routing.py; see performance & memory.

Anisotropic dispersions and equilibrium. (a) The radial dispersion
\sigma_r exceeds the per-component tangential \sigma_t by a margin that widens
outward — the kinematic signature of radial anisotropy. (b) Every velocity is
bound, v\le v_{\rm esc}(r) — 100%. (c) The unscaled IC is virial,
Q=0.501, with no external rescale (self-consistent \sigma^2=GM/9r_c\mu).

Figure 3:Anisotropic dispersions and equilibrium. (a) The radial dispersion σr\sigma_r exceeds the per-component tangential σt\sigma_t by a margin that widens outward — the kinematic signature of radial anisotropy. (b) Every velocity is bound, vvesc(r)v\le v_{\rm esc}(r)100%. (c) The unscaled IC is virial, Q=0.501Q=0.501, with no external rescale (self-consistent σ2=GM/9rcμ\sigma^2=GM/9r_c\mu).

Density and the King limit. As r_a\to\infty the Michie density coincides with
the isotropic King profile (max rel 2.7\times10^{-3}); finite r_a (radial
anisotropy) makes the model more extended (r_t/r_c=56 at r_a=8 vs 33.8 for
King).

Figure 4:Density and the King limit. As rar_a\to\infty the Michie density coincides with the isotropic King profile (max rel 2.7×1032.7\times10^{-3}); finite rar_a (radial anisotropy) makes the model more extended (rt/rc=56r_t/r_c=56 at ra=8r_a=8 vs 33.8 for King).

Isotropic-limit convergence. The maximum density deviation from King falls with
r_a/r_c, reaching \sim2\times10^{-3} (an ODE-grid floor) by r_a=10^3 — well
inside the 10^{-2} tolerance. The dip near r_a\!\sim\!12 is a genuine
density-profile crossing.

Figure 5:Isotropic-limit convergence. The maximum density deviation from King falls with ra/rcr_a/r_c, reaching 2×103\sim2\times10^{-3} (an ODE-grid floor) by ra=103r_a=10^3 — well inside the 10-2 tolerance. The dip near ra ⁣ ⁣12r_a\!\sim\!12 is a genuine density-profile crossing.

Differentiability

The Michie structural parameters are differentiable through the diffrax ODE solve and the jax.lax.scan sampling, enabling gradient-based / HMC inference of the anisotropic model.

Gradient validation (autodiff vs central finite difference). \partial(\text{obs})/\partial\theta
for (a) W_0, (b) r_c, (c) M_{\rm tot}: autodiff and finite difference agree to
max rel err 1\times10^{-7}, 1\times10^{-8}, 7\times10^{-7}, so the anisotropic
model can be fit jointly with the structural parameters.

Figure 6:Gradient validation (autodiff vs central finite difference). (obs)/θ\partial(\text{obs})/\partial\theta for (a) W0W_0, (b) rcr_c, (c) MtotM_{\rm tot}: autodiff and finite difference agree to max rel err 1×1071\times10^{-7}, 1×1081\times10^{-8}, 7×1077\times10^{-7}, so the anisotropic model can be fit jointly with the structural parameters.

How to run

# physics tests (~22 s on CPU)
pytest tests/validation/test_michie_physics.py -q

# regenerate the five figures with PASS/FAIL tables
python scripts/validate_michie.py

What this suite does not test

References

Michie (1963) (anisotropy term) and King (1966) (lowered cutoff). The per-paper notes are in the bibliography; theory and the DF derivation at Michie-King anisotropic model.

References
  1. Michie, R. W. (1963). On the distribution of high energy stars in spherical stellar systems. Monthly Notices of the Royal Astronomical Society, 125, 127–139. 10.1093/mnras/125.2.127
  2. King, I. R. (1966). The structure of star clusters. III. Some simple dynamical models. The Astronomical Journal, 71, 64–75. 10.1086/109857