- •Т.О., если определен корень характеристического уравнения, то можно понизить на единицу степень полинома и приступить к решению уравнения:
- •Идентификаторы совпадают для переменных: .
- •Приближенное значение производной можно записать: т.К. , то далее процесс итераций х следует повторить до достижения величиной заданной точности е. В общем виде алгоритм запишется :
- •1. Какие узлы использовать.
- •Интерполяционные полиномы Эрмита
- •Сплайны
- •Методы поиска экстремума функции многих переменных.
- •Метод покоординатного спуска (Гаусса – Зейделя)
- •Метод прямого поиска (конфигураций).
- •Градиентные методы.
- •Наискорейший спуск
- •Метод дфп
Градиентные методы.
Требуют знания значения функции и ее градиента. Ясно, что основная идея метода заключается в отказе от “слепого” поиска вдоль фиксированных осей координат и переходе к движению сразу в направление возрастания функции (противоположное – убывание функции). Пусть сделан переход от точки х к точке х +hd , где d-некоторое направление , а h – шаг. Следовательно, перемещение происходит от точки (х1, х2 ,…, хn) в точку (х1 +δх1 , х2 +δx2 ,…, хn +δxn), где δхi=hdi
di – косинусы направления d (проекции направления d на оси координат) такие, что
Изменения значения функции df=f(х1 +δх1 ,…, хn +δxn) - f(х1 ,…, хn)=
Частные производные (0) вычисляются по ряду Тейлора f(x0+h) - f(x0)=
Наискорейший спуск
Возникает задача как выбрать направление d , чтобы получить наибольшее изменение функции df при
соблюдении условия (*) т.е. с ограничением.
Используем метод множетелей Лагранжа для поиска функции
или
На основе метода df достигает max , если φ достигает max. Берем производную от φ
(j=1,2,…,n) и приравниваем ее нулю , получаем ,
следовательно,
. “Направления” совпадают с градиентами функции f(x) в точке x, или g(x).
Для min - f(x) или – g(x). Уравнение (0) можно записать так , где Θ – угол между векторами g(x) и dx. Угол выбран Θ=1800 , чтобы обеспечить направление – g(x):
.
Значения λi , минимизирующее функцию φ может быть найдено любым методом одномерного поиска. В чистом виде метод работает медленно и не надежно. Но прежде чем перейти к более эффективным методам , рассмотрим свойства квадратичных функций.
F(x)= , где a – константа , b – постоянный вектор , G – положительно определенная симметрическая матрица.
min в точке .
Поставим задачу так, что в окресности точки х0 любую функцию φ(х) можно аппроксимировать
квадратичной функцией:
Пусть min φ(x) находится в точке хm
Берем производную и приравниваем ее к нулю.
, откуда :
, т.е. в итерационном виде:
, а с учетом множителей Лагранжа:
.
Видим, что по сравнению с методом наискорейшего спуска требуется умножение на G-1(xi), а это самая трудоемкая операция метода.
Но если проводить умножение на Hi , а не G-1(xi) , то получим метод Давидона – Флетчера – Пауэлла (ДФП). - симметрическая положительно определенная матрица. В ходе вычислений она приближается к матрице
Метод дфп
Начнем поиск из начальной точки , взяв H0 в виде Е.
На шаге i имеется точка и матрица H.
В качестве направления поиска взять направление
Чтобы найти λi , необходимо минимизировать вдоль прямой .
Положить
Положить
Найти и . Завершить процедуру, если или достаточно малы.
Положить
Обновить матрицу Н: , где ; .
Увеличить i+1 и вернуться на шаг 2.
Доказательства использования Hi отсутствуют.
procedure DFP;
type tt=array[1..10] of real; var X,P,Q,R,D,G,U,V,Y,M:tt;
type mat=array[1..10,1..10] of real; var H:mat;
var I,J,N:integer;
var FP,GI;GP;QX,HH,BB,FQ,GQ,ZZ,FR,GR,KK,DK,WK:integer;
begin GQ:=0;
for I:=1 to N do
begin
for J:=1 to N do H[I,J]:=0; H[I,I]:=1;
end;
TT:=0;
4: for I:=1 to N do
begin
P[I]:=x[I]; Y[I]:=x[I];
end;
FUNK;
FP:=Z; GRAD; GI:=G0;
for I:=1 to N do
begin
U[I]:=G[I]; D[I]:=0;
for J:=1 to N do D[I]:=D[I]-H[I,J]*G[J];
6: GP:=0;
for I:=1 to N do CP:=GP+G[I]*D[I];
if GP<0 then goto 68;
QX:=abs(2*FP/GP);
if QX>1 then QX:=1;
for I:=1 to N do
begin x[I]:=P[I]-Qx*D[I]; P[I]:=x[I];
end;
FUNK;
FP:=Z; GRAD; G1:=G0; goto 6;
68: QX:=abs(2*FP/GP);
if QX>1 then Qx:=1;
HH:=QX; BB:=HH;
for I:=1 to N do
begin Q[I]:=P[I]+BB*D[I]; X[I]:=Q[I];
end;
FUNK; FQ:=Z; GRAD; GZ:=G0; GQ:=0;
7: BB:=HH;
for I:=1 to N do
begin Q[I]:=P[I]+BB*D[I]; X[I]:=Q[I];
end;
FUNK; FQ:=Z; GRAD; GZ:=G0; GQ:=0;
for I:=1 to N do GQ:=GQ+G[I]*D[I];
if ((GQ>0)or(FQ>FP)) then goto 83;
HH:=2*HH; goto 7;
83: ZZ:=3*(FP-FQ)/HH; ZZ:=ZZ+GP+GQ; WW:=ZZ*ZZ-GP*GQ;
if WW<0 then WW:=0; W:=sqr(WW);
DD:=HH*(1-(GQ+W-ZZ)/(GQ-GP+2*W));
for I:=1 to N do x[I]:=P[I]+DD*D[I]; FUNK; FR:=Z;
GRAD; G3:=G0; GR:=0;
for I:=1 to N do GR:=GR+G[I]*D[I];
if ((Z<=FP) and (Z<=FQ)) then goto 11;
if GR>0 then goto 99;
HH:=HH-DD;
for I:=1 to N do P[I]:=x[I];
FP:=Z; GP:=GR; G1:=G0; goto 83;
99: HH:=DD;
for I:=1 to N do Q[I]:=x[I];
11: KK:=0; WK:=0; DK:=0;
for I:=1 to N do
begin U[I]:=G[I]-U[I]; V[I]:=x[I]-Y[I];
end;
for I:=1 to N do
begin
M[I]:=0;
for J:=1 to N do M[I]:=M[I]+H[I,J]*U[J];
KK:=KK+M[I]*U[I]; WK:=WK+V[I]+U[I];
DK:=DK+V[I]*V[I];
end;
if ((KK=0) or (WK=0)) then goto 126