diff --git a/apply_article_table10_split.py b/apply_article_table10_split.py new file mode 100644 index 0000000..9a6fee2 --- /dev/null +++ b/apply_article_table10_split.py @@ -0,0 +1,50 @@ +"""Split Table 10 of article/sim_numerics.md in two - totals (with bound violations) and the +per-problem counts - so that it fits a printed page. The numbers are unchanged. + + python -u apply_article_table10_split.py +""" +from __future__ import annotations + +PATH = "article/sim_numerics.md" + +OLD_START = "**Table 10.** A′ against the library rivals on all six corpora (uniform criterion)." +OLD_END = "| all 855 | **13032** | 16481 | 16657 | 24565 | 23649 | | |" + +NEW = """**Table 10.** A′ against the library rivals on all six corpora (uniform criterion): total evaluations; in brackets the runs that break the $2\\times$-bisection bound. + +| corpus | A′ | Chandrupatla | ModAB | Brent | TOMS 748 | +|----------------------|------------|--------------|------------|------------|------------| +| APS (154) | **2259** (0) | 2595 (0) | 2726 (0) | 2707 (0) | 2636 (0) | +| Chandrupatla (45) | **1074** (0) | 1505 (0) | 1681 (0) | 3238 (18) | 3088 (15) | +| new corpus 1 (206) | **3290** (0) | 3716 (0) | 3809 (1) | 6395 (38) | 5746 (22) | +| Roots.jl (78) | **1371** (0) | 1566 (0) | 1446 (0) | 2455 (11) | 2339 (9) | +| applied + GSL (132) | 1382 (0) | 1382 (0) | 1460 (0) | 1503 (1) | 1756 (1) | +| **corpus 4 (240), the one test** | **3656** (0) | 5717 (0) | 5535 (8) | 8267 (50) | 8084 (37) | +| all 855 | **13032** | 16481 | 16657 | 24565 | 23649 | + +**Table 10b.** The same runs problem by problem: A′'s wins/ties/losses against Chandrupatla and against ModAB (exact two-sided sign test). + +| corpus | A′ vs Chandrupatla | A′ vs ModAB | +|----------------------|------------------------------|--------------| +| APS (154) | 103/20/31, $p=3\\cdot10^{-10}$ | 118/10/26 | +| Chandrupatla (45) | 31/4/10, $p=0.001$ | 34/4/7 | +| new corpus 1 (206) | 108/33/65, $p=0.001$ | 125/26/55 | +| Roots.jl (78) | 44/14/20, $p=0.004$ | 47/11/20 | +| applied + GSL (132) | 48/52/32, $p=0.09$ | 76/35/21 | +| **corpus 4 (240), the one test** | **177/35/28, $p=10^{-27}$** | **183/23/34** |""" + + +def main(): + with open(PATH, encoding="utf8") as fh: + text = fh.read() + if text.count(OLD_START) != 1 or text.count(OLD_END) != 1: + raise SystemExit("Table 10 anchors not found exactly once") + i, j = text.index(OLD_START), text.index(OLD_END) + len(OLD_END) + text = text[:i] + NEW + text[j:] + with open(PATH, "w", encoding="utf8") as fh: + fh.write(text) + print("Table 10 split") + + +if __name__ == "__main__": + main() diff --git a/article/sim_numerics.md b/article/sim_numerics.md index 5fb398b..c96eeeb 100644 --- a/article/sim_numerics.md +++ b/article/sim_numerics.md @@ -135,15 +135,15 @@ Every quantity in it is either an evaluation of $f$, a divided difference of eva An interpolation-only rule has no worst-case bound. The obvious safeguards *replace* the computed step with a midpoint whenever some progress test fails, and all of them are ruinous here, for a reason specific to a fast method: a step that collapses the *error* need not halve the *bracket*, so a bracket-based test fires on exactly the steps that were best. With the three-point scale, replacing on that test drops the observed order from 1.94 to 1.00 and the Alefeld–Potra–Shi total from 2806 to 7260 — worse than bisection. -The remedy is to keep as much of the computed step as the budget allows. Let $n_\max=2\lceil\log_2(w_0/\varepsilon_x)\rceil$ be twice the bisection step count for the initial width $w_0$ and $x$-tolerance $\varepsilon_x$, and let $\epsilon=\varepsilon_x/2$. At step $j$, with the bracket $[\ell,h]$, define the allowance and the projection +The remedy is to keep as much of the computed step as the budget allows. Let $n_{\max}=2\lceil\log_2(w_0/\varepsilon_x)\rceil$ be twice the bisection step count for the initial width $w_0$ and $x$-tolerance $\varepsilon_x$, and let $\epsilon=\varepsilon_x/2$. At step $j$, with the bracket $[\ell,h]$, define the allowance and the projection -$$\alpha_j = 2^{\,n_\max-j}\epsilon, \qquad x \;=\; \operatorname{clamp}\bigl(x_\mathrm{sim},\; h-\alpha_j,\; \ell+\alpha_j\bigr). \tag{3}$$ +$$\alpha_j = 2^{\,n_{\max}-j}\epsilon, \qquad x \;=\; \operatorname{clamp}\bigl(x_\mathrm{sim},\; h-\alpha_j,\; \ell+\alpha_j\bigr). \tag{3}$$ -The next bracket is at most $\max(x-\ell,\,h-x)$, so (3) gives $w_{j+1}\le\alpha_j$ directly, and induction bounds the run by $n_\max$ steps in exact arithmetic. In floating point the bracket can land exactly on the boundary, and the termination test then asks for one more; the guarantee stated and verified is therefore $2\lceil\log_2(w_0/\varepsilon_x)\rceil+3$ evaluations. +The next bracket is at most $\max(x-\ell,\,h-x)$, so (3) gives $w_{j+1}\le\alpha_j$ directly, and induction bounds the run by $n_{\max}$ steps in exact arithmetic. In floating point the bracket can land exactly on the boundary, and the termination test then asks for one more; the guarantee stated and verified is therefore $2\lceil\log_2(w_0/\varepsilon_x)\rceil+3$ evaluations. **The multiplier is the method's one free constant.** An earlier version of this section argued that it is "the factor already claimed in the bound". That is circular — the bound is twice bisection because two was chosen — and measurement settles it (`measure_budget_factor.py`, Linux): -**Table 1a.** The scheduled projection at budget multiplier $c$, i.e. $n_\max=\lceil c\cdot\log_2(w_0/\varepsilon_x)\rceil$. Total evaluations, failures charged. +**Table 1a.** The scheduled projection at budget multiplier $c$, i.e. $n_{\max}=\lceil c\cdot\log_2(w_0/\varepsilon_x)\rceil$. Total evaluations, failures charged. | $c$ | APS-154 | CHA-45 | both | |---|---|---|---| @@ -532,17 +532,28 @@ ModAB, the most recent bracketing method we know of, is run from its authors' pa **The history is part of the result.** The variant carried to corpora 1–3 was A′ without the tolerance step and the overshoot branch. It transferred to corpus 1 by every pre-registered criterion (total 10% below Chandrupatla, per problem 105/34/67, $p=0.005$), did *not* transfer to Roots.jl (total 6.5% below, but per problem 38/10/30, $p=0.4$) and lost on the applied corpus (14% above). The losses there were traced to two gaps of the base step — no closing of the bracket once the root is reached, and no recognition of roots of order below one — which became the last two readings of §8.4; they were developed on the seen corpora and tested once, on corpus 4. -**Table 10.** A′ against the library rivals on all six corpora (uniform criterion). Totals; in brackets the runs that break the $2\times$-bisection bound. Per problem against Chandrupatla: wins/ties/losses. +**Table 10.** A′ against the library rivals on all six corpora (uniform criterion): total evaluations; in brackets the runs that break the $2\times$-bisection bound. -| corpus | A′ | Chandrupatla | ModAB | Brent | TOMS 748 | A′ vs Chandrupatla | A′ vs ModAB | -|---|---|---|---|---|---|---|---| -| APS (154) | **2259** (0) | 2595 (0) | 2726 (0) | 2707 (0) | 2636 (0) | 103/20/31, $p=3\cdot10^{-10}$ | 118/10/26 | -| Chandrupatla (45) | **1074** (0) | 1505 (0) | 1681 (0) | 3238 (18) | 3088 (15) | 31/4/10, $p=0.001$ | 34/4/7 | -| new corpus 1 (206) | **3290** (0) | 3716 (0) | 3809 (1) | 6395 (38) | 5746 (22) | 108/33/65, $p=0.001$ | 125/26/55 | -| Roots.jl (78) | **1371** (0) | 1566 (0) | 1446 (0) | 2455 (11) | 2339 (9) | 44/14/20, $p=0.004$ | 47/11/20 | -| applied + GSL (132) | 1382 (0) | 1382 (0) | 1460 (0) | 1503 (1) | 1756 (1) | 48/52/32, $p=0.09$ | 76/35/21 | -| **corpus 4 (240), the one test** | **3656** (0) | 5717 (0) | 5535 (8) | 8267 (50) | 8084 (37) | **177/35/28, $p=10^{-27}$** | **183/23/34** | -| all 855 | **13032** | 16481 | 16657 | 24565 | 23649 | | | +| corpus | A′ | Chandrupatla | ModAB | Brent | TOMS 748 | +|----------------------|------------|--------------|------------|------------|------------| +| APS (154) | **2259** (0) | 2595 (0) | 2726 (0) | 2707 (0) | 2636 (0) | +| Chandrupatla (45) | **1074** (0) | 1505 (0) | 1681 (0) | 3238 (18) | 3088 (15) | +| new corpus 1 (206) | **3290** (0) | 3716 (0) | 3809 (1) | 6395 (38) | 5746 (22) | +| Roots.jl (78) | **1371** (0) | 1566 (0) | 1446 (0) | 2455 (11) | 2339 (9) | +| applied + GSL (132) | 1382 (0) | 1382 (0) | 1460 (0) | 1503 (1) | 1756 (1) | +| **corpus 4 (240), the one test** | **3656** (0) | 5717 (0) | 5535 (8) | 8267 (50) | 8084 (37) | +| all 855 | **13032** | 16481 | 16657 | 24565 | 23649 | + +**Table 10b.** The same runs problem by problem: A′'s wins/ties/losses against Chandrupatla and against ModAB (exact two-sided sign test). + +| corpus | A′ vs Chandrupatla | A′ vs ModAB | +|----------------------|------------------------------|--------------| +| APS (154) | 103/20/31, $p=3\cdot10^{-10}$ | 118/10/26 | +| Chandrupatla (45) | 31/4/10, $p=0.001$ | 34/4/7 | +| new corpus 1 (206) | 108/33/65, $p=0.001$ | 125/26/55 | +| Roots.jl (78) | 44/14/20, $p=0.004$ | 47/11/20 | +| applied + GSL (132) | 48/52/32, $p=0.09$ | 76/35/21 | +| **corpus 4 (240), the one test** | **177/35/28, $p=10^{-27}$** | **183/23/34** | Only the last line of corpora is evidence for A′ in the strict sense; the first five were seen while it was developed and are reported as a description. On corpus 4 A′ is 36% below Chandrupatla and wins 177 problems to 28. Without the two classes aimed at by the last two readings it is 2403 against 3569, per problem 107/31/22 ($p=10^{-14}$); on the simple-root classes alone, 737 against 747 (−1.3%), per problem 43/22/15 ($p=3\cdot10^{-4}$). diff --git a/article/sim_numerics.pdf b/article/sim_numerics.pdf deleted file mode 100644 index 165ee44..0000000 Binary files a/article/sim_numerics.pdf and /dev/null differ diff --git a/article/sim_numerics.tex b/article/sim_numerics.tex index fbd09f2..526cdc3 100644 --- a/article/sim_numerics.tex +++ b/article/sim_numerics.tex @@ -1,987 +1,2285 @@ -%% ===================================================================== -%% STALE. This file lags behind article/sim_numerics.md, which is the -%% current text. Do not build a PDF from it and do not send it out. -%% -%% The .md has taken the first pass of revision corrections; this file -%% still contains statements that pass showed to be wrong: -%% - the proposed similarity called "ratio" (it is the truncated -%% linear / tent form; the ratio form is a different row) -%% - Proposition 1 stated for similarity rules in general (it holds -%% for the ratio form scaled by the far end, and for no other of -%% the five tested) -%% - Table 1's c = 0 rows given a "measured rate" (there is no rate; -%% the behaviour is sublinear, e_n ~ C/n with a predicted C) -%% - the three-point order given as 1.84 (it is 2) -%% - section 5.2 evaluation counts not reconciled with section 5 -%% -%% It will be regenerated from the .md once the text settles. -%% ===================================================================== -\documentclass[11pt,a4paper]{article} -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage{amsmath,amssymb,amsthm} -\usepackage{booktabs} +%% GENERATED from article/sim_numerics.md by build_tex.py - do not edit by hand. +%% The .md is the canonical text; every number in it is checked by verify_article.py. +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode}{hyperref} +\PassOptionsToPackage{hyphens}{url} +% +\documentclass[ + 11pt, + a4paper]{article} +\usepackage{amsmath,amssymb} +\usepackage{iftex} +\ifPDFTeX + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex + \usepackage{unicode-math} % this also loads fontspec + \defaultfontfeatures{Scale=MatchLowercase} + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +\fi +\usepackage{lmodern} +\ifPDFTeX\else + % xetex/luatex font selection +\fi +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +\usepackage{xcolor} +\usepackage{longtable,booktabs,array} +\usepackage{calc} % for calculating minipage widths +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +\setcounter{secnumdepth}{-\maxdimen} % remove section numbering +\usepackage{amsmath,amssymb} +\usepackage{textcomp} +\DeclareUnicodeCharacter{2032}{\ensuremath{'}} +\DeclareUnicodeCharacter{2212}{\ensuremath{-}} +\DeclareUnicodeCharacter{00D7}{\ensuremath{\times}} +\DeclareUnicodeCharacter{00B5}{\textmu} +\DeclareUnicodeCharacter{2192}{\ensuremath{\rightarrow}} +\DeclareUnicodeCharacter{0394}{\ensuremath{\Delta}} +\DeclareUnicodeCharacter{2082}{\textsubscript{2}} \usepackage[margin=2.5cm]{geometry} -\usepackage{hyperref} +\usepackage[htt]{hyphenat} +\setlength{\emergencystretch}{3em} +\usepackage{etoolbox} +\AtBeginEnvironment{longtable}{\small} +\ifLuaTeX + \usepackage{selnolig} % disable illegal ligatures +\fi +\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\urlstyle{same} +\hypersetup{ + pdftitle={Similarity as a Step Rule: Parameter-Free Root Finding Derived from a Similarity Function}, + pdfauthor={V. Sitnikov}, + hidelinks, + pdfcreator={LaTeX via pandoc}} -\newtheorem{proposition}{Proposition} -\newtheorem{corollary}{Corollary} -\theoremstyle{definition} -\newtheorem{definition}{Definition} - -\title{Similarity as a Step Rule:\\ -Parameter-Free Root Finding Derived from a Similarity Function} +\title{Similarity as a Step Rule: Parameter-Free Root Finding Derived +from a Similarity Function} \author{V. Sitnikov} \date{} \begin{document} \maketitle - \begin{abstract} Bisection places the next iterate at the midpoint because it uses no information about the function's value. We replace that rule with a -\emph{similarity} rule: the step is proportional to how \emph{dissimilar} the -current outcome $f(x)$ is to the expectation $0$, measured by a similarity -function $S\colon\mathbb{R}\to[0,1]$ with $S(0)=1$. We derive the contraction -factor of the resulting iteration in closed form and confirm it numerically to -four digits. Three consequences follow and are all verified. First, the -two-point normalisation of $S$ over the bracket reproduces the false-position -formula identically, so a similarity rule calibrated by the bracket is not a -new method. Second, any similarity function fixed in advance yields at best -linear convergence at a rate that is a property of the problem rather than of -the method; on eight standard problems, five to eight of them fail. Third, the -rate vanishes exactly when the similarity's scale equals the local scale of the -value axis; reading that scale off the data --- a divided difference, not a -fitted coefficient --- turns the step into $|f|/|f'|$ and the convergence -superlinear. - -The derivation fixes the method completely, before any benchmark is consulted: -a similarity whose approach to $1$ is linear, the finest available data-derived -scale, and a safeguard that projects the step onto the admissible interval -rather than replacing it. That configuration carries a proven worst case of -twice bisection plus one step and contains no tuning constant of any kind. On -the $154$ problems of Alefeld, Potra and Shi it needs $2806$ evaluations of $f$ -against $2820$ for TOMS\,748 --- a margin of $0.5\%$, which is a tie --- and -$2890$ for Brent, whom it beats on $102$ problems to $40$ head to head. On the -$45$ problems of Chandrupatla it beats Brent $30$ to $4$ and TOMS\,748 $31$ to -$8$, and loses to ITP. The result is parity with methods built on tuned -constants, obtained without any. -The ranking of the nine similarity functions across the whole grid matches the -derived law without exception. -Reading the same similarity in one more place --- which three points the local -model is built on, selected by the shape of their configuration rather than by -recency --- lowers the Alefeld--Potra--Shi count to $2527$, below every method -measured here including Chandrupatla's $2785$, with the guarantee intact and -still no tuning constant; reading it instead on the choice of far end gives -$5511$ over both sets. Reading it in the decision to trust the model or halve -lowers the canonical count further, to $2523$. Where the similarity is read -turns out to matter more than which similarity it is. The gap that remains on -the wide-bracket set is taken apart on the same evaluations: a third of it is -the order of the model --- a convex two-point step cannot carry the negative -weight of quadratic interpolation --- and two thirds is not a model at all but -the decision when to give the model up, which Chandrupatla takes by bisecting -on up to all of his steps and which no reading measured here takes correctly -for ours. +\emph{similarity} rule: the step is proportional to how +\emph{dissimilar} the current outcome \(f(x)\) is to the expectation +\(0\), measured by a similarity function \(S:\mathbb{R}\to[0,1]\) with +\(S(0)=1\). We derive the contraction factor of the resulting iteration +in closed form; it predicts a linear rate to four digits when \(1-S\) +has a non-zero slope at the origin, and a sublinear \(e_n\sim C/n\) with +a predicted \(C\) when it does not, both confirmed. Three consequences +follow. First, with the \emph{ratio} similarity scaled by the far end +--- and with that combination only, of the five tested --- the rule +reproduces the false-position formula identically; so does the truncated +linear similarity scaled by a divided difference over the \emph{bracket +ends}, which shows that the boundary of novelty runs through which +points the difference is taken over. Second, any similarity fixed in +advance with the scale also fixed yields at best linear convergence at a +rate that is a property of the problem rather than of the method; on the +eight standard problems of §2.2, five to eight of them fail. Third, the +rate vanishes exactly when the scale equals the local scale of the value +axis; reading that scale off the data --- a divided difference, not a +fitted coefficient --- turns the step into \(|f|/|f'|\) and the +convergence superlinear.\\ +The derivation fixes a \emph{base rule} before any benchmark is +consulted: a similarity whose approach to 1 is linear, the finest +available data-derived scale, and a safeguard that projects the step +onto the admissible interval rather than replacing it. It is, +explicitly, a Newton step with a three-point divided-difference +derivative, clipped to the bracket and projected onto the bisection +budget. The similarity sets that step, and its form is decisive: with +the tent the step is Newton's, with any of the other eight functions the +same method costs from 12\% to four times more. It carries a proven +worst case of twice bisection plus one step and exactly one free +constant, which we declare rather than argue away: the multiplier of +that budget. On the 154 problems of Alefeld, Potra and Shi it needs 2806 +evaluations of \(f\) against 2820 for TOMS 748, 2889 for Brent and 2787 +for Chandrupatla's method --- level in total --- and beats Chandrupatla +problem by problem 87 to 42 (exact sign test \(p=9\cdot10^{-5}\)). On +the 45 wide-bracket problems of Chandrupatla it beats Brent and TOMS 748 +and loses to ITP and to Chandrupatla (3220 against 2896 and 2441). For +every data-derived scale, the ranking of the nine similarity functions +matches the derived law without exception.\\ +The wide-bracket gap turns out to be not the order of the model but a +decision --- when to give the model up --- and the decision is a +similarity after all, of an unfamiliar kind: the similarity of a run to +its own past. A pure power is self-similar under zoom, so the +dimensionless configuration of the last three points recurs, while at a +simple root it tends to the linear prototype; the analogous pair yields +the local order, \(m=\ln L_f/\ln L_x\), and an exponential, self-similar +by translation, is its limit \(m=\infty\). Entering a halving regime +when that analogy holds with \(m\ge2\) --- the condition under which a +tangent step loses to a halving --- splitting at the point the order +predicts, and leaving when the split looks linear, together with four +smaller readings of the same kind and one borrowed element, gives the +method proposed here, A′. On the two sets it needs 2438 and 2005 +evaluations against Chandrupatla's 2787 and 2441 and beats him problem +by problem on both, 103 to 30 and 29 to 7. The chain of decisions that +produced it was selected on those sets; tested once, after its code was +frozen, on 240 problems from six new families, it needs 3656 evaluations +against Chandrupatla's 5717 and wins 177 problems to 28. Over 855 +problems in six corpora it is ahead of Brent, TOMS 748 and the recent +ModAB everywhere and keeps its bound where they break theirs on 118, 84 +and 9 problems; against Chandrupatla it is ahead in total on five +corpora and level on the sixth. The lead is large on multiple, +fractional and nearly flat roots and a matter of per cent on simple +ones. Several of the resulting mechanisms coincide with classical ones +--- Lagouanelle's multiplicity estimate, false position on \(|f|^{1/m}\) +--- reached here from similarity and analogy and recognised afterwards; +what we found no counterpart for is the decision layer, where every +choice --- when to give the model up, where to split, when to return --- +is a judgment of similarity or of analogy, and the similarity that sets +the step, whose form is decisive (replacing it costs 12\% to 315\%). \end{abstract} -\section{Introduction} +\hypertarget{introduction}{% +\subsection{1. Introduction}\label{introduction}} -A bracketing root finder must decide, at every step, where inside the bracket -to evaluate next. Bisection answers ``in the middle'', which is the correct -answer when nothing is known. Every improvement since has answered ``where a -local model of $f$ says the root is'': a secant in false position, an inverse -quadratic in Brent~\cite{brent}, a cubic in TOMS\,748~\cite{aps}, an -interpolate--truncate--project cycle in ITP~\cite{itp}. Each of those answers -carries constants: Illinois halves the stale ordinate, Brent accepts an -interpolation subject to three empirical inequalities, ITP is governed by -$\kappa_1,\kappa_2,n_0$. +A bracketing root finder must decide, at every step, where inside the +bracket to evaluate next. Bisection answers ``in the middle'', which is +the correct answer when nothing is known. Every improvement since has +answered ``where a local model of \(f\) says the root is'': a secant in +false position, an inverse quadratic in Brent {[}2{]}, a cubic in TOMS +748 {[}1{]}, an interpolate--truncate--project cycle in ITP {[}4{]}, an +Anderson--Björck step behind a linearity check in ModAB {[}10, 20{]}. +Each of those answers carries constants: Illinois halves the stale +ordinate, Brent accepts an interpolation subject to three empirical +inequalities, ITP is governed by \(\kappa_1,\kappa_2,n_0\). -This paper asks a different question. Suppose the only thing available is a -\emph{similarity function} --- a map $S$ from an outcome to $[0,1]$, where $1$ -means ``identical to what was wanted'' and $0$ means ``not similar at all'', -in the sense used for parameter-free control in~\cite{sim}. Can a root finder -be built out of $S$ alone, and how does it compare with methods built out of -polynomial models and tuned constants? +This paper asks a different question. Suppose the only thing available +is a \emph{similarity function} --- a map \(S\) from an outcome to +\([0,1]\), where 1 means ``identical to what was wanted'' and 0 means +``not similar at all'', in the sense used for parameter-free control in +{[}6{]}. Can a root finder be built out of \(S\) alone, and how does it +compare with methods built out of polynomial models and tuned constants? -The answer is sharp in both directions, and the negative half is as informative -as the positive half. +The answer is sharp in both directions, and the negative half is as +informative as the positive half. -\section{The similarity step rule} +The paper proceeds in two stages. Sections 2--7 derive a base rule from +the similarity alone, measure it, and locate what it lacks: not a better +model but a decision, when to stop trusting the model it has. Section 8 +supplies that decision with a similarity of the run to its own past, and +Section 9 tests it on four further corpora: three of them exposed two +last gaps of the base step and were used to close them, and the fourth +was fixed after the method's code was frozen and run once. -\begin{definition}[Similarity step] -Let $[a,b]$ bracket a root, $x$ be the current iterate and $x_{\mathrm{far}}$ -the opposite end. Let $S\colon\mathbb{R}\to[0,1]$ with $S(0)=1$ be a similarity -function and $\sigma>0$ a scale. The next iterate is -\begin{equation} -\label{eq:step} -x' \;=\; x \;+\; \bigl(1 - S(f(x)/\sigma)\bigr)\,(x_{\mathrm{far}} - x). -\end{equation} -\end{definition} +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} -The rule is exactly the informal statement ``step further when the outcome is -dissimilar to the expectation, and less far when it is similar''. Bisection is -the degenerate member $S\equiv\tfrac12$: a similarity function that carries no -information about $f$. +\hypertarget{the-similarity-step-rule}{% +\subsection{2. The similarity step +rule}\label{the-similarity-step-rule}} -\subsection{The two-point normalisation is false position} +\textbf{Definition 1 (Similarity step).} Let \([a,b]\) bracket a root, +\(x\) be the current iterate and \(x_\mathrm{far}\) the opposite end. +Let \(S:\mathbb{R}\to[0,1]\) with \(S(0)=1\) be a similarity function +and \(\sigma>0\) a scale. The next iterate is -The most obvious way to make~\eqref{eq:step} scale-free is to normalise the -similarity by the two ends of the bracket, $S(a)=|f(b)|/(|f(a)|+|f(b)|)$ and -$S(b)=1-S(a)$, and to place the next iterate at the similarity-weighted average -of the ends. +\[x' \;=\; x \;+\; \bigl(1 - S(f(x)/\sigma)\bigr)\,(x_\mathrm{far} - x). \tag{1}\] -\begin{proposition} -\label{prop:falsi} -$S(a)\,a + S(b)\,b \;=\; \dfrac{a f(b) - b f(a)}{f(b)-f(a)}$. -\end{proposition} +The rule is exactly the informal statement ``step further when the +outcome is dissimilar to the expectation, and less far when it is +similar''. Bisection is the degenerate member \(S\equiv\tfrac12\): a +similarity function that carries no information about \(f\). -That is the false-position formula. The identity is elementary but decisive: a -similarity rule whose scale is taken from the bracket is not a new method, and -it inherits false position's stalling failure. In our measurements plain false -position solves $127$ of the $154$ Alefeld--Potra--Shi problems, against $153$ -for bisection. +\hypertarget{the-two-point-normalisation-is-false-position}{% +\subsubsection{2.1 The two-point normalisation is false +position}\label{the-two-point-normalisation-is-false-position}} -\subsection{The contraction law} +The most obvious way to make (1) scale-free is to normalise the +similarity by the two ends of the bracket, +\(S(a)=|f(b)|/(|f(a)|+|f(b)|)\) and \(S(b)=1-S(a)\), and to place the +next iterate at the similarity-weighted average of the ends. -Write $e_n = x_n - r$ for the error, $D = x_{\mathrm{far}} - r$, and let $c$ be -the slope of $1-S$ at the origin, $1-S(z) = c\,z + O(z^2)$. +\textbf{Proposition 1.} For the ratio similarity \(S(z)=1/(1+|z|)\) with +\(\sigma=|f(x_\mathrm{far})|\), equivalently for the endpoint weights +above, \[S(a)\,a + S(b)\,b \;=\; \frac{a f(b) - b f(a)}{f(b)-f(a)}.\] -\begin{proposition}[Contraction law] -\label{prop:law} -For a simple root and $e_n$ small, rule~\eqref{eq:step} satisfies -\begin{equation} -\label{eq:law} -e_{n+1} \;=\; e_n\left(1 - \frac{c\,|f'(r)|\,D}{\sigma}\right) + O(e_n^2), -\qquad -\text{rate} = \left|1 - \frac{c\,|f'(r)|\,D}{\sigma}\right| . -\end{equation} -\end{proposition} +That is the false-position formula. Two things must be said about how +far it reaches, because the obvious generalisation is false. -\begin{proof}[Derivation] -$|f(x_n)| = |f'(r)|\,|e_n| + O(e_n^2)$, hence -$1-S(f(x_n)/\sigma) = c\,|f'(r)|\,|e_n|/\sigma + O(e_n^2)$, and -$x_{\mathrm{far}}-x_n = D - e_n$. Substituting into~\eqref{eq:step} and -discarding second-order terms gives~\eqref{eq:law}. -\end{proof} +It is specific to that similarity. On \(f=x^2-2\) over \([1,4]\), where +false position gives 1.200000, the same construction gives 1.206812 for +\(e^{-|z|}\), 1.015228 for \(1/(1+z^2)\), 1.007624 for +\(1/\sqrt{1+z^2}\) and 1.214286 for the truncated linear form: one of +five reproduces it. So ``a similarity rule scaled by the bracket is not +a new method'' would be too broad a conclusion, and this paper's own +Table 3 refutes it --- bracket-scaled configurations take first and +fourth place on Chandrupatla and one of them solves 41 of 45, where +false position solves 6. -Table~\ref{tab:law-check} checks~\eqref{eq:law} against measurement on -$f(x)=x^2-2$ over $[0,2]$ with $\sigma=|f(0)|$, for which $|f'(r)|=2\sqrt2$, -$D=2-\sqrt2$ and $\sigma=2$. +\textbf{Proposition 1'.} It is, however, specific to the \emph{bracket +ends} rather than to the ratio form. Take the truncated linear +similarity \(S(z)=\max(0,1-|z|)\) and the divided difference over the +two ends, \(\sigma=|f[a,b]|\cdot|b-a|=|f(b)-f(a)|=|f(a)|+|f(b)|\). Then +\(1-S=|f(a)|/(|f(a)|+|f(b)|)\), which is false position again, and the +agreement is exact to the last bit. -\begin{table}[h] -\centering -\caption{The contraction law against measurement. $c$ is the slope of $1-S$ at -the origin. Similarities that approach $1$ quadratically have $c=0$ and are -predicted to stagnate.} -\label{tab:law-check} -\begin{tabular}{lrrr} -\toprule -$S(z)$ & $c$ & predicted rate & measured rate\\ -\midrule -$1/(1+|z|)$ & $1$ & $0.1716$ & $0.1716$\\ -$e^{-|z|}$ & $1$ & $0.1716$ & $0.1716$\\ -$1/(1+z^2)$ & $0$ & $1.0000$ & $0.9357$\\ -$e^{-z^2}$ & $0$ & $1.0000$ & $0.9444$\\ -$1/\sqrt{1+z^2}$ & $0$ & $1.0000$ & $0.9327$\\ -$\max(0,1-|z|)$ & $1$ & $0.1716$ & $1.0000$ (saturates)\\ -\bottomrule -\end{tabular} -\end{table} +Together the two say where the boundary of novelty runs, and it is not +where one would guess: it runs through the words \emph{most recent} in +the definition of \(\hat f'\) in §3. A divided difference over the +bracket ends is three centuries old; the same difference over the most +recent iterates is the secant. In our measurements plain false position +solves 127 of the 154 Alefeld--Potra--Shi problems, against 153 for +bisection. -\begin{corollary}[A chosen similarity is not enough] -\label{cor:chosen} -For fixed $S$ and fixed $\sigma$ the rate in~\eqref{eq:law} depends on -$|f'(r)|$, $D$ and $\sigma$, none of which is under the method's control. -Convergence is at best linear and occurs only when the product lands in -$(0,2)$. -\end{corollary} +\hypertarget{the-contraction-law}{% +\subsubsection{2.2 The contraction law}\label{the-contraction-law}} -Empirically, with $\sigma$ taken as $|f|$ at the starting point, five to eight -of eight standard problems fail outright for the six similarity functions -tested. +Write \(e_n = x_n - r\) for the error, \(D = x_\mathrm{far} - r\), and +let \(c\) be the slope of \(1-S\) at the origin, +\(1-S(z) = c\,z + O(z^2)\). -\begin{corollary}[Faster is not better] -\label{cor:faster} -Increasing $c$ moves the rate away from $1$ in either direction. Similarities -with unbounded slope --- $1-\sqrt{|z|}$ has $c\approx3.2\cdot10^{3}$ at the -resolution used, $1-|z|^{1/3}$ has $c\approx4.6\cdot10^{4}$ --- overshoot as -readily as flat ones stagnate, and fail on five and six of the eight problems -respectively. -\end{corollary} +\textbf{Proposition 2 (Contraction law).} For a simple root and \(e_n\) +small, rule (1) satisfies -\begin{corollary}[The scale must come from the data] -\label{cor:derived} -The rate is zero exactly when $c\,|f'(r)|\,D/\sigma = 1$, i.e. -$\sigma = c\,|f'(r)|\,D$. Substituting this $\sigma$ back into~\eqref{eq:step} -with $c=1$ gives $x' - x = |f(x)|/|f'|$, the Newton step. The similarity rule -is therefore superlinear precisely when its scale is the \emph{local scale of -the value axis}, and that scale is not available a priori: it must be read off -the evaluations. -\end{corollary} +\[e_{n+1} \;=\; e_n\left(1 - \frac{c\,|f'(r)|\,D}{\sigma}\right) + O(e_n^2), \qquad \text{rate} = \left|1 - \frac{c\,|f'(r)|\,D}{\sigma}\right|. \tag{2}\] -\section{The method} -\label{sec:method} +\emph{Derivation.} \(|f(x_n)| = |f'(r)|\,|e_n| + O(e_n^2)\), hence +\(1-S(f(x_n)/\sigma) = c\,|f'(r)|\,|e_n|/\sigma + O(e_n^2)\), and +\(x_\mathrm{far}-x_n = D - e_n\). Substituting into (1) and discarding +second-order terms gives (2). \(\square\) -Corollaries~\ref{cor:chosen}--\ref{cor:derived} fix every choice in the method -before any benchmark is consulted. We record them here as a prediction, and -Section~\ref{sec:grid} tests it against the full grid. +Table 1 checks (2) against measurement on \(f(x)=x^2-2\) over \([0,2]\) +with \(\sigma=|f(0)|\), for which \(|f'(r)|=2\sqrt2\), \(D=2-\sqrt2\) +and \(\sigma=2\). -\paragraph{Similarity: any with $c\neq0$.} The law makes the shape of $S$ -almost irrelevant and its slope at the origin decisive. We take the plainest -member, the ratio form $S(z)=\max(0,1-|z|)$. +\textbf{Table 1.} The contraction law against measurement, all rows at +the \emph{chosen} scale \(\sigma=|f(x_0)|\). \(c\) is the slope of +\(1-S\) at the origin and \(c_2\) the coefficient of \(z^2\) when +\(c=0\). -\paragraph{Scale: the finest data-derived one.} We set -$\sigma = |\hat f'|\cdot|x_{\mathrm{far}}-x|$ with $\hat f'$ a divided -difference of the most recent evaluations. A divided difference is a -computation, not a fitted coefficient: nothing is chosen, regressed or tuned. -The two-point difference has slope error $O(h)$ and gives the secant order -$\varphi\approx1.618$; the three-point difference --- the derivative at $x_n$ -of the parabola through the last three evaluations, -$\hat f' = f[x_{n-1},x_n] + f[x_{n-2},x_{n-1},x_n](x_n-x_{n-1})$ --- has error -$O(h^2)$ and lifts it. Measured medians are $1.584$ and $1.944$, against -$1.809$ for Brent and $2.654$ for TOMS\,748. +A similarity with \(c=0\) does not converge at a rate at all. Expanding +\(1-S=c_2z^2+O(z^4)\) in the same way as (2) gives +\(e_{n+1}=e_n-c_2|f'(r)|^2|D|e_n^2/\sigma^2+O(e_n^3)\), hence -\subsection{The safeguard: project, do not replace} -\label{sec:guard} +\[e_n \;\simeq\; \frac{\sigma^2}{c_2\,|f'(r)|^2\,|D|}\cdot\frac1n, \tag{2a}\] -An interpolation-only rule has no worst-case bound. The obvious safeguards -\emph{replace} the computed step with a midpoint whenever some progress test -fails, and all of them are ruinous here, for a reason that is specific to a -fast method: a step that collapses the \emph{error} need not halve the -\emph{bracket}, so a bracket-based test fires on exactly the steps that were -best. With the three-point scale, replacing on that test drops the observed -order from $1.94$ to $1.00$ and the Alefeld--Potra--Shi total from $2806$ to -$7260$ --- worse than bisection. +sublinear rather than stagnant. Reporting a ``measured rate'' for these +rows would report the value of \(e_{n+1}/e_n\) at whatever \(n\) the +window happened to end --- it creeps to 1 monotonically (0.925 at +\(n=10\), 0.991 at \(n=100\), 0.9998 at \(n=4000\)) --- so the +prediction tested is the coefficient in (2a) instead. + +\begin{longtable}[]{@{}llll@{}} +\toprule\noalign{} +\(S(z)\) & \(c\) & predicted & measured \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\(1/(1+\lvert z\rvert)\) & 1 & rate 0.1716 & 0.1716 \\ +\(e^{-\lvert z\rvert}\) & 1 & rate 0.1716 & 0.1716 \\ +\(1/(1+z^2)\) & 0, \(c_2=1\) & \(n\,e_n\to0.8536\) & 0.8503 \\ +\(e^{-z^2}\) & 0, \(c_2=1\) & \(n\,e_n\to0.8536\) & 0.8498 \\ +\(1/\sqrt{1+z^2}\) & 0, \(c_2=\tfrac12\) & \(n\,e_n\to1.7071\) & +1.6988 \\ +\(\max(0,1-\lvert z\rvert)\) & 1 & rate 0.1716 & captured, see below \\ +\end{longtable} + +The last row is not a slow rate but an immediate failure, and it matters +because that similarity is the one this paper goes on to propose. At +\(x_0=0\) the residual is \(z=-1\), so \(S=\max(0,1-1)=0\), the step is +the whole bracket, the iterate lands exactly on \(x_\mathrm{far}\) and +never leaves: the error is 0.5858 after one step and after two hundred. +\textbf{The failure is a property of the chosen scale, not of the +similarity.} Under the derived scale of §3 the residual \(|f|/\sigma\) +stays below 1 --- on this problem the clip does not engage on a single +one of the seven steps the method takes --- the truncation never fires, +and the same function is the best of the nine (Table 4). This is the +paper's own thesis, that the content sits in the scale and not in the +shape of \(S\), showing up as a discontinuity in the behaviour of one +function. + +\textbf{Corollary 1 (A chosen similarity is not enough).} For fixed +\(S\) and fixed \(\sigma\) the rate in (2) depends on \(|f'(r)|\), \(D\) +and \(\sigma\), none of which is under the method's control. Convergence +is at best linear and occurs only when the product lands in \((0,2)\). + +Empirically, with \(\sigma\) taken as \(|f|\) at the starting point, +five to eight of the eight standard problems fail outright for the six +similarity functions tested. Those eight, used throughout as a quick set +and never as evidence on their own, are: \(x^2-2\) on \([0,2]\); +\(\cos x-x\) on \([0,1]\); \(e^x-2\) on \([0,2]\); \(x^3-x-2\) on +\([1,2]\); \(\sin x-\tfrac12\) on \([0,1.5]\); \(x^{10}-1\) on +\([0,1.3]\), which stalls false position; \(e^{-x}(x-1)\) on +\([-1,40]\), whose right end is flat to \(10^{-16}\); and \(\arctan x\) +on \([-1,3]\). + +\textbf{Corollary 2 (Missing the calibration in either direction +costs).} The rate degrades as the product \(c\,|f'(r)|\,|D|/\sigma\) +departs from 1, upwards or downwards. We claim no symmetry between the +two directions, and the measurements do not support one: similarities +with unbounded slope --- \(1-\sqrt{|z|}\) has \(c\approx3.2\cdot10^{3}\) +at the resolution used, \(1-|z|^{1/3}\) has \(c\approx4.6\cdot10^{4}\) +--- fail on five and six of the eight problems with a chosen scale, yet +over the full benchmark they finish at 10497 and 11941, ahead of all +three \(c=0\) similarities at 14314, 15102 and 16394, and one of them +heads Table 3. Overshooting is the milder failure. + +\textbf{Corollary 3 (The scale must come from the data).} The rate is +zero exactly when \(c\,|f'(r)|\,D/\sigma = 1\), +i.e.~\(\sigma = c\,|f'(r)|\,D\). Substituting this \(\sigma\) back into +(1) with \(c=1\) gives \(x' - x = |f(x)|/|f'|\), the Newton step. The +similarity rule is therefore superlinear precisely when its scale is the +\emph{local scale of the value axis}, and that scale is not available a +priori: it must be read off the evaluations. + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\hypertarget{the-method}{% +\subsection{3. The method}\label{the-method}} + +Corollaries 1--3 fix every choice in the method before any benchmark is +consulted. We record them here as a prediction, and Section 5.3 tests it +against the full grid. One number in the safeguard is not fixed by them, +and §3.1 declares it as the method's one free constant. + +\textbf{Similarity: any with \(c\neq0\).} The law makes the shape of +\(S\) almost irrelevant and its slope at the origin decisive. We take +the plainest member, the \textbf{truncated linear} or tent form +\(S(z)=\max(0,1-|z|)\). It is not the ratio form \(1/(1+|z|)\), which is +a separate row of every table here; the two are distinguished throughout +because Proposition 1 applies to the ratio form and Table 1's last row +to the tent. + +\textbf{Scale: the finest data-derived one.} We set +\(\sigma = |\hat f'|\cdot|x_\mathrm{far}-x|\) with \(\hat f'\) a divided +difference of the \textbf{most recent evaluations} --- not of the +bracket ends, which by Proposition 1' would give false position. A +divided difference is a computation, not a fitted coefficient: nothing +is chosen, regressed or tuned. The two-point difference has slope error +\(O(h)\) and gives the secant order \(\varphi\approx1.618\); the +three-point difference --- the derivative at \(x_n\) of the parabola +through the last three evaluations, +\(\hat f' = f[x_{n-1},x_n] + f[x_{n-2},x_{n-1},x_n](x_n-x_{n-1})\) --- +has error \(O(h^2)\). A Newton step whose derivative carries an +\(O(h^2)\) error satisfies +\(e' = e-f/\hat f' = e-(e-ce^2+\dots)(1+O(e^2)) = ce^2+O(e^3)\), so the +predicted order is \textbf{2} --- not Muller's 1.84, which belongs to a +method using the parabola's \emph{root} rather than its +\emph{derivative}. Measured medians are 1.584 for the two-point scale +and 2.000 for the three-point, against 1.809 for Brent and 2.654 for +TOMS 748. + +\textbf{What the rule reduces to.} With \(S(z)=\max(0,1-|z|)\) one has +\(1-S=\min(1,|z|)\), and (1) becomes + +\[x' \;=\; x + \operatorname{sign}(x_\mathrm{far}-x)\cdot\min\!\Bigl(\frac{|f(x)|}{|\hat f'|},\;|x_\mathrm{far}-x|\Bigr), \tag{4}\] + +a Newton step with a three-point divided-difference derivative, clipped +to the bracket and then projected as in §3.1. That the tent turns the +similarity step into Newton's is a property of the similarity chosen, +not a sign that the similarity has dropped out: which \(S\) stands in +the step decides the step, and it is measured, not assumed --- Table 4 +ranks the nine functions over the whole grid, the readings of §7 pay +most with the tent in the step and some of them lose with other +functions (§7), and in the proposed method replacing the tent by any +other function costs 12\% to 315\% (Table 9a). + +We state the reduction ourselves rather than leave it to be discovered, +because it locates the contribution precisely. The base rule is not a +new family of methods. It is (i) a derivation that fixes every choice +--- which similarity, which scale, which safeguard --- before any +benchmark is consulted, and then predicts the ranking of all nine +similarity functions correctly; (ii) a safeguard of ITP's projection +type with ITP's truncation stage, and hence all three of its constants, +removed; (iii) the negative results of §10; (iv) the measurements. We +call it the \textbf{base rule}; the method this paper proposes builds on +it in Section 8. + +\textbf{Algorithm.} Given \([a,b]\) with \(f(a)f(b)<0\) and tolerance +\(\varepsilon_x\): + +\begin{verbatim} +evaluate fa = f(a), fb = f(b) +A, B <- a, b the proven bracket +x <- the endpoint with the smaller |f|; xp <- the other; xp2 <- none +n_max <- 2 * ceil(log2(|b-a| / xtol)); allow <- 2^n_max * xtol/2 +while |B - A| > xtol: + far <- the end of [A,B] further from x + f' <- derivative at x of the parabola through (x,xp,xp2) + (two-point difference while xp2 does not yet exist) + sigma <- |f'| * |far - x| + if sigma is 0 or not finite: xn <- midpoint(A,B) + else: + xn <- x + min(1, |f(x)|/sigma) * (far - x) # the step, eq (4) + xn <- clamp(xn, hi - allow, lo + allow) # projection, eq (3) + if xn outside (A,B) or already evaluated: xn <- midpoint(A,B) + evaluate fn = f(xn); allow <- allow / 2 + xp2, xp, x <- xp, x, xn + update the bracket: whichever of A,B keeps the sign change +return midpoint(A,B) +\end{verbatim} + +Every quantity in it is either an evaluation of \(f\), a divided +difference of evaluations, or the halving that defines bisection --- +with one exception, the factor 2 in \texttt{n\_max}, which §3.1 declares +as the method's one free constant. The constant-free variant of §3.1 +replaces the two \texttt{allow} lines by the earned credit of (3'). + +\hypertarget{the-safeguard-project-do-not-replace}{% +\subsubsection{3.1 The safeguard: project, do not +replace}\label{the-safeguard-project-do-not-replace}} + +An interpolation-only rule has no worst-case bound. The obvious +safeguards \emph{replace} the computed step with a midpoint whenever +some progress test fails, and all of them are ruinous here, for a reason +specific to a fast method: a step that collapses the \emph{error} need +not halve the \emph{bracket}, so a bracket-based test fires on exactly +the steps that were best. With the three-point scale, replacing on that +test drops the observed order from 1.94 to 1.00 and the +Alefeld--Potra--Shi total from 2806 to 7260 --- worse than bisection. The remedy is to keep as much of the computed step as the budget allows. -Let $n_{\max}=2\lceil\log_2(w_0/\varepsilon_x)\rceil$ be twice the bisection -step count for the initial width $w_0$ and $x$-tolerance $\varepsilon_x$, and -let $\epsilon=\varepsilon_x/2$. At step $j$, with the bracket $[\ell,h]$, -define the allowance and the projection -\begin{equation} -\label{eq:proj} -\alpha_j = 2^{\,n_{\max}-j}\epsilon, -\qquad -x \;=\; \operatorname{clamp}\bigl(x_{\mathrm{sim}},\; h-\alpha_j,\; \ell+\alpha_j\bigr). -\end{equation} -The next bracket is at most $\max(x-\ell,\,h-x)$, so~\eqref{eq:proj} gives -$w_{j+1}\le\alpha_j$ directly, and induction bounds the run by $n_{\max}$ steps -in exact arithmetic. In floating point the bracket can land exactly on the -boundary, and the termination test then asks for one more; the guarantee -stated and verified is therefore -$2\lceil\log_2(w_0/\varepsilon_x)\rceil+3$ evaluations. +Let \(n_{\max}=2\lceil\log_2(w_0/\varepsilon_x)\rceil\) be twice the +bisection step count for the initial width \(w_0\) and \(x\)-tolerance +\(\varepsilon_x\), and let \(\epsilon=\varepsilon_x/2\). At step \(j\), +with the bracket \([\ell,h]\), define the allowance and the projection + +\[\alpha_j = 2^{\,n_{\max}-j}\epsilon, \qquad x \;=\; \operatorname{clamp}\bigl(x_\mathrm{sim},\; h-\alpha_j,\; \ell+\alpha_j\bigr). \tag{3}\] + +The next bracket is at most \(\max(x-\ell,\,h-x)\), so (3) gives +\(w_{j+1}\le\alpha_j\) directly, and induction bounds the run by +\(n_{\max}\) steps in exact arithmetic. In floating point the bracket +can land exactly on the boundary, and the termination test then asks for +one more; the guarantee stated and verified is therefore +\(2\lceil\log_2(w_0/\varepsilon_x)\rceil+3\) evaluations. + +\textbf{The multiplier is the method's one free constant.} An earlier +version of this section argued that it is ``the factor already claimed +in the bound''. That is circular --- the bound is twice bisection +because two was chosen --- and measurement settles it +(\texttt{measure\_budget\_factor.py}, Linux): + +\textbf{Table 1a.} The scheduled projection at budget multiplier \(c\), +i.e.~\(n_{\max}=\lceil c\cdot\log_2(w_0/\varepsilon_x)\rceil\). Total +evaluations, failures charged. + +\begin{longtable}[]{@{}llll@{}} +\toprule\noalign{} +\(c\) & APS-154 & CHA-45 & both \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +1 & 4817 & 2997 & 7814 \\ +1.25 & 2806 & 2752 & 5558 \\ +1.5 & 2806 & 2889 & 5695 \\ +2 & 2806 & 3220 & 6026 \\ +3 & 2806 & 3756 & 6562 \\ +4 & 2806 & 4006 & 6812 \\ +\end{longtable} + +On the canonical set the projection never binds once \(c\ge1.25\), so +the total does not move. On the wide-bracket set it moves monotonically +with \(c\), and 2 is not even the best value. Nor is zero slack +(\(c=1\)) the degenerate case it was claimed to be, ``a worst case of +exactly bisection'' under which ``the guard behaves as bisection'': it +costs 4817 and 2997, far from bisection's 7530 and 3090, and on the +wide-bracket set it beats \(c=2\). The multiplicative family has no +member that the bound singles out, so its multiplier is a genuinely free +constant. + +\textbf{The budget earned rather than scheduled: a constant-free +variant.} The constant can be removed. Let \(s_j=\log_2(w_j/w_{j+1})\) +be the shrink a step delivers in bits --- bisection delivers exactly 1 +--- and keep a credit + +\[C \leftarrow \max(0,\;C+s_j-1),\qquad \alpha_j = w_j\,2^{\,C-1},\qquad x=\operatorname{clamp}\bigl(x_\mathrm{sim},\,h-\alpha_j,\,\ell+\alpha_j\bigr), \tag{3'}\] + +leaving the step alone while \(C\ge1\). A step may under-deliver only by +what earlier steps banked, and since \(C\) never goes negative the +shrinks over \(j\) steps sum to at least \(j-C_0\): the run costs at +most bisection plus \(\lceil C_0\rceil\) steps. The endowment \(C_0\) is +therefore the promise, not a setting. \(C_0=0\) makes the allowance +exactly half the bracket on the first step, which forces the midpoint +and makes the method bisection; every \(C_0\in(0,1]\) promises the same +single extra step; and among those, 1 is the most permissive and --- +measured --- the cheapest: + +\textbf{Table 1b.} The earned projection at endowment \(C_0\). Total +evaluations, failures charged. + +\begin{longtable}[]{@{}lllll@{}} +\toprule\noalign{} +\(C_0\) & promise & APS-154 & CHA-45 & both \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +0.1 & bisection + 1 step & 5344 & 3051 & 8395 \\ +0.5 & bisection + 1 step & 4656 & 3002 & 7658 \\ +\textbf{1} & \textbf{bisection + 1 step} & \textbf{3568} & \textbf{3020} +& \textbf{6588} \\ +2 & bisection + 2 steps & 3692 & 2712 & 6404 \\ +5 & bisection + 5 steps & 3006 & 2615 & 5621 \\ +\end{longtable} + +A looser promise buys evaluations, as it must; within one promise the +cheapest endowment is determined. The constant-free variant is therefore +the earned projection with \(C_0=1\), whose guarantee --- +\(\lceil\log_2(w_0/\varepsilon_x)\rceil+4\) evaluations, bisection plus +one step with one more for the floating-point boundary --- is verified +on all 199 problems. + +We nonetheless propose the scheduled projection with \(c=2\) and declare +its multiplier. On the canonical set it is 762 evaluations cheaper than +the earned variant (2806 against 3568), and there its total does not +depend on the multiplier at all; on the wide-bracket set the earned +variant is the cheaper (3020 against 3220). The two are the ends of a +trade stated in numbers: one declared constant and the better canonical +result, or no constant, a tighter bound and the better wide-bracket +result. The value 2 was fixed before any benchmark was consulted; what +changed after the question whether it was load-bearing is only that +it is now declared as a constant rather than argued to be none. + +Two remarks apply to both forms. -Three remarks on why this introduces nothing. \begin{itemize} -\item \textbf{The doubling is not a tuning constant.} It is the factor already -claimed in the bound. Zero slack --- $n_{\max}=\lceil\log_2(w_0/\varepsilon_x)\rceil$, -a worst case of exactly bisection --- is degenerate and was measured as such: a -worst case of exactly bisection demands a halving at \emph{every} step, so the -projection has no freedom, the radius on a unit bracket is $0.05$ from the -first step, and the guard behaves as bisection. -\item \textbf{This is ITP's projection stage without ITP's truncation stage.} -All three of ITP's constants live in the truncation, whose purpose is to repair -regula falsi; the similarity step needs no repair, so the truncation and every -constant with it are dropped. -\item \textbf{Writing the clamp in the form~\eqref{eq:proj} rather than as a -radius $\alpha_j-w_j/2$ about the midpoint is not cosmetic.} That radius is a -difference of two nearly equal numbers; the cancellation made the computed -radius too large by a relative $8.9\cdot10^{-5}$, which broke the invariant on -eleven Chandrupatla problems. +\tightlist +\item + \textbf{This is ITP's projection stage without ITP's truncation + stage.} All three of ITP's constants live in the truncation, whose + purpose is to repair regula falsi; the similarity step needs no + repair, so the truncation and every constant with it are dropped. +\item + \textbf{Writing the clamp in the form (3) rather than as a radius + \(\alpha_j-w_j/2\) about the midpoint is not cosmetic.} That radius is + a difference of two nearly equal numbers; the cancellation made the + computed radius too large by a relative \(8.9\cdot10^{-5}\), which + broke the invariant on eleven Chandrupatla problems. \end{itemize} -\section{Experimental protocol} +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} -\paragraph{Problem sets.} The $154$ problems of Alefeld, Potra and Shi~\cite{aps} -and the $45$ of Chandrupatla~\cite{chandrupatla}, taken programmatically from +\hypertarget{experimental-protocol}{% +\subsection{4. Experimental protocol}\label{experimental-protocol}} + +\textbf{Problem sets.} The 154 problems of Alefeld, Potra and Shi +{[}1{]} and the 45 of Chandrupatla {[}3{]}, taken programmatically from SciPy's \texttt{scipy.optimize.\_tstutils} so that no bracket or root is transcribed by hand. -\paragraph{Cost model.} Evaluations of $f$. A run counts as solved when it -reports convergence and lands within $10^{-6}$ of the published root; -$x$-tolerance $10^{-12}$; budget $200$ evaluations. \emph{Failures are charged -the full budget}, so no method can buy a low total by giving up early, and -totals are reported over all problems rather than over the subset a method -happened to solve. Rankings are by failures first, then by total. +\textbf{Cost model.} Evaluations of \(f\). A run counts as solved when +it reports convergence and lands within \(10^{-6}\) of the published +root; \(x\)-tolerance \(10^{-12}\); budget 200 evaluations. +\emph{Failures are charged the full budget}, so no method can buy a low +total by giving up early, and totals are reported over all problems +rather than over the subset a method happened to solve. Rankings are by +failures first, then by total. -\paragraph{Fairness to the competitors.} Three deliberate concessions. -(i)~ITP is natively written against a half-width $\epsilon$ and terminates on -$b-a\le2\epsilon$; feeding the common tolerance in as $\epsilon$ would let it -stop at twice its competitors' bracket width, so $\epsilon=\varepsilon_x/2$ is -used. (ii)~ITP is reported both at the authors' recommended constants and as a -\emph{per-problem oracle}, the best of a $(\kappa_1,n_0)$ grid chosen -separately for every problem --- not an achievable method, included so that the -state of the art cannot be said to have been handicapped. (iii)~Our -implementation of ITP is validated against the method's own theorem, that it -never needs more than $n_{1/2}+n_0$ iterations, on all $154$ problems for -$n_0\in\{0,1,2,5\}$. +\textbf{Fairness to the competitors.} Three deliberate concessions. -\paragraph{Reproducibility.} All numbers come from a single Linux run. The test -functions call \texttt{libm}, whose last digit differs between platforms; the -same SciPy version scores $2819$ for TOMS\,748 on Windows and $2820$ on Linux -for the same set. Every number stated in this paper is checked against the run -data by a script that is part of the test suite. +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + ITP is natively written against a half-width \(\epsilon\) and + terminates on \(b-a\le2\epsilon\); feeding the common tolerance in as + \(\epsilon\) would let it stop at twice its competitors' bracket + width, so \(\epsilon=\varepsilon_x/2\) is used. +\item + ITP is reported both at the authors' recommended constants and as a + \emph{per-problem oracle}, the best of a \((\kappa_1,n_0)\) grid + chosen separately for every problem --- not an achievable method, + included so that the state of the art cannot be said to have been + handicapped. +\item + Our implementation of ITP is validated against the method's own + theorem, that it never needs more than \(n_{1/2}+n_0\) iterations, on + all 154 problems for \(n_0\in\{0,1,2,5\}\). +\item + Where SciPy ships the method, the competitor \textbf{is the library}: + Chandrupatla is \texttt{scipy.optimize.elementwise.find\_root}, Brent + is \texttt{brentq}, TOMS 748 is \texttt{toms748}, each run with the + same stopping rule as every other method --- a bracket no wider than + \(\varepsilon_x\), the relative term at machine precision, no stopping + on \(|f|\) --- and each evaluation counted by the same wrapper around + \(f\). An earlier version gave each competitor the better of the + library's implementation and ours, problem by problem. That concession + backfired in the competitor's favour: our Chandrupatla stopped on a + bracket twice as wide as everybody else's --- the factor this protocol + corrects for ITP in item 1 and had not corrected there --- and the + per-problem minimum let the looser run win. With the tolerance + corrected our implementation and the library agree on all 199 problems + exactly, and Chandrupatla's totals move from 2785 to 2787 on the + canonical set and from 2423 to 2441 on the wide-bracket set. For Brent + the library is slightly dearer than our implementation (7004 against + 6991 over both sets); we use the library anyway, because it is the + implementation a reader can check. ITP has no library implementation, + which is why it is checked against its own theorem instead; bisection + and the false-position family are not in SciPy either and are ours. +\end{enumerate} -\section{Results} +\textbf{Reproducibility.} All numbers come from a single Linux run. The +test functions call \texttt{libm}, whose last digit differs between +platforms; the same SciPy version scores 2819 for TOMS 748 on Windows +and 2820 on Linux for the same set. Every number stated in this paper is +checked against the run data by a script that is part of the test suite. -The grid is nine similarity functions $\times$ four scales $\times$ six -safeguards $=216$ configurations, plus ten baselines. The configuration -proposed in Section~3 --- ratio similarity, three-point scale, projection -safeguard --- is one entry of that grid, fixed by the theory rather than chosen -from the ranking. +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} -\begin{table}[h] -\centering -\caption{Alefeld--Potra--Shi, $154$ problems, out of $226$ configurations.} -\label{tab:aps} -\begin{tabular}{rlccrr} -\toprule -\# & configuration & tuned & solved & total evals & $>2\times$\\ -\midrule -1 & \textbf{proposed: ratio, 3-point, projection} & \textbf{no} & 153/154 & \textbf{2806} & 0\\ -3 & TOMS\,748 & yes & 153/154 & 2820 & 0\\ -4 & Brent & yes & 153/154 & 2890 & 0\\ -11 & ITP, per-problem oracle & yes & 153/154 & 3260 & 0\\ -18 & Ridders & no & 153/154 & 3313 & 0\\ -31 & ITP, recommended constants & yes & 153/154 & 3957 & 0\\ -61 & Illinois & yes & 153/154 & 7045 & 0\\ -65 & bisection & no & 153/154 & 7530 & 0\\ -206 & false position & no & 127/154 & 10560 & --\\ -\bottomrule -\end{tabular} -\end{table} +\hypertarget{results}{% +\subsection{5. Results}\label{results}} -On the problems both solve, the proposed configuration beats Brent -$102/11/40$ (wins/ties/losses), TOMS\,748 $86/16/51$, ITP at its recommended -constants $132/3/18$, the per-problem ITP oracle $121/4/28$, and bisection -$152/1/0$. +The grid is nine similarity functions × four scales × seven safeguards = +252 configurations, plus twelve baselines: 264 in all. The base rule of +Section 3 --- tent similarity, three-point scale, projection safeguard +with its multiplier declared --- is one entry of that grid, fixed by the +theory rather than chosen from the ranking; the constant-free earned +variant of §3.1 is shown beside it. Chandrupatla's own method and +Dekker's are among the baselines; an earlier version of these tables was +drawn up before either was added. -\begin{table}[h] -\centering -\caption{Chandrupatla, $45$ problems, brackets up to $10^{12}$ wide.} -\label{tab:cha} -\begin{tabular}{rlccr} -\toprule -\# & configuration & tuned & solved & total evals\\ -\midrule -1 & similarity, $1-\sqrt{|z|}$, bracket scale, projection & no & \textbf{41/45} & 4516\\ -2 & ITP, per-problem oracle & yes & 40/45 & 2611\\ -3 & similarity, $e^{-|z|}$, bracket scale, both guards & no & 40/45 & 2733\\ -5 & ITP, recommended constants & yes & 40/45 & 2857\\ -6 & bisection & no & 40/45 & 3090\\ -10 & \textbf{proposed: ratio, 3-point, projection} & \textbf{no} & 40/45 & \textbf{3220}\\ -127 & TOMS\,748 & yes & 40/45 & 4000\\ -189 & Brent & yes & 38/45 & 4101\\ -\bottomrule -\end{tabular} -\end{table} +\textbf{Table 2.} Alefeld--Potra--Shi, 154 problems, out of 264 +configurations. Places by failures first, then total. -The set's nominal winner is a similarity configuration that solves one problem -more than anything else, $41$ of $45$, at a worse total; ranking by failures -first puts it on top, and we report it as such rather than by the total that -would flatter our proposal. The proposed configuration is tenth by total and -beats Brent $30/4/4$ and TOMS\,748 $31/1/8$, while losing to ITP $17/0/23$ and -to the ITP oracle $16/0/24$. +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\# +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +configuration +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +tuned +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +solved +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +total evals +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\(>2\times\) +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +1 & Chandrupatla & no & 153/154 & 2787 & 0 \\ +2 & the same rule with no safeguard at all & no & 153/154 & 2806 & 0 \\ +\textbf{3} & \textbf{base rule: tent, 3-point, projection (\(c=2\))} & +\textbf{no} & 153/154 & \textbf{2806} & 0 \\ +4 & TOMS 748 & yes & 153/154 & 2820 & 0 \\ +5 & Brent & yes & 153/154 & 2889 & 0 \\ +12 & Dekker & no & 153/154 & 3158 & 0 \\ +13 & ITP, per-problem oracle & yes & 153/154 & 3260 & 0 \\ +20 & Ridders & no & 153/154 & 3313 & 0 \\ +29 & constant-free variant: earned projection & no & 153/154 & 3568 & +0 \\ +34 & ITP, recommended constants & yes & 153/154 & 3957 & 0 \\ +73 & Illinois & yes & 153/154 & 7045 & 0 \\ +79 & bisection & no & 153/154 & 7530 & 0 \\ +244 & false position & no & 127/154 & 10560 & --- \\ +\end{longtable} -\subsection{What the guarantee costs} +The base rule and the same rule without any safeguard tie at 2806: the +projection never binds on this set. By total, Chandrupatla's method is +first with 2787, 0.7\% fewer --- the same order of margin as the 0.5\% +by which the base rule leads TOMS 748, which we read as a tie. Problem +by problem the picture is the other way round: on the problems both +solve the base rule beats Chandrupatla 87/24/42 (wins/ties/losses; exact +two-sided sign test \(p=9\cdot10^{-5}\)), TOMS 748 86/16/51, Brent +102/11/40, ITP at its recommended constants 132/3/18, the per-problem +ITP oracle 121/4/28, and bisection 152/1/0. It wins twice as many +problems as it loses against Chandrupatla and trails him in total +because its losses are the larger ones. The constant-free variant goes +79/3/71 against Chandrupatla (\(p=0.57\), a tie in problems), 77/9/67 +against TOMS 748 and 78/5/70 against Brent, and loses on the total to +all three. -Nothing on one set, and less than nothing on the other. Against the identical -rule with no safeguard at all: +\textbf{Table 3.} Chandrupatla, 45 problems, brackets up to \(10^{12}\) +wide, out of 264 configurations. -\begin{center} -\begin{tabular}{lrrr} -\toprule -& solved & total evals & runs over the $2\times$ bound\\ -\midrule -APS, no safeguard & 153/154 & 2806 & 0\\ -APS, projection & 153/154 & 2806 & 0\\ -Chandrupatla, no safeguard & 35/45 & 4104 & 10\\ -Chandrupatla, projection & \textbf{40/45} & \textbf{3220} & \textbf{0}\\ -\bottomrule -\end{tabular} -\end{center} +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\# +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +configuration +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +tuned +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +solved +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +total evals +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\(>2\times\) +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +1 & similarity, \(1-\sqrt{\lvert z\rvert}\), bracket scale, projection & +no & \textbf{41/45} & 4516 & 0 \\ +2 & Chandrupatla & no & 40/45 & 2441 & 0 \\ +3 & ITP, per-problem oracle & yes & 40/45 & 2647 & 0 \\ +4 & similarity, \(e^{-\lvert z\rvert}\), bracket scale, both guards & no +& 40/45 & 2736 & 0 \\ +6 & ITP, recommended constants & yes & 40/45 & 2896 & 0 \\ +10 & constant-free variant: earned projection & no & 40/45 & 3020 & 0 \\ +16 & bisection & no & 40/45 & 3090 & 0 \\ +\textbf{45} & \textbf{base rule: tent, 3-point, projection (\(c=2\))} & +\textbf{no} & 40/45 & \textbf{3220} & 0 \\ +159 & TOMS 748 & yes & 40/45 & 4000 & 15 \\ +227 & Brent & yes & 38/45 & 4115 & 18 \\ +228 & the same rule with no safeguard at all & no & 35/45 & 4104 & 10 \\ +\end{longtable} -On the canonical set the projection never binds and the totals are identical to -the last evaluation. On the wide-bracket set it solves five more problems for -$21\%$ fewer evaluations. This is the opposite of the usual trade, and it is -the point of projecting rather than replacing: the two safeguards that replace -cost $7260$ and $7239$ on Alefeld--Potra--Shi, against $2806$. +The set's nominal winner is a similarity configuration that solves one +problem more than anything else, 41 of 45, at a worse total; ranking by +failures first puts it on top, and we report it as such rather than by +the total that would flatter our proposal. Here Chandrupatla's method is +genuinely the stronger: it beats the base rule 26 problems to 9 +(\(p=0.006\)) and by 3220 against 2441 in total. The proposed rule beats +Brent 30/4/4 and TOMS 748 31/1/8 --- both of which exceed the +\(2\times\) bound on 18 and 15 problems --- and loses to ITP 17/0/23 and +to the ITP oracle 16/0/24. The wide-bracket set is where the multiplier +matters (Table 1a) and where the constant-free variant is the cheaper +form, 3020 against 3220. Over both sets the base rule needs 6026 and the +constant-free variant 6588, against 5228 for Chandrupatla, 5907 for the +ITP oracle, 6820 for TOMS 748 and 7004 for Brent. -\subsection{Wall-clock time, and why it is not the cost model} +\hypertarget{what-the-guarantee-costs}{% +\subsubsection{5.1 What the guarantee +costs}\label{what-the-guarantee-costs}} -Evaluations of $f$ are the cost model because in any real problem $f$ is the -expensive part. Wall-clock time measures something narrower --- the method's -own arithmetic per step --- and it is implementation- and language-bound. We -report it because a reader will ask, and because what it shows is instructive. +It depends on which bound is bought. Against the identical rule with no +safeguard at all: -On the $199$ problems as they stand, every $f$ being a formula of a few -operations, the proposed rule is the \emph{slowest} of the pure-Python methods -compared, at $32.8$\,ms against $18.4$ for Brent, $21.1$ for ITP, $14.2$ for -Ridders and $22.9$ for bisection --- while using the fewest evaluations of all -of them, $4991$ against $5932$, $5675$, $6421$ and $9474$. Bisection, needing -nearly twice the evaluations, finishes in two thirds of our time. +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2500}} + >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2500}} + >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2500}} + >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2500}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +solved +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +total evals +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +runs over the \(2\times\) bound +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +APS, no safeguard & 153/154 & 2806 & 0 \\ +APS, projection --- base rule (\(2\times\) bisection) & 153/154 & 2806 & +0 \\ +APS, earned projection --- constant-free (bisection + 1 step) & 153/154 +& 3568 & 0 \\ +Chandrupatla, no safeguard & 35/45 & 4104 & 10 \\ +Chandrupatla, projection --- base rule & 40/45 & 3220 & 0 \\ +Chandrupatla, earned projection --- constant-free & \textbf{40/45} & +\textbf{3020} & \textbf{0} \\ +\end{longtable} -That inversion is the point. Making $f$ progressively more expensive by a -controlled amount of arithmetic and timing the sweep directly --- nothing -subtracted, nothing modelled --- the proposed rule overtakes ITP once one call -to $f$ costs about $9\,\mu$s and Brent at about $20\,\mu$s, of the order of a -hundred arithmetic operations on this machine. Below that the ranking is -decided by per-step overhead; above it, by evaluations. +The projection of the base rule never binds on the canonical set, so its +totals are identical to the last evaluation; on the wide-bracket set it +solves five more problems for 21\% fewer evaluations. The earned +projection promises twice as much --- a worst case of bisection plus one +step instead of twice bisection --- and pays for it on the canonical +set, 762 evaluations or 27\%, while on the wide-bracket set it is the +cheapest of the three. Both are the opposite of the usual trade on at +least one set, and that is the point of projecting rather than +replacing: the two safeguards that replace cost 7260 and 7239 on +Alefeld--Potra--Shi, against 2806. -Three caveats, all limitations of the measurement rather than of the methods. -Timings vary by tens of percent between runs even on an idle machine. An -attempt to separate our per-step cost into ``algorithm'' and ``Python call -overhead'', by timing a flattened rewrite of the same rule, produced a variant -that diverged from the original on $42$ of the $199$ problems and was -discarded rather than quoted; the question stays open. And an earlier version -of this measurement estimated a per-evaluation overhead by subtracting the -measured cost of $f$, which returned \emph{negative} overheads for four of six -methods --- an impossibility that condemned the estimator, and the reason -nothing is subtracted here. +\hypertarget{wall-clock-time-and-why-it-is-not-the-cost-model}{% +\subsubsection{5.2 Wall-clock time, and why it is not the cost +model}\label{wall-clock-time-and-why-it-is-not-the-cost-model}} -\subsection{The law across the whole grid} -\label{sec:grid} +Evaluations of \(f\) are the cost model because in any real problem +\(f\) is the expensive part. Wall-clock time measures something narrower +--- the method's own arithmetic per step --- and it is implementation- +and language-bound. We report it because a reader will ask, and because +what it shows is instructive. -Corollaries~\ref{cor:chosen}--\ref{cor:derived} predict an ordering of the nine -similarity functions and of the four scales. Table~\ref{tab:grid} reports it. -The prediction holds without exception for every data-derived scale: the three -similarities with $c=1$ occupy the top three places and the three with $c=0$ -the bottom three. For the chosen scale the two groups are indistinguishable -($16102$ against $15345$), which is consistent --- with a chosen scale nothing -converges well and the ordering carries no information. +On the 199 problems as they stand, every \(f\) being a formula of a few +operations, the base rule is the \textbf{slowest} of the pure-Python +methods compared, at 32.8 ms against 18.4 for Brent, 21.1 for ITP, 14.2 +for Ridders and 22.9 for bisection --- while using the fewest +evaluations of all of them, 4991 against 5932, 5675, 6421 and 9474. +Bisection, needing nearly twice the evaluations, finishes in two thirds +of our time. -\begin{table}[h] -\centering -\caption{Mean total evaluations over both sets, step guard, grouped by the -slope $c$ of $1-S$ at the origin.} -\label{tab:grid} -\begin{tabular}{lrr} -\toprule -scale & $c=1$ (linear approach) & $c=0$ (quadratic approach)\\ -\midrule -3-point derived & \textbf{6809} & 22294\\ -2-point derived & 6906 & 22167\\ -bracket & 10263 & 19137\\ -start (chosen) & 16102 & 15345\\ -\bottomrule -\end{tabular} -\end{table} +Those evaluation counts are \emph{raw}: they are what the timing loop +actually spent, and a failed run contributes only the evaluations it +made before the budget ran out. They are therefore not the totals of §5, +where a failure is charged the full 200-evaluation budget so that no +method can buy a low score by giving up --- 4991 raw against 6026 +charged for the base rule, 5932 against 6991 for Brent (our pure-Python +implementation, which is what is timed; the tables use the library's +\texttt{brentq}, 7004), 9474 against 10620 for bisection. Wall-clock +time can only be compared against what was really executed, so the raw +counts are the right companions to the milliseconds; every comparison in +§5 uses the charged ones. Both are stated to avoid the appearance of two +incompatible sets of numbers for the same methods. -Ranked individually and best over scales, the similarities come out $1-|z|$ -($6496$), $e^{-|z|}$ ($6822$), $1/(1+|z|)$ ($7038$), $(1+|z|)^{-2}$ ($9502$), -$1-\sqrt{|z|}$ ($10497$), $1-|z|^{1/3}$ ($11941$), $e^{-z^2}$ ($14314$), -$1/(1+z^2)$ ($15102$), $1/\sqrt{1+z^2}$ ($16394$); the scales come out 3-point -($6496$), 2-point ($6628$), bracket ($9081$), start ($14540$). Both orderings -are those the law predicts, and both were predicted before the grid was run. +That inversion is the point. Making \(f\) progressively more expensive +by a controlled amount of arithmetic and timing the sweep directly --- +nothing subtracted, nothing modelled --- the base rule overtakes ITP +once one call to \(f\) costs about 9 µs and Brent at about 20 µs, which +on this machine is of the order of a hundred arithmetic operations. +Below that the ranking is decided by per-step overhead; above it, by +evaluations. -\section{Where the evaluations go} +Three caveats, all of them limitations of the measurement rather than of +the methods. Timings vary by tens of percent between runs even on an +idle machine. An attempt to separate our per-step cost into +``algorithm'' and ``Python call overhead'', by timing a flattened +rewrite of the same rule, produced a variant that diverged from the +original on 42 of the 199 problems and was therefore discarded rather +than quoted; the question stays open. And an earlier version of this +measurement estimated a per-evaluation overhead by subtracting the +measured cost of \(f\), which returned \emph{negative} overheads for +four of six methods --- an impossibility that condemned the estimator, +and the reason nothing is subtracted here. + +\hypertarget{the-law-across-the-whole-grid}{% +\subsubsection{5.3 The law across the whole +grid}\label{the-law-across-the-whole-grid}} + +Corollaries 1--3 predict an ordering of the nine similarity functions +and of the four scales. Table 4 reports it. The prediction holds without +exception for every data-derived scale: the three similarities with +\(c=1\) occupy the top three places and the three with \(c=0\) the +bottom three. For the chosen scale the two groups are indistinguishable +(16102 against 15345), which is consistent --- with a chosen scale +nothing converges well and the ordering carries no information. + +\textbf{Table 4.} Mean total evaluations over both sets, step guard, +grouped by the slope \(c\) of \(1-S\) at the origin. + +\begin{longtable}[]{@{}lll@{}} +\toprule\noalign{} +scale & \(c=1\) (linear approach) & \(c=0\) (quadratic approach) \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +3-point derived & \textbf{6893} & 22315 \\ +2-point derived & 6981 & 22206 \\ +bracket & 10279 & 19127 \\ +start (chosen) & 16102 & 15345 \\ +\end{longtable} + +Ranked individually and best over scales, the similarities come out +\(1-|z|\) (6560), \(e^{-|z|}\) (6895), \(1/(1+|z|)\) (7118), +\((1+|z|)^{-2}\) (9578), \(1-\sqrt{|z|}\) (10546), \(1-|z|^{1/3}\) +(12002), \(e^{-z^2}\) (14307), \(1/(1+z^2)\) (15102), \(1/\sqrt{1+z^2}\) +(16394); the scales come out 3-point (6560), 2-point (6702), bracket +(9107), start (14540). Both orderings are those the law predicts, and +both were predicted before the grid was run. + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\hypertarget{where-the-evaluations-go}{% +\subsection{6. Where the evaluations +go}\label{where-the-evaluations-go}} Splitting each run at the geometric mean of the initial width and the -attainable tolerance --- the log-midpoint of the journey, at which bisection by -construction has spent half its evaluations --- separates the \emph{approach} -from the \emph{endgame}. On Alefeld--Potra--Shi the two-point rule spends -$2235$ on the approach and $668$ on the endgame against Brent's $2175$ and -$515$: its deficit is almost entirely the endgame, i.e.\ the order, which is -what motivated the three-point scale. On Chandrupatla it spends $1068$ and -$1161$ against Brent's $1343$ and $1358$, winning both phases. +attainable tolerance --- the log-midpoint of the journey, at which +bisection by construction has spent half its evaluations --- separates +the \emph{approach} from the \emph{endgame}. On Alefeld--Potra--Shi the +two-point rule spends 2235 on the approach and 668 on the endgame +against Brent's 2175 and 515: its deficit is almost entirely the +endgame, i.e.~the order, which is what motivated the three-point scale. +On Chandrupatla it spends 1068 and 1161 against Brent's 1343 and 1358, +winning both phases. Two natural explanations of the Chandrupatla advantage were tested and -\emph{refuted}. Brent discards $53.3\%$ of its interpolations to its safeguard -on the set it wins and only $34.0\%$ on the set it loses, so safeguard rate is -not the mechanism; and on Chandrupatla Brent is the bolder of the two --- -$56.3\%$ of its probes land in the outer tenths of the bracket against our -$41.8\%$ --- so step length is not the mechanism either. +\emph{refuted}. Brent discards 53.3\% of its interpolations to its +safeguard on the set it wins and only 34.0\% on the set it loses, so +safeguard rate is not the mechanism; and on Chandrupatla Brent is the +bolder of the two --- 56.3\% of its probes land in the outer tenths of +the bracket against our 41.8\% --- so step length is not the mechanism +either. -The mechanism is step \emph{quality}. Reconstructing each method's bracket from -the signs it observed, the median probe removes $0.500$ of the bracket for -every method on Alefeld--Potra--Shi, but on Chandrupatla it removes $0.275$ for -the similarity rule against $0.058$ for Brent and $0.068$ for TOMS\,748 --- -and that comparison already flatters them, since $69$ and $141$ of their probes -respectively fall outside the proven bracket and are excluded, against none of -ours. High-order interpolation is a wager that $f$ is locally polynomial. When -the wager pays, order $1.84$ or $2.65$ wins the endgame; when it fails, the -probes are wasted. The similarity rule makes the weakest available assumption ---- a single local slope --- and degrades gracefully. +The mechanism is step \emph{quality}. Reconstructing each method's +bracket from the signs it observed, the median probe removes 0.500 of +the bracket for every method on Alefeld--Potra--Shi, but on Chandrupatla +it removes 0.275 for the similarity rule against 0.058 for Brent and +0.068 for TOMS 748 --- and that comparison already flatters them, since +69 and 141 of their probes respectively fall outside the proven bracket +and are excluded, against none of ours. High-order interpolation is a +wager that \(f\) is locally polynomial. When the wager pays, order 1.84 +or 2.65 wins the endgame; when it fails, the probes are wasted. The +similarity rule makes the weakest available assumption --- a single +local slope --- and degrades gracefully. -\section{Where the similarity is read} -\label{sec:placement} +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} -Everything above reads the similarity in one place: the \emph{length} of the -step, $(1-S(z))$ times the distance to the far end. But a bracketing iteration -takes several decisions per step, and the similarity was not consulted in any -of the others: which end counts as far (decided by distance), which points the -local slope is estimated from (decided by recency), and whether the step is -worth taking at all (decided after the fact, by the safeguard). Each of those -is a place where a similarity can be read, and the placement turns out to -matter more than the form of $S$. +\hypertarget{where-the-similarity-is-read}{% +\subsection{7. Where the similarity is +read}\label{where-the-similarity-is-read}} -Three readings were added, each parameter-free and each measured on the same -protocol; every number below is re-checked against its sweep file by -\texttt{verify\_article.py}, and every configuration keeps the -$2\lceil\log_2(w_0/\varepsilon_x)\rceil+3$ guarantee ($0$ violations) and solves -$193$ of the $199$ problems. +Everything above reads the similarity in one place: the \emph{length} of +the step, \((1-S(z))\) times the distance to the far end. But a +bracketing iteration takes several decisions per step, and the +similarity was not consulted in any of the others: which end counts as +far (decided by distance), which points the local slope is estimated +from (decided by recency), and whether the step is worth taking at all +(decided after the fact, by the safeguard). Each of those is a place +where a similarity can be read, and the placement turns out to matter +more than the form of \(S\). + +Three readings were added to the base rule of §3 (tent similarity, +three-point scale), each parameter-free and each measured on the +protocol of §4; every number below is re-checked against its own sweep +file by \texttt{verify\_article.py}, and every configuration in Table 5 +keeps the \(2\lceil\log_2(w_0/\varepsilon_x)\rceil+3\) guarantee (0 +violations) and solves 193 of the 199 problems. + +Where a safeguard other than the projection of §3.1 appears, it is one +of the grid's. \emph{safe} is the projection preceded by a step-length +test --- a step not at most half the step taken two evaluations earlier +is replaced by a halving --- with the projection still carrying the +bound. \emph{credit} replaces the scheduled allowance of (3) by one +earned step by step: a surplus is banked whenever a step shrinks the +bracket by more than half and drawn on when it shrinks it by less, which +bounds the run by bisection plus one step. \emph{bracket} and +\emph{both} are the replacing safeguards of §3.1, which keep a bound at +the price of the order; \emph{step} alone and \emph{none} carry no +bound. \begin{enumerate} -\item \textbf{Trust before the step.} The step trusts a local slope, so the -question of trust is whether that slope has settled: if two consecutive -estimates have opposite signs the local model is not established, and the -evaluation is spent halving instead. A sign is compared, not a magnitude. -\item \textbf{Which points the model uses.} For a linear $f$ the ratio of -positions $\xi=(x-u)/(v-u)$ and the ratio of values -$\varphi=(f(x)-f(u))/(f(v)-f(u))$ coincide, so $|\varphi-\xi|$ measures how -unlike a linear configuration a triple is. Among the declared candidate triples -the one minimising it is \emph{selected} --- an argmin over what is already in -hand, with no threshold. -\item \textbf{Which end is far.} Read by dissimilarity instead of distance: the -end whose $|f|$ is larger is the one less similar to the target. +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + \textbf{Trust before the step.} The step trusts a local slope, so the + question of trust is whether that slope has settled: if two + consecutive estimates have opposite signs the local model is not + established, and the evaluation is spent halving instead. A sign is + compared, not a magnitude. +\item + \textbf{Which points the model uses.} For a linear \(f\) the ratio of + positions \(\xi=(x-u)/(v-u)\) and the ratio of values + \(\varphi=(f(x)-f(u))/(f(v)-f(u))\) coincide, so \(|\varphi-\xi|\) + measures how unlike a linear configuration a triple is. Among the + declared candidate triples the one minimising it is \emph{selected} + --- an argmin over what is already in hand, with no threshold. +\item + \textbf{Which end is far.} Read by dissimilarity instead of distance: + the end whose \(|f|\) is larger is the one less similar to the target. \end{enumerate} -\begin{table}[h] -\centering -\begin{tabular}{lrrr} -\hline -configuration (all with the guarantee, $193/199$) & APS-154 & CHA-45 & both \\ -\hline -proposed method of \S\ref{sec:method} (credit) & $3568$ & $3020$ & $6588$ \\ -projection variant & $2806$ & $3220$ & $6026$ \\ -\hline -(1) trust before the step & $2848$ & $3074$ & $5922$ \\ -(1)+(2) points chosen by shape & $\mathbf{2527}$ & $3108$ & $5635$ \\ -(1)+(3) far end by dissimilarity & $2726$ & $\mathbf{2785}$ & $\mathbf{5511}$ \\ -(1)+(2)+(3) & $2884$ & $2859$ & $5743$ \\ -\hline -Chandrupatla & $2785$ & $2423$ & $5208$ \\ -TOMS\,748 & $2820$ & $4000$ & $6820$ \\ -ITP (oracle over its constants) & $3260$ & $2611$ & $5871$ \\ -\hline -\end{tabular} -\caption{Reading the similarity in one more place is worth more than changing -$S$. Evaluations of $f$; failures charged the full budget.} -\end{table} +\textbf{Table 5.} Reading the similarity in one more place is worth more +than changing \(S\). Evaluations of \(f\); failures charged the full +budget. -Two results here are worth stating plainly. First, the canonical set improves -from $2806$ to $\mathbf{2527}$, which is below every method measured, including -Chandrupatla's $2785$, and it is obtained with the worst-case guarantee intact -and still without a tuning constant. Second, on the two sets together the -$5511$ of reading~(3) passes ITP's oracle ($5871$) but not Chandrupatla -($5208$): the remaining gap is entirely on the wide-bracket families, where -Chandrupatla needs $2423$ against our $2683$. +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2500}} + >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2500}} + >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2500}} + >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2500}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +configuration (all with the guarantee, 193/199) +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +APS-154 +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +CHA-45 +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +both +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +base rule: tent, 3-point, projection \(c=2\) (§3) & 2806 & 3220 & +6026 \\ +constant-free variant: earned projection (§3.1) & 3568 & 3020 & 6588 \\ +(1) trust before the step, projection & 2848 & 3114 & 5962 \\ +(1)+(2) points chosen by shape, \emph{safe} & \textbf{2527} & 3126 & +5653 \\ +(1)+(3) far end by dissimilarity, projection & 2726 & \textbf{2799} & +\textbf{5525} \\ +(1)+(2)+(3), \emph{safe} & 2884 & 2871 & 5755 \\ +Chandrupatla & 2787 & 2441 & 5228 \\ +TOMS 748 & 2820 & 4000 & 6820 \\ +ITP, per-problem oracle & 3260 & 2647 & 5907 \\ +\end{longtable} -The readings do not compose. Taken together, (2) and (3) give $2884$ and -$2859$ --- worse than either alone. Two selections that are each an improvement -interfere, which is a reason to measure composition rather than assume it. +Two results here are worth stating plainly. First, the canonical set +improves from 2806 to \textbf{2527}, which is below every method +measured, including Chandrupatla's 2787, with the worst-case guarantee +intact. It hardly feels the declared multiplier of §3.1: 2527 for every +multiplier from 1.5 to 4, 2541 at 1.25 +(\texttt{measure\_records\_vs\_multiplier.py}). Second, on the two sets +together the 5525 of reading (3) passes ITP's oracle (5907) but not +Chandrupatla (5228): the remaining gap is entirely on the wide-bracket +families, where Chandrupatla needs 2441 against our 2695 (reading (3) +under \emph{safe}). -\subsection{The similarity function belongs to the place, not to the method} -\label{sec:perplace} +The readings do not compose. Taken together, (2) and (3) give 2884 and +2871 --- worse than either alone on the canonical set, and on the +wide-bracket set worse than (3) alone. Two selections that are each an +improvement interfere, which is a reason to measure composition rather +than assume it. -Everything above varies \emph{where} the similarity is read while keeping one -function $S$ for the whole method. That is itself an assumption, and it is -measurable. Proposition~\ref{prop:falsi} says the two-point normalisation is -false position; what it does not say is \emph{why} false position stalls. Write -$|f|\sim K e^m$ near the current point, $e=|x-r|$. Then the residual ratio -against the far end needs no slope at all, -\begin{equation} -\label{eq:orderz} -z \;=\; \frac{|f(x)|}{|f(x_{\mathrm{far}})|} \;=\; \Bigl(\frac{e}{E}\Bigr)^{m}, -\qquad\text{so}\qquad z^{1/m} \;=\; \frac{e}{E}, -\end{equation} -and under $S=1/(1+z)$ the step fraction is $z/(1+z)$, which is exactly inverse -linear interpolation. False position therefore reads a dimensionless ratio -\emph{at order one} on an approach of order $m$: its three-century-old stall is -a mismatch between the similarity function and the place it is read in. The -exponent $1/m$ is not a constant --- $m=1/(1-ff''/f'^2)$ comes from three -evaluations already paid for, and is $1$ whenever the power model does not -apply. +\textbf{Which similarity stands in the step decides whether a reading +pays.} The readings above, and the decision \emph{defect} of §7.2, +compare quantities directly --- an ordinal judgment of which is more +similar, in which every decreasing \(S\) would decide alike. Their gains +nevertheless depend on the \(S\) that sets the step +(\texttt{audit\_similarity\_places.py}, on the same sweeps): on the +canonical set the triple chosen by shape gains 493 evaluations with the +tent in the step and loses 250 with \(1/\sqrt{1+z^2}\); \emph{defect} +gains 283 with the tent and loses 215 with \(1-|z|^{1/3}\). The records +of this section are the pairing of the tent step with these judgments, +not the judgments alone. -Measured over the $252$ cells of the grid, the correction behaves exactly as -that reading predicts and not at all as a universal improvement. Paired inside -each (function, safeguard) cell of the far reading it is cheaper in $29$ of -$60$ cells --- indistinguishable from a coin. But in the one pairing where the -far reading \emph{is} exact inverse interpolation, $S=1/(1+z)$, it is cheaper -in all seven safeguards: +Under the constant-free earned projection the same readings gain far +less. Reading (1) gives 3507 and 2997, (1)+(2) 3755 and 3021, (1)+(3) +3857 and 3002, all three together 4354 and 3037, against 3568 and 3020 +for the constant-free variant itself: the earned budget binds early on +the canonical problems, and what the readings buy under the projection +is mostly room that the earned budget does not grant. -\begin{table}[h] -\centering -\begin{tabular}{lrrrr} -\toprule -safeguard & APS $m{=}1$ & APS measured $m$ & CHA $m{=}1$ & CHA measured $m$\\ -\midrule -both & 4522 & \textbf{3675} & 3387 & \textbf{3216}\\ -bracket & 4606 & \textbf{3542} & 3571 & \textbf{3303}\\ -credit & 5190 & \textbf{4686} & 3013 & \textbf{2884}\\ -project & 6932 & \textbf{6364} & 4794 & \textbf{4559}\\ -safe & 5987 & \textbf{5229} & 4108 & \textbf{3923}\\ -step & 6435 & \textbf{5551} & 4257 & \textbf{4022}\\ -none & 10676 & \textbf{10043} & 8265 & \textbf{7794}\\ -\bottomrule -\end{tabular} -\caption{The measured order in the step place, on the far reading. Cheaper in -$7$ of $7$ safeguards for the similarity that matches the place, and in $29$ of -$60$ cells over all nine functions.} -\end{table} +\hypertarget{the-similarity-function-belongs-to-the-place-not-to-the-method}{% +\subsubsection{7.1 The similarity function belongs to the place, not to +the +method}\label{the-similarity-function-belongs-to-the-place-not-to-the-method}} -Two limits must be stated with it. The estimator is \emph{biased low}: on a -pure cube, with no noise at all, it returns $2.830$ rather than $3$, because a -parabola through three points carries only the second difference. The bias is -towards $m=1$, that is towards the uncorrected reading, which is the harmless -direction, but it is a bias. And the correction does not rescue the bracket -reading as a method: the best cell it reaches on the wide-bracket set is -$2884$, against $2683$ for reading~(3) above and $2423$ for Chandrupatla. In -the \emph{slope} reading the same exponent is harmful, $2806\to2854$, which is -the same statement read from the other side --- a function that does not belong +Everything above varies \emph{where} the similarity is read while +keeping one function \(S\) for the whole method. That is itself an +assumption, and it is measurable. Proposition 1 says that the ratio +similarity scaled by the far end is false position; what it does not say +is \emph{why} false position stalls. Write \(|f|\sim K e^m\) near the +current point, \(e=|x-r|\). Then the residual ratio against the far end +needs no slope at all, + +\[z \;=\; \frac{|f(x)|}{|f(x_\mathrm{far})|} \;=\; \Bigl(\frac{e}{E}\Bigr)^{m}, \qquad\text{so}\qquad z^{1/m} \;=\; \frac{e}{E}, \tag{5}\] + +and under the ratio similarity \(S=1/(1+|z|)\) the step fraction is +\(z/(1+z)\), which is exactly inverse linear interpolation. False +position therefore reads a dimensionless ratio \emph{at order one} on an +approach of order \(m\): its three-century-old stall is a mismatch +between the similarity function and the place it is read in. The +exponent \(1/m\) is not a constant --- \(m=1/(1-ff''/f'^2)\), +Lagouanelle's estimate of the multiplicity {[}13{]} with the derivatives +replaced by divided differences, comes from three evaluations already +paid for, as in item 5 of §10, and is 1 whenever the power model does +not apply. + +Measured over the 252 cells of the grid, the correction behaves exactly +as that reading predicts and not at all as a universal improvement. +Paired inside each (function, safeguard) cell of the far-end reading it +is cheaper in 29 of 60 cells --- indistinguishable from a coin. But in +the one pairing where that reading \emph{is} exact inverse +interpolation, the ratio similarity, it is cheaper under all seven +safeguards: + +\textbf{Table 6.} The measured order in the step place, on the far-end +reading with the ratio similarity \(1/(1+|z|)\). Cheaper in 7 of 7 +safeguards; in 29 of 60 cells over all nine functions. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +safeguard +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +APS, \(m=1\) +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +APS, measured \(m\) +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +CHA, \(m=1\) +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +CHA, measured \(m\) +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +both & 4522 & \textbf{3675} & 3406 & \textbf{3241} \\ +bracket & 4606 & \textbf{3542} & 3602 & \textbf{3359} \\ +credit & 5190 & \textbf{4686} & 3013 & \textbf{2884} \\ +projection & 6932 & \textbf{6364} & 4789 & \textbf{4554} \\ +safe & 5987 & \textbf{5229} & 4134 & \textbf{3954} \\ +step & 6435 & \textbf{5551} & 4287 & \textbf{4068} \\ +none & 10676 & \textbf{10043} & 8265 & \textbf{7794} \\ +\end{longtable} + +Two limits must be stated with it. The estimator is \emph{biased low}: +on a pure cube, with no noise at all, it returns 2.830 rather than 3, +because a parabola through three points carries only the second +difference. The bias is towards \(m=1\), that is towards the uncorrected +reading, which is the harmless direction, but it is a bias. And the +correction does not rescue the far-end reading as a method: the best +cell it reaches on the wide-bracket set is 2884, against 2695 for +reading (3) above and 2441 for Chandrupatla. In the \emph{slope} reading +of §3 the same exponent is harmful, \(2806\to2854\), which is the same +statement read from the other side --- a function that does not belong to a place does not become right by being applied there. -\subsection{The decision place, and the one test that settles the gap} -\label{sec:decision} +\hypertarget{the-decision-place}{% +\subsubsection{7.2 The decision place}\label{the-decision-place}} -Three places have now been measured: the step length, the far end, and the -points the model is built on. The fourth is the \emph{decision} --- whether the -local model deserves this evaluation or halving is the better use of it. -Chandrupatla's method is strong exactly there: it refuses its model on most -steps by the acceptance band $1-\sqrt{1-\xi}<\varphi<\sqrt{\xi}$, where -$\xi=(x-u)/(v-u)$ and $\varphi=(f(x)-f(u))/(f(v)-f(u))$ are ratios of positions -and of values, equal for a linear $f$. Our method has no similarity in this -place at all: a sign gate and a projection that repairs \emph{after} the step. +Three places have now been measured: the step length, the far end, and +the points the model is built on. The fourth is the \emph{decision} --- +whether the local model deserves this evaluation or halving is the +better use of it. Chandrupatla's method is strong exactly there: it +refuses its model on most steps by the acceptance band +\(1-\sqrt{1-\xi}<\varphi<\sqrt{\xi}\), with \(\xi\) and \(\varphi\) the +ratios of positions and of values defined above. The rule of §3 has no +similarity in this place at all: a sign gate and a projection that +repairs \emph{after} the step. -Three readings of that place were measured, each on quantities already in hand -and each without a constant. Two are ours: refuse when the configuration is -less like a linear one than the iterate is off-centre, -$|\varphi-\xi|>\min(\xi,1-\xi)$ (``defect''); and refuse when the -configuration's similarity to linear falls below the iterate's similarity to -the root, $S(|\varphi-\xi|)\min(\xi,1-\xi)\) (``defect''); and refuse when the +configuration's similarity to linear falls below the iterate's +similarity to the root, \(S(|\varphi-\xi|){\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +method +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +APS as scored +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +APS re-scored +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +CHA as scored +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +CHA re-scored +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +ours, (1)+(2) points by shape & \textbf{2527} & \textbf{2337} & 3108 & +2159 \\ +ours, base rule (projection) & 2806 & 2634 & 3220 & 2357 \\ +Chandrupatla & 2787 & 2595 & \textbf{2441} & \textbf{1505} \\ +TOMS 748 & 2820 & 2636 & 4000 & 3088 \\ +Brent & 2889 & 2707 & 4115 & 3238 \\ +ITP & 3957 & 3767 & 2896 & 1907 \\ +bisection & 7530 & 7338 & 3090 & 2136 \\ +\end{longtable} -The remaining gap looks diffuse --- per family $+57$, $+54$, $+46$, $+43$, $+35$ -and smaller --- but it has one address. The \texttt{fun1} family is the same -function with brackets of growing width, and our cost against Chandrupatla's -across them is $7/8$, $12/12$, $19/15$, $59/24$, $63/44$: we tie or win while the -bracket is narrow and lose progressively as it widens. The endgame is not the -cause --- our observed order on those very problems is the higher one ($3.63$ -against $2.02$ on the $2\times10^4$-wide bracket). The cause is the rate of -progress far from the root: $59$ evaluations on a $2\times10^4$-wide bracket is -what bisection itself needs ($\lceil\log_2(2\times10^{16})\rceil\approx54$), i.e. -there we advance by one halving per evaluation while Chandrupatla advances by -about $2.3$. +\hypertarget{where-the-wide-bracket-limit-actually-is}{% +\subsubsection{7.4 Where the wide-bracket limit actually +is}\label{where-the-wide-bracket-limit-actually-is}} -It is not the guarantee that caps us. With the safeguard removed entirely the -same problems cost $46$, $57$, $61$ and $68$ against bisection's $57$, $77$, $45$ -and $45$ --- better on the wide brackets, \emph{worse than bisection} on -\texttt{fun3.1} and \texttt{fun5.1} --- and still far from Chandrupatla's $24$ and -$44$. +The remaining gap looks diffuse --- per family +57, +49, +42, +39, +30 +and smaller --- but part of it has one address. The \texttt{fun1} family +is the same function with brackets of growing width, and our cost +against Chandrupatla's across them is 7/8, 12/12, 19/15, 59/24, 63/44: +we tie or win while the bracket is narrow and lose progressively as it +widens. The endgame is not the cause --- our observed order on those +very problems is the higher one (3.63 against 2.02 on the +\(2\times10^4\)-wide bracket). The cause is the rate of progress far +from the root: 59 evaluations on a \(2\times10^4\)-wide bracket is what +bisection itself needs +(\(\lceil\log_2(2\times10^{16})\rceil\approx54\)), i.e.~there we advance +by about one halving per evaluation while Chandrupatla advances by about +2.3. -Nor is it that the step fails to be relative to the bracket. With the ratio -similarity $1-S=\min(1,|f|/(|f'|D))$, so the step is exactly -$\min(D,|f|/|f'|)$: a \emph{fraction} of the distance to the far end, and the -similarity is that fraction. Nor does the iterate creep along one side without -moving the proven bracket: measured probe by probe, $91.5\%$ of our evaluations -on the $2\times10^4$-wide bracket do shrink the bracket, slightly \emph{more} -often than Chandrupatla's $87.5\%$. +It is not the guarantee that caps us. With the safeguard removed +entirely the same problems cost 46, 57, 61 and 68 against bisection's +57, 77, 45 and 45 --- better on the wide brackets, \emph{worse than +bisection} on \texttt{fun3.1} and \texttt{fun5.1} --- and still far from +Chandrupatla's 24 and 44. -What differs is how much each probe removes. Ours shrinks the bracket by -$0.93$ halvings per evaluation there, Chandrupatla's by $2.26$ --- a factor of -about two against a factor of about five. On a wide bracket of a convex function -the Newton step systematically undershoots, because a linear model of the value -axis cannot see the curvature that separates the iterate from the root, so our -probe lands well short and the new bracket is about half the old one; a model -that carries the curvature --- inverse quadratic interpolation --- lands far -closer and removes about four fifths. +Nor is it that the step fails to be relative to the bracket. With the +tent similarity \(1-S=\min(1,|f|/(|\hat f'|D))\), so by (4) the step is +exactly \(\min(D,|f|/|\hat f'|)\): a \emph{fraction} of the distance to +the far end, and the similarity is that fraction. Nor does the iterate +creep along one side without moving the proven bracket: measured probe +by probe, 91.5\% of our evaluations on the \(2\times10^4\)-wide bracket +do shrink the bracket, slightly \emph{more} often than Chandrupatla's +87.5\%. -That mechanism is right for \texttt{fun1} and \emph{wrong as a statement about the -whole gap}, which an earlier version of this section made. Replaying our own -trajectories on the $33$ problems where we lose, and placing both models on the -\emph{same} evaluations --- one extra evaluation each, from the same state --- -splits the $262$ evaluations of the gap in two. On \texttt{fun1} ($58$ of them) -inverse quadratic interpolation from our own three points removes far more of -the bracket than our step did: $10.37$ halvings against $0.62$ on the -$2\times10^4$-wide bracket. There the gap is the order of the model, and the -reason is structural: our step $x+(1-S)(x_{\mathrm{far}}-x)=S\,x+(1-S)\,x_{\mathrm{far}}$ -is a convex combination of two points, while the quadratic interpolant's -Lagrange weights at $0$ always include exactly one \emph{negative} weight when -the triple brackets the root (verified on all $428$ non-degenerate states; in -the other five the negative weight underflowed to $-0$). A similarity in $[0,1]$ -cannot produce a negative weight --- Proposition~\ref{prop:falsi} extended from -two points to three. +What differs on \texttt{fun1} is how much each probe removes. Ours +shrinks the bracket by 0.93 halvings per evaluation there, +Chandrupatla's by 2.30. On a wide bracket of a convex function the +Newton step systematically undershoots, because a linear model of the +value axis cannot see the curvature that separates the iterate from the +root; a model that carries the curvature --- inverse quadratic +interpolation --- lands far closer. -But $178$ of the $262$ --- two thirds --- sit on \texttt{fun3}--\texttt{fun6}, -which are pure powers of order $3$, $5$, $9$ and $19$, and there \emph{no} -interpolating model works: our step removes $0.41$--$0.81$ halvings of the -bracket per evaluation, inverse quadratic interpolation from the same points only -$0.01$--$0.17$. Chandrupatla does not win those families with his model --- his -traced run bisects $93$, $96$, $100$ and $100\%$ of his steps. We lose them -because our step is slower than bisection there and our guarantee, at most twice -bisection, licenses exactly that. His band inside our step confirms it family by -family: under the projection guard it takes \texttt{fun4}, \texttt{fun5}, -\texttt{fun6} from $573$, $456$, $456$ to $296$, $239$, $235$ --- against his own -$293$, $228$, $228$ --- and costs $+164$, $+111$, $+170$, $+144$ on \texttt{fun1}, -\texttt{fun2}, \texttt{fun8}, \texttt{fun9}, where it refuses steps that were good. +That mechanism is right for \texttt{fun1} and \emph{wrong as a statement +about the whole gap}. Replaying our own trajectories on the 33 problems +where we lose, and placing both models on the \emph{same} evaluations +--- one extra evaluation each, from the same state --- splits the 256 +evaluations of the gap in two. On \texttt{fun1} (58 of them, about a +quarter) inverse quadratic interpolation from our own three points +removes far more of the bracket than our step did: 10.37 halvings +against 0.62 on the \(2\times10^4\)-wide bracket. There the gap is the +order of the model, and the reason is structural: our step +\(x+(1-S)(x_\mathrm{far}-x)=S\,x+(1-S)\,x_\mathrm{far}\) is a convex +combination of two points, while the quadratic interpolant's Lagrange +weights at 0 always include exactly one \emph{negative} weight when the +triple brackets the root (verified on all 428 non-degenerate states; in +the other three the negative weight underflowed to \(-0\)). A similarity +in \([0,1]\) cannot produce a negative weight --- Proposition 1 extended +from two points to three. -So most of what remains is not the order of the model but the decision \emph{when -to give the model up}, and it is open because every detector measured so far -confounds ``the model is useless here'' with something else: the band with ``the -configuration is not shaped for inverse quadratic interpolation'', bracket -progress with ``the step has not moved the bracket yet'' ($4449$ on the canonical -set), and the local order with nothing at all --- $m\ge2$ is exactly the -condition under which a tangent step loses to a halving, since it lands at -$e(1-1/m)$, and it is clean ($0.2\%$ of canonical states) but blind: it reports -$m\ge2$ on only $5.8\%$ of states of families whose order is by construction $3$ -to $19$. For the \texttt{fun1} part, three parameter-free ways round the model -order have been measured and all three fail in the same way, buying the wide brackets at the price of the -canonical set: a fixed fraction of the bracket (\texttt{cbrt}), a logarithmic -change of variable, and a curvature-corrected scale (\texttt{derived3\_m}, -whose derivation holds but whose estimator of the local order fires on $27.9\%$ -of steps where the truth is a simple root). The fourth way is to model the -curvature directly, which is inverse quadratic interpolation --- a different -method rather than another reading of this one. +But 172 of the 256 --- two thirds --- sit on +\texttt{fun3}--\texttt{fun6}, which are pure powers of order 3, 5, 9 and +19, and there \emph{no} interpolating model works: our step removes +0.41--0.75 halvings of the bracket per evaluation, inverse quadratic +interpolation from the same points only 0.01--0.17. Chandrupatla does +not win those families with his model --- his traced run bisects 92, 96, +100 and 100\% of his steps. We lose them because our step is slower than +bisection there and our guarantee, at most twice bisection, licenses +exactly that. His band inside our step confirms it family by family: +under the projection it takes \texttt{fun4}, \texttt{fun5}, +\texttt{fun6} from 573, 456, 456 to 296, 239, 228 --- against his own +297, 233, 233 --- and costs +164, +111, +170, +144 on \texttt{fun1}, +\texttt{fun2}, \texttt{fun8}, \texttt{fun9}, where it refuses steps that +were good. -On that set our shape reading ($2159$ re-scored) is \emph{worse} than bisection -($2136$); only the dissimilarity reading ($1740$) is clearly ahead, which is the -same statement seen from the other end: where the step cannot march, the reading -that helps least is the one that only improves the local model. Every statement -in these two subsections is -reproduced by \texttt{diag\_rescore\_cha.py}, \texttt{diag\_rescore\_aps.py}, -\texttt{diag\_fun7\_root.py} and \texttt{diag\_cha\_gap.py}, whose outputs are -kept beside them. +So most of what remains is not the order of the model but the decision +\emph{when to give the model up}, and it is open because every detector +measured so far confounds ``the model is useless here'' with something +else: the band with ``the configuration is not shaped for inverse +quadratic interpolation'', bracket progress with ``the step has not +moved the bracket yet'' (4449 on the canonical set, §10), and the local +order with nothing at all --- \(m\ge2\) is exactly the condition under +which a tangent step loses to a halving, since it lands at \(e(1-1/m)\), +and it is clean (0.2\% of canonical states) but blind: it reports +\(m\ge2\) on none of the states of families whose order is by +construction 3 to 19. For the \texttt{fun1} part, three parameter-free +ways round the model order have been measured and all three fail in the +same way, buying the wide brackets at the price of the canonical set: a +fixed fraction of the bracket (the cube-root similarity), a logarithmic +change of variable, and the curvature-corrected scale of §10 item 5. The +fourth way is to model the curvature directly, which is inverse +quadratic interpolation --- a different method rather than another +reading of this one. Section 8 shows that the decision is reachable +without a new model: by a similarity of the run to its own past. -\section{Negative results} +On the re-scored wide-bracket set of Table 7 our shape reading (2159) is +\emph{worse} than bisection (2136); only the dissimilarity reading +(1740) is clearly ahead, which is the same statement seen from the other +end: where the step cannot march, the reading that helps least is the +one that only improves the local model. + +Every statement in §§7.3--7.4 is reproduced by +\texttt{diag\_rescore\_cha.py}, \texttt{diag\_rescore\_aps.py}, +\texttt{diag\_fun7\_root.py}, \texttt{diag\_cha\_gap.py}, +\texttt{diag\_model\_order.py}, \texttt{diag\_model\_order\_checks.py}, +\texttt{diag\_flat\_detectable.py} and +\texttt{diag\_band\_by\_family.py}, whose outputs are kept beside them. + +\hypertarget{the-flat-regime-recognised-by-analogy}{% +\subsection{8. The flat regime, recognised by +analogy}\label{the-flat-regime-recognised-by-analogy}} + +§7.4 left one decision open: \emph{when to give the model up}. On the +pure powers \texttt{fun3}--\texttt{fun6} the right move is to halve, +Chandrupatla halves on up to all of his steps, and every reading of a +single state measured so far confuses ``the model is useless here'' with +something else. This section closes that decision, and the reading that +closes it is not a similarity of the current state to a prototype but a +similarity of the run to \emph{its own past} --- an analogy in Pólya's +sense {[}8{]}, two situations agreeing in more than one relation. Every +rule below was pre-registered before its code and its run, with a stop +rule; the rejected ones are listed in §10 with their numbers. + +\hypertarget{the-flag-a-promise-that-was-not-kept}{% +\subsubsection{8.1 The flag: a promise that was not +kept}\label{the-flag-a-promise-that-was-not-kept}} + +A tangent step on an approach of local order \(m\) lands at \(e(1-1/m)\) +and leaves the residual \(r=|f_\text{new}/f_\text{old}|=(1-1/m)^m\) on +the same side of the root. It beats a halving exactly when +\(|1-1/m|<\tfrac12\), that is for \(\tfrac23\tfrac12\). Three choices are +declared rather than derived: the multiplier \(c\) of the projection +(§3.1), the Euclidean geometry of the \((\xi,\varphi)\) plane, and the +pattern test of the step lengthening (lags from 2 to half the history, +threshold \(\tfrac12\)). The projection carries the guarantee, +\(2\lceil\log_2(w_0/\varepsilon_x)\rceil+3\) evaluations; it is verified +with no violation on every corpus of this paper and under every +safeguard of the grid. + +\textbf{Table 8.} A′ on the protocol of §4 (published roots, failures +charged 200). Per problem against each rival: wins/ties/losses, exact +two-sided sign test. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +APS-154 +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +CHA-45 +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +both +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +vs A′ per problem, APS +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +vs A′ per problem, CHA +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{A′ (proposed)} & \textbf{2438} & \textbf{2005} & \textbf{4443} & +--- & --- \\ +A′, earned budget (no free constant) & 3608 & 2807 & 6415 & & \\ +base rule (§3) & 2806 & 3220 & 6026 & & \\ +Chandrupatla & 2787 & 2441 & 5228 & A′ 103/20/30, \(p=1.5\cdot10^{-10}\) +& A′ 29/4/7, \(p=3\cdot10^{-4}\) \\ +TOMS 748 & 2820 & 4000 & 6820 & A′ 127/6/20 & A′ 38/2/0 \\ +Brent & 2889 & 4115 & 7004 & A′ 118/17/18 & A′ 33/3/2 \\ +ITP, per-problem oracle & 3260 & 2647 & 5907 & A′ 126/7/20 & A′ +35/1/4 \\ +ModAB {[}10, 20{]} & 2914 & 2436 & 5350 & A′ 118/11/25 & A′ 32/9/4 \\ +\end{longtable} + +A′ is 12.5\% below Chandrupatla on the canonical set and 17.9\% below on +the wide-bracket set, and beats every rival problem by problem on both. +On the wide-bracket families it is ahead on seven of nine, level on +\texttt{fun7} (the scoring artefact of §7.3) and behind on +\texttt{fun9}, 65 against 55. The earned-budget form keeps its +constant-free guarantee of bisection plus one step and pays for it as in +§3.1. + +\textbf{Table 9.} Leave-one-out ablation of A′ on all six corpora of §9 +(uniform criterion, a sign change within \(10^{-6}\)). Δ = total without +the component − total with it; positive means the component earns its +place. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 14\tabcolsep) * \real{0.1250}} + >{\raggedright\arraybackslash}p{(\columnwidth - 14\tabcolsep) * \real{0.1250}} + >{\raggedright\arraybackslash}p{(\columnwidth - 14\tabcolsep) * \real{0.1250}} + >{\raggedright\arraybackslash}p{(\columnwidth - 14\tabcolsep) * \real{0.1250}} + >{\raggedright\arraybackslash}p{(\columnwidth - 14\tabcolsep) * \real{0.1250}} + >{\raggedright\arraybackslash}p{(\columnwidth - 14\tabcolsep) * \real{0.1250}} + >{\raggedright\arraybackslash}p{(\columnwidth - 14\tabcolsep) * \real{0.1250}} + >{\raggedright\arraybackslash}p{(\columnwidth - 14\tabcolsep) * \real{0.1250}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +component removed +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +APS +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +CHA +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +new-1 +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +Roots.jl +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +applied +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +fourth +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +sum +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +the whole regime & −7 & +1013 & +1660 & +324 & +77 & +2269 & +\textbf{+5336} \\ +the split (7) (midpoint instead) & −5 & +479 & +667 & +272 & +30 & +1672 +& \textbf{+3115} \\ +overshoot branch & −6 & 0 & −7 & +16 & +63 & +893 & +959 \\ +tolerance step (borrowed) & +130 & +35 & +97 & +78 & +135 & −2 & +473 \\ +the half the step promises & +249 & +65 & +82 & −16 & −5 & +1 & +376 \\ +translation limit & +31 & +143 & +100 & −21 & −2 & +87 & +338 \\ +repeated step pattern & −22 & −6 & +123 & −30 & −10 & +34 & +89 \\ +sign contradiction & +11 & −12 & +29 & 0 & +1 & −1 & +28 \\ +\end{longtable} + +Every component is positive in sum; the regime and the split carry the +method. Two are marginal and we say so: the step pattern earns on two +corpora of six and loses on four, and the sign contradiction is within +noise (+28 over 855 problems). Removing both would change A′'s total by +under one per cent (117 of 13032 evaluations); they are kept because the +pre-registered rule removes only a component that earns nowhere. + +\textbf{Table 9a.} The similarity in the step of A′: the same method +with each of the nine similarity functions of §5.3 in place of the tent, +everything else unchanged. Totals on the protocol of §4 and over the six +corpora of §9 (uniform criterion); the guarantee holds with every +function. + +\begin{longtable}[]{@{}lll@{}} +\toprule\noalign{} +\(S\) in the step & APS + CHA & six corpora (855) \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{tent \(1-|z|\) (A′)} & \textbf{4443} & \textbf{13032} \\ +\(e^{-|z|}\) & 4988 & 14142 \\ +\(1/(1+|z|)\) & 5486 & 14843 \\ +\((1+|z|)^{-2}\) & 8360 & 28500 \\ +\(1-\sqrt{|z|}\) & 12718 & 45552 \\ +\(1-|z|^{1/3}\) & 17207 & 63031 \\ +\(e^{-z^2}\) & 18410 & 67701 \\ +\(1/\sqrt{1+z^2}\) & 18412 & 67854 \\ +\(1/(1+z^2)\) & 18422 & 67394 \\ +\end{longtable} + +The similarity in the step earns its place in the proposed method as it +did in the base rule: the nearest other function costs 12\% more on the +canonical protocol and 9\% more over the six corpora, the functions that +approach 1 quadratically cost four to five times more, and the ranking +is the one the contraction law of §2.2 predicts, the three functions +with a linear approach first and the three with a quadratic approach +last. + +\hypertarget{what-is-known-and-what-is-new}{% +\subsubsection{8.6 What is known, and what is +new}\label{what-is-known-and-what-is-new}} + +Several mechanisms of A′ coincide with classical ones, and the +coincidence is worth stating, because they were not taken from the +literature but reached from the principles of the paper --- similarity +to a prototype and analogy as similarity of relations --- and recognised +afterwards: + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +in A′ +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +classical counterpart +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +the three-point order estimate of §7.1 & Lagouanelle's multiplicity +estimate \(m=f'^2/(f'^2-ff'')\) {[}13{]} \\ +the contraction \(e(1-1/m)\) behind the flag of §8.1 & multiplicity +estimates from successive Newton iterates {[}14, 15{]} \\ +the order (6) of an analogous pair & the log--log slope of a power law; +the (approximate) computational order of convergence {[}18, 19{]} \\ +the split (7) & false position on \(\operatorname{sign}(f)|f|^{1/m}\) +{[}16, 17{]} \\ +the half the step promises & a relative of Brent's acceptance condition +{[}2{]} \\ +the tolerance step & Dekker {[}9{]}, Brent {[}2{]} --- borrowed and +named as such \\ +the exit judgment of §8.2 (the value at a split against the line) & +ModAB's linearity check at the midpoint {[}10, 20{]}, +\(|y_m-y_3|1$ on $27.9\%$ of steps with excursions to -$m=34.8$, against $35.8\%$ on the flat families. $27.9$ against $35.8$ is no -separation. A cruder variant, correcting by the fraction of its own promise -the previous step kept, fails everything: the order collapses to $0.904$ and -the standard problems double to $161$. - -\item \textbf{One problem defeats every method}, \texttt{aps.13.00}, -$f(x)=x e^{-1/x^2}$, all of whose derivatives vanish at the root and which -underflows to exactly zero throughout $|x|<0.086$; every method returns a -machine zero at distance up to $0.086$ from the root. -\item \textbf{The symmetric ratio similarity degenerates.} For -$S(x,y)=\min(|x|,|y|)/\max(|x|,|y|)$ with $y$ the target $0$, $S\equiv0$; the -only usable reading is $1-|f|/\sigma$, which saturates and stagnates -(Table~\ref{tab:law-check}, last row). +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + \textbf{New corpus 1} --- 206 problems: SciPy's \texttt{original} set + (6) and five generated classes of 40 (seed 20260921): smooth simple + roots, transcendental simple roots, multiple roots \(|x-r|^p\) with + \(p\sim U(2,20)\), exponential flanks, and near-cancelling terms of + the \texttt{fun9} kind. +\item + \textbf{Roots.jl / ModAB} --- the published bracketing benchmark of + the Julia package Roots.jl {[}12{]}, taken from the ModAB benchmark of + Ganchovski and Traykov {[}10{]}: 91 problems, of which 13 coincide + with APS or Chandrupatla functions (a seven-point identity test) and + are excluded, leaving 78, many of them discontinuous or pathological. +\item + \textbf{Applied and GSL} --- the 10 bracketed problems of the GNU + Scientific Library's root-finding test suite {[}11{]} and 122 + equations from physics and engineering on grids fixed beforehand: + Kepler's equation (eccentricity up to 0.999), Colebrook--White, + Lambert's W, Planck/Wien, van der Waals for CO₂ (including + near-critical), internal rate of return, the finite square well. +\item + \textbf{Corpus 4} --- 240 problems in six new families (seed + 20260922): random polynomials with a simple root, polynomials with a + multiple root, fractional powers \(|x-r|^p\) with + \(p\sim U(0.15,0.95)\), sums of exponentials and sines, compositions + \(\tanh\), \(\arctan\), \(\log(1+q^2)\) of a cubic, and functions odd + about the root. The code of A′ was committed \emph{before} this corpus + was run, and nothing was changed after. \end{enumerate} -\section{Conclusion} +ModAB, the most recent bracketing method we know of, is run from its +authors' package (\texttt{pymodab} 1.0.9, a wrapper of their C code) +with the stopping rule of every other method --- a bracket no wider than +\(\varepsilon_x\), the relative term at machine precision, no stopping +on \(|f|\) --- and counted by the same wrapper around \(f\), whose count +agrees with the package's own. Where roots are not known in closed form, +and for uniformity on all six corpora, a run is solved when \(f\) +changes sign within \(10^{-6}\) of its answer; the \(x\)-tolerance, the +budget and the charge for a failure are those of §4. + +\textbf{The history is part of the result.} The variant carried to +corpora 1--3 was A′ without the tolerance step and the overshoot branch. +It transferred to corpus 1 by every pre-registered criterion (total 10\% +below Chandrupatla, per problem 105/34/67, \(p=0.005\)), did \emph{not} +transfer to Roots.jl (total 6.5\% below, but per problem 38/10/30, +\(p=0.4\)) and lost on the applied corpus (14\% above). The losses there +were traced to two gaps of the base step --- no closing of the bracket +once the root is reached, and no recognition of roots of order below one +--- which became the last two readings of §8.4; they were developed on +the seen corpora and tested once, on corpus 4. + +\textbf{Table 10.} A′ against the library rivals on all six corpora +(uniform criterion): total evaluations; in brackets the runs that break +the \(2\times\)-bisection bound. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.2619}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1429}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1667}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1429}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1429}} + >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1429}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +corpus +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +A′ +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +Chandrupatla +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +ModAB +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +Brent +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +TOMS 748 +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +APS (154) & \textbf{2259} (0) & 2595 (0) & 2726 (0) & 2707 (0) & 2636 +(0) \\ +Chandrupatla (45) & \textbf{1074} (0) & 1505 (0) & 1681 (0) & 3238 (18) +& 3088 (15) \\ +new corpus 1 (206) & \textbf{3290} (0) & 3716 (0) & 3809 (1) & 6395 (38) +& 5746 (22) \\ +Roots.jl (78) & \textbf{1371} (0) & 1566 (0) & 1446 (0) & 2455 (11) & +2339 (9) \\ +applied + GSL (132) & 1382 (0) & 1382 (0) & 1460 (0) & 1503 (1) & 1756 +(1) \\ +\textbf{corpus 4 (240), the one test} & \textbf{3656} (0) & 5717 (0) & +5535 (8) & 8267 (50) & 8084 (37) \\ +all 855 & \textbf{13032} & 16481 & 16657 & 24565 & 23649 \\ +\end{longtable} + +\textbf{Table 10b.} The same runs problem by problem: A′'s +wins/ties/losses against Chandrupatla and against ModAB (exact two-sided +sign test). + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.3333}} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.4545}} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.2121}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +corpus +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +A′ vs Chandrupatla +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +A′ vs ModAB +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +APS (154) & 103/20/31, \(p=3\cdot10^{-10}\) & 118/10/26 \\ +Chandrupatla (45) & 31/4/10, \(p=0.001\) & 34/4/7 \\ +new corpus 1 (206) & 108/33/65, \(p=0.001\) & 125/26/55 \\ +Roots.jl (78) & 44/14/20, \(p=0.004\) & 47/11/20 \\ +applied + GSL (132) & 48/52/32, \(p=0.09\) & 76/35/21 \\ +\textbf{corpus 4 (240), the one test} & \textbf{177/35/28, +\(p=10^{-27}\)} & \textbf{183/23/34} \\ +\end{longtable} + +Only the last line of corpora is evidence for A′ in the strict sense; +the first five were seen while it was developed and are reported as a +description. On corpus 4 A′ is 36\% below Chandrupatla and wins 177 +problems to 28. Without the two classes aimed at by the last two +readings it is 2403 against 3569, per problem 107/31/22 +(\(p=10^{-14}\)); on the simple-root classes alone, 737 against 747 +(−1.3\%), per problem 43/22/15 (\(p=3\cdot10^{-4}\)). + +\textbf{Table 11.} Corpus 4 by class: totals of A′ / Chandrupatla, per +problem wins/ties/losses. + +\begin{longtable}[]{@{}llll@{}} +\toprule\noalign{} +class & A′ & Chandrupatla & per problem \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +random polynomial, simple root & 433 & 419 & 20/8/12 \\ +polynomial, multiple root & 1163 & 1805 & 39/1/0 \\ +fractional power, \(p<1\) & 924 & 1784 & 37/1/2 \\ +sums of exponentials and sines & 304 & 328 & 23/14/3 \\ +\(\tanh\), \(\arctan\), \(\log(1+q^2)\) of a cubic & 503 & 1017 & +25/8/7 \\ +odd about the root & 329 & 364 & 33/3/4 \\ +\end{longtable} + +\textbf{What the evidence supports, and what it does not.} Against Brent +and TOMS 748 A′ is ahead on every corpus, by 8\% to 67\% in total, and +it keeps its bound on all 855 problems, which Brent breaks on 118 and +TOMS 748 on 84. Against ModAB it is ahead on every corpus, in total and +problem by problem (\(p\le0.0013\)), on the one test of corpus 4 by 3656 +to 5535 and 183 problems to 34 (\(p=7\cdot10^{-26}\)), and on ModAB's +own benchmark as well --- all 91 problems of it, 1507 against 1588, +56/13/22 (\(p=1.5\cdot10^{-4}\)); ModAB breaks the bound on 9 problems. +Against Chandrupatla it is ahead in total on five corpora and level on +the sixth, and ahead problem by problem on all six, significantly on +five. The size of the lead is not uniform: it is large on multiple, +fractional and nearly flat roots --- the regime §8 recognises --- and +small on simple roots, where it is a matter of per cent. Where it is +behind is named: \texttt{fun9} (65 against 55), the near-cancelling +class of corpus 1 (491 against 391), random polynomials with a simple +root in total (433 against 419, though ahead 20 to 12 in problems), and +the smooth equations of the applied corpus, where the two are level. + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\hypertarget{negative-results}{% +\subsection{10. Negative results}\label{negative-results}} + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + \textbf{The prototype-aggregation form of the method loses.} A richer + construction --- prototypes over \emph{pairs} of evaluated points, + softmax weights over the whole memory, similarity on both the value + and the abscissa axis --- leads on eight hand-picked problems but + loses decisively on the real set: 0 wins, 6 ties and 147 losses + against Brent. The simplest form of the idea won. +\item + \textbf{Every safeguard that replaces the step destroys the order.} + Bracket-based and step-based replacement both drop the three-point + rule from order 1.94 to 1.00 and cost 7260 and 7239 evaluations on + Alefeld--Potra--Shi. Only projection preserves both. We record this + because it is the trap the construction naturally falls into. +\item + \textbf{Zero slack in the projection is not the degenerate case it was + said to be.} An earlier version reported that a worst case of exactly + bisection leaves the projection no freedom and makes the guard behave + as bisection. Measured (Table 1a), multiplier 1 costs 4817 and 2997, + against bisection's 7530 and 3090 --- and on the wide-bracket set it + beats the multiplier of 2. It remains the most expensive multiplier on + the canonical set, which is all that survives of the claim. +\item + \textbf{Regimes exist, at the level of a function family, and cannot + be exploited by a switch.} The cube-root similarity beats the base + rule on all five members of Chandrupatla's \texttt{fun4} --- + 32/32/40/47/59 against 89/93/113/125/153, a factor of 2.6 --- and + consistency across a family at different parameters is the signature + of structure rather than luck. But the same similarity over the whole + Chandrupatla set costs 4109 against 3220, so a switch chosen per + benchmark is worse than no switch at all: 6915 against 6026 over both + sets. The scale axis offers only 5.3\% headroom even to an oracle + handed the best scale per problem, two thirds of it inside a single + problem family, and the winners are not separated by anything the + method can see before it commits --- the derived scale wins on bracket + widths from \(10^0\) to \(10^{12}\). +\item + \textbf{The phase detector: derivation sound, estimator not.} Redoing + the contraction law without the assumption \(|f|\approx|f'(r)|e\) --- + taking \(|f|\approx K e^m\) instead --- does produce the march + exponent on its own, \(p = L/(L-\ln m)\) with \(L=\ln(e/D)\), giving + \(p=1\) at a simple root and dropping to 0.50 and 0.23 as the approach + flattens, which is the neighbourhood of the cube root that wins those + families. Substituted back it collapses to the multiplier \(m\), + measurable as \(m = 1/(1-\theta)\) with \(\theta = f f''/(f')^2\) from + three divided differences and no constant --- which is Lagouanelle's + multiplicity estimate {[}13{]}. It preserves the order (2.001) and + improves the eight standard problems (82 against 84) --- and loses on + the full benchmark, 6304 against 6026. The estimator is the failure: + on Alefeld--Potra--Shi, where almost every root is simple and the + truth is \(m=1\), it reports \(m>1\) on 27.9\% of steps with + excursions to \(m=34.8\), against 35.8\% on the flat families. 27.9 + against 35.8 is no separation. A cruder variant, correcting by the + fraction of its own promise the previous step kept, fails everything: + the order collapses to 0.904 and the standard problems double to 161. +\item + \textbf{One problem is scored unsolved for every method}, + \texttt{aps.13.00}, \(f(x)=x e^{-1/x^2}\), all of whose derivatives + vanish at the root and which underflows to exactly zero throughout + \(|x|<0.086\). Every method returns a point where \(f(x)=0\) exactly + --- a genuine root --- which the harness scores as a failure because + it lies more than \(10^{-6}\) from the declared root. It is a property + of the scoring, not a failure of the methods; §7.3 finds five more + such problems in the wide-bracket set. +\item + \textbf{The symmetric ratio similarity degenerates.} For + \(S(x,y)=\min(|x|,|y|)/\max(|x|,|y|)\) with \(y\) the target 0, + \(S\equiv0\); the only usable reading is \(1-|f|/\sigma\), which + saturates and stagnates (Table 1, last row). +\item + \textbf{Placement beats form, and the wrong placement is expensive.} + The same ``refuse before the step'' idea as reading (1) of §7, with + refusal decided by \emph{promised bracket progress} instead of by the + shape of the model, costs 4449 on the canonical set against 2527 --- a + difference of 1922 evaluations for one choice of criterion. A secant + step routinely collapses the error while barely moving the proven + bracket, so bracket progress rejects steps that were excellent; this + is the same mechanism that makes the bracket guard of §3.1 cost 7260. +\item + \textbf{Making the scale independent of the bracket does not help + either.} The natural objection to the derived scale is that it defeats + the very principle of a similarity step: with \(\sigma=|\hat f'|D\) + the normalised residual is \(|f|/(|\hat f'|D)\), which on the + \(2\times10^4\)-wide bracket of \(x^3-2x-5\) at \(x=10^4\) equals + 0.167, so \(S=0.833\) --- ``similar'' --- and the step is small + although the root is some five thousand step-lengths away. The + similarity is reading what fraction of the \emph{bracket} the Newton + step is, not how far the iterate is from the root. Selecting the scale + between the two quantities already computed, + \(\sigma=\min(|\hat f'|D,\max(|f(A)|,|f(B)|))\) --- no new constant, a + minimum over what is in hand --- does give a full-bracket step far + away and Newton's step near the root, and on eight hand-picked wide + problems it improves 403 evaluations to 390. Over the whole grid it is + worse on both sets: 3288 on the canonical set against 2726, and 3111 + on the wide-bracket set against 2695. Its apparent extra solves (194 + instead of 193) are two \texttt{fun7} problems where it lands inside + the flat zero region close enough to satisfy the harness --- the + artefact of §7.3, not a capability. +\item + \textbf{Reading the similarity at the measured order does not cure + false position.} Since false position's stall is a similarity read at + order one (§7.1), the obvious hope is that reading it at the measured + order is the parameter-free version of the classical fix. It is not. + Unguarded, the correction takes the far-end reading from 127/154 and + 10676 to 128/154 and 10043 --- one problem and six per cent --- where + Illinois, at the price of one constant (halve the stale ordinate), + reaches 153/154 and 7045. A sixth of the gap is not the gap. The + correction is real and it is in the right place; it is simply much + smaller than a constant that was chosen for exactly this failure. + \emph{Our} 10676 and the 10560 of Table 2 are not the same algorithm + --- our iterate starts at the midpoint of the bracket, plain false + position at an end --- and the two must not be differenced. +\item + \textbf{A logarithmic change of variable does not buy the wide + brackets.} Working in + \(u=\operatorname{sign}(x-c)\log(1+|x-c|/\varepsilon_x)\) makes the + step multiplicative, which looked like the right diagnosis of the flat + families --- for the same similarity, scale and safeguard + (\((1+|z|)^{-2}\), two-point, \emph{safe}) the wide-bracket set + improves from 3695 to 3541 --- but the canonical set gets worse, 5822 + to 6940, against the 2806 of the base rule. An earlier version + compared the 3541 with 4516, which is the total of a different + configuration. A march needs a \emph{ratio} of distances while an + identity on narrow brackets needs an \emph{absolute} unit, and no + parameter-free unit provides both. §7.4 shows the diagnosis itself was + wrong: on the flat families the right move is to halve, not to march. +\item + \textbf{Reading the unkept promise one step at a time does not pay.} + The flag of §8.1 sees the flat regime, but a halving in place of each + flagged step takes the canonical set from 2806 to 3029 and the + wide-bracket set only from 3220 to 3198: a simple root far from + convergence breaks its promises too. Requiring the promise to fail + twice in a row keeps the canonical set (2803) but fires one step late, + before the crossing, and replaces the most useful step of the cycle + (wide brackets 3341); requiring a creep in one direction as well gives + 2878 and 3354. +\item + \textbf{A halving that sticks once begun wins the flat families and + loses everything else.} Without an exit the flat families fall to 1057 + --- pure bisection's level --- and the canonical set rises to 6897, + because a false entry now lasts to the end of the run. Splitting at + the order read from the failed promise, \((1-1/m)^m=r\), changes + nothing: that order is \(m=\infty\) in 163 of 174 entries (6781). +\item + \textbf{The model's own point cannot tell a flat root from a simple + one.} Judging the evaluated point against the line through the bracket + ends and against 0 --- the exit judgment of §8.2 --- also at + \emph{entry} gives 3009 and 2486 against 3125 and 2503 for the exit + alone: the model aims at the root, so \(f\) is small there by + construction and looks flat at a simple root as readily as at a power. + The same judgment works at a split, which the model did not choose. +\item + \textbf{The decision reading ``defect'' does not transfer.} Combined + with the regime it was the best configuration on the two development + sets (§7.2's canonical record 2523 with the flat families of §8), and + it passed every pre-registered criterion there. On new corpus 1 it did + not: per problem 95/33/78 against Chandrupatla (\(p=0.22\)), losing + the class of exponential flanks 9 to 26. It is therefore not part of + A′. +\item + \textbf{A component rejected alone can pay in combination.} + Remembering the analogy for the run was rejected by its own + pre-registration (canonical set 2814 against 2806 without the regime), + and with the split of §8.3 it is the better form (with the step + pattern, wide brackets 2117 against 2221 for the analogy read in one + state). Composition was measured, not assumed, throughout --- which is + also why §7's readings (2) and (3), each an improvement, are not + combined. +\end{enumerate} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\hypertarget{conclusion}{% +\subsection{11. Conclusion}\label{conclusion}} A root finder can be derived from a similarity function alone, and the -derivation shows where the content of such a method actually sits. It is not in -the shape of $S$ --- nine shapes were tried and their ranking is dictated by a -single number, the slope of $1-S$ at the origin. It is not in making the -similarity change faster --- that overshoots exactly as readily as flatness -stagnates. It is in the \emph{scale} against which similarity is judged: -chosen, the method is brittle and merely linear; taken from the bracket, it is -false position and three centuries old; read off the data, it is superlinear. -And the safeguard that makes such a method safe must project the step, not -replace it: replacing costs the order, projecting costs nothing on one -benchmark and improves the method on the other. +derivation shows where the content of such a method actually sits. It is +not in the shape of \(S\) --- nine shapes were tried and their ranking +is dictated by a single number, the slope of \(1-S\) at the origin. It +is not in making the similarity change faster --- that overshoots +exactly as readily as flatness stagnates. It is in the \emph{scale} +against which similarity is judged: chosen, the method is brittle and +merely linear; taken from the bracket, it is false position and three +centuries old; read off the data, it is superlinear. And the safeguard +that makes such a method safe must project the step, not replace it: +replacing costs the order, projecting costs nothing on one benchmark and +improves the method on the other. The projection's budget multiplier is +a free constant, and we declare it: it does not move the canonical +result and it does move the wide-bracket one; projecting onto a budget +the steps earn instead removes it, at a measured price. -The resulting rule has no tuning constant and carries a worst case of twice -bisection plus one step. On the canonical Alefeld--Potra--Shi set it is level -with TOMS\,748 --- $2806$ evaluations against $2820$ is a margin of $0.5\%$ and -should be read as a tie --- and ahead of Brent by $2.9\%$, which it also beats -$102$ problems to $40$ head to head. The claim the measurements support is -parity with methods that carry tuned constants, not superiority over them. +The base rule has one declared constant and carries a worst case of +twice bisection plus one step. On the canonical Alefeld--Potra--Shi set +it is level with TOMS 748 and with Chandrupatla's method in total and +ahead of both problem by problem; on the wide-bracket set Chandrupatla +is genuinely stronger (2441 against 3220). §7.4 locates the cause: not +the order of the model but the decision to give it up, which +Chandrupatla takes by halving and which no reading of a single state +takes correctly for our step. -This is the same movement as in parameter-free similarity control~\cite{sim}, -where membership functions are eliminated by normalising the input space from -the data rather than by choosing widths. Here the object normalised is the -value axis, and the price of choosing it by hand is measured rather than -asserted. +That decision is a similarity too --- of the run to its own past. A pure +power repeats its configuration under zoom, an exponential under +translation, a simple root tends to the line; the analogous pair reads +the local order, the order decides between the model and a halving by +bisection's own \(\tfrac12\), and it says where to split. The method +built on it, A′, is ahead of Chandrupatla on both canonical sets in +total and problem by problem, and on a corpus fixed after its code was +frozen it needs 36\% fewer evaluations and wins 177 problems to 28. The +claim the measurements support is a lead over Brent, TOMS 748 and ModAB +everywhere, with the guarantee they do not keep, and over Chandrupatla a +lead that is large where roots are multiple, fractional or nearly flat +and small where they are simple --- not superiority by the same margin +everywhere. \texttt{fun9}, near-cancelling terms and smooth applied +equations are where it is behind or level. -\subsection*{Future work} +This is the same movement as in parameter-free similarity control +{[}6{]}, where membership functions are eliminated by normalising the +input space from the data rather than by choosing widths. Here the +object normalised is the value axis, and the price of choosing it by +hand is measured rather than asserted. -The diagnosis of \S\ref{sec:widelimit} leaves one question, and it is narrower -than the one this section used to pose. An earlier version proposed a -logarithmic change of variable to turn an additive step into a geometric -march; that was measured and refuted (\S\ref{sec:widelimit} and the negative -results), and the step turned out to be a fraction of the bracket already. +\hypertarget{future-work}{% +\subsubsection{Future work}\label{future-work}} -What is open is a decision, not a model. On two thirds of the remaining gap -the right move is to halve, and Chandrupatla halves; our guarantee permits a -step that is slower than halving, and nothing we have measured tells our step -when it is. The condition itself is known exactly --- a tangent step on an -approach of local order $m$ lands at $e(1-1/m)$ and loses to a halving when -$m\ge2$ --- so the constant is bisection's $\tfrac12$ and not a choice. What is -missing is a reading of $m$ that sees it: the three-point estimator reports -$m\ge2$ on $0.2\%$ of canonical states, which is the right silence, and on -$5.8\%$ of states of pure powers of order $3$ to $19$, which is blindness. Two -successive residuals of the run itself carry the order more directly than a -parabola through three points --- on an order-$m$ approach under tangent steps -their ratio settles at $(1-1/m)^m$, while at a simple root it goes to zero --- -and that is the reading we would test next, under the same rule as every other -here: pre-registered, with the canonical set as the price it must not charge. +Two questions remain, both narrower than the one this section used to +pose. -\begin{thebibliography}{9} -\bibitem{aps} G.~E. Alefeld, F.~A. Potra and Y.~Shi, ``Algorithm 748: Enclosing -zeros of continuous functions,'' \emph{ACM Trans.\ Math.\ Softw.}, vol.~21, -no.~3, pp.~327--344, 1995. -\bibitem{brent} R.~P. Brent, \emph{Algorithms for Minimization without -Derivatives}. Englewood Cliffs, NJ: Prentice-Hall, 1973. -\bibitem{chandrupatla} T.~R. Chandrupatla, ``A new hybrid quadratic/bisection -algorithm for finding the zero of a nonlinear function without using -derivatives,'' \emph{Adv.\ Eng.\ Software}, vol.~28, no.~3, pp.~145--149, 1997. -\bibitem{itp} I.~F.~D. Oliveira and R.~H.~C. Takahashi, ``An enhancement of the -bisection method average performance preserving minmax optimality,'' -\emph{ACM Trans.\ Math.\ Softw.}, vol.~47, no.~1, pp.~1--24, 2021. -\bibitem{ridders} C.~Ridders, ``A new algorithm for computing a single root of -a real continuous function,'' \emph{IEEE Trans.\ Circuits Syst.}, vol.~26, -no.~11, pp.~979--980, 1979. -\bibitem{sim} V.~Sitnikov, ``Parameter-free similarity control,'' preprint, -2026. -\bibitem{dowell} M.~Dowell and P.~Jarratt, ``A modified regula falsi method for -computing the root of an equation,'' \emph{BIT}, vol.~11, pp.~168--174, 1971. -\end{thebibliography} +The first is the steep flank. Where the loss remains --- \texttt{fun9}, +the near-cancelling class, 4 − tan x at its pole --- the base step +approaches along a flank far steeper than its model, and the half +contradiction of §8.4 removes only part of the cost. The second is the +one geometric choice of §8.2, the Euclidean metric of the +\((\xi,\varphi)\) plane: a metric derived from the configuration's own +sensitivity would remove it. + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\hypertarget{references}{% +\subsection{References}\label{references}} + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + G. E. Alefeld, F. A. Potra and Y. Shi, ``Algorithm 748: Enclosing + zeros of continuous functions,'' \emph{ACM Trans. Math. Softw.}, + vol.~21, no. 3, pp.~327--344, 1995. +\item + R. P. Brent, \emph{Algorithms for Minimization without Derivatives}. + Englewood Cliffs, NJ: Prentice-Hall, 1973. +\item + T. R. Chandrupatla, ``A new hybrid quadratic/bisection algorithm for + finding the zero of a nonlinear function without using derivatives,'' + \emph{Adv. Eng. Software}, vol.~28, no. 3, pp.~145--149, 1997. +\item + I. F. D. Oliveira and R. H. C. Takahashi, ``An enhancement of the + bisection method average performance preserving minmax optimality,'' + \emph{ACM Trans. Math. Softw.}, vol.~47, no. 1, pp.~1--24, 2021. +\item + C. Ridders, ``A new algorithm for computing a single root of a real + continuous function,'' \emph{IEEE Trans. Circuits Syst.}, vol.~26, no. + 11, pp.~979--980, 1979. +\item + V. Sitnikov, ``Parameter-free similarity control,'' preprint, 2026. +\item + M. Dowell and P. Jarratt, ``A modified regula falsi method for + computing the root of an equation,'' \emph{BIT}, vol.~11, + pp.~168--174, 1971. +\item + G. Pólya, \emph{How to Solve It}. Princeton, NJ: Princeton University + Press, 1945. +\item + T. J. Dekker, ``Finding a zero by means of successive linear + interpolation,'' in B. Dejon and P. Henrici (eds.), \emph{Constructive + Aspects of the Fundamental Theorem of Algebra}. London: + Wiley-Interscience, 1969, pp.~37--51. +\item + N. Ganchovski and A. Traykov, ``Modified Anderson-Björck's method for + solving non-linear equations in structural mechanics,'' \emph{IOP + Conf. Ser.: Mater. Sci. Eng.}, vol.~1276, 012010, 2023. +\item + M. Galassi et al., \emph{GNU Scientific Library Reference Manual}, 3rd + ed.~Network Theory, 2009; root-finding test suite + \texttt{roots/test.c}. +\item + J. Verzani et al., \emph{Roots.jl}, Julia package; bracketing + benchmark \texttt{test/benchmark-bracketing-methods.jl}, commit + cf1d256, 2026. +\item + J. L. Lagouanelle, ``Sur une méthode de calcul de l'ordre de + multiplicité des zéros d'un polynôme,'' \emph{C. R. Acad. Sci. Paris + Sér. A}, vol.~262, pp.~626--627, 1966. +\item + L. B. Rall, ``Convergence of the Newton process to multiple + solutions,'' \emph{Numer. Math.}, vol.~9, pp.~23--37, 1966. +\item + E. Hansen and M. Patrick, ``Estimating the multiplicity of a root,'' + \emph{Numer. Math.}, vol.~27, pp.~121--131, 1976. +\item + E. Schröder, ``Ueber unendlich viele Algorithmen zur Auflösung der + Gleichungen,'' \emph{Math. Ann.}, vol.~2, pp.~317--365, 1870. +\item + J. F. Traub, \emph{Iterative Methods for the Solution of Equations}. + Englewood Cliffs, NJ: Prentice-Hall, 1964. +\item + S. Weerakoon and T. G. I. Fernando, ``A variant of Newton's method + with accelerated third-order convergence,'' \emph{Appl. Math. Lett.}, + vol.~13, pp.~87--93, 2000. +\item + A. Cordero and J. R. Torregrosa, ``Variants of Newton's method using + fifth-order quadrature formulas,'' \emph{Appl. Math. Comput.}, + vol.~190, pp.~686--698, 2007. +\item + N. Ganchovski, O. Smith, C. Rackauckas, L. Tomov and A. Traykov, + ``Improvements to the Modified Anderson--Björck (modAB) root-finding + algorithm,'' \emph{Algorithms}, vol.~19, 332, 2026; package + \texttt{pymodab} 1.0.9. +\end{enumerate} \end{document} diff --git a/build_tex.py b/build_tex.py new file mode 100644 index 0000000..6f356fa --- /dev/null +++ b/build_tex.py @@ -0,0 +1,93 @@ +"""Regenerate article/sim_numerics.tex (and the PDF) from the canonical article/sim_numerics.md. + +The .md is the text; the .tex is a build product and is never edited by hand. Title, author +and abstract become pandoc metadata; the body is converted as it stands (section numbers are +part of the headings, so LaTeX numbering is off). Unicode that pdflatex does not know is +declared in the header. Run on the server (pandoc 3.1.3, pdflatex): + + python -u build_tex.py -> article/sim_numerics.tex, article/sim_numerics.pdf +""" +from __future__ import annotations + +import json +import os +import subprocess +import sys + +MD = "article/sim_numerics.md" +TEX = "article/sim_numerics.tex" + +HEADER = r""" +\usepackage{amsmath,amssymb} +\usepackage{textcomp} +\DeclareUnicodeCharacter{2032}{\ensuremath{'}} +\DeclareUnicodeCharacter{2212}{\ensuremath{-}} +\DeclareUnicodeCharacter{00D7}{\ensuremath{\times}} +\DeclareUnicodeCharacter{00B5}{\textmu} +\DeclareUnicodeCharacter{2192}{\ensuremath{\rightarrow}} +\DeclareUnicodeCharacter{0394}{\ensuremath{\Delta}} +\DeclareUnicodeCharacter{2082}{\textsubscript{2}} +\usepackage[margin=2.5cm]{geometry} +\usepackage[htt]{hyphenat} +\setlength{\emergencystretch}{3em} +\usepackage{etoolbox} +\AtBeginEnvironment{longtable}{\small} +""" + +BANNER = ("%% GENERATED from article/sim_numerics.md by build_tex.py - do not edit by hand.\n" + "%% The .md is the canonical text; every number in it is checked by verify_article.py.\n") + + +def split_front(md): + lines = md.split("\n") + title = lines[0].lstrip("# ").strip() + rest = lines[1:] + author = next(ln.strip() for ln in rest if ln.strip()) + text = "\n".join(rest) + head, _, body = text.partition("## Abstract") + abstract, _, body = body.partition("\n---\n") + return title, author, abstract.strip(), body.lstrip("\n") + + +def main(): + with open(MD, encoding="utf8") as fh: + title, author, abstract, body = split_front(fh.read()) + meta = {"title": title, "author": author, "abstract": abstract, + "header-includes": HEADER, "documentclass": "article", + "classoption": ["11pt", "a4paper"]} + os.makedirs("build", exist_ok=True) + with open("build/meta.json", "w", encoding="utf8") as fh: + json.dump(meta, fh) + with open("build/body.md", "w", encoding="utf8") as fh: + fh.write(body) + subprocess.run(["pandoc", "build/body.md", "--metadata-file=build/meta.json", "-s", + "-f", "markdown+tex_math_dollars+pipe_tables", "-t", "latex", + "-o", "build/body.tex"], check=True) + with open("build/body.tex", encoding="utf8") as fh: + tex = fh.read() + with open(TEX, "w", encoding="utf8") as fh: + fh.write(BANNER + tex) + for _ in range(2): + r = subprocess.run(["pdflatex", "-interaction=nonstopmode", "-halt-on-error", + "-output-directory", "article", TEX], + capture_output=True, text=True) + log = open("article/sim_numerics.log", encoding="utf8", errors="replace").read() + errors = [ln for ln in log.splitlines() if ln.startswith("!")] + # only undefined references / citations count; 'Font shape ... undefined' is a font + # substitution warning, not a defect of the text + undefined = [ln for ln in log.splitlines() + if "undefined" in ln.lower() and ("reference" in ln.lower() + or "citation" in ln.lower())] + overfull = sum(1 for ln in log.splitlines() if ln.startswith("Overfull")) + pages = next((ln for ln in log.splitlines() if "Output written" in ln), "no output") + print(f"pdflatex exit {r.returncode}; errors {len(errors)}; undefined {len(undefined)}; " + f"overfull boxes {overfull}") + for ln in errors[:10] + undefined[:10]: + print(" ", ln) + print(pages) + print("build done") + sys.exit(0 if r.returncode == 0 and not errors else 1) + + +if __name__ == "__main__": + main() diff --git a/fix_md_for_latex.py b/fix_md_for_latex.py new file mode 100644 index 0000000..75b345c --- /dev/null +++ b/fix_md_for_latex.py @@ -0,0 +1,31 @@ +"""Make the math of article/sim_numerics.md valid LaTeX as well as MathJax: a sub- or +superscript that starts with a bare control word (n_\\max) needs braces in LaTeX (n_{\\max}). +The rendered formula is identical. Reports what it finds; --apply writes. + + python -u fix_md_for_latex.py [--apply] +""" +from __future__ import annotations + +import re +import sys + +PATH = "article/sim_numerics.md" +# only argument-less control words (n_\max); a macro with an argument (x_\mathrm{far}, +# r_\text{new}) is valid LaTeX as written, and bracing it would detach its argument +PAT = re.compile(r"([_^])(\\[A-Za-z]+)(?![A-Za-z{])") + + +def main(): + with open(PATH, encoding="utf8") as fh: + text = fh.read() + hits = PAT.findall(text) + print(f"{len(hits)} bare control words in sub/superscripts:", sorted(set(h[1] for h in hits))) + if "--apply" in sys.argv: + text = PAT.sub(lambda m: f"{m.group(1)}{{{m.group(2)}}}", text) + with open(PATH, "w", encoding="utf8") as fh: + fh.write(text) + print("braced") + + +if __name__ == "__main__": + main()