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

64 lines
6.3 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 — два пробела базового шага: закрытие скобки и корни порядка < 1; проверка на 4-м корпусе
Составлено до кода и до прогона, ветка `signfix-and-gates`. Валерий: «пред-регистрируй и чини оба
пробела, проверка на четвёртом корпусе».
## Основание (`c2b0eea`, прикладной корпус)
1. **Нет закрытия скобки.** sin[3, 4]: корень достигнут за 7 вызовов (|f| ≈ 10⁻¹⁶), дальний конец
остался в 1.3·10⁻⁷ — ещё 17 делений до 10⁻¹². Чандрупатла ставит точку на допуск за корень.
2. **Корень порядка m < 1** (√|x|·sgn x): шаг перелетает и качается (+0.15, −0.10, +0.066 …,
сжатие ≈ 0.8), 84 против 4. Флаг видит только недолёт без смены знака; режим — только m ≥ 2.
## Правки (составляющие `close` и `sub` составного `prestep`)
**`close` — ЗАИМСТВОВАНО (Деккер 1969, Брент 1973), в статье называется так.** Если шаг модели
короче xtol/2, он заменяется шагом ровно xtol/2 в сторону дальнего конца: если модель права и
корень ближе xtol/2, новая точка оказывается за корнем и скобка сжимается до допуска.
xtol — допуск пользователя, ½ — константа деления; других констант нет.
**`sub` — вторая ветвь того же неравенства.** Касательный шаг на подходе порядка m уменьшает ошибку
по x в |1 − 1/m| раз; он проигрывает делению пополам при |1 − 1/m| > ½, т.е. при **m > 2** (недолёт —
уже используется) **или m < 2/3** (перелёт). `sub` добавляет вторую ветвь: плоский режим входит и
тогда, когда аналогичная пара читает **m ≤ 2/3**, а флаг — шаг модели с |f_new/f_old| ≥ ¼ **со сменой
знака** (перелёт; для недолёта флаг прежний). В режиме точка из порядка
t = |FA|^(1/m)/(|FA|^(1/m) + |FB|^(1/m)) — при m = ½ точна для чистой степени. Выход — прежний.
Правки добавляются к варианту **A** (Г2 + `contra+flatanalogmempt+exp+half`) → **A′** =
Г2 + `contra+flatanalogmempt+exp+half+close+sub`.
## Разработка — только на увиденных корпусах
Реализация, отладка и смоук — на APS, CHA, новом корпусе 1, Roots.jl и прикладном. Итоговый код A′
**коммитится до** прогона на четвёртом корпусе; после — никаких изменений.
## Проверка — четвёртый корпус (`corpus_fourth.py`, зерно 20260922, закоммичен сейчас)
240 задач, новые семейства по 40: D1 случайный многочлен (простой корень), D2 многочлен с кратным
корнем 3–9, **D3 дробная степень |x − r|^p, p ~ U(0.15, 0.95) — целевой для `sub`**, D4 суммы экспонент
и синусов, D5 композиции tanh/atan/log1p от кубики, **D6 нечётные относительно корня (sin, x + ax³,
arcsinh) — целевой для `close`**. Успех — смена знака в пределах 10⁻⁶; XTOL 10⁻¹², MAXFEV 200.
| # | ПРОЙДЕНО, если |
|---|---|
| **F1** | сумма A′ на корпусе 4 меньше, чем у Чандрупатлы |
| **F2** | по задачам против Чандрупатлы побед больше, чем поражений, знаковый тест p < 0.05 |
| **F3** | гарантия: 0 нарушений; решено не меньше, чем у Чандрупатлы |
| **F4** | правки заслужены: A′ дешевле A на корпусе 4; абляция — снять `close`, снять `sub` по одной, Δ сообщается |
«A′ переносится» — F1, F2, F3 одновременно. Сообщается также вывод **без целевых классов**
(D1, D2, D4, D5), против Брента и TOMS748, и A′ на всех увиденных корпусах (описательно).
## Поправка из разработки (до прогона на корпусе 4)
1. **`close` только для достоверного обещания:** шаг на xtol/2 делается, лишь если предыдущий шаг
модели сдержал своё обещание (|f| упала ниже порога флага ¼). Без этого на x¹⁹ из увиденного
набора в начале прогона наклон, в котором доминирует f(100) = 10³⁸, обещает корень в x = −10, и
закрытие заменяло середину почти повторными точками (23 → 32). Новой константы нет — тот же ¼.
2. ~~**Выход снимает и пологую память**~~ — **ОТМЕНЕНО** той же разработкой: правило выхода («ближе к
прямой, чем к нулю») отличает плоский корень от простого, но у корня порядка m < 1 f далеко от
нуля с обеих сторон — выход срабатывает ложно; сохранённая пологая память возвращает режим на
ближайшем перелёте (√|x|·sgn: 19 с памятью, 65 без). Пологая память выходом НЕ снимается.
Обе поправки сделаны на увиденных корпусах; корпус 4 ещё не запускался.