#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 |
GNU C++ 版本 7.1.0 |
Sun 编译器版本 0x5150 |
Microsoft Visual C++ 版本 14.1 |
|
---|---|---|---|---|
椭圆积分 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 的定义。