Lab_rab_6

advertisement
6.6 Лабораторная работа №6. Решение задачи
безусловной оптимизации функций одной переменной
Требуется найти минимум заданной функции одной
переменной методами равномерного поиска, золотого
сечения и методом Ньютона.
Пример.
Пусть задана функция одной переменной
f ( x)  x 4  2 x 2  4 x 1. Требуется найти минимум функции на
интервале [-10,10] с заданной точностью eps=0.001.
6.6.1 Метод равномерного поиска
Метод реализован в процедуре Search.
Входные параметры:

минимизируемая функция f типа FType, где
FType=Function (x: Real): Extended ;

интервал неопределенности [a,b], на котором
будет осуществляться поиск;

точность вычислений E;
Выходные параметры:

интервал, в котором лежит искомое значение x;

f min -минимальное значение функции ;

к- количество итераций .
Текст программы.
Function Search(a,b : Real; N : Integer; f : FType;var Res : Byte; E : Real)
: Extended;
Var Setka : Array of Real; //Содержит сетку узлов
h : Real;
//Шаг
I : Integer;
min : Extended;
//Значение минимального элемента
k : Integer;
//Номер минимального элемента
Begin
If N<=2 Then Begin //Недопустимое число узлов сетки, должно быть
больше 2-ух
Res:=1;//Код ошибки
Result:=0;
Exit;
End
Else
Begin
Res:=0;//Ошибки нет
End;
If b<=a Then Begin //Границы заданы неверно
Res:=2;//Код ошибки
Result:=0;
Exit;
End;
h:=(b-a)/(N-1); //Вычисления шага
SetLength(Setka,N);
Setka[0]:=a;Setka[N-1]:=b; //Заполнение узлов сетки
For I:=1 to N-2 Do Setka[I]:=a+h*I;//Заполнение узлов сетки
min:=f(Setka[0]);k:=0;
//Поиск минимального элемента
for I:=1 to N-1 do if f(Setka[I])<min Then Begin min:=f(Setka[I]);k:=I;End;
If (k=0) OR (k=N-1) Then Begin Result:=Setka[k];Exit;End;
//Минимум находится на границе
IterCount:=1;
While (Setka[k+1]-Setka[k-1])>E do //Пока требуемая точность не
достигнута делать ...
Begin
a:=Setka[k-1]; //Переход к новым границам
b:=Setka[k+1];
h:=(b-a)/(N-1); //Вычисления шага
Setka[0]:=a;Setka[N-1]:=b; //Заполнение узлов сетки
For I:=1 to N-2 Do Setka[I]:=a+h*I;//Заполнение узлов сетки
min:=f(Setka[0]);k:=0;
//Поиск минимального элемента
for I:=1 to N-1 do if f(Setka[I])<min Then Begin min:=f(Setka[I]);k:=I;End;
Inc(IterCount);
End;//Конец цикла
Result:=Setka[k];
End;
Результат работы программы.
Полученный интервал равен [-0.688;-0.680].
fmin=-0.581
к=2
6.6.2 Метод золотого сечения
Метод реализован в процедуре Gold_SechEx.
Входные параметры:

минимизируемая функция f типа FType, где
FType=Function(x : Real) : Extended ;

интервал неопределенности [a,b], на котором будет
осуществляться поиск;

точность вычислений E;
Выходные параметры:

RES - код ошибки;

интервал, в котором лежит искомое значение x;

fmin -минимальное значение функции;

к- количество итераций.
Текст программы.
Function GoldSechEx(a,b : Real;f : FType;var Res : Byte; E : Real): Real;
var c,d : Real;
//c,d - Точки деления
Begin
If b<=a Then Begin //Границы заданы неверно
Res:=1;//Код ошибки
Result:=0;
Exit;
End
Else
Res:=0;
c:=a+0.382*(b-a);//Задание точек деления
d:=a+0.618*(b-a);//Задание точек деления
If f(c)>f(d) Then //Проверка условий теоремы
Begin
a:=c; //Вычисление новых границ и точек деления
c:=d;
d:=c+0.382*(b-c);
End
Else
Begin
b:=d; //Вычисление новых границ и точек деления
d:=c;
c:=a+0.318*(b-a)
End;
IterCount:=1;
While (b-a)>E do
Begin
If f(c)>f(d) Then //Проверка условий теоремы
Begin
a:=c; //Вычисление новых границ и точек деления
c:=d;
d:=c+0.382*(b-c);
End
Else
Begin
b:=d; //Вычисление новых границ и точек деления
d:=c;
c:=a+0.318*(b-a);
End;
Inc(IterCount);
End;//Конец цикла
Result:=a+(b-a)/2;
End; {Function GoldSechEx;}
Результат работы программы.
Полученный интервал равен [-0.683;-0.682]
fmin=-0.581
К=22
6.6.3 Метод Ньютона
Метод реализован в процедуре Search.
Входные параметры:
 a,b - границы поиска минимума;
 f – функция, которую нужно минимизировать;
 df и ddf – первая и вторая производные соответственно;
 E – требуемая точность;
 X – на входе хранит начальное приближение, на
выходе возвращает точку минимума.
Выходные параметры:
 Res – возвращает код ошибки или ноль, если ошибок
не было;
 X -точка минимума;
 fmin -минимальное значение функции ;
 к- количество итераций .
Текст программы.
Function Search(a,b : Real; f,df,ddf : FType;var Res : Byte; E : Real;Var
X : Real) : Extended;
Var I,J : Integer;
X1 : Real;
Begin
IterCount:=0;
X1:=X;
Repeat
X:=X1;
X1:=X-df(X)/ddf(X);
Inc(IterCount);
Until (Abs(X1-X)<E) Or (X<a) Or (X>b);
Result:=f(X);
End;
Результат работы программы.
Полученная точка минимума х=-0,682
fmin=-0.581
К=5
Варианты заданий
1 f(x)=x2+e-0.35xmin
3 f(x)=x4-1,5arctgxmin
5 f(x)=-4x+e|x-0.2|min
x2
7 f ( x ) 10 x ln x   min
2
4
9 f(x)=x -1,1arctg1,5xmin
3
11 f ( x )  13 x 5 x  x ln x  min
15 f(x)=xsin x+2cos xmin
17 f(x)= 1 x 2  e 2 x min
19 f(x)=x2+2e-0.65xmin
21 f(x)=x4-1,3arctg 1,5xmin
23 f(x)=x2+3x(lnx-1)min
25 f(x)=x2-2x-2cos xmin
27 f(x)=-3,4x+e|x-0,4|min
29 f(x)=cos x/x2min
2 f(x)=x2+3e-0,45xmin
4 f(x)=x2-x+e-xmin
6 f(x)=x-lnxmin
1
8 f ( x )  e x   min
x
10 f(x)=-2,8x+e|x-0,6|min
12 f ( x )  e x  1 x 3  2 x  min
3
16 f(x)=-2,2x+e|x-0,8|min
18 f(x)=(x-4)2+lnxmin
20 f(x)=x4-0,9arctg2,5xmin
22 f(x)=2x2+x+cos2xmin
24 f(x)=x4+e-xmin
26 f(x)=x2+5e-0,05xmin
28 f(x)=x2-2x-e-xmin
30 f(x)=ex+e-2x+2xmin
Download