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

Результат

X1

X2

k

1,000000

0,000000

0

-1,732188

-0,160820

1

-2,862285

-0,212222

2

-2,578300

-0,133827

3

-2,746364

-0,130894

4

-2,691219

-0,113403

5

-2,720832

-0,108669

6

-2,707196

-0,103344

7

-2,714240

-0,101373

8

-2,710919

-0,099656

9

-2,712631

-0,098913

10

-2,711829

-0,098345

11

-2,712247

-0,098075

12

-2,712055

-0,097884

13

-2,712158

-0,097788

14

-2,712112

-0,097723

15

-2,712137

-0,097689

16

-2,712126

-0,097667

17

Метод Ньютона-Рафсона с дроблением шага 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;

label metka;

var k,N0,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,L,delta,fP:double;

begin

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

delta:=0.05;

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

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

k:=0; L:=1; N0:=0; N1:=2; N2:=0;

repeat

if ((k mod 15) =0) then

begin

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;

end;

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;

y:=F(x[1,k],x[2,k]);

N0:=N0+1;

fP:=matr1[1]*P1+matr1[2]*P2;

metka:

if ((F(x[1,k]-L*P1, x[2,k]-L*P2)-y)>(-delta*L*fP)) then

begin

L:=L/2;

N0:=N0+1;

goto metka;

end;

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

x[2,k+1]:=x[2,k]-L*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(matr1[1]*matr1[1]+matr1[2]*matr1[2]);

k:=k+1;

until (dd<=E2);

x1:=x[1,k];

x2:=x[2,k];

y:=F(x1,x2);

N:=N0+N1+N2;

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

+' y='+FloatToSTr(y);

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

+' k='+IntToStr(k);

end;

X1

X2

k

1,000000

0,000000

0

-1,732188

-0,160820

1

-2,346246

-0,092891

2

-2,736660

-0,057160

3

-2,732480

-0,064031

4

-2,729036

-0,069692

5

-2,726118

-0,074502

6

-2,721699

-0,081797

8

-2,716566

-0,090286

12

-2,713068

-0,096082

20

-2,712902

-0,096358

21

-2,712766

-0,096584

22

-2,712653

-0,096771

23

-2,712561

-0,096924

24

-2,712484

-0,097051

25

-2,712138

-0,097625

45

Сравнительная таблица.

N0

N1

N2

N

k

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

-

160

237

397

79

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

41

80

117

238

39

1 модификация

29

50

3

82

24

2 модификация

111

214

21

346

106

Метод поиска по образцу

74

-

-

74

19

Деформируемый симплекс

39

-

-

39

19

Гаусса-Зейделя

61

6

-

67

2

Наискорейший спуск

59

8

-

67

2

По результатам работы наилучшим методом второго порядка оказался метод Ньютона-Рафсона с дроблением шага 1 модификация. Но уступает всем методам первого порядка. Наилучшим среди всех методов оказался метод деформированного симплекса.