МЕТОДЫ ОПТИМИЗАЦИИ — ЛЕКЦИЯ 7
Классический метод и дихотомия

Требуется Python 3.10 или новее. Сторонние библиотеки не требуются.
Распакуйте все файлы в одну папку и откройте в ней терминал.

Общий пример из лекции:
  python run_examples.py
f(x)=x^2+2/x, [0.5,3], eps_x=0.05, delta=0.01.
Ожидается: x=1.01375, f≈3.000562059, radius=0.04875,
iterations=5, comparisons=5, n_f=11, status=converged.

Индивидуальный вариант:
  python run_examples.py --variant 7 --eps 1e-3
  python run_examples.py --variant 7 --eps 1e-4
Для вариантов по умолчанию delta=eps/4. Другой отступ:
  python run_examples.py --variant 7 --eps 1e-4 --delta 2e-5
Требуется 0 < delta < eps. delta — отступ от середины, расстояние проб 2*delta.
Для общего примера без --variant стандартный delta равен 0.01;
при уменьшении --eps также задайте подходящее --delta.

Файлы:
dichotomy.py — алгоритм с проверками и историей;
run_examples.py — запуск общего примера или варианта;
variants.json — параметры 18 индивидуальных вариантов;
README.txt — эта инструкция.

В текущей рабочей папке создаётся подпапка results_... с history.csv и summary.json.
CSV содержит старые границы, пробы и значения, новые границы, длину и радиус.
Повторный запуск тех же параметров обновляет соответствующие результаты.

Теория: функция должна быть строго унимодальной на исходном отрезке.
Код не может доказать это свойство по конечному набору значений.
Оценка radius предполагает достоверность сравнений функции и сохранение минимума.
Стандартная арифметика float не является строгой интервальной арифметикой.

Статусы:
converged — половина длины <= eps_x;
max_iter — предел числа сокращений;
precision_limit — точки неразличимы в машинной арифметике;
indistinguishable_values — значения проб совпали как float; отрезок не сокращается.
В последнем случае НЕ заявляется достижение eps_x. Даже для симметричной x^2
на [-1,1] этот статус ожидаем: аналитическое равенство можно доказать отдельно.
Для сложной функции совпадение float может быть следствием округления.

iterations — выполненные сокращения; comparisons — попытки сравнения пары;
n_f — все вычисления функции, включая окончательную середину.
При обычном успешном завершении n_f=2*iterations+1.

Проверены 36 расчётов (18 вариантов при двух допусках), сохранение точного
минимума в каждом отрезке, фактическая ошибка, формула длины и счётчики.
Также проверены граничные минимумы, негладкая унимодальная функция,
равные машинные значения, нулевой лимит и некорректные параметры.
