- •Лабораторная работа № 7 Решение задач оптимизации
- •Содержание работы
- •Основные понятия Унимодальные функции
- •Метод половинного деления
- •Метод золотого сечения
- •Средства Excel для решения задач условной оптимизации
- •Пример постановки задачи линейного программирования
- •Формирование математической модели
- •Ввод условий задачи:
- •Сформировать таблицу в диапазоне ячеек a1:f11, приведенную на рис. 1. Р ис. 1. Таблица для ввода условий задачи линейного программирования
- •Решение задачи
- •Нажать кнопку «Параметры». Установить линейную модель. Нажать кнопку ok. Нажать кнопку «Выполнить».
- •В таблице появятся выходные значения, приведенные на рис. 4.
- •Постановка задачи
- •Варианты заданий Задание №1
- •Задание №2
- •Содержание отчета
- •Вопросы и задания для самоконтроля
Метод половинного деления
Пусть при решении задачи (1) определен отрезок [a, b], которому принадлежит точка локального минимума х*, и функция f(x) является унимодальной на этом отрезке.
Далее для сужения отрезка унимодальности используем точки х1 и х2, расположенные симметрично относительно середины отрезка [a, b];
Будем считать, что число k гораздо меньше 1 (k << 1). Тогда точки х1 и х2 принадлежат отрезку [a, b] и, следуя рассмотренной в прошлом пункте схеме, получим новый суженный отрезок [a1, b1] и оценим его длину в каждом из трех возможных случаев:
I. y1 < y2, a1 = a, .
II. y1 > y2, .
III. y1 = y2, a1 = x1, b1=x2;
Таким образом, после первого шага преобразований найден новый отрезок унимодальности [a1, b1], длина которого уменьшилась.
Название метода (метод половинного деления) мотивировано тем, что если величина k очень мала, то длина отрезка унимодальности b-а уменьшается почти вдвое (в случаях I, II).
Теперь в новом суженном промежутке [а1, b1] выберем точки и , симметричные относительно его середины:
.
Проведя вычисления, аналогичные проделанным ранее, получаем отрезок [а2, b2], длина которого не больше
,
и т. д.
В результате приходим к последовательности таких вложенных отрезков [a, b], [a1, b1] … [аn, bn], …, что точка локального минимума х* функции f(x) принадлежит каждому из них и является общим пределом последовательностей {аn} и {bn}. Отсюда получаются приближенные равенства
х* an bn,
точность которых на n-м шаге вычислений можно оценить неравенством
(2)
Пример 3. Найти точку х* локального минимума функции f(х) = 2x2 – ln x на отрезке [0,25; 1] методом половинного деления с точностью = 0,1. Провести вычисления, полагая k = 0,1 и предварительно оценив минимальное число шагов n для достижения точности .
Решение. Было установлено (см. пример 1), что функция унимодальна на отрезке [0,25;1]; точка х* принадлежит этому отрезку. Воспользуемся неравенством (2) и определим число шагов n:
Обозначим
(3)
где a0 = a = 0,25, b0 = b = 1, ai, bi - координаты начала и конца отрезка, полученные на i-м шаге вычислений, точки и принадлежат отрезку [ai, bi].
Произведем последовательные вычисления.
Отрезок [a,b] = [0,25; 1]:
x1 = 0,5375, х2 = 0,6625, у1 = 1,2221 < у2 = -1,2895.
Отрезок [а1, b1] = [а, х2] = [0,25; 0,66251]:
= 0,4356, = 0,4769, = 1,2105 > = 1,1953.
Отрезок [а2, b2] = [ , x2] = [0,4356; 0,66251];
= 0,5377, = 0,5604, = 1,1987 < = 1,2072.
Отрезок [a3,b3] = [ , ] = [0,4356; 0,56041]:
= 0,4918, = 0.5043, = 1,1934 > = 1,1932.
Отрезок [a4, b4] = [ , ] = [0,4918; 0,5604].
Разность = b4 - а4 = 0.0686 < =0,1. Следовательно, точкой локального минимума, найденной с заданной точностью, является х* а4 = 0,4918.
Метод золотого сечения
Термин «золотое сечение» ввел Леонардо да Винчи. Точка х1 является золотым сечением отрезка [а, b], если отношение длины b-а всего отрезка к длине b-х1 большей части равно отношению длины большей части к длине х1-а меньшей части (рис. 3), т.е. х1 - золотое сечение, если справедливо отношение
Аналогично, точка х2, симметричная точке х1 относительно середины отрезка [а, b], является вторым золотым сечением этого отрезка. Так как точки х1 и х2 расположены симметрично относительно середины отрезка [а, b], то можно записать
(4)
Учитывая, что , и используя определение золотого сечения, вычислим число k > 0:
.
Отметим свойство золотого сечения, в котором легко убедиться: пусть x1 и х2 - два золотых сечения отрезка [а, b]; тогда точка х1 одновременно является золотым сечением отрезка [а, х2], а другая точка х2 - золотым сечением отрезка [х1, b] (рис. 3).
Т еперь разберем подробнее алгоритм метода золотого сечения при нахождении последовательности вложенных отрезков [ai, bi] (i=0, 1, ... , n), сужающихся к точке х* локального минимума унимодальной функции f(x).
Сначала на исходном отрезке [а, b] по формулам (4) при найдем точки х1 и х2, а затем разность 1x = х2 – х1. Далее вычисляем значения функции у1=f(х1) и у2=f(х2) и, следуя схеме, описанной выше, образуем суженный отрезок [а1, b1]. Наконец, готовясь к следующему шагу и используя свойство золотого сечения, на отрезке [а1, b1] находим два сечения и . При этом возможны три случая:
.
.
.
Теперь, следуя разобранной схеме, можно переходить к нахождению отрезков [а2, b2], [а3, b3] и т. д., учитывая при этом, что в случаях I или II значение или целевой функции уже получено на предыдущем шаге (i = 1,2,...,n).
Точность приближенного равенства х* аn bn на n-м шаге вычислений можно оценить неравенством
(5)
полученным из неравенства (2), где .
Пример 4. Найти точку х* локального минимума функции f(x) = 2х2-ln х на отрезке [0,25; 1] методом золотого сечения с точностью = 0,1. Провести вычисления, предварительно оценив минимальное число шагов n для достижения точности .
Решение. Определим минимальное число шагов n, используя неравенство (5):
Произведем последовательные вычисления.
Отрезок [a,b] = [0,25; 1]:
x1 = 0,5375, х2 = 0,7135, у1 = 1,1983 < у2 = 1,3558, x1 = 0,177.
Отрезок [а1, b1] = [а, х2] = [0,25; 0,7135]:
= 0,4271, = x1, = 1,2156 > = y1, x2 = 0,1094.
Отрезок [а2, b2] = [ , x2] = [0,4271; 0,7135];
= = x1, = 0,6041, = y1 < = 1,2339, x3 = 0,06763.
Отрезок [a3,b3] = [ , ] = [0,4271; 0,6041]:
= 0,4947, = = = x1, = 1,1933 < = y1, x4 = 0,0418.
Отрезок [a4, b4] = [ , ] = [0,4271; 0.5365];
= 0,4688, = , = 1,1971 > = , x5 = 0,0258.
Отрезок [a5, b5] = [ , ] = [0,4688; 0.5365];
Точкой минимума функции f(x) с погрешностью = b5 – а5 = 0.0677 < 0,1 = является х* а5 = 0,4688.