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

[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]

Для того чтобы алгоритм прошел на трансляторе необходимы поправки ... *.

НеаМОтря на эти небольшие поправки, алгоритм пред, ставляется очень удобным для кратных квадратур в произвольных областях с использованием произведения Картеса в любой явной одномерной формуле (а ие только в формуле Гаусса) для интегрирования в пределах [-1, 1]. Если в формуле используются .концевые точки, то вычисление будет, разумеется, повторяться для каж-дого участка ©той области.

Замечания к алгоритму 32 и к «Подтверждению к алгоритму 32»

К. Кёльбиг (Kolbig К. S. «САСМ», 1968, № 12)

Вещественная процедура multint** была исправлена в соответствии с «Подтверждением». Затем она была транслирована на машине CDC 3800 и проверена на втором интеграле, приведенном в «Подтверждении». Было обнаружено следующее.

1. Второе равенство -в «Подтверждении» должно иметь вид

Г Г Г dzdydx

J J J x + y + iz-k)

=,(2+(-L *)i„gl±«).

Нужно заметить, что Правая часть второго равенства, как оно напечатано в «Подтверждении», не соответствует ни данным в оригинале, ни приведенным выше пределам интегрирования.

2. Оператор

Low:=0;

в вещественной процедуре Low нужно заменить на Low:= -Upp(j,k);

* Указываются пять поправок к алгоритму 32, учтенных в алгоритме 32а. {Прим. ред.)

** Здесь используются обозначения, принятые в алгоритме Э2а. {Прим. ред.)



3. Подоператор оператора цикла в процедуре Upp должен иметь ©ид *

temp: == temp-xti]Xx[i]

После этих .исправлений можно .получить (после одной перестановки) результаты табл. 12, данной в «Подтверждении», которые нужно заменить .следующими (табл. 13).

Таблица 13

-1/2

s= 1

s = 2

s= 1

s = 2

W 2 3

5.454466 11.838664

9.361670 12.408983

1.0368787 1.1343568

1.1184317 1.1094294

Должно быть

11.46027375

1.10609686

Кроме того, поскольку .некоторые трансляторы требуют спецификаций, последние являются желательными **.

1. Нужно заменить в процедуре multint спецификацию integer п; на integer п, р;

2. Нужно .вставить спецификации

integer j; array х; в.заголовки процедур Low, Upp и Funev.

Некоторые из этих поправок были необходимы для обеспечения правильных результатов ib использованном я проверки Т1рансляторе.

Подтверждение к алгоритму 32а В. Е. Цейтлин, Москва, апрель 1971

Алгоритм 32а был транслирован на машине БЭСМ-6 в системе БЭСМ-АЛГОЛ и использован для вычисления нескольких интегралов. В частности, были вычислены два вида ннтелралов, приведенных в «Подтверждении к алгоритму 32» Г. Тачера (Т ache г Н. С. «САСМ», 1963, № 2), которые после исправлений согласно «Заме-

* Это поправление было уже сделано в русском переводе «Подтверждения к алгоритму 32» [24, с. 64]. {Прим. ред.)

** Первая из нижеприведенных поправок была уже внесена ранее в алгоритм 32а. {Прим. ред.)



чанию к алгоритму 32» и «Подтверждению .к алгоритму 32» К. Кёльбига (Kolbig К. S. «САСМ», 1968, № 12) имеют вид

1111

f Г f f ft (cos и - TuXsin и - 6m°Xcos и +

0 0 0 0

-f HXsiii«) dwdxdydz=sin k, , где u - kwxyz, и

С j* dzdydx

J J +:у + {z-k) -

-1 -Vi-x-Vi-xy

= .(2+(4-.).„l±l)

Необходимые для расчетов значения весов w и абсцисс и были взяты iB работе В. И. Крылова [33, с. 84]. Вспомогательные процедуры-функции, вычисляющие значения пределов интегрирования и подынтегрально!! функций для первого интеграла, имели вид real procedure аа (j,x); аа:=0; real procedure bb (j,x); bb:=l; real procedure ff (j,x);

comment xjl]=x, x2]=y, x3]=z и x[4]=w; begin real u;

u:=kXx[4]XxI3]Xxi[2].Xx[l]; ff:= if j<4 then 1.0 else kx (cos(u)-7XuXsin(u)-6Xut2Xcos(u) + ut3Xsin(u))

end;

Результаты трансляции для первого интеграла (цри р=2) приведены в табл. 14, а для второго - в табл. 15, где t - время счета, выраженное в секундах, и s=s[/].

Таблица 14

ft = 3u/2

ft = 27E

0.993703925 0.999639534

-0.0333602 -0.1382X10-=

0.02016547 -0.96397281

. 0.881489762 :-0.003713358

0.0293 0.47,\

Должно быть




[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.0107