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
3139
Уфа
В качестве мелкой придирки к процитированному коду можно сказать, что надо бы побольше значащих цифр в константах взять. Точность типа 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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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