Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
27
Добавлен:
02.05.2014
Размер:
192 Кб
Скачать

ГОУ ВПО

УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ

ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Курс «Методы оптимизации»

Лабораторная работа №3

Выполнила:

студентка группы ВМ-324

Ямурзина Е.А.

Проверил: Хасанов А. Ю.

Уфа – 2007

Цель работы: знакомство с оптимизационными задачами, изучение различных методов многомерной оптимизации и сравнение эффективности их применения для конкретных целевых функций.

Задание: Минимизировать функцию

Начальное приближение [1;0], точность Е=4·10-4 .

Методы:

  1. Метод Ньютона

  2. Метод Ньютона-Рафсона с дроблением шага

  3. Метод Ньютона-Рафсона с дроблением шага 1 модификация

  4. Метод Ньютона-Рафсона с дроблением шага 2 модификация

Метод Ньютона

Схема базового алгоритма.

шаг 1:

На первой итерации, при k = 0, вводятся начальное приближение x0 и условие останова ε3. Вычисляются градиент f '(x0) и матрица f ''(x0).

шаг 2:

Определяется направление спуска pk, как решение системы линейных уравнений f ''(xk)·pk = – f '(xk) (например, методом исключений Гаусса).

шаг 3:

Определяется следующая точка спуска:

xk+1 = xk + pk.

шаг 4:

Вычисляются в этой точке xk+1 градиент f '(xk+1) и матрица f ''(xk+1).

~

~

шаг 5:

Если ||f '(xk+1)|| ε3, то поиск на этом заканчивается и полагается

x = xk+1 и y = f(xk+1).

Иначе k = k + 1 и переход к шагу 2.

Блок-схема алгоритма поиска методом Ньютона

Листинг программы

procedure TForm1.Button1Click(Sender: TObject);

const A=25;

B=0.9;

C=0.35;

D=0.35;

function F(x1,x2:double):double;

begin

F:=a*x1+b*x2 + exp(c*x1*x1+d*x2*x2);

end;

function F1(x1,x2:double):double;

begin

F1:=a + exp(c*x1*x1+d*x2*x2)*2*C*x1;

end;

function F2(x1,x2:double):double;

begin

F2:=B + exp(c*x1*x1+d*x2*x2)*2*D*x2;

end;

function FF11(x1,x2:double):double;

begin

FF11:=exp(c*x1*x1+d*x2*x2)*2*C*x1*2*C*x1+exp(c*x1*x1+d*x2*x2)*2*C;

end;

function FF12(x1,x2:double):double;

begin

FF12:=exp(c*x1*x1+d*x2*x2)*2*C*x1*2*D*x2;

end;

function FF22(x1,x2:double):double;

begin

FF22:=exp(c*x1*x1+d*x2*x2)*2*D*x2*2*D*x2+exp(c*x1*x1+d*x2*x2)*2*D;

end;

var k,N1,N2,N:integer;

x:array [1..2, 0..300] of double;

matr:array[1..2,1..2] of double;

matr1:array[1..2] of double;

P1,P2,dd,E2,det,x1,x2,y:double;

begin

x[1,0]:=1; x[2,0]:=0; E2:=0.0004;

matr1[1]:=F1(x[1,0],x[2,0]);

matr1[2]:=F2(x[1,0],x[2,0]);

k:=0; N1:=2; N2:=0;

repeat

matr[1,1]:=FF11(x[1,k],x[2,k]);

matr[1,2]:=FF12(x[1,k],x[2,k]);

matr[2,1]:=matr[1,2];

matr[2,2]:=FF22(x[1,k],x[2,k]);

N2:=N2+3;

det:=matr[1,1]*matr[2,2]+matr[2,1]*matr[1,2];

P1:=(matr[1,2]*matr1[2]+matr[2,2]*matr1[1])/det;

P2:=(matr[1,1]*matr1[2]+matr[2,1]*matr1[1])/det;

x[1,k+1]:=x[1,k]-P1;

x[2,k+1]:=x[2,k]-P2;

matr1[1]:=F1(x[1,k+1],x[2,k+1]);

matr1[2]:=F2(x[1,k+1],x[2,k+1]);

N1:=N1+2;

dd:=SQRT(SQR(matr1[1])+SQR(matr1[2]));

k:=k+1;

until dd<=E2;

x1:=x[1,k];

x2:=x[2,k];

y:=F(x1,x2);

N:=N1+N2;

Label11.Caption:='x1='+FloatToSTr(x1)+' x2='+FloatToSTr(x2)

+' y='+FloatToSTr(y);

Label8.Caption:='N=N1+N2='+IntToSTR(N1)+'+'+IntToSTR(N2)+'='+IntToSTR(N)+

' k='+IntToSTR(k);

end;

X1

X2

k

1.000000

0.000000

0

-14.392607

-0.906028

1

-13.995797

-0.881048

5

-12.951928

-0.815335

15

-11.936727

-0.751428

24

-10.958122

-0.689824

32

-9.886760

-0.622380

40

-8.848413

-0.557016

47

-7.856122

-0.494550

53

-6.929224

-0.436201

58

-5.871352

-0.369604

63

-4.883534

-0.307283

67

-3.703357

-0.227891

71

-2.846062

-0.131463

74

-2.712132

-0.097637

77