Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Digamma

Boost , Math Toolkit 2.5.0 , Gamma Functions

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
Synopsis
#include <boost/math/special_functions/digamma.hpp>
namespace boost{ namespace math{
template <class T>
calculated-result-type digamma(T z);
template <class T, class Policy>
calculated-result-type digamma(T z, const Policy&);
}} // namespaces
Description

Description Дигамма определяется как логарифмическая производная гамма-функции:

Окончательный аргумент Политика является необязательным и может использоваться для контроля поведения функции: как он обрабатывает ошибки, какой уровень точности использовать и т.д. См. документ политики для более подробной информации.

Тип возврата этой функции вычисляется с помощью правил расчета Результат : результат по типу ДП, когда T является целым типом, и тип T в противном случае.

Accuracy

В следующей таблице показаны пиковые ошибки (в единицах epsilon), обнаруженные на различных платформах с различными типами плавающих точек. Если не указано иное, какой-либо тип плавающей точки, который является более узким, чем показанный, будет иметь эффективную нульную ошибку.

Table 6.4. Error rates for digamma

Microsoft Visual C++ версии 12.0
Win32
двойной

GNU C++ версия 5.1.0
linux
двойной

GNU C++ версия 5.1.0
linux
длинный двойной

Солнечная компиляторная версия 0x5130
Sun Solaris
длинный двойной

Функция дигамма: Большие значения

Max = 0,98ε (Mean = 0,369ε)

Max = 0ε (Mean = 0ε)

(GSL 1.16: Max = 1.84ε (Mean = 0.71ε)
(Rmath 3.0.2: Max = 1.8&949; (Mean = 0.3)

Max = 1,39ε (Mean = 0,413ε)

Max = 1,39ε (Mean = 0,413ε)

Функция дигамма: рядом с положительной корней

Max = 0,997ε (Mean = 0,527ε)

Max = 0,891ε (Mean = 0,0995ε)

(GSL 1,16: Max = 135ε (Mean = 11,9ε><)
(Rmath 3.0.2: Max = 2,02e+03&9

Max = 1,37ε (Mean = 0,477ε)

Max = 1,31ε (Mean = 0,451ε)

Функция дигамма: Рядом с ноль

Max = 0,953ε (Mean = 0,337ε)

Max = 0ε (Mean = 0ε)

(GSL 1.16: Max = 0.953ε (Mean = 0.348&949;)
(Rmath 3.0.2: Max = 1.17& #949; (Mean = 0,5)

Max = 0,984ε (Mean = 0,361ε)

Max = 0,984ε (Mean = 0,361ε)

Функция дигамма: отрицательные значения

Max = 214ε (Mean = 16.1ε)

Max = 0ε (Mean = 0ε)

(GSL 1.16: Max = 4.56e+04ε (Mean = 3.91e+03ε><)
(Rmath 3.0.2: Max = 4.6e+04&9>

Max = 180ε (Mean = 13ε)

Max = 180ε (Mean = 13ε)

Функция дигамма: значения около 0

Max = 0ε (Mean = 0ε)

Max = 0ε (Mean = 0ε)

(GSL 1.16: Max = 0.866ε (Mean = 0.387&949;)
(Rmath 3.0.2: Max = 3.58e+05&949; (Mean

Max = 1ε (Mean = 0,592ε)

Max = 1ε (Mean = 0,592ε)

Функция дигамма: целых аргументов

Max = 0,992ε (Mean = 0,452ε)

Max = 0,992ε (Mean = 0,215ε)

(GSL 1,16: Max = 1,18ε (Mean = 0,607ε)
(Rmath 3.0.2: Maxphe =4,33&949

Max = 0,888ε (Mean = 0,403ε)

Max = 0,888ε (Mean = 0,403ε)

Функция дигамма: Полное число аргументов

Max = 0,78ε (Mean = 0,314ε)

Max = 0ε (Mean = 0ε)

(GSL 1.16: Max = 1.09ε (Mean = 0.531ε)
(Rmath 3.0.2: Max = 46.2&949; (Mean = 7.2)

Max = 0,906ε (Mean = 0,409ε)

Max = 0,906ε (Mean = 0,409ε)


Как показано выше, показатели ошибок для позитивных аргументов, как правило, очень низкие. Для отрицательных аргументов существует бесконечное количество иррациональных корней: относительные ошибки, очень близкие к ним, могут быть произвольно большими, хотя абсолютная ошибка останется очень низкой.

Testing

Существует два набора тестов: спотовые значения вычисляются с помощью онлайн-калькулятора на functions.wolfram.com, в то время как случайные тестовые значения генерируются с использованием высокоточной контрольной реализации (дифференциальная Lanczos approximation см. ниже).

Implementation

Реализация подразделяется на следующие области:

Для отрицательных аргументов формула отражения:

digamma(1-x) = digamma(x) + pi/tan(pi*x);

используется для того, чтобы сделать x положительным.

Для аргументов в диапазоне [0,1] отношение повторения:

digamma(x) = digamma(x+1) - 1/x

используется для переноса оценки на [1,2].

Для аргументов в диапазоне [1,2] используется рациональное приближение , указанное JM (см. ниже).

Для аргументов в диапазоне [2,BIG] отношение рецидива:

digamma(x+1) = digamma(x) + 1/x;

используется для переноса оценки на диапазон [1,2].

Для аргументов > BIG асимптотическое расширение:

можно использовать. Однако это расширение расходится после нескольких терминов: точно, сколько терминов зависит от размера x. Поэтому значение BIG должно быть выбрано таким образом, чтобы серия могла быть усечена в термине, который слишком мал, чтобы оказать какое-либо влияние на результат при оценке по BIG. Выбор BIG=10 для 80-битных реалов, а BIG=20 для 128-битных реалов позволяет усечь серию после достаточно небольшого количества терминов и оценить как многочлен в 1/(x<315>*<317>xx).

В произвольной прецизионной версии этой функции используются отношения с рецидивами до x > BIG, а затем оценка через асимптотичное расширение выше. По мере того, как особые случаи целечисленных и полуцелечисленных аргументов обрабатываются через:

Рациональное приближение , указанное JM в диапазоне [1,2], происходит следующим образом.

Сначала высокоточное приближение к дигамме было построено с использованием 60-терминной дифференцированной Lanczos approximation, используемой формой:

В тех случаях, когда P(x) и Q(x) являются полиномиями из рациональной формы суммы Lanczos, а P'(x) и Q'(x) являются их первыми производными. Часть Ланзоса этого приближения имеет теоретическую точность ~100 десятичных цифр. Тем не менее, отмена в приведенной выше сумме сократит это примерно до 99-(1/y) цифры, если результат y. Это приближение было использовано для расчета положительного корня дигаммы, и было установлено, что оно согласуется с значением, используемым Коди, до 25 цифр (см. Math. Comp. 27, 123-127 (1973) Коди, Strecok и Thacher) и значением, используемым Моррисом, до 35 цифр (см. TOMS Algorithm 708).

Точно так же несколько спотовых тестов согласовывались с значениями, рассчитанными с использованием функций. wolfram.com to >40 digits. Это достаточно точно, чтобы убедиться, что приближение ниже является точным, чтобы удвоить точность. Достижение 128-битной двойной точности требует, чтобы местоположение корня было известно ~70 цифр, и не ясно, соответствует ли значение, рассчитанное этим методом, этому требованию: сложность заключается в независимой проверке полученного значения.

Рациональное приближение , указанное JM, было оптимизировано для абсолютной ошибки с использованием формы:

digamma(x) = (x - X0)(Y + R(x - 1));

Там, где X0 является положительным корнем дигаммы, Y является константой, а R(x - 1) является рациональным приближением. Обратите внимание, что, поскольку X0 иррационален, нам нужно в два раза больше цифр в X0, чем в x, чтобы избежать ошибки отмены во время вычитания (это предполагает, что x является точным значением, если это не все ставки отключены). Это означает, что даже когда x является значением корня, округленного до ближайшего репрезентативного значения, результат дигаммы (x) не будет нулевым.


PrevUpHomeNext

Статья Digamma раздела Math Toolkit 2.5.0 Gamma Functions может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Gamma Functions ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 09:38:03/0.007777214050293/0