ЛЕКЦИЯ 10. МНОГОМЕРНАЯ ОПТИМИЗАЦИЯ И ГЕОМЕТРИЯ ЦЕЛЕВОЙ ФУНКЦИИ

Состав: geometry_2d.py, variants.json, README.txt.
Требуется Python 3.10 или новее, NumPy и Matplotlib.

После распаковки откройте терминал в этой папке:
  python -m pip install numpy matplotlib
  python geometry_2d.py --points 41
  python geometry_2d.py --points 81
  python geometry_2d.py --variant 7 --points 81
В Windows вместо python можно использовать py.

Основная функция: 2(x-1)^2+2(x-1)(y+1)+2(y+1)^2+3.
Точный минимум: (1,-1), значение 3.
Варианты 1–18 совпадают с таблицей лекции.
Число --points задаёт число узлов по КАЖДОЙ оси, итого N^2 узлов.
Все массивы хранятся в памяти: большие N могут потребовать много памяти.

Создаётся подпапка results_variant_..._N_...:
  contours.png — линии уровня, точный минимум и лучший узел, 300 dpi;
  results.json — параметры и результаты;
  grid_minimum.csv — краткая таблица для отчёта.
Повторный запуск с теми же параметрами перезаписывает результаты этого запуска.

grid_search находит лучший УЗЕЛ, а не точный минимум непрерывной функции.
В данной учебной семье точный минимум известен аналитически.
quadratic_grid_error_bound — аналитическая верхняя оценка ошибки координат
для положительно определённой квадратичной функции при условии, что точный
минимум принадлежит рассматриваемому прямоугольнику. Вычисления выполняются
в обычной арифметике с плавающей точкой, не в интервальной.
Для произвольной функции этот вывод не переносится без обоснования.

exact_line_step вычисляет точный шаг на луче alpha >= 0 для квадратичной
функции. Эта функция доступна через импорт, не запускается основным скриптом.
Пример:
  from geometry_2d import exact_line_step
  alpha, x1 = exact_line_step([[2,1],[1,2]], [1,-1], [3,1], [-1,-2])
Результат alpha=9/7, x1=(12/7,-11/7).

Программа предназначена для изучения геометрии функции и сеточного
эксперимента. Это не реализация полного метода многомерного спуска.
