Главная страница Алгоритмы [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. Нужно заменить в процедуре 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
[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 |