![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Incomplete Gamma Function InversesBoost , Math Toolkit 2.5.0 , Gamma Functions
|
![]() |
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.
Точность этих функций не сильно зависит от платформы или типа Т. Учитывая, что эти функции вычисляются итеративными методами, они намеренно «настраиваются», чтобы не быть слишком точными: в любом случае невозможно, чтобы эти функции были более точными, чем обычные передние неполные гамма-функции. На практике точность этих функций очень похожа на точность функцийgamma_pиgamma_q:
Table 6.13. Error rates for gamma_p_inv
Microsoft Visual C++ версия 12.0 |
GNU C++ версия 5.1.0 |
GNU C++ версия 5.1.0 |
Солнечный компилятор версии 0x5130 |
|
---|---|---|---|---|
неполные гамма-обратные (a, z) средние значения |
Макс = 1,01ε (Средний = 0,307ε) |
Макс = 0.993ε (Средний = 0,15ε) |
Макс = 1,62ε (Средний = 0,365ε) |
Макс = 1,86ε (Средний = 0,405ε) |
неполные гамма-обратные (a, z) большие значения |
Макс = 0,924ε (Средний = 0,118ε) |
Max = 0ε (Mean = 0ε) |
Макс = 0,509ε (Средний = 0,0447ε) |
Макс = 0,509ε (Средний = 0,0447ε) |
неполные гамма-обратные (a, z) малые значения |
Макс = 1.1e+003ε (Средний = 108ε) |
Max = 441ε (Mean = 53.9ε) |
Макс = 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 |
GNU C++ версия 5.1.0 |
GNU C++ версия 5.1.0 |
Солнечный компилятор версии 0x5130 |
|
---|---|---|---|---|
неполные гамма-обратные (a, z) средние значения |
Макс = 3.46ε (Средний = 0.475ε) |
Макс = 0.912ε (Средний = 0,154ε) |
Макс = 6.2ε (Средний = 0.659ε) |
Макс = 6.2ε (Средний = 0.661ε) |
неполные гамма-обратные (a, z) большие значения |
Макс = 0,814ε (Средний = 0,0856ε) |
Макс = 0.894ε (Средний = 0,0915ε) |
Макс = 0ε (Средний = 0ε) |
Макс = 0ε (Средний = 0ε) |
неполные гамма-обратные (a, z) малые значения |
Макс = 451ε (Средний = 65ε) |
Max = 292ε (Mean = 36,4ε) |
Макс = 8.28e+03ε (Средний = 963ε) |
Макс = 8,98e+03ε (Средний = 877ε) |
Table 6.15. Error rates for gamma_p_inva
Microsoft Visual C++ версия 12.0 |
GNU C++ версия 5.1.0 |
GNU C++ версия 5.1.0 |
Солнечный компилятор версии 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 |
GNU C++ версия 5.1.0 |
GNU C++ версия 5.1.0 |
Солнечный компилятор версии 0x5130 |
|
---|---|---|---|---|
Неполные гамма-обращения. |
Макс = 5.64ε (Средний = 1,09ε) |
Макс = 0ε (Средний = 0ε) |
Макс = 6.91ε (Средний = 1,17ε) |
Макс = 7,86ε (Средний = 1,25ε) |
Существует два набора тестов:
Функции gamma_p_inv иgamma_q_invимеют общую реализацию.
Сначала вычисляется первоначальное приближение с использованием методики, описанной в:
Наконец, последние несколько битов очищаются с помощью итерации Галлея, предел итерации устанавливается до 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 итерациях.
Статья Incomplete Gamma Function Inverses раздела Math Toolkit 2.5.0 Gamma Functions может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Gamma Functions ::
реклама |