#include <boost/math/special_functions/laguerre.hpp>
namespace boost{ namespace math{
template <class T>
calculated-result-type laguerre(unsigned n, T x);
template <class T, class Policy>
calculated-result-type laguerre(unsigned n, T x, const Policy&);
template <class T>
calculated-result-type laguerre(unsigned n, unsigned m, T x);
template <class T, class Policy>
calculated-result-type laguerre(unsigned n, unsigned m, T x, const Policy&);
template <class T1, class T2, class T3>
calculated-result-type laguerre_next(unsigned n, T1 x, T2 Ln, T3 Lnm1);
template <class T1, class T2, class T3>
calculated-result-type laguerre_next(unsigned n, unsigned m, T1 x, T2 Ln, T3 Lnm1);
}}
Тип возврата этих функций вычисляется с использованием правил расчета типа результата.: Обратите внимание, что при наличии одного аргумента шаблона результат является тем же типом, что и этот аргумент, или<double
>, если аргумент шаблона является целым типом.
Конечный аргументПолитикаявляется необязательным и может использоваться для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
template <class T>
calculated-result-type laguerre(unsigned n, T x);
template <class T, class Policy>
calculated-result-type laguerre(unsigned n, T x, const Policy&);
Возвращает значение многочлена Лагера порядкаnв точкеx:

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

template <class T>
calculated-result-type laguerre(unsigned n, unsigned m, T x);
template <class T, class Policy>
calculated-result-type laguerre(unsigned n, unsigned m, T x, const Policy&);
Возвращает ассоциированный многочлен Лагерра степениnи порядкамв точкеx:

template <class T1, class T2, class T3>
calculated-result-type laguerre_next(unsigned n, T1 x, T2 Ln, T3 Lnm1);
Реализует три термина рекуррентного отношения для многочленов Лагера, эта функция может быть использована для создания последовательности значений, оцененных при том жеx, и для повышенияn.

Например, мы могли бы создать вектор первых 10 полиномиальных значений, используя:
double x = 0.5;
vector<double> v;
v.push_back(laguerre(0, x)).push_back(laguerre(1, x));
for(unsigned l = 1; l < 10; ++l)
v.push_back(laguerre_next(l, x, v[l], v[l-1]));
Формально аргументами являются:
- n
Степеньnпоследнего вычисленного полинома.
- x
значение абсциссы
- Ln
Значение полинома оценивается на уровнеn.
- Lnm1
Значение полинома оценивается на уровнеn-1.
template <class T1, class T2, class T3>
calculated-result-type laguerre_next(unsigned n, unsigned m, T1 x, T2 Ln, T3 Lnm1);
Реализует три термина рекуррентного отношения для ассоциированных многочленов Лагера, эта функция может быть использована для создания последовательности значений, оцененных при том жеx, и для повышения степениn.

Например, мы могли бы создать вектор первых 10 полиномиальных значений, используя:
double x = 0.5;
int m = 10;
vector<double> v;
v.push_back(laguerre(0, m, x)).push_back(laguerre(1, m, x));
for(unsigned l = 1; l < 10; ++l)
v.push_back(laguerre_next(l, m, x, v[l], v[l-1]));
Формально аргументами являются:
- n
Степень последнего вычисленного полинома.
- m
Порядок ассоциированного полинома.
- x
Ценность абсциссы.
- Ln
Значение полинома оценивается на уровнеn.
- Lnm1
Значение полинома оценивается на уровнеn-1.
Следующая таблица показывает пиковые ошибки (в единицах эпсилона) для различных областей входных аргументов. Обратите внимание, что только результаты для самого широкого типа с плавающей запятой в системе приведены, поскольку более узкие типы имеютфактически нулевую ошибку.
Table 6.35. Error rates for laguerre(n, x)
|
Microsoft Visual C++ версия 12.0 Win32
|
GNU C++ версия 5.1.0 Linux Double
|
GNU C++ версия 5.1.0 Linux длинный двойной
|
Солнечный компилятор версии 0x5130 Солнечный солярис
|
Лагерские полиномы |
Макс = 3.1e+003ε (Средний = 185ε) |
Max = 6.82ε (Mean = 0.408ε)
GSL 1.16:Max = 3.1e+03ε (Mean = 185ε)] |
Макс = 1.39e+04ε (Средний = 828ε) :Макс = 4.2e+03ε (Средний = 251ε)] |
Макс = 1.39e+04ε (Средний = 828ε) |
Table 6.36. Error rates for laguerre(n, m, x)
|
Microsoft Visual C++ версия 12.0 Win32
|
GNU C++ версия 5.1.0 Linux Double
|
GNU C++ версия 5.1.0 Linux длинный двойной
|
Солнечный компилятор версии 0x5130 Солнечный солярис
|
Ассоциированные полиномы Лагерра |
Макс = 434ε (Средний = 11.1ε) |
Макс = 0,84ε (Средний = 0,0358ε)
GSL 1.16:Макс = 434ε (Средний = 10,7ε)] |
Макс = 167ε (Mean = 6.38ε)
:Макс = 206ε (Mean = 6.86ε)] |
Макс = 167ε (Средний = 6.38ε) |
Обратите внимание, что худшие ошибки происходят, когда степень увеличивается, значения, превышающие ~ 120, очень маловероятны для получения разумных результатов, особенно в связанном полиномиальном случае, когда порядок также велик. Кроме того, относительные ошибки могут расти произвольно, когда функция очень близка к корню.
Используется смесь точечных тестов значений, рассчитанных с помощью functions.wolfram.com, и случайно сгенерированных тестовых данных: тестовые данные были вычислены с использованиемNTL::RRс 1000-битной точностью.
Эти функции реализуются с использованием устойчивых трех терминов рекуррентных отношений. Эти отношения гарантируют низкую абсолютную ошибку, но не могут гарантировать низкую относительную ошибку вблизи одного из корней полиномов.