#include <boost/math/special_functions/ellint_rf.hpp>
namespace boost { namespace math {
template <class T1, class T2, class T3>
calculated-result-type ellint_rf(T1 x, T2 y, T3 z)
template <class T1, class T2, class T3, class Policy>
calculated-result-type ellint_rf(T1 x, T2 y, T3 z, const Policy&)
}}
#include <boost/math/special_functions/ellint_rd.hpp>
namespace boost { namespace math {
template <class T1, class T2, class T3>
calculated-result-type ellint_rd(T1 x, T2 y, T3 z)
template <class T1, class T2, class T3, class Policy>
calculated-result-type ellint_rd(T1 x, T2 y, T3 z, const Policy&)
}}
#include <boost/math/special_functions/ellint_rj.hpp>
namespace boost { namespace math {
template <class T1, class T2, class T3, class T4>
calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p)
template <class T1, class T2, class T3, class T4, class Policy>
calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy&)
}}
#include <boost/math/special_functions/ellint_rc.hpp>
namespace boost { namespace math {
template <class T1, class T2>
calculated-result-type ellint_rc(T1 x, T2 y)
template <class T1, class T2, class Policy>
calculated-result-type ellint_rc(T1 x, T2 y, const Policy&)
}}
#include <boost/math/special_functions/ellint_rg.hpp>
namespace boost { namespace math {
template <class T1, class T2, class T3>
calculated-result-type ellint_rg(T1 x, T2 y, T3 z)
template <class T1, class T2, class T3, class Policy>
calculated-result-type ellint_rg(T1 x, T2 y, T3 z, const Policy&)
}}
Эти функции возвращают симметричные эллиптические интегралы Карлсона, функции имеют сложное поведение во всех своих возможных областях, но следующий график дает представление об их поведении:

Тип возврата этих функций вычисляется с использованием правил расчета типа результата., когда аргументы бывают разных типов: в противном случае возврат является тем же типом, что и аргументы.
template <class T1, class T2, class T3>
calculated-result-type ellint_rf(T1 x, T2 y, T3 z)
template <class T1, class T2, class T3, class Policy>
calculated-result-type ellint_rf(T1 x, T2 y, T3 z, const Policy&)
Возвращает эллиптический интеграл Карлсона RF:

Требует, чтобы все аргументы были неотрицательными, а максимум один может быть нулевым. В противном случае возвращает результатdomain_error.
Конечный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
template <class T1, class T2, class T3>
calculated-result-type ellint_rd(T1 x, T2 y, T3 z)
template <class T1, class T2, class T3, class Policy>
calculated-result-type ellint_rd(T1 x, T2 y, T3 z, const Policy&)
Возвращает эллиптический интеграл Карлсона RF:

Требует, чтобы x и y были неотрицательными, причем самое большее один из них равен нулю, и что z>=0.В противном случае возвращается результатdomain_error.
Конечный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
template <class T1, class T2, class T3, class T4>
calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p)
template <class T1, class T2, class T3, class T4, class Policy>
calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy&)
Возвращает эллиптический интеграл Карлсона RF:

Требует, чтобы x, y и z были неотрицательными, причем максимум один из них равен нулю, и чтоp! = 0. В противном случае возвращает результатdomain_error.
Конечный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
Когдаp< 0функция возвращаетОсновное значение Кошис использованием отношения:

template <class T1, class T2>
calculated-result-type ellint_rc(T1 x, T2 y)
template <class T1, class T2, class Policy>
calculated-result-type ellint_rc(T1 x, T2 y, const Policy&)
Возвращает эллиптический интеграл Карлсона RF:

x >0и чтоу! = 0. В противном случае возвращает результатdomain_error.
Конечный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
Когдаy< 0функция возвращаетОсновное значение Кошис использованием отношения:

template <class T1, class T2, class T3>
calculated-result-type ellint_rg(T1 x, T2 y, T3 z)
template <class T1, class T2, class T3, class Policy>
calculated-result-type ellint_rg(T1 x, T2 y, T3 z, const Policy&)
Возвращает эллиптический интеграл Карлсона RF:

Требует, чтобы x и y были неотрицательными, иначе возвращает результатdomain_error.
Конечный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
Существует два набора тестов.
Спот-тесты сравнивают выбранные значения с тестовыми данными, приведенными в:
Случайные тестовые данные, генерируемые с использованием NTL::RR с 1000-битной точностью, и наши проверки реализации ошибок округления и / или регрессий.
Существуют также проверки здравомыслия, которые используют взаимосвязи между интегралами для проверки их правильности: см. вышеупомянутую статью Карлсона для деталей.
Эти функции вычисляются с использованием только базовых арифметических операций, поэтому нет большого различия в точности по сравнению с различными платформами. Обратите внимание, что только результаты для самого широкого типа с плавающей запятой в системе приведены, поскольку более узкие типы имеютфактически нулевую ошибку. Все значения являются относительными погрешностями в единицах эпсилона.
Table 6.58. Error rates for ellint_rc
|
Microsoft Visual C++ версия 12.0 Win32
|
GNU C++ версия 5.1.0 Linux Double
|
GNU C++ версия 5.1.0 Linux длинный двойной
|
Компилятор Sun версии 0x5130 Солнечный солярис длинный двойной
|
RC: Случайные данные |
Макс = 0,962ε (Средний = 0,407ε) |
Макс = 0ε (Mean = 0ε)
GSL 1.16:Макс = 2.4ε (Mean = 0.624ε)] |
Макс = 0.995ε (Средний = 0.433ε) |
Макс = 0.995ε (Средний = 0.438ε) |
Table 6.59. Error rates for ellint_rd
|
Microsoft Visual C++ версия 12.0 Win32
|
GNU C++ версия 5.1.0 Linux Double
|
GNU C++ версия 5.1.0 Linux длинный двойной
|
Компилятор Sun версии 0x5130 Солнечный солярис длинный двойной
|
РД: Случайные данные |
Макс = 2.16ε (Средний = 0.803ε) |
Макс = 0ε (Mean = 0ε)
GSL 1.16:Макс = 2,59ε (Mean = 0.878ε)] |
Макс = 2.73ε (Средний = 0.831ε) |
Макс = 2,73ε (Средний = 0,829ε) |
РД: y = z |
Макс = 16,5ε (Средний = 0,843ε) |
Макс = 0.896ε (Средний = 0,022ε)
GSL 1.16:Макс = 2.88ε (Средний = 0.839ε)] |
Макс = 2,65ε (Средний = 0,82ε) |
Макс = 2,65ε (Средний = 0,819ε) |
РД: x = y |
Макс = 3.51ε (Средний = 0.816ε) |
Макс = 0,824ε (Средний = 0,0272ε)
GSL 1.16:Макс = 3,74ε (Средний = 0,84ε) |
Макс = 2.85ε (Средний = 0.865ε) |
Макс = 2.85ε (Средний = 0.865ε) |
РД: x = 0, y = z |
Макс = 1,16ε (Средний = 0,493ε) |
Макс = 0ε (Mean = 0ε)
GSL 1.16:Макс = 2ε (Mean = 0.656ε)] |
Макс = 1,19ε (Средний = 0,522ε) |
Макс = 1,19ε (Средний = 0,522ε) |
РД: x = y = z |
Макс = 1,03ε (Средний = 0,418ε) |
Макс = 0ε (Mean = 0ε)
GSL 1.16:Макс = 1,03ε (Mean = 0,418ε)] |
Макс = 0.998ε (Средний = 0.387ε) |
Макс = 0.998ε (Средний = 0.387ε) |
РД: x = 0 |
Макс = 2.64ε (Средний = 0.894ε) |
Макс = 0ε (Mean = 0ε)
GSL 1.16:Макс = 2.85ε (Mean = 0.781ε)] |
Макс = 2.79ε (Средний = 0.883ε) |
Макс = 2.79ε (Средний = 0.883ε) |
Table 6.60. Error rates for ellint_rg
|
Microsoft Visual C++ версия 12.0 Win32
|
GNU C++ версия 5.1.0 Linux Double
|
GNU C++ версия 5.1.0 Linux длинный двойной
|
Компилятор Sun версии 0x5130 Солнечный солярис длинный двойной
|
RG: Случайные данные |
Макс = 3.65ε (Средний = 0.929ε) |
Макс = 0,983ε (Средний = 0,0172ε) GSL 1.16:Макс = 0,983ε (Средний = 0,0172ε) |
Макс = 3.95ε (Средний = 0.951ε) |
Макс = 3.95ε (Средний = 0.951ε) |
RG: два значения 0 |
Макс = 0ε (Средний = 0ε) |
Макс = 0ε (Mean = 0ε)
GSL 1.16:Макс = 0ε (Mean = 0ε)] |
Макс = 0ε (Средний = 0ε) |
Макс = 0ε (Средний = 0ε) |
RG: все значения одинаковы или равны нулю |
Макс = 1,06ε (Средний = 0,348ε) |
Макс = 0ε (Mean = 0ε)
GSL 1.16:Макс = 0ε (Mean = 0ε)] |
Макс = 0.992ε (Средний = 0.288ε) |
Макс = 0.992ε (Средний = 0.288ε) |
RG: два одинаковых значения |
Макс = 1,96ε (Средний = 0,374ε) |
Макс = 0,594ε (Средний = 0,0103ε)
GSL 1.16:Макс = 0,594ε (Средний = 0,0103ε) |
Макс = 1.51ε (Средний = 0.404ε) |
Макс = 1.51ε (Средний = 0.404ε) |
RG: одно значение ноль |
Макс = 1,96ε (Средний = 0,674ε) |
Макс = 0ε (Mean = 0ε)
GSL 1.16:Макс = 0ε (Mean = 0ε)] |
Макс = 2.14ε (Средний = 0.722ε) |
Макс = 2.14ε (Средний = 0.722ε) |
Table 6.61. Error rates for ellint_rf
|
Microsoft Visual C++ версия 12.0 Win32
|
GNU C++ версия 5.1.0 Linux Double
|
GNU C++ версия 5.1.0 Linux длинный двойной
|
Компилятор Sun версии 0x5130 Солнечный солярис длинный двойной
|
RF: Случайные данные |
Макс = 2.02ε (Средний = 0.677ε) |
Макс = 0ε (Средний = 0ε) GSL 1.16:Макс = 2.73ε (Средний = 0.804ε)] |
Макс = 2.54ε (Средний = 0.674ε) |
Макс = 2.54ε (Средний = 0.674ε) |
RF: x = y = z |
Макс = 0,999ε (Средний = 0,335ε) |
Макс = 0ε (Mean = 0ε)
GSL 1.16:Макс = 0.999ε (Mean = 0.34ε)] |
Макс = 0.991ε (Средний = 0.345ε) |
Макс = 0.991ε (Средний = 0.345ε) |
RF: x = y или y = z или x = z |
Макс = 1.21ε (Средний = 0.394ε) |
Макс = 0,536ε (Средний = 0,00658ε)
GSL 1.16:Макс = 2,89ε (Средний = 0,749ε)] |
Макс = 1,95ε (Средний = 0,418ε) |
Макс = 1,57ε (Средний = 0,418ε) |
RF: x = 0, y = z |
Макс = 0,999ε (Средний = 0,407ε) |
Max = 0ε (Mean = 0ε)
GSL 1.16:Max = 1.29ε (Mean = 0,527ε)] |
Макс = 0.894ε (Средний = 0.338ε) |
Макс = 0.894ε (Средний = 0.338ε) |
RF: z = 0 |
Макс = 1,89ε (Средний = 0,587ε) |
Макс = 0ε (Mean = 0ε)
GSL 1.16:Макс = 2,54ε (Mean = 0.781ε)] |
Макс = 1,7ε (Средний = 0,539ε) |
Макс = 1,7ε (Средний = 0,539ε) |
Table 6.62. Error rates for ellint_rj
|
Microsoft Visual C++ версия 12.0 Win32
|
GNU C++ версия 5.1.0 Linux Double
|
GNU C++ версия 5.1.0 Linux длинный двойной
|
Компилятор Sun версии 0x5130 Солнечный солярис длинный двойной
|
RJ: Случайные данные |
Макс = 119ε (Средний = 4.32ε) |
Max = 0.52ε (Mean = 0,0184ε)
GSL 1.16:Max = 3.57ε (Mean = 0.704ε)И другие сбои. |
Макс = 186ε (Средний = 6,67ε) |
Макс = 186ε (Средний = 6,7ε) |
RJ: 4 равных значения |
Макс = 1,03ε (Средний = 0,418ε) |
Макс = 0ε (Mean = 0ε)
GSL 1.16:Макс = 1,03ε (Mean = 0,418ε)] |
Макс = 0.998ε (Средний = 0.387ε) |
Макс = 0.998ε (Средний = 0.387ε) |
RJ: 3 равных значения |
Макс = 39,9ε (Средний = 1,12ε) |
Макс = 0ε (Mean = 0ε)
GSL 1.16:Макс = 3.96ε (Mean = 1,06ε)] |
Макс = 20.8ε (Средний = 0.986ε) |
Макс = 18.2ε (Средний = 0.917ε) |
RJ: 2 равных значения |
Макс = 214ε (Средний = 5.05ε) |
Макс = 0,6ε (Средний = 0,0228ε)
GSL 1.16:Макс = 2,57ε (Средний = 0,754ε)] |
Макс = 220ε (Средний = 6.64ε) |
Макс = 135ε (Средний = 5.3ε) |
RJ: Равные z и p |
Макс = 15,4ε (Средний = 1,05ε) |
Max = 0,742ε (Mean = 0,0166ε)
GSL 1.16:Max = 2,62ε (Mean = 0,699ε)] |
Макс = 17.2ε (Средний = 1,16ε) |
Макс = 16,6ε (Средний = 1,15ε) |
Ключом алгоритма КарлсонаCarlson79является теорема дублирования:

Применяя его многократно,x,у,zстановятся все ближе и ближе. Когда они почти равны, уравнение особого случая

используется. Более конкретно,[R F]оценивается от расширения серии Тейлора до пятого порядка. Вычисления трех других интегралов аналогичны, за исключением RC, которые могут быть вычислены из элементарных функций.
Дляp< 0вRJ(x, y, z, p)иy< 0вRC(x, y)интегралы единичны и ихОсновные ценности Кошивозвращаются через отношения:

