- •1. Множество. Функция. Скалярные и векторные функции.
- •2. Поле, пространство. Виды пространств.
- •3. Критические точки. Стационарные точки. Лемма Ферма. Связь оптимизации и поиска корня.
- •Вопрос 6. Чем выпуклая функция упрощает задачу оптимизации?
- •Вопрос 7. Если функция имеет одинаковые минимальные значения в двух точках, можно ли говорить о двух глобальных минимумах?
- •Вопрос 8. Как критерии максимума связаны с критериями минимума?
- •4. Градиент. Матрица Гессе. Ряд Тейлора.
- •5. Квадратичная форма. Квадратичная функция. Связь знакоопределенности и собственных чисел матрицы.
- •6. Квадратичная форма. Квадратичная функция. Критерии минимума (максимума) квадратичной формы.
- •7. Условия Вульфа. Их геометрическая интерпретация. Правило Армихо.
- •8. Метод дихотомии. Запрограммировать, показать работу на функциях.
- •9. Метод трехточечного деления. Запрограммировать, показать работу на функциях.
- •10. Метод золотого сечения. Запрограммировать, показать работу на функциях.
- •11. Метод Фибоначчи. Запрограммировать, показать работу на функциях.
- •12. Метод Ньютона одномерный. Запрограммировать, показать работу на функциях.
- •13. Метод секущих. Запрограммировать, показать работу на функциях.
- •14. Метод Мюллера. Запрограммировать, показать работу на функциях.
- •15. Метод обратной параболической интерполяции. Запрограммировать, показать работу на функциях.
- •16. Запрограммировать метод градиентного спуска. Показать его работу на функциях.
- •17. Запрограммировать метод наискорейшего спуска. Показать его работу на функциях.
- •19. Запрограммировать метод Ньютона многомерный. Показать его работу на функциях.
- •20. Запрограммировать метод Левенберга-Марквардта. Показать его работу на функциях.
- •21. Запрограммировать метод Нестерова-Немировского. Показать его работу на функциях.
- •22. Запрограммировать метод Барзилая-Борвейна 1. Показать его работу на функциях.
- •23. Запрограммировать метод Барзилая-Борвейна 2. Показать его работу на функциях.
- •28. Запрограммировать метод Армихо. Показать его работу на функциях.
- •29. Запрограммировать метод dfp. Показать его работу на функциях.
- •30. Запрограммировать метод bfgs. Показать его работу на функциях.
- •31. Запрограммировать метод l- bfgs. Показать его работу на функциях.
- •32. Запрограммировать метод доверительных областей. Показать его работу на функциях.
10. Метод золотого сечения. Запрограммировать, показать работу на функциях.
def gsearch(interval, tol):
a, b = interval
coords = []
F_const = (1 + np.sqrt(5)) / 2
x1 = b - (b - a) / F_const
x2 = a + (b - a) / F_const
f1 = f(x1)
f2 = f(x2)
neval = 2
while (np.abs(b - a) > tol) :
coords.append([x1, x2, a, b])
print(b-a)
if f1 > f2:
a = x1
x1 = x2
x2 = a + (b - a) / F_const
f1 = f2
f2 = f(x2)
neval += 1
else:
b = x2
x2 = x1
x1 = b - (b - a) / F_const
f2 = f1
f1 = f(x1)
neval += 1
coords.append([x1, x2, a, b])
xmin = (a + b) / 2
fmin = f(xmin)
neval += 1
answer_ = [xmin, fmin, neval, coords]
return ans
Какой быстрее из этих двух? Ответ - фибоначчи быстрее из-за принципа работы (вроде такой ответ!!!!???? угу, на 1-2% судя по лекциям)
Метод Фибоначчи немного быстрее — примерно на 1–2%.
Это связано с тем, что он заранее знает количество итераций и точнее размещает точки, минимизируя число вычислений функции.
Какие КОПы в программе, какой КОП можно добавить?
Что такое норма, чем отличается от модуля? Вроде ответ - норма- длина вектора, модуль - просто разница начала и конца
Модуль — абсолютное значение числа (в 1D): ∣x∣.
Норма — длина вектора (в n-мерном пространстве): ∥x∥= sqrt(x1^2+...+xn^2)
То есть норма — обобщение модуля на многомерные случаи.
Сколько раз вычисляется ЦФ? (на вопросы подобного типа отвечаешь по своей проге, если спрашивает, а можно ли меньше, скорее всего значит, что можно меньше и прогу придется исправить)
В первой итерации — 2 раза,
далее на каждой итерации — 1 раз (одна точка сохраняется).
Если спрашивают «можно ли меньше?» — да, можно хранить предыдущее значение и не пересчитывать.
С отсылкой на 1 лабу: что быстрее, метод золотого сечения или метод дихотомии (вроде ответ, что дихотомия быстрее)
Метод дихотомии немного быстрее,
но метод золотого сечения экономнее по числу вычислений функции, потому что повторно использует точки.
У кого-то что-то было не так с интервалом, попросил исправить
Интервал должен содержать точку минимума — то есть функция сначала убывает, потом возрастает.
Если интервал задан неверно — метод пойдёт не в ту сторону и не сойдётся.
Можно ли использовать метод золотого сечения для двумерных функций? Нет
Нет, напрямую нельзя.
Метод применяется только для одномерных функций.
В многомерных задачах его используют лишь как подметод поиска вдоль направления.
Можно ли заранее определить кол-во итераций? (по методу фибоначчи, в лекции есть формула)
Родственный метод (Фибоначчи)
Метод Фибоначчи — родственный методу золотого сечения.
Он является его обобщением, а золотое сечение — предельный случай метода Фибоначчи n→∞.
Чему равно число фи - 1,618
Преимущества и недостатки методов?
Золотое сечение:
не требует производных,
гарантированно сужает интервал; − немного медленнее.
Фибоначчи:
чуть быстрее (на 1–2%),
минимизирует число вычислений функции, − нужно заранее знать количество итераций.
Достигаем ли мы заданной точности в лабе?
Да, при корректных условиях и правильно заданном tol метод сходится к нужной точности.
Если нет — нужно проверить КОП и логику обновления интервала.
Есть ли какие то существенные различия между этими двумя методами?
Незначительные:
Фибоначчи — более точный и эффективный;
золотое сечение — проще в реализации;
принцип работы у них одинаковый
Может ли код искать максимум, как этого достичь если да?
Да, можно искать максимум,
если заменить f(x) на −f(x).
Тогда алгоритм будет искать минимальное значение у −f(x),
что соответствует максимуму исходной функции.
1. Почему метод называется “золотое сечение”? Потому что точки делят интервал в отношении золотого числа Φ=1.618\Phi = 1.618Φ=1.618, при котором отношение большего к меньшему такое же, как всего отрезка к большему.
2. Что происходит с интервалом на каждой итерации? Интервал сокращается в 1.618 раз, то есть примерно на 38.2%.
3. Почему метод экономит вычисления функции? Потому что одна из внутренних точек сохраняется с предыдущего шага — её значение f(x) не пересчитывается.
4. Что будет, если поменять местами точки x1 и x2? Ничего критичного — алгоритм всё равно сойдётся, но потеряется логика “левая/правая точка” и можно запутаться в обновлении границ.
5. Почему метод устойчивее, чем дихотомия? Потому что он не использует фиксированное расстояние δ, а делит интервал оптимально (по золотому числу), что уменьшает число итераций и повышает точность.
6. Можно ли применить метод для поиска корня уравнения f(x)=0? Теоретически — нет, он предназначен для минимизации функции, а не для нахождения нуля. Для корней — методы Ньютона, секущих или бисекции.
7. Можно ли ускорить метод золотого сечения? Да, если:
запоминать старое значение функции (не считать заново),
использовать векторизацию или массивы в NumPy,
задать адекватный tol (слишком маленький сильно замедляет).
8. Почему метод не требует производной? Он сравнивает только значения функции в точках — а не использует информацию о наклоне (как Ньютона или секущие).
9. Можно ли гарантировать, что найденный минимум — глобальный? Нет, метод находит локальный минимум в пределах интервала [a, b]. Если функция имеет несколько минимумов, нужно проверять разные интервалы.
10. Что произойдет, если задать неправильный tol (слишком большой/маленький)?
Если слишком большой — метод быстро завершится, но с неточным ответом.
Если слишком маленький — может зациклиться из-за округлений с плавающей точкой.
11. Почему метод проще метода Фибоначчи? Потому что не требует вычислять последовательность Фибоначчи и не зависит от заранее известного числа шагов.
12. Можно ли определить заранее число итераций без Фибоначчи? Да, примерная формула:
Но метод Фибоначчи даёт точное число итераций, а не приближённое.
13. Какое условие окончания у метода?
14. Если поменять знак у f(x) в коде, что произойдет? Метод будет искать максимум, а не минимум.
