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

Incomplete Gamma Function Inverses

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/gamma.hpp>
namespace boost{ namespace math{
template <class T1, class T2>
calculated-result-type gamma_q_inv(T1 a, T2 q);
template <class T1, class T2, class Policy>
calculated-result-type gamma_q_inv(T1 a, T2 q, const Policy&);
template <class T1, class T2>
calculated-result-type gamma_p_inv(T1 a, T2 p);
template <class T1, class T2, class Policy>
calculated-result-type gamma_p_inv(T1 a, T2 p, const Policy&);
template <class T1, class T2>
calculated-result-type gamma_q_inva(T1 x, T2 q);
template <class T1, class T2, class Policy>
calculated-result-type gamma_q_inva(T1 x, T2 q, const Policy&);
template <class T1, class T2>
calculated-result-type gamma_p_inva(T1 x, T2 p);
template <class T1, class T2, class Policy>
calculated-result-type gamma_p_inva(T1 x, T2 p, const Policy&);
}} // namespaces
Description

Есть четыренеполных гамма-функции, которые либо вычисляютxДаноaиpилиq.Даноxи либоp, либоq.

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

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

[Tip] Tip

Когда люди обычно говорят об обратной неполной гамма-функции, они говорят об инвертировании по параметрух. Они реализуются здесь как gamma_p_inv и gamma_q_inv и, безусловно, являются наиболее эффективными из обратных, представленных здесь.

Обратный напараметр находит применение в некоторых статистических приложениях, но должен быть вычислен довольно грубой силой численных методов и, следовательно, в несколько раз медленнее. Они реализованы здесь как gamma_p_inva и gamma_q_inva.

template <class T1, class T2>
calculated-result-type gamma_q_inv(T1 a, T2 q);
template <class T1, class T2, class Policy>
calculated-result-type gamma_q_inv(T1 a, T2 q, const Policy&);

Возвращает значение x таким образом, что:<q =gamma_q(a, x);>

Требуется:a >0и1 >= p,q >= 0.

template <class T1, class T2>
calculated-result-type gamma_p_inv(T1 a, T2 p);
template <class T1, class T2, class Policy>
calculated-result-type gamma_p_inv(T1 a, T2 p, const Policy&);

Возвращает значение x таким образом, что:<p =gamma_p(a, x);>

Требуется:a >0и1 >= p,q >= 0.

template <class T1, class T2>
calculated-result-type gamma_q_inva(T1 x, T2 q);
template <class T1, class T2, class Policy>
calculated-result-type gamma_q_inva(T1 x, T2 q, const Policy&);

Возвращает такое значение, что:<q =gamma_q(a, x);>

Требуется:x >0и1 >= p,q >= 0.

template <class T1, class T2>
calculated-result-type gamma_p_inva(T1 x, T2 p);
template <class T1, class T2, class Policy>
calculated-result-type gamma_p_inva(T1 x, T2 p, const Policy&);

Возвращает такое значение, что:<p =gamma_p(a, x);>

Требуется:x >0и1 >= p,q >= 0.

Accuracy

Точность этих функций не сильно зависит от платформы или типа Т. Учитывая, что эти функции вычисляются итеративными методами, они намеренно «настраиваются», чтобы не быть слишком точными: в любом случае невозможно, чтобы эти функции были более точными, чем обычные передние неполные гамма-функции. На практике точность этих функций очень похожа на точность функцийgamma_pиgamma_q:

Table 6.13. Error rates for gamma_p_inv

Microsoft Visual C++ версия 12.0
Win32

GNU C++ версия 5.1.0
Linux
Double

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

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

неполные гамма-обратные (a, z) средние значения

Макс = 1,01ε (Средний = 0,307ε)

Макс = 0.993ε (Средний = 0,15ε)

Rmath 3.0.2:Макс = 4.88ε (Средний = 0.868ε)]

Макс = 1,62ε (Средний = 0,365ε)

Макс = 1,86ε (Средний = 0,405ε)

неполные гамма-обратные (a, z) большие значения

Макс = 0,924ε (Средний = 0,118ε)

Max = 0ε (Mean = 0ε)

Rmath 3.0.2:Max = 0.816ε (Mean = 0,0874ε)]

Макс = 0,509ε (Средний = 0,0447ε)

Макс = 0,509ε (Средний = 0,0447ε)

неполные гамма-обратные (a, z) малые значения

Макс = 1.1e+003ε (Средний = 108ε)

Max = 441ε (Mean = 53.9ε)

Rmath 3.0.2:Max = 547ε (Mean = 61.6ε)]

Макс = 9.17e+03ε (Средний = 1.32e+03ε)

Макс = 1,09e+04ε (Средний = 1,46e+03ε)


Table 6.14. Error rates for gamma_q_inv

Microsoft Visual C++ версия 12.0
Win32

GNU C++ версия 5.1.0
Linux
Double

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

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

неполные гамма-обратные (a, z) средние значения

Макс = 3.46ε (Средний = 0.475ε)

Макс = 0.912ε (Средний = 0,154ε)

Rmath 3.0.2:Макс = 4.66ε (Средний = 0.792ε)

Макс = 6.2ε (Средний = 0.659ε)

Макс = 6.2ε (Средний = 0.661ε)

неполные гамма-обратные (a, z) большие значения

Макс = 0,814ε (Средний = 0,0856ε)

Макс = 0.894ε (Средний = 0,0915ε)

Rmath 3.0.2:Макс = 0.894ε (Средний = 0,106ε)]

Макс = 0ε (Средний = 0ε)

Макс = 0ε (Средний = 0ε)

неполные гамма-обратные (a, z) малые значения

Макс = 451ε (Средний = 65ε)

Max = 292ε (Mean = 36,4ε)

Rmath 3.0.2:Max = 415ε (Mean = 48,7ε)]

Макс = 8.28e+03ε (Средний = 963ε)

Макс = 8,98e+03ε (Средний = 877ε)


Table 6.15. Error rates for gamma_p_inva

Microsoft Visual C++ версия 12.0
Win32

GNU C++ версия 5.1.0
Linux
Double

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

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

Неполные гамма-обращения.

Макс = 3.52ε (Средний = 0.997ε)

Макс = 0ε (Средний = 0ε)

Макс = 6.44ε (Средний = 1.1ε)

Макс = 4.08ε (Средний = 1.12ε)


Table 6.16. Error rates for gamma_q_inva

Microsoft Visual C++ версия 12.0
Win32

GNU C++ версия 5.1.0
Linux
Double

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

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

Неполные гамма-обращения.

Макс = 5.64ε (Средний = 1,09ε)

Макс = 0ε (Средний = 0ε)

Макс = 6.91ε (Средний = 1,17ε)

Макс = 7,86ε (Средний = 1,25ε)


Testing

Существует два набора тестов:

  • Основные проверки здравомыслия пытаются «объехать» отaиxдоpилиqи обратно. Эти тесты имеют довольно щедрые допуски: в целом как неполная гамма, так и ее обратные изменения меняются так быстро, что округление до более чем пары значительных цифр невозможно. Это особенно верно, когдаpилиqочень близки к одному: в этом случае на входе обратной функции недостаточно «информационного контента», чтобы вернуться туда, где вы начали.
  • Проверка точности с использованием высокоточных тестовых значений. Они измеряют точность результата, учитывая точные входные значения.
Implementation

Функции gamma_p_inv иgamma_q_invимеют общую реализацию.

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

А. Р. Дидонато и А. Х. Моррис, вычисление коэффициентов неполной гамма-функции и их обратной АСМ Транс. Math. Software 12 (1986), 377-393.

Наконец, последние несколько битов очищаются с помощью итерации Галлея, предел итерации устанавливается до 2/3 от числа битов в T, что в эксперименте достаточно для обеспечения того, чтобы обратные стороны были по меньшей мере такими же точными, как и обычные неполные гамма-функции. При тестировании требуется не более 3 итераций для получения результата, столь же точного, как передняя неполная гамма-функция, и во многих случаях требуется только одна итерация.

Функции gamma_p_inva и gamma_q_inva также имеют общую реализацию, но обрабатываются отдельно от gamma_p_inv и gamma_q_inv.

Первоначальное приближение дляaвычисляется очень грубо, так чтоgamma_p(a, x) ~ 0,5, это значение затем используется в качестве отправной точки для общего алгоритма поиска корней без производных. Как следствие, эти две функции намного дороже, чем функции gamma_p_inv или gamma_q_inv. Тем не менее, корень обычно встречается менее чем в 10 итерациях.


PrevUpHomeNext

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 20:23:30/0.010231018066406/1