std::assoc_legendre, std::assoc_legendref, std::assoc_legendrel

 
 
数值库
常用数学函数
数学特殊函数 (C++17)
数学常数 (C++20)
浮点环境 (C++11)
复数
数值数组
伪随机数生成
编译时有理数算术 (C++11)
数值算法
(C++17)
(C++17)
插值
(C++20)
(C++20)
通用数值运算
(C++11)
位操作
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
 
 
定义于头文件 <cmath>
double      assoc_legendre( unsigned int n, unsigned int m, double x );

float       assoc_legendre( unsigned int n, unsigned int m, float x );
long double assoc_legendre( unsigned int n, unsigned int m, long double x );
float       assoc_legendref( unsigned int n, unsigned int m, float x );

long double assoc_legendrel( unsigned int n, unsigned int m, long double x );
(1) (C++17 起)
double      assoc_legendre( unsigned int n, unsigned int m, IntegralType x );
(2) (C++17 起)
1) 以参数 x 计算 nm关联勒让德多项式
2) 接受任何整数类型参数的重载集或函数模板。等价于将参数转型到 double 后的 (1)

参数

n - 多项式的次数,无符号整数值
m - 多项式的阶数,无符号整数值
x - 参数,浮点或整数类型值

返回值

若无错误发生,则返回 x 的关联勒让德多项式 Pm
n
的值,即 (1-x2
)m/2
dm
dxm
P
n
(x)
(其中 P
n
(x)
是非关勒让德多项式 std::legendre(n, x) )。

注意此定义忽略 Condon-Shortley 相位项 (-1)m

错误处理

可能报告 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_p 可用于 boost.math ,除了 boost.math 定义包含 Condon-Shortley 相位项。

前几个关联勒让德多项式是:

  • assoc_legendre(0, 0, x) = 1
  • assoc_legendre(1, 0, x) = x
  • assoc_legendre(1, 1, x) = (1-x2
    )1/2
  • assoc_legendre(2, 0, x) =
    1
    2
    (3x2
    -1)
  • assoc_legendre(2, 1, x) = 3x(1-x2
    )1/2
  • assoc_legendre(2, 2, x) = 3(1-x2
    )

示例

#include <cmath>
#include <iostream>
double P20(double x) { return 0.5*(3*x*x-1); }
double P21(double x) { return -3.0*x*std::sqrt(1-x*x); }
double P22(double x) { return 3*(1-x*x); }
int main()
{
    // 点检查
    std::cout << std::assoc_legendre(2, 0, 0.5) << '=' << P20(0.5) << '\n'
              << std::assoc_legendre(2, 1, 0.5) << '=' << P21(0.5) << '\n'
              << std::assoc_legendre(2, 2, 0.5) << '=' << P22(0.5) << '\n';
}

输出:

-0.125=-0.125
1.29904=1.29904
2.25=2.25

参阅

(C++17)(C++17)(C++17)
勒让德多项式
(函数)

外部链接

Weisstein, Eric W. “关联勒让德多项式”来自 MathWorld--A Wolfram Web Resource 。