Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
чис_мет_3.doc
Скачиваний:
29
Добавлен:
13.11.2019
Размер:
1.34 Mб
Скачать

2.2.2. Метод Зейделя.

Этот метод заключается в последовательной минимизации функции f(X) по направлению каждого из координатных векторов ej, j=1,…,n всегда начиная из самой последней точки построенной последовательности. После завершения минимизации по направлению последнего координатного вектора en цикл, называемый внешней итерацией, повторяется до тех пор, пока не выполнится одно из возможных условий окончания поиска:

|f(Xk)  f(Xkn)| или || Xk  Xk-n||, (2.19)

где 0  заданный параметр точности.

Для приближенного решения вспомогательной задачи минимизации

min{f(Xk  Sk) |R} (2.20)

на каждом внутреннем шаге внешней итерации целесообразно использовать изученный ранее метод поразрядного поиска. Опишем алгоритм метода Зейделя.

Шаг 0. Задать параметр точности 0, выбрать точку начального приближения X0ÎEn, вычислить значение функции f(X0), положить k=0.

Шаг 1. Положить j=kn +1, Sk=ej, где –целая часть числа k/n.

Решить задачу одномерного поиска (2.20), т.е. определить оптимальную величину шага k=arg min{f(Xk+Sk)|R}. Найти новую точку последовательности Xk+1= Xk+kSk и вычислить значение функции f(Xk+1).

Шаг 2. Если jn , то положить k=k+1 и перейти к шагу 1, иначе – перейти к шагу 3.

Шаг 3. Проверить условие достижения заданной точности (2.19). Если оно выполняется, то перейти к шагу 4, иначе – к шагу 1, положив k=k+1.

Шаг 4. Завершить вычисления, положив X* Xk+1, f*f(Xk+1).

Эффективность метода Зейделя существенно зависит от свойств целевой функции f(X). Так, если линиями уровня целевой функции двух переменных являются концентрические окружности, то очевидно, что два шага исчерпывающего спуска приведут в точку минимума из любой начальной точки, т.е минимум такой функции удается с помощью описанного алгоритма найти точно за конечное число шагов.

2.2.3. Метод Хука-Дживса

Эффективность решения задачи (2.1) рассмотренными методами покоординатного спуска можно повысить, если дополнить описанные алгоритмы периодически повторяющимся поиском точки минимума в направлении вектора XkXk-n из точек Xk, k=sn, где s – количество выполненных внешних итераций. Такой подход и лежит в основе метода ХукаДживса.

Алгоритм метода ХукаДживса содержит две основные процедуры:

1) Исследующий покоординатный поиск в окрестности данной точки с целью определения направления убывания функции f(X);

2) Перемещение в направлении убывания.

Опишем вначале алгоритм исследующего покоординатного поиска из заданной точки X с приращениями по каждой координате j, j=1,…,n.

Шаг 1. Положить =X, j=1.

Шаг 2. Сделать пробный шаг Y=  jej,где ej  j-й координатный вектор. Если f(Y)f( ), то перейти к шагу 3, иначе – к шагу 4.

Шаг 3. Сделать пробный шаг Y= +jej. Если f(Y)f( ), то перейти к шагу 5, иначе – к шагу 4.

Шаг 4. Положить =Y.

Шаг 5. Положить j=j+1. Если jn, то перейти к шагу 2. В противном случае исследующий поиск окончен, т.е. получена точка , для которой f( )f(X), если X.

В результате исследующего поиска может оказаться, что =X. Тогда исследующий поиск считается неудачным. Если при этом |||| , где  – заданная точность, то полагают X*=X. Если же заданная точность не достигнута, то полагают j=j, где (0;1)–коэффициент уменьшения шага и повторяют исследующий поиск.

Опишем теперь полный алгоритм ХукаДживса.

Шаг 0. Выбрать начальную точку X0ÎEn, вектор приращений =(1,…, n), коэффициент уменьшения (0;1), параметр точности 0, положить k=0.

Шаг 1. Провести исследующий покоординатный поиск из точки Xk и найти точку k. Если k Xk, то перейти к шагу 3, иначе – к шагу 2.

Шаг 2. Проверить условие достижения заданной точности ||||. Если оно выполняется , то перейти к шагу 5, иначе положить j=j и перейти к шагу 1.

Шаг 3. Сделать “диагональный ” шаг из точки k в направлении вектора kXk в точку X= k+( kXk )=2 kXk.

Шаг 4. Провести исследующий поиск в точке X и найти точку . Если f( )f( k), то положить Xk= k, k =X и перейти к шагу 3. Иначе положить k=k+1, Xk=X и перейти к шагу 1.

Шаг 5. Завершить вычисления, положив X*=Xk, f *=f(Xk).