Files
sim-numerics/PREREG_modab_2026-09-21.md

46 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PREREG — сравнение с ModAB (модифицированный Андерсон–Бьорк)
Составлено до установки пакета и до прогона, ветка `signfix-and-gates`. Валерий: «пред-регистрируй и
проверяй сравнение с ModAB».
## Соперник — библиотека авторов, не наш перенос
ModAB [Ganchovski & Traykov 2023; Ganchovski, Smith, Rackauckas, Tomov, Traykov, *Algorithms* 19, 332,
2026] — берётся **официальный пакет авторов** `pymodab` 1.0.9 (PyPI; нативное расширение над их
C-кодом `C/src/ModAB.c`). Урок Чандрупатлы: своя реализация соперника несёт риск ошибки в его пользу
или против него; библиотеку читатель может проверить.
**Остановка — та же, что у всех.** ModAB останавливается, когда `x2 − x1 ≤ aTol + rTol·|x3|`, или на
точном нуле f; по малости |f| он не останавливается (прочитано в C-коде). Ставим `aTol = 10⁻¹²`,
`rTol = 8.9·10⁻¹⁶` — ровно те допуски, что получает библиотечный Чандрупатла. Вызовы f считает наша
обёртка (как у всех соперников); сверяется с `get_evaluation_count()` пакета. Бюджет: `max_iter = 200`;
прогон, потративший больше 200 вызовов, считается неудачей и оплачивается 200 (как у всех).
**A′ заморожен** (код `8027d7f` + исправление `_local_order`, которое A′ не затрагивает) и не меняется;
ModAB — тоже. Ничего не выбирается по результату.
## Где сравниваем
1. Протокол статьи (§4): APS 154, Chandrupatla 45, опубликованные корни.
2. Все шесть корпусов §9 с единым критерием (смена знака в пределах 10⁻⁶).
3. Отдельно — родной эталон ModAB: Roots.jl f01–f91 (из эталона авторов ModAB) — все 91 и 78 вне
выборки разработки.
## Критерии
| # | сообщается / ПРОЙДЕНО, если |
|---|---|
| **M1** | **корпус 4** (единственный, где A′ проверен один раз после заморозки): сумма A′ меньше, чем у ModAB, **и** по задачам побед больше, чем поражений, знаковый тест p < 0.05 |
| **M2** | каждый из шести корпусов и протокол статьи: суммы, по задачам (w/t/l, p) — сообщается |
| **M3** | гарантия: число нарушений границы 2⌈log₂(w/xtol)⌉ + 4 у ModAB — сообщается |
| **M4** | родной эталон ModAB (Roots.jl, 91 и 78): кто впереди — сообщается |
**Вывод «A′ лучше ModAB»** — только при M1; на остальных корпусах — описательно, по корпусу. Если
ModAB где-то сильнее, это пишется в статье так же, как про Чандрупатлу. В статью ModAB входит строкой в
таблицы 8 и 10 при любом исходе.
**Замечание, записано до прогона (приоритет).** Переключатель ModAB с деления на интерполяцию сравнивает
f в середине с прямой через концы, `|ym − y3| < k·(|y3| + |ym|)`, k = r² — та же идея, что наше
суждение выхода из режима (f в точке деления: ближе к прямой или к нулю). Это предшественник; в §8.6
называется независимо от исхода сравнения.