From 08ffa42e9818ac817bd9d7d3613c8b85fd19a9f5 Mon Sep 17 00:00:00 2001 From: Valeri Sitnikov Date: Mon, 21 Sep 2026 00:12:58 +0100 Subject: [PATCH] =?UTF-8?q?CORRECTION,=20prompted=20by=20Valeri:=20the=20s?= =?UTF-8?q?tep=20IS=20a=20fraction=20of=20the=20bracket=20=E2=80=94=20with?= =?UTF-8?q?=20the=20ratio=20similarity=201-S=20=3D=20min(1,|f|/(|f'|D))=20?= =?UTF-8?q?so=20step=20=3D=20min(D,|f|/|f'|)=20=E2=80=94=20and=20my=20'abs?= =?UTF-8?q?olute=20length=20cannot=20march'=20was=20wrong,=20as=20was=20th?= =?UTF-8?q?e=20follow-up=20guess=20that=20we=20creep=20along=20one=20side:?= =?UTF-8?q?=20measured,=2091.5%=20of=20our=20probes=20DO=20shrink=20the=20?= =?UTF-8?q?bracket,=20more=20often=20than=20Chandrupatla's=2087.5%.=20What?= =?UTF-8?q?=20differs=20is=20how=20much=20each=20probe=20removes:=200.93?= =?UTF-8?q?=20halvings=20per=20evaluation=20against=202.26.=20A=20linear?= =?UTF-8?q?=20model=20of=20the=20value=20axis=20undershoots=20on=20a=20wid?= =?UTF-8?q?e=20bracket=20of=20a=20convex=20function,=20so=20the=20new=20br?= =?UTF-8?q?acket=20is=20about=20half;=20inverse=20quadratic=20interpolatio?= =?UTF-8?q?n=20lands=20near=20the=20root=20and=20removes=20four=20fifths.?= =?UTF-8?q?=20The=20limit=20is=20the=20ORDER=20OF=20THE=20MODEL=20the=20si?= =?UTF-8?q?milarity=20is=20read=20against,=20and=20all=20three=20parameter?= =?UTF-8?q?-free=20ways=20round=20it=20are=20now=20measured=20failures=20(?= =?UTF-8?q?cbrt,=20log=20change=20of=20variable,=20derived3=5Fm).=20Paper?= =?UTF-8?q?=20corrected?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 --- article/sim_numerics.pdf | Bin 394179 -> 395497 bytes article/sim_numerics.tex | 37 ++++++++++---- diag_sign_flips.py | 104 +++++++++++++++++++++++++++++++++++++++ results_sign_flips.txt | 11 +++++ 4 files changed, 143 insertions(+), 9 deletions(-) create mode 100644 diag_sign_flips.py create mode 100644 results_sign_flips.txt diff --git a/article/sim_numerics.pdf b/article/sim_numerics.pdf index 8fe3ae269458d80884e242cfca80eae721ec9784..616b12a7e7f8cc216b8726382fb6f27770c0d31b 100644 GIT binary patch delta 28667 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 a=DtfBk_m@Ej>5~!%Y{rw_en(>`Tqd!`J9aa delta 27272 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 WLOK!Q$x(Q?xCN2v=w#L8kpByMm5B-f diff --git a/article/sim_numerics.tex b/article/sim_numerics.tex index c2d5ff0..ebddead 100644 --- a/article/sim_numerics.tex +++ b/article/sim_numerics.tex @@ -628,16 +628,35 @@ 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 cap is the step rule itself: $|f|/|f'|$ is an absolute length, and an -absolute length cannot march across decades. That is the same wall the fixed -fraction (\texttt{cbrt}) and the logarithmic change of variable each hit from a -different side, both buying the wide brackets at the price of the canonical set. +$44$. -So the limit is stated exactly: the placement of the similarity reading improves -the method up to the point where the \emph{form} of the derived step becomes the -binding constraint, and on brackets spanning many decades it does. Removing that -constraint means replacing the step the contraction law derives, which is a -different method rather than a better reading of this one. +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\%$. + +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. + +So the limit is stated exactly, and it is the \emph{order of the model the +similarity is read against}, not the placement of the reading and not the +guarantee. Three parameter-free ways round it have now 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. 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 diff --git a/diag_sign_flips.py b/diag_sign_flips.py new file mode 100644 index 0000000..fd33727 --- /dev/null +++ b/diag_sign_flips.py @@ -0,0 +1,104 @@ +"""Correcting the diagnosis: the step IS a fraction of the bracket, so what stalls? + +With S = ratio, 1 - S = min(1, |f|/(|slope| D)), hence step = min(D, |f|/|slope|): the step is +a FRACTION of the distance to the far end and the fraction is the similarity. So "an absolute +length cannot march" was wrong. + +The candidate mechanism instead: when the Newton length is much shorter than the bracket the +iterate creeps from ONE SIDE, the sign never changes, and the PROVEN bracket does not shrink +at all — only the guard's bisections shrink it. Chandrupatla, bisecting on 72% of steps and +placing its accepted probes by inverse quadratic interpolation, may instead CROSS the root +and collapse the bracket in one step. + +Measured here, per problem: the share of evaluations that flip the sign of f (i.e. actually +shrink the proven bracket), and the geometric bracket reduction per evaluation. + + python -u diag_sign_flips.py +""" + +from __future__ import annotations + +import math + +from scipy.optimize._tstutils import _CHANDRUPATLA_TESTS_DICTS + +from simroot.baselines import chandrupatla, chandrupatla_scipy +from simroot.pure import pure_root +from sweep_full import ACC, MAXFEV, XTOL + + +def traced_bracket(f, a, b): + """Replay a run's probes and count how many flipped the sign, plus the bracket history.""" + xs = [] + + def g(x): + v = f(x) + xs.append((x, v)) + return v + return g, xs + + +def replay(xs, a, b, fa, fb): + """Walk the probes in order, maintaining the proven bracket; count sign flips.""" + A, FA, B, FB = a, fa, b, fb + flips = 0 + widths = [abs(B - A)] + for x, v in xs: + if not (min(A, B) < x < max(A, B)): + continue + if FA * v < 0.0: + B, FB = x, v + flips += 1 if (FB * FA < 0.0) else 0 + else: + A, FA = x, v + widths.append(abs(B - A)) + return flips, widths + + +def run(method, f, a, b, root): + g, xs = traced_bracket(f, a, b) + try: + x, n, conv = method(g, a, b, XTOL, MAXFEV) + except Exception: + return None + x = float(x) + if not (conv and math.isfinite(x) and (abs(x - root) <= ACC or f(x) == 0.0)): + return None + fa, fb = f(a), f(b) + _flips, widths = replay(xs[2:], a, b, fa, fb) + # how often did a probe actually reduce the proven bracket, and by how much on average + reduced = sum(1 for i in range(1, len(widths)) if widths[i] < widths[i - 1] * 0.999) + halvings = (math.log2(widths[0] / max(widths[-1], 1e-300)) / max(len(xs), 1)) + return len(xs), reduced, 100.0 * reduced / max(len(xs), 1), halvings + + +def main(): + print(f"{'problem':<9} {'method':<14} {'evals':>6} {'probes that shrank':>19} " + f"{'share':>7} {'halvings/eval':>14}") + for d in _CHANDRUPATLA_TESTS_DICTS: + pid = str(d["ID"]) + if pid not in ("fun1.3", "fun1.4", "fun1.5", "fun3.1", "fun5.1"): + continue + f = d["f"] + a, b = (float(v) for v in d["bracket"]) + root = float(d["root"]) + ours = run(lambda ff, aa, bb, xt, mf: pure_root(ff, aa, bb, xt, mf, similarity="ratio", + scale="derived3", guard="safe", + prestep="slope", + direction="dissimilar"), + f, a, b, root) + best = None + for impl in (chandrupatla, chandrupatla_scipy): + r = run(impl, f, a, b, root) + if r and (best is None or r[0] < best[0]): + best = r + for nm, r in (("ours", ours), ("chandrupatla", best)): + if r is None: + print(f"{pid:<9} {nm:<14} (not scorable)") + continue + n, red, share, halv = r + print(f"{pid:<9} {nm:<14} {n:6d} {red:19d} {share:6.1f}% {halv:14.3f}") + + +if __name__ == "__main__": + main() diff --git a/results_sign_flips.txt b/results_sign_flips.txt new file mode 100644 index 0000000..ecd2636 --- /dev/null +++ b/results_sign_flips.txt @@ -0,0 +1,11 @@ +problem method evals probes that shrank share halvings/eval +fun1.3 ours 19 15 78.9% 2.498 +fun1.3 chandrupatla 15 13 86.7% 3.099 +fun1.4 ours 59 54 91.5% 0.930 +fun1.4 chandrupatla 24 21 87.5% 2.256 +fun1.5 ours 63 60 95.2% 1.179 +fun1.5 chandrupatla 44 41 93.2% 1.684 +fun3.1 ours 64 61 95.3% 0.672 +fun3.1 chandrupatla 44 42 95.5% 0.955 +fun5.1 ours 57 47 82.5% 0.741 +fun5.1 chandrupatla 44 42 95.5% 0.955