Текст подпрограммы и версий sfg6r_p.zip sfg6e_p.zip |
Тексты тестовых примеров tsfg6r_p.zip tsfg6e_p.zip |
Вычисление неполной бета - функции Ix (a, b) .
Подпрограмма - функция SFG6R вычисляет неполную бета - функцию
Ix(a, b) = Bx(a, b) / B(a, b) = x = 1/ B(a, b) ∫ t a -1 (1 - t)b -1 dt 0
где 0 ≤ x ≤ 1, a > 0, b > 0, B (a, b) - значение (полной) бета - функции от параметров a и b.
Если x < (a + 1) / (a + b + 1), то используется представление Ix (a, b) в виде непрерывной дроби:
Ix(a, b) = [ xa (1 - x)b / (a B(a, b) ) ] [ 1/(1+ d1/(1+ d2/(1+ ... ))) ] , где d2m+1 = - [(a + m) (a + b + m) x ] / [(a + 2m) (a + 2m + 1)] d2m = [ m (b - m) x] / [(a + 2m - 1) (a + 2m)]
Для достижения точности примерно в семь значащих цифр требуется приблизительно O ( (max (a, b) ) 1/2) итераций при суммировании непрерывной дроби.
Если x > (a + 1) / (a + b + 1), то сначала вычисляется I 1 - x (b, a), а затем Ix (a, b) = 1 - I 1 - x (b, a).
Справочник по специальным функциям. Под ред. Абрамовица M. и Стиган И. Изд - во "Наука", 1979.
function SFG6R(X :Real; A :Real; B :Real; EPS :Real; ITMAX :Integer; var IERR :Integer): Real;
Параметры
X - | заданное значение верхнего предела интегрирования (тип: вещественный); |
A, B - | заданные значения параметров a и b (тип: вещественный); |
EPS - | заданная относительная точность вычислений (тип: вещественный); |
ITMAX - | заданное максимальное количество итераций, предположительно необходимых для достижения заданной точности (тип: целый); |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы - функции; при этом: |
IERR=65 - | когда значение аргумента не принадлежит отрезку [0, 1]; значение функции полагается равным наибольшему представимому на машине числу; |
IERR=66 - | когда один или оба параметра неполной бета - функции меньше либо равны нулю; значение функции полагается равным наибольшему представимому на машине числу; |
IERR=67 - | когда заданное максимальное колчиство итераций недостаточно для заданных значений A, B и EPS; значение функции полагается равным наибольшему представимому на машине числу. |
Версии
SFG6E - | вычисление неполной бета - функции Ix(a, b) в режиме расширенной (Extended) точности; при этом параметры X, A, B и EPS должны иметь тип Extended. |
Вызываемые подпрограммы
SF66R - SF66E | вычисление натурального логарифма гамма - функции вещественного аргумента в режиме одинарной и расширенной (Extended) точности; используются в SFG6R и SFG6E соответственно. |
UTSF12 - UTSF13 | подпрограммы выдачи диагностических сообщений при работе SFG6R и SFG6E соответственно. |
Замечания по использованию
В подпрограммах - функциях SFG6R и SFG6E имеется глобальная запись (структура данных) _SFG6R2 с элементом elm1 типа Integer , которому присваивается то реальное количество итераций, которое было выполнено при счете. В SFG6R и SFG6E используются рабочие подпрограммы - функции SFG6R1 и SFG6E1 соответственно. |
Unit TSFG6R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, SFG6R_p; function TSFG6R: String; implementation function TSFG6R: String; var ITMAX,IERR :Integer; X,A,B,EPS,R :Real; begin Result := ''; { результат функции } X := 0.6; A := 16.0; B := 10.5; EPS := 0.000001; IТМАХ := 100; R := SFG6R(X,A,B,EPS,ITMAX,IERR); Result := Result + Format('%16.7f ',[R]) + #$0D#$0A; Result := Result + Format(' %5d %10d ',[IERR,_SFG6R2.elm1]) + #$0D#$0A; UtRes('TSFG6R',Result); { вывод результатов в файл TSFG6R.res } exit; end; end. Результаты: R = 0.47322 IERR = 0 ITREAL = 7