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

Elliptic Integrals - Carlson Form

Boost , Math Toolkit 2.5.0 , Elliptic Integrals

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/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&)
}} // namespaces
#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&)
}} // namespaces
#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&)
}} // namespaces
#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&)
}} // namespaces
#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&)
}} // namespaces
Description

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

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

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.

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

Testing

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

Спот-тесты сравнивают выбранные значения с тестовыми данными, приведенными в:

Б. К. КарлсонЧисленные вычисления реальных или сложных эллиптических интегралов. Numerical Algorithms, Volume 10, Number 1 / March, 1995, pp.

Случайные тестовые данные, генерируемые с использованием NTL::RR с 1000-битной точностью, и наши проверки реализации ошибок округления и / или регрессий.

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

Accuracy

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

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ε)


Implementation

Ключом алгоритма КарлсонаCarlson79является теорема дублирования:

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

используется. Более конкретно,[R F]оценивается от расширения серии Тейлора до пятого порядка. Вычисления трех других интегралов аналогичны, за исключением RC, которые могут быть вычислены из элементарных функций.

Дляp< 0вRJ(x, y, z, p)иy< 0вRC(x, y)интегралы единичны и ихОсновные ценности Кошивозвращаются через отношения:


PrevUpHomeNext

Статья Elliptic Integrals - Carlson Form раздела Math Toolkit 2.5.0 Elliptic Integrals может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Elliptic Integrals ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 23:24:00/0.0090539455413818/0