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

Результат

X1

X2

k

1,000000

0,000000

0

-2,701922

-0,217900

1

-2,704933

-0,188844

2

-2,706982

-0,166831

3

-2,708403

-0,150145

4

-2,709405

-0,137491

5

-2,710121

-0,127891

6

-2,710639

-0,120606

7

-2,711010

-0,115077

8

-2,711297

-0,110879

9

-2,711504

-0,107693

10

-2,711659

-0,105273

11

-2,711775

-0,103436

12

-2,711862

-0,102041

13

-2,711927

-0,100982

14

-2,711977

-0,100177

15

-2,712014

-0,099566

16

-2,712042

-0,099102

17

-2,712064

-0,098750

18

-2,712080

-0,098482

19

-2,712092

-0,098279

20

-2,712102

-0,098124

21

-2,712109

-0,098007

22

-2,712114

-0,097918

23

-2,712110

-0,097850

24

-2,712121

-0,097799

25

-2,712124

-0,097760

26

-2,712126

-0,097730

27

-2,712127

-0,097708

28

-2,712128

-0,097691

29

-2,712129

-0,097678

30

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

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

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;

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;

repeat

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;