Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Методы поиска экстремума функции многих переменных.
Рассмотрим сначала прямые методы, которые требуют знания лишь значения функций и не требуют вычисления производных. Метод покоординатного спуска (Гаусса – Зейделя) Необходимое условие существования экстремума функции многих переменных равенство нулю частных производных в точке экстремума. 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. Значения x1к* и x2к* должны совпадать для очередных приближений.
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; Методы покоординатного спуска плохо работают, если функция имеет “овраг”, дно которого не ориентировано вдоль координатных осей.
|