std::legendre, std::legendref, std::legendrel
Определено в заголовочном файле <cmath> | ||
|---|---|---|
float legendre ( unsigned int n, float x ); double legendre ( unsigned int n, double x ); long double legendre ( unsigned int n, long double x ); | (1) |
(начиная с C++17) (до C++23) |
/* floating-point-type */ legendre( unsigned int n,
/* floating-point-type */ x );
| (начиная с C++23) | |
float legendref( unsigned int n, float x ); | (2) | (начиная с C++17) |
long double legendrel( unsigned int n, long double x ); | (3) | (начиная с C++17) |
| Дополнительные перегрузки | ||
Определено в заголовочном файле <cmath> | ||
template< class Integer > double legendre ( unsigned int n, Integer x ); | (A) | (начиная с C++17) |
n и аргумента x. Библиотека предоставляет перегрузки std::legendre для всех типов с плавающей точкой без cv-квалификаторов в качестве типа параметра x.(начиная с C++23)
Параметры
| n | - | степень полинома |
| x | - | аргумент, значение с плавающей точкой или целочисленное значение |
Возвращаемое значение
Если ошибки не возникают, возвращается значение несопряжённого полинома Лежандра порядка n от x, то есть \(\mathsf{P}_n(x) = \frac{1}{2^n n!} \frac{\mathsf{d}^n}{\mathsf{d}x^n} (x^2-1)^n \)
.
Обработка ошибок
Об ошибках может сообщаться в соответствии с math_errhandling.
- Если аргумент равен NaN, возвращается NaN, а ошибка области определения не сообщается
- Функция не обязана быть определённой для |x|>1
- Если
nбольше или равно 128, поведение определяется реализацией
Примечания
Реализации, не поддерживающие C++17, но поддерживающие ISO 29124:2010, предоставляют эту функцию, если реализация определяет __STDCPP_MATH_SPEC_FUNCS__ значением не менее 201003L и если пользователь определяет __STDCPP_WANT_MATH_SPEC_FUNCS__ до включения любых заголовочных файлов стандартной библиотеки.
Реализации, не поддерживающие ISO 29124:2010, но поддерживающие TR 19768:2007 (TR1), предоставляют эту функцию в заголовочном файле tr1/cmath и пространстве имён std::tr1.
Реализация этой функции также доступна в boost.math.
Первые несколько полиномов Лежандра:
| Функция | Полином |
|---|---|
| legendre(0,x) | 1 |
| legendre(1,x) | x |
| legendre(2,x) | 1/2(3x2 - 1) |
| legendre(3,x) | 1/2(5x3 - 3x) |
| legendre(4,x) | 1/8(35x4 - 30x2 + 3) |
Дополнительные перегрузки не обязательно должны предоставляться точно в виде (A). Достаточно, чтобы они обеспечивали для своего аргумента num целочисленного типа тот же эффект std::legendre(int_num, num), что и std::legendre(int_num, static_cast<double>(num)).
Пример
#include <cmath>
#include <iostream>
double P3(double x)
{
return 0.5 * (5 * std::pow(x, 3) - 3 * x);
}
double P4(double x)
{
return 0.125 * (35 * std::pow(x, 4) - 30 * x * x + 3);
}
int main()
{
// spot-checks
std::cout << std::legendre(3, 0.25) << '=' << P3(0.25) << '\n'
<< std::legendre(4, 0.25) << '=' << P4(0.25) << '\n';
}
Вывод:
-0.335938=-0.335938 0.157715=0.157715
См. также
|
(C++17)(C++17)(C++17) | Полиномы Лагерра (функция) |
|
(C++17)(C++17)(C++17) | Полиномы Эрмита (функция) |
Внешние ссылки
| Вайсстайн, Эрик В. «Полином Лежандра». Из MathWorld — веб-ресурса Wolfram. |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/special_functions/legendre