Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Лабораторная работа №6. Решение задачи безусловной оптимизации функций одной переменной




 

Требуется найти минимум заданной функции одной переменной методами равномерного поиска, золотого сечения и методом Ньютона.

Пример.

Пусть задана функция одной переменной

. Требуется найти минимум функции на интервале [-10,10] с заданной точностью eps=0.001.

 

6.6.1 Метод равномерного поиска

Метод реализован в процедуре Search.

Входные параметры:

- минимизируемая функция f типа FType, где FType=Function (x: Real): Extended ;

-  интервал неопределенности [a,b], на котором будет осуществляться поиск;

- точность вычислений E;

Выходные параметры:

-  интервал, в котором лежит искомое значение x;

- fmin -минимальное значение функции ;

- к- количество итераций .

 

   Текст программы.

 

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

7

9 f(x)=x4-1,1arctg1,5x®min

11

15 f(x)=xsin x+2cos x®min

17  f(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

8

10 f(x)=-2,8x+e|x-0,6|®min

12

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


 










Последнее изменение этой страницы: 2018-04-12; просмотров: 501.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...