Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
непрмо_подготовка к экзую.docx
Скачиваний:
0
Добавлен:
24.01.2026
Размер:
6.31 Mб
Скачать

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) в коде, что произойдет? Метод будет искать максимум, а не минимум.