EssayAI
Блог
Блог
Математика и алгоритмы

Метод золотого сечения: поиск минимума функции

11 июня 2026Время чтения: 7 минут
#метод золотого сечения#минимум функции#одномерная оптимизация#унимодальная функция#численные методы

Метод золотого сечения - один из классических алгоритмов одномерной оптимизации: он находит минимум унимодальной функции на отрезке, не вычисляя производную и не требуя аналитического выражения. В основе лежит простое наблюдение: на каждом шаге достаточно двух пробных точек, чтобы гарантированно выбросить часть отрезка, где минимума нет. Попробуйте калькулятор ниже - двигайте ползунок шага и смотрите, как синий отрезок сужается к минимуму; дальше разберём каждую формулу строго.

Принцип метода и золотое число

Пусть на отрезке [a,b][a, b] задана унимодальная функция f(x)f(x) - непрерывная, имеющая ровно один минимум. Мы хотим сузить отрезок неопределённости до заданной точности ε\varepsilon.

Отрезок [a, b] с двумя пробными точками x1 и x2: за каждый шаг отбрасывается правая или левая часть, синий отрезок сужается в phi раз. Красная точка - истинный минимум

На каждом шаге расставляем две пробные точки:

x1=bφ(ba),x2=a+φ(ba),x_1 = b - \varphi(b - a), \quad x_2 = a + \varphi(b - a),

где φ=5120,618\varphi = \dfrac{\sqrt{5} - 1}{2} \approx 0{,}618 - золотое сечение (меньший корень уравнения φ2+φ=1\varphi^2 + \varphi = 1). Дробь φ\varphi делит отрезок в пропорции 1:φ0,382:0,6181 : \varphi \approx 0{,}382 : 0{,}618.

Сравниваем f(x1)f(x_1) и f(x2)f(x_2):

  • если f(x1)<f(x2)f(x_1) < f(x_2) - минимум лежит в [a,x2][a, x_2], поэтому заменяем bx2b \leftarrow x_2;
  • если f(x1)f(x2)f(x_1) \geq f(x_2) - минимум в [x1,b][x_1, b], заменяем ax1a \leftarrow x_1.

Ключевое свойство золотого сечения: после сужения одна из двух новых пробных точек совпадает со старой. Это значит, что на следующем шаге достаточно вычислить ff только в одной новой точке - экономия на 50% по сравнению с произвольным разбиением.

Скорость сходимости

После nn итераций длина отрезка неопределённости равна

bnan=φn(b0a0).|b_n - a_n| = \varphi^n \cdot (b_0 - a_0).

Поскольку φ0,618<1\varphi \approx 0{,}618 < 1, длина убывает геометрически. Чтобы достичь точности ε\varepsilon, достаточно

nln(ε/(b0a0))lnφn \geq \frac{\ln(\varepsilon / (b_0 - a_0))}{\ln \varphi}

итераций. Например, для отрезка [0,1][0, 1] и ε=105\varepsilon = 10^{-5} нужно всего n26n \approx 26 шагов.

Это быстрее метода деления пополам только в теоретическом смысле: дихотомия за два вычисления ff сужает отрезок в 2 раза, тогда как золотое сечение за два вычисления - в 1/φ1,6181/\varphi \approx 1{,}618 раза. Но за одно вычисление (со второй итерации) - в 1/φ1/\varphi; при дорогостоящих ff это решающий довод.

Сходимость метода золотого сечения: длина отрезка [a, b] по шагам убывает по закону phi^n - прямая линия на логарифмической шкале
Сходимость метода золотого сечения: длина отрезка [a, b] по шагам убывает по закону phi^n - прямая линия на логарифмической шкале

На логарифмической шкале убывание длины отрезка - прямая линия с наклоном lnφ0,481\ln\varphi \approx -0{,}481. Именно это свойство делает золотое сечение точно оптимальным для стратегий с одной пробной точкой за шаг.

Шаги алгоритма на примере

Возьмём f(x)=x24x+5f(x) = x^2 - 4x + 5 на [0,5][0, 5], точность ε=0,1\varepsilon = 0{,}1.

Шаг 0. a=0a = 0, b=5b = 5, длина 5.

x1=50,6185=1,910,f(x1)=1,651x_1 = 5 - 0{,}618 \cdot 5 = 1{,}910, \quad f(x_1) = 1{,}651 x2=0+0,6185=3,090,f(x2)=4,549x_2 = 0 + 0{,}618 \cdot 5 = 3{,}090, \quad f(x_2) = 4{,}549

Так как f(x1)<f(x2)f(x_1) < f(x_2), отбрасываем правую часть: b3,090b \leftarrow 3{,}090. Длина стала 3,0903{,}090.

Шаг 1. a=0a = 0, b=3,090b = 3{,}090.

x1=3,0900,6183,090=1,180,f(x1)=2,390x_1 = 3{,}090 - 0{,}618 \cdot 3{,}090 = 1{,}180, \quad f(x_1) = 2{,}390 x2=0+0,6183,090=1,910,f(x2)=1,651x_2 = 0 + 0{,}618 \cdot 3{,}090 = 1{,}910, \quad f(x_2) = 1{,}651

Теперь f(x1)>f(x2)f(x_1) > f(x_2), отбрасываем левую часть: a1,180a \leftarrow 1{,}180.

Так шаг за шагом отрезок сжимается к x=2x^* = 2 (истинный минимум f(2)=1f(2) = 1). Уже через 10 итераций длина не превысит 50,618100,0365 \cdot 0{,}618^{10} \approx 0{,}036 - лучше заданной точности 0,10{,}1.

Условие применимости: унимодальность

Метод гарантирует нахождение глобального минимума только тогда, когда функция унимодальна - имеет ровно один минимум на отрезке. Если у ff два и более локальных минимума, алгоритм «выберет» один из них, но какой именно - непредсказуемо.

Если f(x1) = f(x2), строгое правило сужения не работает: оба конца можно двигать одновременно (a ← x1, b ← x2), но при равном значении это возможно лишь при симметрии. На практике чаще берут любое из двух правил и контролируют ситуацию.

Проверить унимодальность аналитически: достаточно, чтобы f(x)=0f'(x) = 0 имела единственный корень на [a,b][a, b] и f>0f'' > 0 в нём (строгий минимум). Для гладкой строго выпуклой функции (f>0f'' > 0 всюду на [a,b][a, b]) метод работает безусловно.

Связь с золотым сечением и числом Фибоначчи

Название «золотое сечение» не случайно: φ=(51)/2\varphi = (\sqrt{5} - 1)/2 - то самое иррациональное число, которое с древности описывает деление отрезка в «наиболее гармоничном» соотношении. В математической оптимизации его роль другая: это единственная точка деления, при которой метод после каждого шага оставляет такое же относительное расположение пробных точек на новом, меньшем отрезке.

Числа Фибоначчи 1,1,2,3,5,8,13,21,1, 1, 2, 3, 5, 8, 13, 21, \ldots связаны с φ\varphi формулой:

φ=limnFnFn+1,\varphi = \lim_{n \to \infty} \frac{F_n}{F_{n+1}},

а метод Фибоначчи (предшественник золотого сечения) использует конечное число шагов, заранее известное. Для nn \to \infty оба метода совпадают, и коэффициент сужения стремится к φ\varphi.

Частые ошибки

  • Забывают проверить унимодальность. Применяют метод к функции с двумя локальными минимумами и удивляются неверному ответу. Сначала убедитесь, что функция унимодальна на выбранном отрезке.
  • Путают x1x_1 и x2x_2. Формулы x1=bφ(ba)x_1 = b - \varphi(b - a) и x2=a+φ(ba)x_2 = a + \varphi(b - a) симметричны относительно середины, но x1<x2x_1 < x_2 всегда. Привязка знака к нижней границе (a+a + \ldots) дает x2x_2, к верхней (bb - \ldots) - x1x_1.
  • Неверно обновляют границу. Если f(x1)<f(x2)f(x_1) < f(x_2), то bx2b \leftarrow x_2 (не x1x_1): отрезок [a,x2][a, x_2] оставляем. Частая ошибка - поставить bx1b \leftarrow x_1, выбросив зону, где минимум ещё может быть.
  • Используют десятичное φ=0,618\varphi = 0{,}618. Округление накапливается за 20-30 итераций. Держите φ=(51)/2\varphi = (\sqrt{5} - 1) / 2 как константу.
  • Останавливаются по числу шагов, а не по ширине отрезка. Критерий остановки - baε|b - a| \leq \varepsilon, а не «сделали nn шагов». При фиксированном nn вы не знаете, достигнута ли нужная точность.

FAQ

Нужна ли производная для метода золотого сечения? Нет. Метод использует только значения f(x1)f(x_1) и f(x2)f(x_2) и не требует производной. Это делает его применимым к «чёрным ящикам» - функциям, для которых формулы нет, но значение можно получить экспериментально или численно.

Чем метод золотого сечения отличается от градиентного спуска? Градиентный спуск использует производную f(x)f'(x) и может применяться к многомерным функциям, но требует её вычисления и может застрять в локальном минимуме. Золотое сечение - строго одномерный метод, работает без производной и при унимодальности гарантирует глобальный минимум. Для одномерных задач без производной золотое сечение обычно предпочтительнее.

Как выбрать начальный отрезок [a,b][a, b]? Отрезок должен содержать минимум. Практически: построить грубый график или оценить по физическому смыслу задачи. Если минимум не попал в [a,b][a, b], алгоритм найдёт «минимум на краю» - либо aa, либо bb. Признак: после сходимости проверьте, что f(x)f(a)f(x^*) \leq f(a) и f(x)f(b)f(x^*) \leq f(b).

Коротко

Метод золотого сечения сужает отрезок неопределённости в φ0,618\varphi \approx 0{,}618 раз за каждый шаг при одном вычислении ff. Формулы пробных точек x1=bφ(ba)x_1 = b - \varphi(b - a) и x2=a+φ(ba)x_2 = a + \varphi(b - a) обеспечивают переиспользование: одна из точек остаётся на следующем шаге. За nn шагов длина отрезка составляет φn(ba)\varphi^n (b - a), убывая геометрически. Условие применимости - унимодальность функции на [a,b][a, b]; без него метод не гарантирует глобального результата.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также