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

4.1 KiB
Raw Blame History

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