Главная страница  Алгоритмы 

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [ 26 ] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57]

Значения нижних и верхних границ и функций должны,Разумеется, быть известны в .момент их использова-дйЯ- Если бы каждая из них составляла отдельную процедуру- ™ потребовалось написать и транслировать Зп различных процедур. Это исключается путем группировки ях в нроцедуры-фувкции аа, bb и ff, которые вычисля-К)т нижние и верхние границы и значения функций соответственно в каждом /-,м интервале. Поскольку каждая из этих процедур-функций остается в сущности комбинацией «подпроцедур», то .в каждой из них должно быть предусмотрено разветвление (например, переключатель), обеспечивающее передачу управления «подпро-цедуре», которая используется в /-.м интервале. Заметим, что аа.{3, х), например, формально является функцией

от х[1], х[2], ....., х[п]; это сделано только потому,

что удобнее формально считать aa{j, х) функцией всего маосива х для всех /. Фактически же, разумеется, аа{3, х) будет функцией только от и л;[2]. real procedure multint(n,aa,bb,ff,s,p,u,w); value n,p; integer n,p-, array s,u,w; real procedure aa,bb,ff; ggin real f; integer j,m; array a,b,c,d,r,x[l:n+l]; integer array k,h[l:n]; r[n+l]: = dln+l]: = l; m: = l; go to base;

h[j]:=h[j]+.l; . • ••

clj]; = a{j]+(hD]-0.5)XdlJ];

labx: x[i]: = c[j]+0.5Xd[j]Xuk[j]]; if j=n then go to sum; m:=j + l; base: for j:=m step 1 until n do

begin a[j]: = aa(j,x); b[j]:=bb(j,x); dO]:=(bO]-a[j])/s{j]; clj]: = alj]+0.5XdlJ]; .

4j]:=clj]+0.5Xdlj]Xufl]; r[j]:=0; h0]:=klj]: = l . ;

end;

j:==n; ;

sum: f:=:ff(j,x);

rlj]:= r(j]+r[j + l]Xd[j + l]XfXwIk[j]]; If k[j]<p then

begin k[j]:=k[j] + l; go to labx end; if b[j]<slj] then go to labh;




jf j=50 then go to sum; multint:=rIl]Xd[l]X0.5tn end multint;

Свидетельство к алгоритму 326

Алгоритм 326 получен из алгоритма 32а путем внесения в «его поправок, указанных в «Замечании к алгоритму 32а» О. С. Квасова [27, с. .177] и в нижеприведенном «Замечании к алгоритму 32» и к «Подтверждению к алгоритму 32» К. Кёльбига.

Поскольку с этими поправками алгоритм 32а отлаживался В. Е. Цейтлиным (ом. нижеследующее «Подтверждение к алгоритму 32а»), то новой трансляции алгоритма 326 не делалось.

Свидетельство к алгоритму 32а

Алгоритм 32а получен в результате исправления, сокращения и ординарной переработки алгоритма 32 (Freeman R. «САСМ», 1961, № 2).

Подтверждение к алгоритму 32

Г. Тачер (Thacher Н. С. «САСМ», 1963, № 2)

Процедура multint была переведена на язык ACT-III для машины LGP-30 и была проверена на интегралах 1111

k [cosM - luXmu - buycosu ~j-

~\- MXsin «] dwdxdydz - sin k, где u=kwxyz, и

f f f dzdydx

J J J x + y + {z-kr-

Процедуры для второго интеграла на языке АЛГОЛ имеют вид*

* В алгоритме 32а идентификаторы Low. Upp и funev заменены соответственно на аа. bb. ff. {Прим. ред.)



real procedure Low (j,x); Low:=0; . "

real procedure Upp(j,x);

comment z=x[3], y=x[2], x=x[l]; begin integer i; real temp; temp; = 1.0;

for i:= j-1 step -1 until 1 do

temp:=temp-x[i] Xx[i]; Upp: = sqrt (temp) end;

real procedure Funev(j,x);

comment вещественный параметр k - глобальный;

Funev: = if j<3 then 1.0 else . l/(x[l]x41]+xI2]XxI2]+ (x[3]-k) t2);

" Таблица 11

ft =71/2

ft=lE

ft = 3k/2

ft = 2ic

0.993704

-0.0333603

0.020166

6.881490

1.000032

0.0000848

-1.061651

-0.597419

0.999999

0.0000001

-0.998407

0.0027035

1.000000

-0.0000002

-1.000028

-0.0007857

Должно быть

1.0000000

0.0000000

-1.0000000

0.0000000

Первый интеграл был проверен только с s[/] = l и с различными формулами Гаусса для интегралов на интервале (-1, +;1). Результаты приведены в табл. И.

Для второго интеграла были использованы два значения S и два значения р. Результаты даны в табл. 12.

Таблица 12

ft =

ft =

s = l

« = 2

s = 2

5.454460 9.361666

11.838651 12.408984

1.0368770 1.1343551

1.1184305 1.1094278

Цолмшо быть

11.46027376

1.10609687

jj.- Очевидно, что (О, О, k) является особой точкой.




[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [ 26 ] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57]

0.0114