- •Содержание
- •Тема 1. Задачи одномерной безусловной минимизации
- •Тема 2. Задачи многомерной безусловной минимизации
- •Тема 3. Задачи многомерной оптимизации при наличии ограничений. Линейное программирование
- •Введение
- •Тема 1. Задачи одномерной безусловной минимизации
- •1.1. Постановка задачи
- •1.2. Метод перебора
- •1.3. Метод поразрядного поиска
- •1.4. Метод деления отрезка пополам (метод дихотомии)
- •1.5. Метод Фибоначчи
- •1.6. Метод золотого сечения
- •1.7. Метод средней точки.
- •1.8. Метод Ньютона.
- •Тема 2. Задачи многомерной безусловной минимизации
- •2.1. Необходимые сведения из курса линейной алгебры
- •2.2. Постановка задачи многомерной оптимизации
- •2.3. Необходимые сведения из курса математического анализа
- •2.4. Методы спуска
- •2.5. Метод градиентного спуска с дроблением шага
- •2.6. Метод наискорейшего спуска
- •2.7. Метод сопряженных градиентов
- •2.8. Метод покоординатного спуска
- •2.9. Метод Ньютона
1.6. Метод золотого сечения
В основе этого метода лежит понятие "золотого сечения", введенного Леонардо да Винчи и используемого, в частности, при построении архитектурных сооружений античности и эпохи Возрождения.
Золотым сечением отрезка называется его разбиение на две неравные части, так, что отношение длины всего отрезка к длине его большей части равно отношению длины большей части к длине меньшей части (рис.1.3, слева)
=
.
Рис 1.3
Золотое сечение осуществляется двумя точками x1 и x2, расположенными симметрично относительно середины отрезка (рис.1.3, справа). Нетрудно проверить, что
=
=
,
(1.10)
=
=
.
(1.11)
Точка x1 осуществляет золотое сечение не только отрезка [a, b], но и отрезка [a, x2], а точка x2 осуществляет золотое сечение не только отрезка [a, b], но и отрезка [x1, b]. Действительно,
=
=
,
=
=
.
Из (1.10) и (1.11) получаем:
x1
=
a
+
,
x2
= a
+
.
(1.12)
Формулы (1.12) являются основными расчетными формулами метода золотого сечения.
Из
(1.12) следует, что x1
+ x2
= a
+ b.
Если
обозначить r
=
,
то
формулы
(1.12) можно переписать так:
x1 = b – r(b – a), x2 = a + r(b – a) (1.13)
Процедура деления отрезка [a, b] такая же, как и для методов дихотомии и Фибоначчи. Вычисляются значения функции в выбранных точках: f(x1) и f(x2). Определяется новый отрезок локализации [a1, b1] следующим образом:
если f(x1) f(x2), то a1 = a, b1 = x2;
если f(x1) > f(x2), то a1 = x1, b1 = b.
Далее процедура деления отрезка [a1, b1] повторяется с использованием формул (1.12) или (1.13).
Так же, как и в методе Фибоначчи, одна из пробных точек x1, x2 станет пробной точкой на новом отрезке локализации. Поэтому на каждой итерации достаточно определить только одно значение f(x), так как другое уже найдено на предыдущей итерации.
В конце вычислений можно взять в качестве приближенного значения x* середину последнего из полученных отрезков.
После выполнения n итераций погрешность удовлетворяет следующему неравенству:
n
=
<
.
Условием окончания вычислений является выполнение неравенства n <.
Алгоритм 1.4 (Алгоритм метода золотого сечения).
Шаг 1. Ввести исходные данные: a, b, . Положить r = , n = .
Шаг 2. Определить x1 и x2 по формулам (1.13).
Шаг 3. Вычислить f(x1) и f(x2).
Шаг 4. Проверить критерий окончания вычислений. Если n <, перейти к шагу 5, иначе – к шагу 6.
Шаг 5. Перейти к новому отрезку локализации и новым пробным точкам. Если f(x1) f(x2), то положить b = x2, x2 = x1, f(x2) = f(x1), x1 = b – r(b – a) и вычислить f(x1). Иначе положить a = x1, x1 = x2, f(x1) = f(x2), x2 = a + r(b – a) и вычислить f(x2).
Положить n = rn и перейти к шагу 4.
Шаг 6. Положить x* . Вычислить f * f(x*).
Пример 1.5.
Методом золотого сечения решим задачу, рассмотренную ранее: f(x) = x4 + e –x min, x [0, 1], = 0.1.
Результаты вычислений приведены в табл. 1.6.
Таблица 1.6
Номер итерации |
a |
b |
n |
x1 |
x2 |
f(x1) |
f(x2) |
Сравнение f(x1) и f(x2) |
1 2 3 4 5 |
0 0.382 0.382 0.382 0.472 |
1 1.000 0.764 0.618 0.618 |
0.5 0.309 0.191 0.118 0.073 |
0.382 0.618 0.528 0.472
|
0.618 0.764 0.618 0.528 |
0.704 0.685 0.668 0.673 |
0.685 0.807 0.685 0.668 |
f(x1) > f(x2) f(x1) < f(x2) f(x1) < f(x2) f(x1) > f(x2) |
Вычисления прекращаются после 5-ой итерации, так как требуемая точность достигнута (0.073 < 0.1).
Таким
образом, x*
0.55 и
f(x*)
0.67.
