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

Методы поиска экстремума функции многих переменных.

Рассмотрим сначала прямые методы, которые требуют знания лишь значения функций и не требуют вычисления производных.

Метод покоординатного спуска (Гаусса – Зейделя)

Необходимое условие существования экстремума функции многих переменных равенство нулю частных производных в точке экстремума.

f(x1,x2,…,xn)=f(x)

Градиенты функции обозначают f(x) или g(x). Тогда g(x)=0. В случае глобального max f(x)<f(x0).

Точно также как и для функции одной переменной имеем:

  • максимум, если второе произведение от f по х, т.е. G(x)-гессиан, отрицательно определен

  • минимум, если G(x) положительно определен.

Пример: f(x)=x12+x22+x32-2x1-4x2-6x3+50

g(x)= x1=1 , x2=2 , x3=3.

G(x)= - положительно определен. Все собственные значения равны 2.

В точке (1,2,3) f(x) достигает максимума.

Таким образом, самый очевидный метод поиска экстремума многих переменных – это метод покоординатного спуска. Сначала любым из методов для функции одной переменной определяется экстремум функции относительно этой переменной. Затем переменная фиксируется и идет поиск экстремума по другой переменной и т.д. Из описания алгоритма метода следует, что шаг движения

по координатам х задан Δх. Он обычно одинаков для всех координат х.

Когда найдено значение всех координат в точке экстремума x1*, x2*,…,x* (одна итерация), шаг уменьшаемся.

Процесс итерации заканчивается, если изменение шага не приводит к изменению функции.

Метод наиболее эффективен для сепарабильных функций, у которых отсутствуют перекрестные связи между координатами. Поэтому решение достигается за одну итерацию. В противном случае может потребоваться несколько итераций.

Пример сепарабильной функции:

F(x)= Fi(xi – xi*) , где

Fi – унимодальные функции минимумом в начале координат.

Графическая иллюстрация для одной итерации:

  • найдены x1* и x2* .

  • для малого шага Δх= Δх1= Δх2. Значения x* и x* должны совпадать

для очередных приближений.

F=x12+x22+x32

F= (x1 –1)2+( x2 - 2)2+( x3-3)2=0

Procedure COORD;

var I:integer; var E,B,C,L,H : real; label 1,2;

begin

H:=0.1; E:=1E-5; L:=H;

2: for I:=1 to N do

begin

B:=1E+38;

1: x[I]:=x[I]+H; FUNK; C:=B; B:=F;

if (F-C)<0 then goto 1;

H:=-H/3;

if abs(H)>=abs(L/3) then goto 2;

H:=L;

end;

L:=L/9; H:=L;

if E/9<=L then goto 1;

write(x);

end;

Число переменных N задано и описано в основной программе. Вектор Х должен быть задан по начальным приближениям Х0 и описан в основной программе.

Результат расчета процедуры FUNK должен содержаться в F. Входным параметром ее должен быть Х.

Разновидностью метода является метод спирального покоординатного спуска.

При использовании этого метода шаг по координатам меняется при переходе от одной переменной к другой.

Procedure COORDS;

var I:integer; var B,C,N,E:real; label 1,2;

begin

H:=0.1; E:=1E-5;

2: for I:=1 to N do

begin

B:=1E+38;

1: x[I]:=x[I]+H; FUNK; C:=B; B:=F;

if (F-C)<0 then goto 1;

end;

H:=-H/5;

if abs(H)>abs(E/3) then goto 2;

write(x);

end;

Методы покоординатного спуска плохо работают, если функция имеет “овраг”, дно которого не ориентировано вдоль координатных осей.