#if !defined(__CUDACC__) && !defined(__CUDACC_RTC__) template <class T1, class T2> BOOST_MATH_GPU_ENABLED std::complex<calculated-result-type> sph_hankel_1(T1 v, T2 x); template <class T1, class T2, class Policy> BOOST_MATH_GPU_ENABLED std::complex<calculated-result-type> sph_hankel_1(T1 v, T2 x, const Policy&); template <class T1, class T2> BOOST_MATH_GPU_ENABLED std::complex<calculated-result-type> sph_hankel_2(T1 v, T2 x); template <class T1, class T2, class Policy> BOOST_MATH_GPU_ENABLED std::complex<calculated-result-type> sph_hankel_2(T1 v, T2 x, const Policy&); #else // When using cuda we use namespace cuda::std:: instead of std:: template <class T1, class T2> BOOST_MATH_GPU_ENABLED cuda::std::complex<calculated-result-type> sph_hankel_1(T1 v, T2 x); template <class T1, class T2, class Policy> BOOST_MATH_GPU_ENABLED cuda::std::complex<calculated-result-type> sph_hankel_1(T1 v, T2 x, const Policy&); template <class T1, class T2> BOOST_MATH_GPU_ENABLED cuda::std::complex<calculated-result-type> sph_hankel_2(T1 v, T2 x); template <class T1, class T2, class Policy> BOOST_MATH_GPU_ENABLED cuda::std::complex<calculated-result-type> sph_hankel_2(T1 v, T2 x, const Policy&); #endif
函数 sph_hankel_1 和 sph_hankel_2 返回第一类和第二类球汉克尔函数的结果
当 T1 和 T2 是不同类型时,这些函数的返回类型使用结果类型计算规则计算。 这些函数也针对 T1 为整数的相对常见情况进行了优化。
最后的 策略 参数是可选的,可用于控制函数的行为:如何处理错误、使用什么级别的精度等。 有关更多详细信息,请参阅策略文档。
请注意,虽然这些函数的参数是实数值,但结果是复数。 这意味着这些函数只能在类型 float
、 double
和 long double
上实例化。 这些函数也已扩展到在 v 和 x 的整个范围内运行(与 cyl_bessel_j 和 cyl_neumann 不同)。
只有一些 spot 测试来练习所有特殊情况处理 - 大部分测试都在这些函数所基于的贝塞尔函数上完成。
请参阅 cyl_bessel_j 和 cyl_neumann。
这些函数是根据 cyl_hankel_1 和 cyl_hankel_2 轻松实现的。