Scientific validation

The Lyapunov exponent computation in chaotic_pfc has been numerically validated against published reference values from the scientific literature and against an analytical mathematical identity.

Reference values

The following table summarises the Lyapunov spectrum of the generalised Hénon map (\(\alpha = 1.4\), \(\beta = 0.3\)) , equivalent to the standard Hénon (\(a = 1.4\), \(b = 0.3\)) under a linear change of variables , as reported by independent sources, alongside the value computed by lyapunov_henon2d() with \(N_{\text{itera}} = 20\,000\) and seed 42.

Source

\(\lambda_1\)

\(\lambda_2\)

\(\lambda_1 + \lambda_2\)

Wolf et al. (1985) [1]

\(+0.418\)

\(-1.622\)

\(-1.204\)

Sprott (2003) [2]

\(+0.419\)

\(-1.623\)

\(-1.204\)

Analytical identity
\(\ln|\beta| = \ln(0.3)\)

\(-1.203\,973\)

This work (Nitera = 20 000)

\(+0.417\,567\)

\(-1.621\,539\)

\(-1.203\,973\)

Table 2 Relative error of chaotic-pfc vs. each reference

Comparison

Relative error

\(\lambda_1\) vs. Wolf 1985

0.10 %

\(\lambda_1\) vs. Sprott 2003

0.34 %

\(\lambda_2\) vs. Wolf 1985

0.03 %

\(\lambda_2\) vs. Sprott 2003

0.09 %

Sum vs. \(\ln(0.3)\)

\(2.2 \times 10^{-16}\) (machine precision)

Analytical identity

For the Hénon map, the Jacobian determinant is constant: \(\det J = -\beta\). Consequently, the sum of the Lyapunov exponents must satisfy

\[\lambda_1 + \lambda_2 = \ln|\det J| = \ln \beta.\]

This identity holds for any dissipative parameter pair \((\alpha, \beta)\) for which the orbit remains bounded. It does not depend on any external reference ; it is a mathematical theorem.

The test suite verifies this identity at three parameter sets:

  • \((\alpha = 1.4, \; \beta = 0.3)\) — standard chaotic regime

  • \((\alpha = 1.4, \; \beta = 0.2)\) — strongly dissipative

  • \((\alpha = 1.0, \; \beta = 0.5)\) — non-chaotic (periodic)

In every case the error is below \(10^{-6}\).

How to run the validation tests

pytest tests/test_scientific_validation.py -v

All nine tests pass (≈ 4 s on a modern CPU). The Wolf and Sprott comparisons use \(N_{\text{itera}} = 20\,000\); the analytical identity tests use \(10\,000\).

Known limitations

  • Finite-time convergence. Published Lyapunov values correspond to the asymptotic limit \(N_{\text{itera}} \to \infty\). Our code with \(N_{\text{itera}} = 2\,000\) (the default for sweeps) produces \(\lambda_1 \approx 0.408\) — a 2.4 % deviation from Wolf. The error decreases to 0.10 % at \(20\,000\) iterations. The default iteration count is a conscious trade-off between sweep throughput and per-point accuracy; the analytical identity confirms the implementation is correct at any iteration count.

  • Orbit divergence. Not every \((a, b)\) pair yields a bounded

    attractor. The test suite uses only parameter sets known to produce bounded orbits in the long-time limit.

References