Страница 1 из 2
Для вычисления гамма-функции используется аппроксимация логарифма гамма-функции. Сама же гамма, а также бета - вычисляются через него. Для аппроксимации гамма-функции на интервале x>0 используется формула (для комплексных z) такого вида: Gam(z+1)=(z+g+0.5)z+0.5exp(-(z+g+0.5))*Sqrt(2*pi)*[a0+a1/(z+1)+a2/(z+2)+...+an/(z+n)+eps] Она похожа на аппроксимацию Стирлинга, но в ней имеется корректирующая серия. Для значений g=5 и n=6, проверено, что величина погрешности eps не превышает 2*10-10. Кроме того, погрешность не превышает этой величины на всей правой половине комплексной плоскости: Re z > 0. Для получения действительной гамма-функции на интервале x>0 используется рекуррентная формула Gam(z+1)=z*Gam(z) и вышеприведенная аппроксимация Gam(z+1). Также можно заметить, что удобнее аппроксимировать логарифм гамма-функции, чем ее саму. Во-первых, при этом потребуется вызов только одной математической функции -- логарифма, а не двух -- экспоненты и степени (последняя все равно использует вызов логарифма), во-вторых, гамма-функция -- быстро растущая для больших x, и аппроксимация ее логарифмом снимает вопросы переполнения. Для аппроксимации LnGam() -- логарифма гамма-функции -- получается формула: log(Gam(x))=(x+0.5)*log(x+5.5)-(x+5.5)+log(C0(C1+C2/(x+1)+C3/(x+2)+...+C7/(x+8))/x) Значения коэффициентов Ck являются табличными данными (см. в программе). Сама гамма-функция получается из ее логарифма взятием экспоненты. Бета-функция тождественно равна B(z,w)=Gam(z)*Gam(w)/Gam(z+w). Ее вычисление сводится к вычислению трех логарифмов гамма-функции и экспоненте от их комбинации. |