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

Legendre (and Associated) Polynomials

Boost , Math Toolkit 2.5.0 , Polynomials

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/legendre.hpp>
namespace boost{ namespace math{
template <class T>
calculated-result-type legendre_p(int n, T x);
template <class T, class Policy>
calculated-result-type legendre_p(int n, T x, const Policy&);
template <class T>
calculated-result-type legendre_p(int n, int m, T x);
template <class T, class Policy>
calculated-result-type legendre_p(int n, int m, T x, const Policy&);
template <class T>
calculated-result-type legendre_q(unsigned n, T x);
template <class T, class Policy>
calculated-result-type legendre_q(unsigned n, T x, const Policy&);
template <class T1, class T2, class T3>
calculated-result-type legendre_next(unsigned l, T1 x, T2 Pl, T3 Plm1);
template <class T1, class T2, class T3>
calculated-result-type legendre_next(unsigned l, unsigned m, T1 x, T2 Pl, T3 Plm1);
}} // namespaces

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

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

Description
template <class T>
calculated-result-type legendre_p(int l, T x);
template <class T, class Policy>
calculated-result-type legendre_p(int l, T x, const Policy&);

Возвращает Легендарный Полиномиал первого рода:

Требует -1<= x<= 1, иначе возвращает результатdomain_error.

Отрицательные порядки обрабатываются с помощью формулы отражения:

P-l-1(x) = Pl(x)

Следующий график иллюстрирует поведение первых нескольких Легендарных Полиномиалов:

template <class T>
calculated-result-type legendre_p(int l, int m, T x);
template <class T, class Policy>
calculated-result-type legendre_p(int l, int m, T x, const Policy&);

Возвращает связанный с Legendre полином первого рода:

Требует -1<= x<= 1, иначе возвращает результатdomain_error.

Отрицательные значенияlиmобрабатываются через отношения идентичности:

[Caution] Caution

Определение связанного с ним многочлена Legendre, используемое здесь, включает ведущий термин фазы Кондона-Шортли (-1)м. Это соответствует определению, данному Абрамовичем и Стегуном (8.6.6) и используемомуMathworldиMathematica's LegendreP. Однако использование в литературе не всегда включает этот фазовый термин, и, как ни странно, спецификация для связанной функции Legendre в C++ TR1 (assoc_legendre) также опускает его, несмотря на то, что он использует Абрамовица и Стегуна в качестве окончательного арбитра по этим вопросам.

Смотри:

Вайсштейн, Эрик У. «Легендра Полиномиал». MathWorld — Wolfram Web Resource(недоступная ссылка — история).

Abramowitz, M. and Stegun, I. A. «Функции Легендра» и «Ортогональные полиномы» (Ch. 22 in Chs. 8 and 22 in Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables, 9th print). New York: Dover, pp. 331-339 and 771-802, 1972.

template <class T>
calculated-result-type legendre_q(unsigned n, T x);
template <class T, class Policy>
calculated-result-type legendre_q(unsigned n, T x, const Policy&);

Возвращает значение многочлена Legendre, который является вторым решением дифференциального уравнения Legendre, например:

Требуется -1<= x<= 1, иначеdomain_errorназывается.

Следующий график иллюстрирует первые несколько функций Legendre второго рода:

template <class T1, class T2, class T3>
calculated-result-type legendre_next(unsigned l, T1 x, T2 Pl, T3 Plm1);

Реализует три термина рекуррентного отношения для многочленов Legendre, эта функция может быть использована для создания последовательности значений, оцененных в том жеx, и для повышенияl. Это отношение повторяемости относится к Легендарным Полиномиалам как первого, так и второго рода.

Например, мы могли бы создать вектор первых 10 полиномиальных значений, используя:

double x = 0.5;  // Abscissa value
vector<double> v;
v.push_back(legendre_p(0, x));
v.push_back(legendre_p(1, x));
for(unsigned l = 1; l < 10; ++l)
   v.push_back(legendre_next(l, x, v[l], v[l-1]));
// Double check values:
for(unsigned l = 1; l < 10; ++l)
   assert(v[l] == legendre_p(l, x));

Формально аргументами являются:

l

Степень последнего вычисленного полинома.

x

значение абсциссы

Pl

Значение полинома оценивается на уровнеl.

Plm1

Значение полинома оценивается на уровнеl-1.

template <class T1, class T2, class T3>
calculated-result-type legendre_next(unsigned l, unsigned m, T1 x, T2 Pl, T3 Plm1);

Реализует три термина рекуррентного отношения для ассоциированных многочленов Legendre, эта функция может быть использована для создания последовательности значений, оцененных при том жеx, и для повышенияl.

Например, мы могли бы создать вектор первых многочленных значений m+10, используя:

double x = 0.5;  // Abscissa value
int m = 10;      // order
vector<double> v;
v.push_back(legendre_p(m, m, x));
v.push_back(legendre_p(1 + m, m, x));
for(unsigned l = 1; l < 10; ++l)
   v.push_back(legendre_next(l + 10, m, x, v[l], v[l-1]));
// Double check values:
for(unsigned l = 1; l < 10; ++l)
   assert(v[l] == legendre_p(10 + l, m, x));

Формально аргументами являются:

l

Степень последнего вычисленного полинома.

m

Порядок ассоциированного полинома.

x

значение абсциссы

Pl

Значение полинома оценивается на уровнеl.

Plm1

Значение полинома оценивается на уровнеl-1.

Accuracy

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

Table 6.32. Error rates for legendre_p

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

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

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

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

Легендарные полиномы: малые значения

Макс = 211ε (Средний = 20,4ε)

Max = 0,732ε (Mean = 0,0619ε)

GSL 1.16:Max = 211ε (Mean = 20,4ε)]

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

:Макс = 124ε (Средний = 13.2ε)]

Макс = 69,2ε (Средний = 9,58ε)

Легендарные полиномы: большие значения

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

Макс = 0,632ε (Средний = 0,0693ε)
GSL 1.16:Макс = 300ε (Средний = 33,2ε)]

Макс = 699ε (Mean = 59.6ε)

:Макс = 343ε (Mean = 32.1ε)]

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


Table 6.33. Error rates for legendre_q

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

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

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

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

Легендарные полиномы: малые значения

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

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

GSL 1.16:Макс = 46,4ε (Средний = 7,46ε)]

Макс = 50,9ε (Средний = 9ε)

Макс = 50,9ε (Средний = 8,98ε)

Легендарные полиномы: большие значения

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

Max = 2.49ε (Mean = 0.202ε)

GSL 1.16:Max = 4.6e+03ε (Mean = 366ε)

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

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


Table 6.34. Error rates for legendre_p (associated)

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

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

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

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

Полиномы Легенды: Малые Значения

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

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

GSL 1.16:Макс = 121ε (Средний = 6,75ε)И другие неудачи.

Макс = 175ε (Mean = 9.88ε)

:Макс = 175ε (Mean = 9.36ε)И другие сбои.

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


Обратите внимание, что самые худшие ошибки происходят, когда порядок увеличивается, значения, превышающие ~ 120, очень маловероятны для получения разумных результатов, особенно в связанном полиномиальном случае, когда степень также велика. Кроме того, относительные ошибки могут расти произвольно, когда функция очень близка к корню.

Testing

Используется смесь точечных тестов значений, рассчитанных с помощью functions.wolfram.com, и случайно сгенерированных тестовых данных: тестовые данные были вычислены с использованиемNTL::RRс 1000-битной точностью.

Implementation

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


PrevUpHomeNext

Статья Legendre (and Associated) Polynomials раздела Math Toolkit 2.5.0 Polynomials может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Polynomials ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 20:32:13/0.0079629421234131/0