
Результат
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 модификация. Но уступает всем методам первого порядка. Наилучшим среди всех методов оказался метод деформированного симплекса.