2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Логарифмическая производная гамма-функции
Сообщение08.11.2010, 21:35 


26/10/10
9
Подскажите, пожалуйста, как мне реализовать логарифмическую производную гаммы-функции на pascal или delphi в подпрограммах?

 Профиль  
                  
 
 Re: Логарифмическая производная гамма-функции
Сообщение09.11.2010, 17:58 
Заслуженный участник
Аватара пользователя


07/01/10
2015
Это дигамма-функция. Поищите её разложение в ряд.

 Профиль  
                  
 
 Re: Логарифмическая производная гамма-функции
Сообщение10.11.2010, 20:04 
Заслуженный участник


15/05/05
3445
USA
Ekaterinasun в сообщении #372515 писал(а):
Подскажите, пожалуйста, как мне реализовать логарифмическую производную гаммы-функции на 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);
}

 Профиль  
                  
 
 Re: Логарифмическая производная гамма-функции
Сообщение14.11.2010, 12:29 


26/10/10
9
Спасибо огромное, буду разбираться.Спасибо.

 Профиль  
                  
 
 Re: Логарифмическая производная гамма-функции
Сообщение15.11.2010, 10:25 
Заслуженный участник
Аватара пользователя


01/08/06
3159
Уфа
В качестве мелкой придирки к процитированному коду можно сказать, что надо бы побольше значащих цифр в константах взять. Точность типа double — 15-16 цифр, а там в константах записано только 8-9.
Хотя... я всего не знаю, может быть, там просто точность приближения меньше, тогда не стоит... :roll:

 Профиль  
                  
 
 Re: Логарифмическая производная гамма-функции
Сообщение15.11.2010, 22:22 
Заслуженный участник


15/05/05
3445
USA
worm2 в сообщении #375333 писал(а):
надо бы побольше значащих цифр в константах взять.
Код этот был опубликован в 1962 году на языке Algol-60, задолго до появления 64-битного double. При переводе на русский учитывались исправленные в 60-х - начале 70-х ошибки, но текст алгоритмов не переписывался. Мой вариант на С - это тоже перевод. Для реальной работы алгоритмы из справочников оптимизировались для конкретной платформы. В данном случае константы $\pi$, $C$ и $5/6$ хорошо известны с очень большой точностью. Особенно последняя :-)
В данном алгоритме гораздо большая проблема - правильный выбор параметра "a" в зависимости от требуемой точности.

В прошлом посте я забыл привести ссылку на книгу на русском:
Библиотека алгоритмов 101б-150б

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Mikhail_K


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group