46 lines
4.1 KiB
Markdown
46 lines
4.1 KiB
Markdown
# 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
|
||
называется независимо от исхода сравнения.
|