Главная страница Алгоритмы [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] Замечание и подтверждение к алгоритму ЗОа Г. В. Пеледов, Москва, февраль 1967 На странице 68 [24] строка 16 сверху имеет вид testbn: if (b[n]=0)V(abs(hfn]/b[n])>kk) then... строка 21 сверху имеет вид if (dln]=0) V(abs(hIn]Mn])>kk then... Такая -запись условия ориентирована на трансляторы, которые начинают вычисление логического терма с левого дизъюнктивного члена и вслучае истинности последнего не вычисляют .правый член. Эталонный язык никак не трактует порядок вычисления логического терма. Поэтому данную запись условия нужно считать неточной. В частности, транслятор МЭИ-1 производит вычисление дизъюнкции справа налево. В таких трансляторах проверка if(b[n]=:0) или if(d[n]=0) не .может предохранить от деления на нуль в случае, когда значения Ь[п\ и d[n\ равны нулю. Поэтому вместо строки 16 нужно писать testbn: if bln]=0 then go to quadr; if abs(h{n]/b[n]) >kk then go to quadr; вместо строки 21 нужно писать if d[n]=0 then go to Iin; if abs(4n]/ din]) >kk then go to lin; Исправленный алгоритм был проверен на примерах «Подтверждения» В. Александера [24, с. 60] ,и дал верные результаты. АЛГОРИТМ 316 Гамма-функция [S14] Для значений х из интервала [2, 3] используется аппроксимирующий полином. В этом интервале максимальная абсолютная погрешность ё(л:) <0,25Х10-. Для х>3 мы имеем Г(л;) - (л:-1) (л:-2) ... Г(л;-п), где-2<л:-п<3, а для х<2 имеем Г(л;) = = V{x+n)fx{x+l) ... (x+ti-l), где 2х+п3. При л;0 - выход к нелокализованной метке signat3l. real procedure gamma (x); value x; real x; bcgtrt real n; n: = l; ctart: if x<0 then go to signal3l • if x=2 then go to fin; if x<2 then begin h:=h/x; x:=x+l; go to start end; if x3 then begin x:=x-1; h: = hXx; go to start end; g x:=x-2.0; К h:=(((((((0.0016063118Xx+0.005l589951)X: IP +0.0044511400) Xx+0.0721101567) Xx . +0.0821117404) Xx+0.4117741955) XX +0.4227874605) X x+0.9999999758) X h; fin:-gamma: = h end gamma; Свидетельство к алгоритму 316 Алгоритм 316 является стереотипным переизданием алгоритма 31а. Для вычисления гам,ма-функции можно пользоваться И алгоритмами 221а, 22ба, 291 и 309. Свидетельство к алгоритму 31а Алгоритм 31а получен в результате исправления, сокращения и ординарно!! переработки алгоритма 31 (CoUinge R. М. «САСМ», 1961, №2). В алгоритм 31 были, введены изменения, заключающиеся в замене некоторых чисел типа real на соответствующие числа типа integer (например, вместо л;:=2.0 было вставлено х-2). Кроме того, вместо присваивания функции Г(л;) при хО некоторого «большого» значения, сделан переход к нелокализованной метке signatSl. После переработки алгоритм проверялся с помощью системы ТА-1. [Значения функции Г(л;) вычислялись для х=1, 1.5, 2, 2.3, 2.75, 3, 3.5 и сравнивались с резуль- татами ручного счета. X gamma (х) Ручной счет • 1.0 1.00000000 1.000000 1.5 0.88622691 0.886224 2.0 1.00000000 1.000000 2.3 1.16671193 1.166711 2.75 1.60835943 1.608355.. 3.0 1.99999997 2.000000 3.5 3.32335091 3.3233512 . О signalSl - Гамма-фуикция описывается, например, в работе Я. С. Дымарского ,и др. [3, с. 1в7-189]. Подтверждение к алгоритму 31 П.-Г. Беренц (Behrenz Р. G. «САСМ», 1962, № Г2) Процедура gamma была успешно дропущена на машине FACIT EDB, использующей язык FACIT-ALG0L1, который является реализацией АЛГОЛ-60 для машины FACIT EDB. Не потребовалось никаких изменений программы. Относительная погрешность была такой же, .как указывалось в примечании к процедуре gamma, т. е. 10-«. АЛГОРИТМ 326 Вычисление кратных интегралов по Гауссу [D1] Процедура multint выполняет одно-, дву-, трех-,. й-кратное интегрирование. Результат fcft(l) ЬЬ(П.Хг.....*„ ,) muttifit= ff(l, Xi)dXi... j ff{n,Xt.....Xn)dXn. Переменная интегрирования x\J\. Значение /=1 соответствует самому внешнему интегралу, /=п - самому внутреннему. Данная процедура делит каждый /-й интервал на s[/] равных подынтервалов и выполняет р-точеч-ное гауссовское интегрирование на каждом подынтервале с весовыми функциями и абсциссами «[[/]]. Параметр р - размер массивов весовых функций и абсцисс, кот01рый должен быть задан .в основной процрамМе вместе с этими массивами. [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.0133 |