Вторая пачка часть 149
.., где Г(x) имеет полюсы, и приводя затем значения ар¬гу¬мен¬та к x [-1, 1] на основании соотношения (5.1). В слу¬чае если при заданном значении аргумента вы¬чис¬ля¬е¬мая функция Г(x) имеет полюс, выход из программы осуществляется путем обращения к программе об¬ра¬бот¬ки ошибки. Ос¬нов¬ной вычислительный процесс стро¬ится на использовании раз¬ложения обратной гам¬ма-функции (5.4).
Формальные параметры процедуры. Входные: x (тип re¬al) - аргумент гамма-функции; k (тип integer) - пе¬ре¬клю¬ча¬тель: при k = -1 вычисляется 1/Г(x), при всех других зна¬чениях k полагается равным Г(x). Выходной: gamf (тип double) - зна¬че¬ние Г(x) или 1/Г(x).
FUNCTION GAMF (X: REAL;K:INTEGER) : REAL;
VAR G : REAL;
LABEL A0, A1, A2, A3;
BEGIN
IF (K<> -1) AND INT(X)=-ABS(X) THEN
BEGIN
WRITE (“ОШИБКА В ИСХОДНЫХ ДАННЫХ “);
EXIT;
END;
GAMF:=1;
WHILE X>1 DO
BEGIN
X:=X-1;
GAMF=GAMF*X;
END;
GAMF:=1/GAMF;
WHILE X<-1 DO
BEGIN
GAMF:=GAMF*X;
X:=X+1;
END;
IF X<>1 THEN
BEGIN
G:=(((((((((-0.00000018122*X+0.000001328554)*X
-0.000002625721)*X-0.000017527917)*X+
0.000145624324)*X-0.000360851496)*X- 0.000804341335)*X+0.008023278113)*X
-0.017645242118)*X-0.024552490887)*X;
GAMF:=GAMF*((((G+0.191091101162)*X- 0.233093736365)*X-0.422784335092)*X+
1)*X*(1+X);
END;
IF K = -1 THEN EXIT;
GAMF:=1/GAMF
END {GAMF}.
Процедура-функция GAMF была получена путем не¬кторой переработки и перевода программы вы¬чис¬ле¬ния гамма-функции, приведенной в работе Янке и др. (1968), с языка Бей¬си¬к вначале на язык FORTRAN [Бе¬ла¬шов, 1997], а затем на язык PASCAL и про¬тес¬ти¬ро¬ва¬на на IBM PC/AT-286 при x = 5, -2.5 для k = 1, -1, ког¬да таб¬личные значения Г(x) равны соответственно
Г(5) = 24, Г(-2.5) = -0.945308720... .
Полученные при этом результаты (см. табл. 5.2) со⬬па¬дают с точными до восьмого десятичного знବ¬ка.
Таблица 5.2
x k = 1 k = -1
5 24.00000000 0.04166667
-2.5 -0.94530872 -1.05785544
Другой алгоритм вычисления Г(x) и 1/Г(x), ос¬но¬ван¬ный на использовании асимптотического разложения Стир¬линга (5
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа