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

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