具有大变量的高阶贝塞尔函数计算
high order bessel function computation with large variables
我的工作涉及计算大变量值的高阶贝塞尔函数。在 MATLAB 中,这已经毫无问题地完成了。但是,为了扩大问题的规模,我已经调整为使用 MPI 编写 C++ 代码。当然,生成贝塞尔函数的步骤是通过调用一些库来完成的。为了具体说明问题,让我考虑一下这个非常具体的错误。
在 matlab 中,假设我想计算 $J_46341(86840.0)$ 和
matlab gives me: besselj(46341,86840)=0.001309896212292
不过,调用一个简单的测试例子
gsl_sf_bessel_Jn_e returns "ERROR: NaN"
我已经检查了 46340 号订单,matlab 和 gsl returns 相同的答案 0.00292895 在可接受的精度内。 GSL 中的一个步骤导致 NaN 错误,而 matlab 仍然保留了一个很好的准确数值答案。
我确实尝试使用递归关系来生成更高阶的值,从一个不太小的阶开始,比如从 20000 阶开始,但是,这只会延迟 NaN 错误而没有完全解决问题.
将我的注意力转移到其他可用的软件库上,我尝试了 NAG,但令我非常失望的是,
nag_bessel_j_alpha (s18ekc) has constraint of abs(nl)<=101
,换句话说,它最多只能计算101阶,显然不符合我的研究兴趣。
所以,我的问题很简单:
Is there a more reliable library approach to obtain high order bessel
function value for large x?
渐近地,bessel 函数接近 0,如果尾部接近下溢限制,我肯定可以将这些值设置为零。然而,NaN问题似乎发生在强烈振荡曲线和渐近衰减尾部之间。
问题已解决。感谢您为社区所做的工作,您的知识和贡献让我非常惊讶!!!
请看这里,
MATLAB、R、Python 和 JuliaLang/openspecfun 均基于 Donald E. Amos 博士(桑迪亚国家实验室)的原始 Fortran 源代码构建,引用的论文:
D. E. Amos, "A subroutine package for Bessel functions of a complex
argument and nonnegative order", Sandia National Laboratory Report,
SAND85-1018, May, 1985.
D. E. Amos, "A portable package for Bessel functions of a complex
argument and nonnegative order", Trans. Math. Software, 1986.
现在称为 ACM 收集的 Amos 算法 644。
http://dl.acm.org/citation.cfm?id=212078
http://dl.acm.org/citation.cfm?id=1268783
http://dl.acm.org/citation.cfm?id=98299
但是,托管在 netlib 上的源代码并非没有错误,而且可能不是最新的,
http://netlib.sandia.gov/master/index.html
http://netlib.sandia.gov/amos/
虽然openspecfun采用的版本是solid,
https://github.com/JuliaLang/openspecfun
我的工作涉及计算大变量值的高阶贝塞尔函数。在 MATLAB 中,这已经毫无问题地完成了。但是,为了扩大问题的规模,我已经调整为使用 MPI 编写 C++ 代码。当然,生成贝塞尔函数的步骤是通过调用一些库来完成的。为了具体说明问题,让我考虑一下这个非常具体的错误。
在 matlab 中,假设我想计算 $J_46341(86840.0)$ 和
matlab gives me: besselj(46341,86840)=0.001309896212292
不过,调用一个简单的测试例子
gsl_sf_bessel_Jn_e returns "ERROR: NaN"
我已经检查了 46340 号订单,matlab 和 gsl returns 相同的答案 0.00292895 在可接受的精度内。 GSL 中的一个步骤导致 NaN 错误,而 matlab 仍然保留了一个很好的准确数值答案。
我确实尝试使用递归关系来生成更高阶的值,从一个不太小的阶开始,比如从 20000 阶开始,但是,这只会延迟 NaN 错误而没有完全解决问题.
将我的注意力转移到其他可用的软件库上,我尝试了 NAG,但令我非常失望的是,
nag_bessel_j_alpha (s18ekc) has constraint of abs(nl)<=101
,换句话说,它最多只能计算101阶,显然不符合我的研究兴趣。
所以,我的问题很简单:
Is there a more reliable library approach to obtain high order bessel function value for large x?
渐近地,bessel 函数接近 0,如果尾部接近下溢限制,我肯定可以将这些值设置为零。然而,NaN问题似乎发生在强烈振荡曲线和渐近衰减尾部之间。
问题已解决。感谢您为社区所做的工作,您的知识和贡献让我非常惊讶!!!
请看这里,
MATLAB、R、Python 和 JuliaLang/openspecfun 均基于 Donald E. Amos 博士(桑迪亚国家实验室)的原始 Fortran 源代码构建,引用的论文:
D. E. Amos, "A subroutine package for Bessel functions of a complex
argument and nonnegative order", Sandia National Laboratory Report,
SAND85-1018, May, 1985.
D. E. Amos, "A portable package for Bessel functions of a complex
argument and nonnegative order", Trans. Math. Software, 1986.
现在称为 ACM 收集的 Amos 算法 644。
http://dl.acm.org/citation.cfm?id=212078
http://dl.acm.org/citation.cfm?id=1268783
http://dl.acm.org/citation.cfm?id=98299
但是,托管在 netlib 上的源代码并非没有错误,而且可能不是最新的,
http://netlib.sandia.gov/master/index.html
http://netlib.sandia.gov/amos/
虽然openspecfun采用的版本是solid,
https://github.com/JuliaLang/openspecfun