- •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. Запрограммировать метод доверительных областей. Показать его работу на функциях.
13. Метод секущих. Запрограммировать, показать работу на функциях.
def ssearch(interval,tol):
k_max = 1000
k = 0
a, b = interval
coords = []
df_A = df(a)
df_B = df(b)
x = b - df_B * (b - a) / (df_B- df_A)
coords.append([x, a, b])
neval = 2
while (np.abs(df_B)) > tol and (np.abs(b - a)) > tol and (k < k_max):
k += 1
x = b - df_B * (b-a)/(df_B-df_A)
df_X = df(x)
neval += 1
if df_X >= 0:
b = x
df_B = df_X
else:
a = x
df_A = df_X
coords.append([x,a,b])
xmin = x
fmin = f(xmin)
neval += 1
answer_ = [xmin, fmin, neval, coords]
return answer_
Из чего вытекает этот метод?
Метод секущих вытекает из метода Ньютона, если приближать производную конечной разностью:
То есть мы заменяем аналитическую производную на приближение по двум последним точкам.
Какой порядок (чего-то там) ?
Порядок сходимости метода секущих — примерно 1.618 (число Фибоначчи / золотое сечение). Это быстрее линейной, но медленнее квадратичной, как у Ньютона.
Почему это важно: секущие дают компромисс: не нужно брать аналитическую f′, но скорость приближения всё ещё хорошая.
берем формулу, выражаем
раскладываем в ряд тейлора и получаем p = 1+1/p
p^2-p-1=0
решение - 1.618 ((1+sqrt(5))/2)
Если внутри цикла df считается два раза, переделать на один
Почему в коде лучше вычислять df один раз внутри цикла?
Потому что в формуле секущих производная заменяется на разность двух значений функции.
Если считать df (или f) дважды для одной и той же точки — это лишние вычисления.
Можно сохранить результат в переменные, чтобы не тратить время и не искажать точность.
Первые 4 метода, от какого метода происходит метод секущих? (ньютон вродь)
От метода Ньютона (касательных). Разница в том, что в методе Ньютона используется аналитическая производная, а в секущих — приближение по двум точкам.
В каком случае применяем ньютона в каком секущих?
Ньютона — когда можно легко вычислить аналитическую производную и есть хорошее начальное приближение.
Секущих — когда производную найти сложно или невозможно, но значения функции вычислить можно.
Метод Ньютона применяем когда:
Производная f'(x) известна аналитически
Вычисление f'(x) не слишком сложное
Нужна высокая скорость сходимости (квадратичная)
Метод секущих применяем когда:
Производная неизвестна или сложно вычисляется
Функция "дорогая" для вычисления (и выгоднее делать 1 вычисление f(x) за шаг вместо 2)
Можно пожертвовать скоростью сходимости ради упрощения
В чем преимущество метода секущих?
Не требует аналитической производной, только значения функции.
Более экономный по числу вычислений, чем метод Ньютона, если производная дорогая.
Главное преимущество: Не требует вычисления производной
Дополнительные преимущества:
Всего 1 вычисление f(x) на итерацию (против 2 у Ньютона)
Часто более эффективен на практике, если учесть стоимость вычисления производной
Проще в реализации
Более устойчив в некоторых случаях
Цена: более медленная сходимость (1.618 против 2.0 у Ньютона)
еще вопросики
🔹 Теоретические вопросы
Как выглядит формула метода секущих?
В чём идея метода секущих? Заменяем касательную (как в методе Ньютона) на секущую через две последние точки, чтобы избежать вычисления производной.
Какие начальные данные нужны? Две начальные точки x0,x1x (в отличие от метода Ньютона, где нужна одна точка и производная).
Какие условия сходимости?
Функция f(x) непрерывна и дифференцируема в окрестности корня.
Производная f′(x)≠0 в корне.
Начальные приближения достаточно близки и дают разные значения функции.
Как определяется ошибка и критерий останова? Например:
Можно добавить КОП по количеству
итераций.
Когда метод секущих может не сойтись?
Если функция не монотонна рядом с корнем.
Если f(xk) и f(xk−1) близки → деление на почти ноль.
Если стартовые точки выбраны далеко от истинного корня.
Что происходит, если f(xₖ) = f(xₖ₋₁)? Возникает деление на ноль → метод ломается (неопределённость). Обычно тогда делают перезапуск с другими начальными значениями.
Почему метод секущих быстрее бисекции? Потому что использует приближение производной — направление «улучшения» считается точнее, чем просто деление пополам.
Почему медленнее Ньютона? Потому что производная приближённая, а не точная, и поэтому шаг менее точен.
Можно ли методом секущих искать минимум функции? Да, если применить его к производной функции — искать корень уравнения f′(x)=0. Тогда это фактически поиск экстремума без аналитической второй производной.
Что означает “суперлинейная сходимость”? Что ошибка уменьшается быстрее, чем линейно, но не квадратично. Формально: 1<α<2.
Как выбрать начальные приближения?
Обычно берут две точки с разными знаками f(x).
Или близко к ожидаемому корню (если есть предварительная оценка).
Сколько вычислений функции на итерацию? Обычно одно новое f(x), потому что f(xk−1) и f(xk) уже есть. То есть по эффективности близок к методу Ньютона с аналитической производной.
Почему метод секущих считается компромиссом между точностью и вычислительной сложностью? Потому что не требует f′′, но даёт почти такую же скорость сходимости, как метод Ньютона.
Что будет, если функция сильно нелинейна? Метод может «перескакивать» через корень и расходиться. Иногда помогает уменьшение шага или ограничение интервала.
почему в коп мы проверяем df_b а не df_a
В методе секущих для нахождения экстремума (через производную) мы идём итерациями, и новая точка вычисляется из последних двух приближений — в твоём коде это a и b.
После вычисления новой точки x_k:
x_k = b - df_b * (b - a) / (df_b - df_a)
— точка x_k фактически зависит от последнего значения b, и именно df_b отражает «актуальное состояние» производной в конце отрезка.
