Boost C++ 库

...世界上最受推崇和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

霍伊曼Lambda函数

概要
#include <boost/math/special_functions/heuman_lambda.hpp>
namespace boost { namespace math {

template <class T1, class T2>
BOOST_MATH_GPU_ENABLED calculated-result-type heuman_lambda(T1 k, T2 phi);

template <class T1, class T2, class Policy>
BOOST_MATH_GPU_ENABLED calculated-result-type heuman_lambda(T1 k, T2 phi, const Policy&);

}} // namespaces
描述

此函数评估霍伊曼Lambda函数 Λ0(φ, k)

当参数类型不同时,此函数的返回类型是使用结果类型计算规则计算的:当参数类型相同时,结果类型与参数类型相同。

要求 -1 <= k <= 1,否则返回 domain_error 的结果(超出此范围结果将是复数)。

最终的 Policy 参数是可选的,可用于控制函数的行为:如何处理错误,使用什么精度级别等等。有关更多详细信息,请参阅 policy 文档

请注意,此函数没有完整的类似物(其中 φ = π / 2),因为它对所有 k 都取值 1。

精度

这些函数可以很容易地用其他椭圆积分计算出来,并且通常具有非常低的错误率(几个 epsilon),除非参数 φ 非常大,在这种情况下,通常的三角函数参数缩减问题适用。

表 8.69. heuman_lambda 的错误率

GNU C++ 版本 7.1.0
linux
double

GNU C++ 版本 7.1.0
linux
long double

Sun 编译器版本 0x5150
Sun Solaris
long double

Microsoft Visual C++ 版本 14.1
Win32
double

椭圆积分 Jacobi Zeta:Mathworld 数据

最大值 = 0ε (平均值 = 0ε)

最大值 = 1.89ε (平均值 = 0.887ε)

最大值 = 1.89ε (平均值 = 0.887ε)

最大值 = 1.08ε (平均值 = 0.734ε)

椭圆积分 霍伊曼 Lambda:随机数据

最大值 = 0ε (平均值 = 0ε)

最大值 = 3.82ε (平均值 = 0.609ε)

最大值 = 3.82ε (平均值 = 0.608ε)

最大值 = 2.12ε (平均值 = 0.588ε)


测试

这些测试使用混合的点测试值,这些值是使用在 Wolfram Alpha 计算的值计算的,以及使用 MPFR 以 1000 位精度生成的随机测试数据,以及根据 Legendre 积分的有意朴素的实现。

实现

然后,该函数是根据 Carlson 积分 RJ 和 RF 使用以下关系实现的

这种关系在 |φ| >= π/2 时失效,在这种情况下,使用 Jacobi Zeta 的定义。


PrevUpHomeNext