Загребаев Методы матпрограммирования 2007
.pdfАналогично, точка x2 производит золотое сечение отрезка
[x1 , b] .
Опираясь на это свойство «золотого сечения» можно предложить следующий метод минимизации унимодальной функции f (x) на отрезке [a, b] .
Идея метода такова. На отрезке [a, b] возьмем точки x1 и x2 , производящие золотое сечение отрезка, и вычислим значения функций f (x1 ) и f (x2 ) в этих точках (рис. 3.6).
Рис. 3.6. Выбор отрезка, содержащего точку минимума
Если f (x1 ) ≤ f (x2 ) , то при x > x2 функция не может убывать, т.е. точка минимума лежит на отрезке [a, x2 ] . Если же f (x1 ) > f (x2 ) , то наоборот минимум функции лежит на отрезке
[x1 , b] .
Итак, отрезок, на котором ищется минимум, уменьшился. Процесс повторяется сначала. При этом весьма важно то, что внутри отрезка [a, x2 ] (это справедливо для рассматриваемого примера)
содержится точка x1 с вычисленным значением f (x1 ) , которая производит «золотое сечение» отрезка [a, x2 ] . Следовательно, на
171
данном шаге достаточно вычислить лишь одно значение f (x) во второй, новой точке, производящей золотое сечение.
Аналогично в случае, если выбран отрезок [x1 , b] .
Алгоритм метода золотого сечения.
1.Вычислить длину отрезка [a, b] − ∆ = b − a . Взять внутри отрезка две точки:
xл = a + r1∆ , xп = a + (1 − r1 )∆ .
2.Вычислить f (xл ) и f (xп) .
3.Если f (xл ) ≤ f (xп) перейти к шагу 4, если f (xл ) > f (xп) – к шагу 5.
4.Положить a = a , b = xп . Вычислить ∆ = b − a . Если ∆ ≤ ε , то
процесс прекратить. В противном случае положить: xп = xл , f (xп) – известно;
xл = a + r1∆ , f (xл ) – вычислить. Перейти к шагу 3.
5. Положить b = b , a = xл . Вычислить ∆ = b − a . Если ∆ ≤ ε , то процесс прекратить. В противном случае положить
xл = xп , |
f (xл ) – известно; |
xп = a +(1−r1 )∆ , |
f (xп) – вычислить. |
Перейти к шагу 3. |
|
Блок-схема алгоритма изображена на рис. 3.7.
Замечания. 1. После каждого шага длина отрезка уменьшается в 1/ r2 раз. По-
сле n итераций длина отрезка составляет ∆ = r2n (b − a).
2. Численная реализация метода обладает существенным недостатком. Так, приближенные значения чисел r1 и r2 порождают накопление ошибок, которое
довольно быстро может привести к нарушению пропорций отрезков в смысле отношения «золотого сечения» и, как следствие, к нарушению условий вложенности отрезков и тем самым к расходимости процесса. Таким образом, метод не является устойчивым по отношению к ошибкам в определении параметров r1 и r2 .
Рекомендации:
с максимально возможной для используемой ЭВМ точностью определять эти параметры и точки деления отрезка;
при определенных условиях можно воспользоваться модификацией метода, делающей процесс устойчивым.
172
|
|
|
|
|
|
|
|
Вход |
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
Ввод исходных дан- |
|
|||||||||||
|
|
|
|
|
|
ных: a , |
b , ε , f (x) |
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
∆ = b − a, xл = a + r1∆, |
xп = a + (1 − r1)∆ |
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вычисление fп = f (xп), |
|
fл = f (xл) |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
Нет |
|
|
|
Да |
|
|||||||||
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
fл ≤ fп |
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a = xл, |
|
|
|
|
|
|
|
b = xп, |
|
||||||||
|
∆ = b − a, |
|
|
|
|
|
|
|
∆ = b − a, |
|
||||||||
|
xл = xп, |
|
|
|
|
|
|
|
xп = xл, |
|
||||||||
|
xп = a + (1 − r1)∆ |
|
|
|
|
|
|
|
xл = a + r1∆ |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fл = fп, |
|
|
|
|
|
|
|
|
fп = fл, |
|
|||||||
|
fп = f (xп) |
|
|
|
|
|
|
|
fл = f (xл) |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Нет Да
∆ ≤ ε
x |
|
xл, f |
л |
≤ fп; |
|||
|
= |
x , f |
|
> f |
. |
|
|
|
|
|
л |
|
|||
|
|
п |
|
п |
Рис. 3.7. Блок-схема алгоритма метода «золотого сечения»
173 Выход
В качестве примеров использования метода «золотого сечения» рассмотрим следующие задачи.
Задача 1. Сколько шагов n метода «золотого сечения» обеспечивают заданную точность ε .
Решение. Как отмечалось выше, условием достижения точности является выполнение неравенства
Поскольку |
|
|
|
∆n ≤ ε . |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
∆ |
n |
= r n (b − a) , |
|
||||||||||
то отсюда |
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|||
r n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
(b − a) ≤ ε , |
|
|||||||||||||
и, как следствие: |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
r n |
≤ |
|
ε |
|
, |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
2 |
|
b − a |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
ε |
|
|
||||||
|
|
ln(r2n )≤ ln |
|
|
|
|
, |
|
||||||||
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
b |
− a |
|
|||||||
|
|
n ln r2 |
|
|
|
|
ε |
|
|
|
||||||
|
|
≤ ln |
|
|
|
|
, |
|
||||||||
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
b − a |
|
|||||||
так как r2 <1, то ln r2 < 0 . Следовательно, |
|
|||||||||||||||
|
ε |
|
|
|
|
|
|
|
|
|
|
ε |
|
|||
n ≥ ln |
|
|
|
|
|
ln r2 ≈ −2,1 ln |
|
. |
||||||||
|
|
|
|
|
||||||||||||
b |
− a |
|
|
|
|
|
|
|
|
|
|
b − a |
||||
Так как |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ε |
|
|
< 0 , |
|
|
то n ≈ 2 . |
|
|||||||
ln |
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|||||||||||
|
b − a |
|
|
|
|
|
|
|
|
|
|
|
|
|
Задача 2. Найти методом золотого сечения точку минимума функции f (x) = x 2 − x на отрезке [0, 2] с точностью ε = 0,1 .
Решение. Очевидно, данная задача может быть легко решена классическим методом. Взяв производную и разрешив относитель-
но x* полученное уравнение, т.е.:
dfdx = 2x −1 = 0 → x = 0,5, f = −0,25.
174
Решим задачу с помощью метода «золотого сечения». В соответствии с рассматриваемым методом, параметры r1 = 0,382 ,
r2 = 0,618 . Учитывая это, результаты пошаговых расчетов можно свести в табл. 3.1.
|
|
|
|
|
|
|
Таблица 3.1 |
|
|
|
|
|
|
|
|
n |
∆n |
bn |
an |
xл |
xп |
f (xл) |
f (xп) |
1 |
2 |
0 |
2 |
0,764 |
1,236 |
–0,180 |
0,26 |
2 |
1,236 |
0 |
1,236 |
0,472 |
0,764 |
–0,241 |
–0,18 |
3 |
0,764 |
0 |
0,764 |
0,292 |
0,472 |
–0,207 |
–0,24 |
4 |
0,472 |
0,292 |
0,764 |
0,472 |
0,584 |
–0,249 |
–0,2 |
5 |
0,292 |
0,292 |
0,584 |
0,404 |
0,472 |
–0,241 |
–0,2 |
6 |
0,18 |
0,404 |
0,584 |
0,472 |
0,515 |
–0,249216 |
–0,2 |
7 |
0,112 |
0,472 |
0,584 |
0,515 |
0,541 |
–0,249775 |
–0,2 |
Рис. 3.8. Графическое изображение функции (задача 2)
Как следует из таблицы, x ≈ 0,515, f ≈ −0,249775 , что сов-
падает с результатами, полученными с помощью производной. График, соответствующий исследуемой функции, приведен на рис. 3.8.
3.2.3.2.Метод дихотомии
Вэтом методе используются производные целевой функции, поэтому он применим только в том случае, когда производная функции вычисляется достаточно просто.
175
В основу метода положен тот очевидный факт, что производная унимодальной функции меняет знак на отрезке поиска только один раз – в точке минимума (рис. 3.9).
Рис. 3.9. Характер производной унимодальной функции
Идея метода такова: на концах рассматриваемого отрезка вычисляют производные целевой функции, отрезок делят пополам и вычисляют производную в средней точке. Для следующей итерации выбирают тот отрезок из двух получившихся, на концах которого знаки производной различны, так как именно этот отрезок содержит точку экстремума.
Это общая идея метода, которая фактически сводит рассматриваемый метод к поиску корня уравнения f ′(x)= 0 на отрезке [a, b] известным методом дихотомии. Эта идея работает, когда минимум функции f (x) является внутренней точкой отрезка [a, b]. Если x
лежит на границе, то ситуация несколько иная, однако в алгоритме, который будет изложен ниже, эта проблема не затрагивается.
Метод дихотомии дает более быстрое уменьшение отрезка, чем метод «золотого сечения». После n итераций длина отрезка со-
ставляет 0,5n (b − a) , тогда как при использовании метода «золото-
го сечения» длина отрезка будет – |
r n (b − a), |
r ≈ 0,61 . Приведем |
|
2 |
2 |
176
таблицу коэффициентов уменьшения исходного отрезка [a, b] после n итераций для методов дихотомии и «золотого сечения»
(табл. 3.2).
|
|
|
|
|
Таблица 3.2 |
|
|
|
|
|
|
n |
1 |
2 |
3 |
… |
10 |
|
|
|
|
|
|
r n |
0,61 |
0,38 |
0,23 |
... |
0,0080 |
2 |
|
|
|
|
|
0,5n |
0,5 |
0,25 |
0,125 |
… |
0,001 |
Основной недостаток метода заключается в вычислительных трудностях, связанных с определением производных функции f (x) .
Алгоритм метода дихотомии (поиск минимума).
1.Задан отрезок [a, b]. Вычислить длину отрезка ∆ = b − a .
2.Вычислить среднюю точку отрезка xc = a + 0,5∆ и значение
производной dfdx (xc ).
Если производная равна нулю (с точностью ε1 ), то вычисления
прекращаются – x ≈ xc .
Если производная меньше нуля, перейти к шагу 3. Если производная больше нуля – к шагу 4.
3. Положить a = xc . Вычислить ∆ = b − a .
Если ∆ ≤ ε2 , то закончить вычисления, положить x ≈ xc . В противном случае – перейти к шагу 2.
4. Положить b = xc . Вычислить ∆ = b − a .
Если ∆ ≤ ε2 , то закончить вычисления, положить x ≈ xc .
В противном случае – перейти к шагу 2. Блок-схема алгоритма приведена на рис. 3.10.
177
Вход
Исходные данные a, b, ε1, ε2, f (x)
∆ = b − a
|
|
|
|
|
|
|
|
xc = a + 0,5∆ |
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вычисление |
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
f ′(xc ) |
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f ′(xc ) |
|
|
≤ ε1 |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
Нет |
|
Да |
|
|
|
|
|
||||||||||
|
b = xc |
|
|
|
|
|
|
|
f ′ < 0 |
|
|
a = xc |
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
∆ = b − a |
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
|
||||||
|
|
|
Нет |
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
∆≤ε2 |
|
|
|
|
a = xc |
|||||||
Рис. 3.10. Блок-схема алгоритма метода дихотомии |
|
|
|
|
||||||||||||||||||
|
|
|
|
|||||||||||||||||||
|
|
Выход |
||||||||||||||||||||
|
|
|
178 |
|
|
|
|
|
|
|
|
3.2.3.3. Метод парабол (метод полиномиальной аппроксимации)
Идея метода весьма проста: если на отрезке [a, b] , внутри кото-
рого лежит точка минимума x , функция f (x) достаточно хорошо аппроксимируется многочленом второй степени, то за приближен-
ное значение x целесообразно взять точку минимума этого многочлена. В случае когда функция гладкая и унимодальная, можно
предполагать, что в окрестности точки x она весьма близка к параболе. Ввиду этого метод парабол целесообразно применять после
того как найден отрезок достаточно малой длины, содержащий x (например, после нескольких шагов по методу золотого сечения).
Пусть |
известны три значения |
x1 < x2 < x3 , таких, что |
|||||
f (x )> f (x |
2 |
)< f (x |
3 |
). В этом случае x [x , x |
3 |
]. Построим много- |
|
1 |
|
|
1 |
|
член второго порядка, который проходит через три данные точки
(рис. 3.11).
Рис. 3.11. Графическое представление функции f (x) = α0 + α1x + α2x2
179
Коэффициенты α0 , α1 , α2 определяются из системы уравнений:
|
|
|
|
|
|
|
|
|
f |
(x |
|
)= α |
0 |
+ α |
1 |
x |
|
|
+ α |
2 |
x 2 , |
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
1 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
f (x2 )= α0 + α1 x2 + α2 x22 , |
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
f (x |
3 |
)= α |
0 |
+ α |
1 |
x |
3 |
|
+ α |
2 |
x 2 . |
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
||||||||
Минимум полинома определяется из условия |
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
df (x) |
|
|
= α1 |
|
+ 2α2 xˆ* = 0 . |
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
dx |
|
|
|
x=xˆ* |
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
Откуда получаем, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xˆ = − |
|
α1 |
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2α2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
Найдя α1 и α2 |
из линейной системы уравнений, получим |
|
|||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
(x ) |
|
x 2 |
|
|
|
|
|
1 x |
|
|
f (x |
|
) |
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
1 f |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
1 |
|
|
1 |
|
|
|
|
|
|
|
|
|
1 |
1 |
|
|
|
|
|
|
|
|
||||
|
|
|
xˆ* = − |
|
|
1 f (x2 ) |
|
x22 |
|
|
|
|
|
1 x2 |
f (x2 ) |
|
= |
|
|
|
|
||||||||||||||||||||
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||
|
|
|
|
|
|
|
1 |
|
f (x3 ) |
|
x32 |
|
|
|
|
|
1 |
|
|
x3 |
f (x3 ) |
|
|
|
|
|
(*) |
||||||||||||||
= |
1 (x22 − x32 )f (x1 )+ (x32 − x12 )f (x2 )+ (x12 − x22 )f (x3 ) |
|
|||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
. |
|
|||||||||||||||||||||
2 |
|
(x |
2 |
− x |
3 |
)f (x |
)+ (x |
3 |
− x |
|
)f (x |
2 |
)+ (x − x |
2 |
)f (x |
3 |
) |
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
||||||||||
Алгоритм метода парабол. |
|
|
|
|
|
x1 < x2 < x3 , |
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||
1. Найти |
|
|
тройку |
|
|
|
|
чисел |
|
|
|
|
|
|
|
таких, |
что |
||||||||||||||||||||||||
f (x1 )> f (x2 )< f (x3 ) (это можно сделать, например, используя ал- |
|||||||||||||||||||||||||||||||||||||||||
горитм поиска отрезка, содержащего точку минимума). |
|
|
|
|
|||||||||||||||||||||||||||||||||||||
2. Вычислить оценку xˆ по формуле (*). |
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||
|
xˆ* − x2 |
|
≤ ε , закончить процесс, положив x* = xˆ* . |
|
|||||||||||||||||||||||||||||||||||||
3. Если |
|
|
|||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ˆ |
* |
). |
|
|
|
|
|
|
|
|
|
|
|
|
В противном случае – вычислить |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||
f (x |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||
4. Из чисел |
x , |
x |
2 |
, x |
3 |
, xˆ* выбрать необходимую тройку чисел и |
|||||||||||||||||||||||||||||||||||
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
перейти к шагу 2.
180