Подскажите, пожалуйста, как мне реализовать логарифмическую производную гаммы-функции на pascal или delphi в подпрограммах?
Нашел в своем архиве, пользовался последний раз лет ...дцать назад
Логарифмическая производная гамма-функции (пси-функция)
Ссылки:
- Amit D., CACM, 1962, 12, algorithm 147
- М.И.Агеев, В.П.Алик, Ю.И.Марков, Библиотека алгоритмов 101б-150б / М., "Советское Радио", 1978, алгоритм 147б, стр.74-76
Дословный перевод с Алгол-60 на С:
Код:
/*
* Вычисляется
* d ln Г(x+1) Г'(x+1)
* Psi(x) = psi(x+1) = ------------- = ---------
* d x Г(x+1)
*
* x наращивается до величины a. При этом получается погрешность,
* 1 -8
* меньшая чем ----- * a
* 240
*/
#include <math.h>
double Psif(
double x, /* аргумент */
double a, /* величина, до которой наращивается x, если x < a */
int *ierr ) /* возвращает: 0, если получен результат */
/* 1, если x - целое и x < -1 */
{
static double pi = 3.141592654;
double Psi,y;
*ierr=0;
if (x==0.0)
return (-0.5772156649);
Psi=0.0;
if (x<=-1.0) {
if (x==floor(x)) {
*ierr=1;
return (0.0);
}
x=-x-1.0;
Psi=pi/tan(pi*x);
}
while (x<a) {
x+=1.0;
Psi-=1.0/x;
}
y=1.0/(x*x);
Psi+=log(x)+0.5/x-((y/252.0-0.00833333333)*y+0.0833333333)*y;
return (Psi);
}