
- •Часть 2
- •Оглавление введение
- •Глава 1. Методы одномерной безусловной оптимизации § 1.1. Основные понятия
- •§ 1.2. Метод половинного деления
- •§ 1.3. Метод золотого сечения
- •§ 1.4. Метод Ньютона
- •Глава 2. Методы многомерной безусловной оптимизации § 2.1. Основные понятия
- •§ 2.2. Метод сопряженных направлений
- •§ 2.3. Метод наискорейшего спуска
- •§ 2.4. Метод Ньютона
- •Глава 3. Интерполирование и аппроксимация функций, заданных таблично § 3.1. Основные понятия
- •§ 3.2. Интерполяционный полином в форме Лагранжа
- •§ 3.3. Интерполяционный полином в форме Ньютона
- •§ 3.4. Сплайн-интерполяция таблично заданной функции
- •§ 3.5. Аппроксимация таблично заданных функций методом наименьших квадратов
- •Глава 4. Численное дифференцирование и интегрирование функций § 4.1. Основные понятия
- •§ 4.2. Численное дифференцирование
- •§ 4.3. Численное интегрирование
- •4.3.1. Квадратурные формулы прямоугольников, трапеций и Симпсона. Квадратурные формулы прямоугольников
- •Квадратурная формула трапеций
- •Квадратурная формула Симпсона
- •4.3.2. Автоматический выбор шага. Правило Рунге
- •Глава 5. Численные методы решения задачи Коши для обыкновенных дифференциальных уравнений и их систем § 5.1. Основные понятия
- •§ 5.2. Метод Эйлера
- •§ 5.3. Явный 4-шаговый метод Адамса
- •§ 5.4. Метод Рунге Кутта четвертого порядка
- •Литература
§ 1.3. Метод золотого сечения
Это один из наиболее эффективных методов нулевого порядка, использующихся для решения задачи (1.1.1).
Опуская этап отделения (локализации) положения локального минимума функции f(x), перейдем к этапу уточнения положения этого минимума. Начнем с исходного интервала неопределенности 0 = (a, b), содержащего х* – искомую точку локального минимума унимодальной на интервале 0 функции f(x). Как и в методе половинного деления, последовательное уточнение положения точки х* представляет собой итерационный процесс. На каждом шаге этого процесса строится новый интервал неопределенности; его длина меньше длины текущего интервала, в который он входит. В результате построения получаем последовательность вложенных интервалов неопределенности i, i = 0, 2, 3, …, k, …:
0 = (a, b) 1 = (a(1), b(1)) … k = (a(k), b(k)) …
При этом если исходный интервал 0 содержит искомую точку х*, то ее будут содержать и все остальные интервалы последовательности.
Пусть Li – длина i-го интервала неопределенности, i = 0, 2, 3, …, k, … Так же как и при использовании метода половинного деления, для анализа текущего интервала неопределенности i на i-м шаге процесса будем выбирать внутри этого интервала две пробные точки, расположенные симметрично относительно его середины. Однако в отличие от метода половинного деления потребуем, чтобы для строящейся последовательности вложенных интервалов выполнялись следующие условия:
– длина каждого интервала должна равняться сумме длин двух последующих интервалов этой последовательности:
Li = Li + 1 + Li + 2, i = 0, 1, 2, …; (1.3.1)
– отношение длины любого интервала последовательности к длине предыдущего интервала должно оставаться постоянным и равным некоторому числу (0 < < 1):
Li + 1 / Li = Li + 2 / Li + 1 = , i = 0, 1, 2, … (1.3.2)
Последнее условие часто называют правилом "золотого сечения".
Из совместного решения уравнений (1.3.1) и (1.3.2) находим
= (-1+(5))/20,618
Итак, согласно методу золотого сечения на i-м шаге пробные точки располагаются на расстоянии 0,382Li от концов текущего интервала неопределенности i. При i = 0 потребуется введение сразу двух пробных точек для интервала 0; при всех i > 1 достаточно будет ввести лишь одну новую точку в интервал i, так как одна из пробных точек, использовавшихся для интервала i – 1, останется таковой и для i. Таким образом, за k-шагов процесса потребуется лишь k + 1 вычислений функции. Длина интервала неопределенности k на k-м шаге метода будет определяться по формуле
Lk = k L0, k = 0, 1, 2, …
В итоге для уменьшения интервала неопределенности не менее чем в 100 раз потребуется сделать 10 шагов и, следовательно, 11 вычислений значений функции f(x), что лучше, чем при использовании метода половинного деления, где для этого потребовалось произвести 14 вычислений.
Пусть функция f(x) является унимодальной на интервале (a, b) и задано достаточно малое число > 0 – требуемая точность определения точки искомого минимума х* (a, b) данной функции. Тогда метод золотого сечения можно записать в виде следующего алгоритма:
1. Задать функцию f(x) и числа a, b, 0.618, > 0;
2. Если b – a 2 перейти к выполнению п. 11.
3. Вычислить с = (b – a).
4. Вычислить x1 =b – с; x2 = a + с.
5. Вычислить значения f(x1) и f(x2).
6. Если f(x1) > f(x2) положить a:= x1.
Иначе перейти к выполнению п. 8.
7. Если (b – a) 2 перейти к выполнению п. 11.
Иначе положить x1 = x2; f(x1):= f(x2).
Вычислить с = (b – a), x2 = a + с, f(x2). Перейти к выполнению п. 6.
8. Если f(x1) < f(x2) положить b:= x2.
Иначе перейти к выполнению п. 10.
9. Если (b – a) 2 перейти к выполнению п. 11.
Иначе положить x2 = x1; f(x2)= f(x1).
Вычислить с = (b – a), x1 =b – с, f(x1). Перейти к выполнению п. 6.
10. Положить a:= x1; b:= x2.
Иначе перейти к выполнению п. 2.
11. Положить х* =(a + b)/2. Процесс завершен.
Работу метода золотого сечения удобно отображать в таблице, аналогичной предложенной для метода половинного деления (см. табл. 1.2.1).
В заключение дадим общую характеристику метода золотого сечения для решения задачи (1.1.1), которая во многом сходна с характеристикой метода половинного деления:
– всегда сходится к решению задачи (1.1.1);
– скорость сходимости линейная. На каждом шаге длина интервала неопределенности уменьшается в 0.618 раз. После k-го шага процесса она составит Lk = kL0. Нетрудно подсчитать количество итераций, необходимых для уменьшения исходного интервала неопределенности в заданное количество раз. Например, чтобы уменьшить ее не менее чем в 100 раз, потребуется 10 итераций;
– на каждом шаге (кроме нулевого) требуется вычисление значений функции f(x) в одной из точек: х1 или х2. Эти точки расположены симметрично относительно центра текущего интервала неопределенности на расстоянии 0.236(b – a) друг от друга, где (a, b) – текущий интервал неопределенности. На нулевом шаге значение функции f(x) необходимо вычислить в обеих точках.
Общее количество итераций метода золотого сечения, необходимое для достижения заданной точности решения будет примерно в 1,4 раза больше, чем при использовании метода половинного деления. Тем не менее, метод золотого сечения оказывается эффективнее за счет меньшего совокупного количества вычисляемых при этом значений функции f(x).