ЛЕКЦИЯ 13. ГРАДИЕНТНЫЙ МЕТОД

Python 3.10 или новее, NumPy, Matplotlib.
В терминале после распаковки:
  python -m pip install numpy matplotlib
  python gradient_method.py
  python gradient_method.py --example ill
  python gradient_method.py --variant 7
  python gradient_method.py --method fixed --alpha 0.4 --max-iter 12 --output results_unstable
  python gradient_method.py --method fixed --alpha 0.3333333333333333 --max-iter 12 --output results_boundary
В Windows вместо python можно использовать py.

По умолчанию сравниваются четыре стратегии:
small: постоянный шаг 0.1/L;
one_over_L: постоянный шаг 1/L;
best_constant: постоянный шаг 2/(m+L), оптимальный по худшему спектральному множителю;
armijo: alpha0=1, beta=0.5, sigma=0.1; каждая итерация начинает поиск снова с 1.
Здесь m и L — точные крайние собственные значения Гессиана квадратичной задачи.
Точный одномерный поиск не реализован: он относится к лекции 14.

Основной пример соответствует лекции 12, старт (3,0), минимум (1,-1), f*=3.
Пример ill: f=x1^2+25*x2^2, старт (2,1), минимум (0,0).
Все 18 вариантов сохраняют коэффициенты лекций 10–12, старт (s+2,t+1).

Отдельные режимы:
  python gradient_method.py --method fixed
  python gradient_method.py --method armijo
При fixed без --alpha используется 1/L.
--alpha разрешён только для fixed.
По умолчанию tol=1e-6, max_iter=5000; меняются через --tol и --max-iter.

В results_main, results_ill, results_variant_XX либо --output сохраняются:
summary.json — итоговые статусы, параметры, последняя запись и счётчики;
имя_iterations.csv — история принятых точек;
имя_trials.csv — все проверки шага, включая отклонённые пробы Армихо;
comparison.png — расстояние до минимума и норма градиента, 300 dpi.
Повторный запуск в ту же папку перезаписывает одноимённые файлы.

В строке k поле alpha ведёт к строке k+1. В конечной строке alpha отсутствует.
gap вычисляется как квадратичная форма относительно известного минимума,
а не вычитанием двух почти равных чисел f-f*. Эти сведения нужны для
учебной проверки и не участвуют в выборе шага или критерии остановки.
n_f и n_grad считают вычисления в алгоритме, без графиков и анализа.
Для fixed с K переходами оба счётчика равны K+1.
Для armijo n_f включает все отклонённые пробы.

Статусы:
gradient_tolerance — норма градиента не больше tol;
iteration_limit — исчерпан бюджет, точность не подтверждена;
stalled — новая точка совпала со старой в машинной арифметике;
nonfinite — переполнение или неконечные значения;
line_search_failed — за 60 проб не найден шаг Армихо.
Большой положительный alpha допускается намеренно для эксперимента
с расходимостью. Его допустимость проверяйте по условию 0<alpha<2/L.
При alpha=2/L возможны незатухающие колебания, при alpha>2/L — рост ошибки.
Код рассчитан на гладкие положительно определённые квадратичные задачи.
Нулевые ошибки пропускаются на логарифмическом рисунке, но сохраняются в CSV.
