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

Incomplete Beta Functions

Boost , Math Toolkit 2.5.0 , Beta 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/beta.hpp>
namespace boost{ namespace math{
template <class T1, class T2, class T3>
calculated-result-type ibeta(T1 a, T2 b, T3 x);
template <class T1, class T2, class T3, class Policy>
calculated-result-type ibeta(T1 a, T2 b, T3 x, const Policy&);
template <class T1, class T2, class T3>
calculated-result-type ibetac(T1 a, T2 b, T3 x);
template <class T1, class T2, class T3, class Policy>
calculated-result-type ibetac(T1 a, T2 b, T3 x, const Policy&);
template <class T1, class T2, class T3>
calculated-result-type beta(T1 a, T2 b, T3 x);
template <class T1, class T2, class T3, class Policy>
calculated-result-type beta(T1 a, T2 b, T3 x, const Policy&);
template <class T1, class T2, class T3>
calculated-result-type betac(T1 a, T2 b, T3 x);
template <class T1, class T2, class T3, class Policy>
calculated-result-type betac(T1 a, T2 b, T3 x, const Policy&);
}} // namespaces
Description

Есть четыре неполные бета-функции: два являются нормализованными версиями (также известными как регуляризованные бета-функции), которые возвращают значения в диапазоне [0, 1], и два являются ненормализованными и возвратными значениями в диапазоне [0, бета(a, b)]. Пользователи, заинтересованные в статистических приложениях, должны использовать нормализованные (или регуляризованные) версии (ibeta и ibetac).

Все эти функции требуют 0 <=х <=1.

Нормализованные функции ibeta и ibetac требуют a,b >= 0, а кроме того, что не a и b являются нулевыми.

Функции бета и бетак требуют a,b > 0.

Тип возврата этих функций вычисляется с использованием правил расчета типа Результат, когда T1, T2 и T3 разные типы.

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

template <class T1, class T2, class T3>
calculated-result-type ibeta(T1 a, T2 b, T3 x);
template <class T1, class T2, class T3, class Policy>
calculated-result-type ibeta(T1 a, T2 b, T3 x, const Policy&);

Возвращает нормализованную неполную бета-функцию a, b и x:

template <class T1, class T2, class T3>
calculated-result-type ibetac(T1 a, T2 b, T3 x);
template <class T1, class T2, class T3, class Policy>
calculated-result-type ibetac(T1 a, T2 b, T3 x, const Policy&);

Возвращает нормализованное дополнение неполной бета-функции a, b и x:

template <class T1, class T2, class T3>
calculated-result-type beta(T1 a, T2 b, T3 x);
template <class T1, class T2, class T3, class Policy>
calculated-result-type beta(T1 a, T2 b, T3 x, const Policy&);

Возвращает полную (ненормализованную) неполную бета-функцию a, b и x:

template <class T1, class T2, class T3>
calculated-result-type betac(T1 a, T2 b, T3 x);
template <class T1, class T2, class T3, class Policy>
calculated-result-type betac(T1 a, T2 b, T3 x, const Policy&);

Возвращает полное (ненормализованное) дополнение неполной бета-функции a, b и x:

Accuracy

Следующие таблицы дают пиковые и средние относительные ошибки в различных доменах a, b и x, а также сравнения с библиотеками GSL-1.9 и Cephes. Обратите внимание, что только результаты для самого широкого типа плавающей точки в системе даны, поскольку более узкие типы имеют эффективно нулевые ошибки.

Обратите внимание, что результаты для 80 и 128-битных двойников значительно выше, чем для двойников: это потому, что более широкий диапазон экспонентов этих типов позволяет испытывать более экстремальные тестовые случаи. Например, ожидаемые результаты, которые равны нулю с двойной точностью, могут быть конечными, но исключительно малыми с более широким диапазоном двойных типов.

Table 6.18. Error rates for ibeta

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

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

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

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

Неполная функция бета: Небольшие ценности

Max = 9,42ε (Mean = 2,24ε)

Max = 0ε (Mean = 0ε)

(GSL 1.16: Max = 682ε (Mean = 32.6ε)
(Rmath 3.0.2: Max = 22.9#949; (Mean = 3.3)

Max = 6,27ε (Mean = 1,7ε)

Max = 21,3ε (Mean = 2,74ε)

Неполная функция бета: средние значения

Max = 108ε (Mean = 16.3ε)

Max = 0ε (Mean = 0ε)

(GSL 1.16: Max = 690ε (Mean = 151ε)
(Rmath 3.0.2: Max = 232ε (Mean = 27.9&)

Max = 51,4ε (Mean = 12ε)

Max = 124ε (Mean = 18,4ε)

Неполная функция бета: большие и разные значения

Max = 1.19e+003ε (Mean = 59.5ε)

Max = 1.26ε (Mean = 0.063ε)

(GSL 1.16: Max = 3.9e+05ε (Mean = 1.82e+04ε)

Max = 1.96e+04ε (Mean = 997ε)

Max = 4.98e+04ε (Mean = 2.07e+03ε)

Неполная бета-функция: Малые целые значения

Max = 3,69ε (Mean = 0,765ε)

Max = 0ε (Mean = 0ε)

(GSL 1.16: Max = 254ε (Mean = 50.9ε)
(Rmath 3.0.2: Max = 62&949; (Mean = 8.95)

Max = 4,45ε (Mean = 0,814ε)

Max = 44,5ε (Mean = 10,1ε)


Table 6.19. Error rates for ibetac

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

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

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

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

Неполная функция бета: Небольшие ценности

Max = 6,56ε (Mean = 1,88ε)

Max = 0ε (Mean = 0ε)

(Rmath 3.0.2: Max = 22.4ε (Mean = 3.67&949;)

Max = 8,47ε (Mean = 1,68ε)

Max = 13,8ε (Mean = 2,69ε)

Неполная функция бета: средние значения

Max = 56,2ε (Mean = 14,1ε)

Max = 0ε (Mean = 0ε)

(Rmath 3.0.2: Max = 204ε (Mean = 25.8ε)

Max = 75,3ε (Mean = 11,3ε)

Max = 132ε (Mean = 19,8ε)

Неполная функция бета: большие и разные значения

Max = 1.87e+003ε (Mean = 93.8ε)

Max = 0,981ε (Mean = 0,0638ε)

(Rmath 3.0.2: Max = 889ε (Mean = 68,4ε)

Max = 3.45e+04ε (Mean = 1.32e+03ε)

Max = 4.26e+04ε (Mean = 1.54e+03ε)

Неполная бета-функция: Малые целые значения

Max = 6,37ε (Mean = 1,03ε)

Max = 0ε (Mean = 0ε)

(Rmath 3.0.2: Max = 84.6ε (Mean = 18ε)

Max = 5,34ε (Mean = 1,11ε)

Max = 107ε (Mean = 17.1ε)


Table 6.20. Error rates for beta (incomplete)

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

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

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

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

Неполная функция бета: Небольшие ценности

Max = 11,1ε (Mean = 2,28ε)

Max = 0ε (Mean = 0ε)

Max = 12,5ε (Mean = 2,01ε)

Max = 18,7ε (Mean = 3,19ε)

Неполная функция бета: средние значения

Max = 91,1ε (Mean = 12,7ε)

Max = 0,568ε (Mean = 0,0342ε)

Max = 67,1ε (Mean = 13,3ε)

Max = 174ε (Mean = 25ε)

Неполная функция бета: большие и разные значения

Max = 635ε (Mean = 29,5ε)

Max = 0,999ε (Mean = 0,0399ε)

Max = 6.84e+04ε (Mean = 2.76e+03ε)

Max = 6.86e+04ε (Mean = 2.79e+03ε)

Неполная бета-функция: Малые целые значения

Max = 26,8ε (Mean = 6,61ε)

Max = 0,786ε (Mean = 0,0248ε)

Max = 10,2ε (Mean = 3,49ε)

Max = 51,8ε (Mean = 11ε)


Table 6.21. Error rates for betac

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

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

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

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

Неполная функция бета: Небольшие ценности

Max = 12ε (Mean = 2,43ε)

Max = 0,676ε (Mean = 0,0302ε)

Max = 7,75ε (Mean = 1,91ε)

Max = 12,6ε (Mean = 3,02ε)

Неполная функция бета: средние значения

Max = 91,3ε (Mean = 14,8ε)

Max = 0,949ε (Mean = 0,0944ε)

Max = 63,5ε (Mean = 13,4ε)

Max = 97,6ε (Mean = 24,3ε)

Неполная функция бета: большие и разные значения

Max = 3.72e+003ε (Mean = 113ε)

Max = 1,12ε (Mean = 0,0458ε)

Max = 1.05e+05ε (Mean = 5.45e+03ε)

Max = 1.04e+05ε (Mean = 5.46e+03ε)

Неполная бета-функция: Малые целые значения

Max = 26,7ε (Mean = 6,67ε)

Max = 0,586ε (Mean = 0,0314ε)

Max = 10,4ε (Mean = 3,54ε)

Max = 103ε (Mean = 17,4ε)


Testing

Существует два набора тестов: спот-тесты сравнивают значения, взятые из онлайн-оценщика функции Mathworld с этой реализацией: они обеспечивают базовую «проверку состояния» для реализации, с одним спот-тестом в каждом домене реализации (см. имплементационные примечания ниже).

Точное тестирование использует данные, генерируемые с очень высокой точностью (с NTL RR классом , установленным при 1000-битной точности), используя «учебник» непрерывное представительство фракции (см. первую непрерывную долю в обсуждении реализации ниже). Обратите внимание, что эта продолжающаяся часть не используется в реализации, и поэтому у нас есть тестовые данные, которые полностью независимы от кода.

Implementation

Эта реализация тесно основана на "Algorithm 708; Значительное цифровое вычисления неполных коэффициентов бета-функций", DiDonato и Morris, ACM, 1992.

Все четыре из этих функций имеют общую реализацию: это передается как х, так и y, и может вернуть либо p, либо q, где они связаны:

таким образом, в любой момент мы можем заменить a для b, x для y и p для q, если это приводит к более благоприятному положению. Как правило, такие свопы выполняются так, что мы всегда вычисляем значение меньше 0,9: когда требуется, это может быть вычтено из 1 без неоправданной ошибки отмены.

Нижеследующее постоянное представительство фракций встречается во многих учебниках, но не используется в этой реализации - это как медленнее, так и менее точно, чем альтернативы - однако оно используется для получения тестовых данных:

Следующая неизменная доля связана с Didonato и Morris, и используется в этой реализации, когда a и b являются более чем 1:

Для малых b и x затем может использоваться представление серии:

Когда b < < а затем переход от 0 к 1 происходит очень близко к x = 1, и необходимо позаботиться о методе вычисления, в этом случае используется следующая серия представления:

Где Q(a,x) является неполной гамма-функцией. Обратите внимание, что этот метод опирается на сохранение таблицы всех pn ранее вычислилось, что ограничивает точность метода, в зависимости от размера используемой таблицы.

Когда a и b являются малыми целых чисел, то мы можем связать неполную бета-версию с биномиальным распределением и использовать следующую конечную сумму:

Наконец, мы можем обойти сложные области или перейти в область с более эффективным средством вычисления, используя формулы дублирования:

Домены a, b и x, для которых используются различные методы, идентичны тем, которые описаны в статье Didonato и Morris TOMS 708.


PrevUpHomeNext

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 06:59:36/0.0096909999847412/0