Главная страница Алгоритмы [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
Первый интеграл был проверен только с s[/] = l и с различными формулами Гаусса для интегралов на интервале (-1, +;1). Результаты приведены в табл. И. Для второго интеграла были использованы два значения S и два значения р. Результаты даны в табл. 12. Таблица 12
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 |