我试过了boost::math::cyl_bessel_k(x,y) * exp(y)
。在大多数情况下,这等于 Matlab 的 scaled besselk(x,y,1)
。但在某些情况下(例如 , x=1
)y=2000
当besselk(x,y)=0
和时boost::math::cyl_bessel_k(x,y)=0
,Matlab 的缩放版本besselk(x,y,1)
给我不同的值在10^-3
. 但boost::math::cyl_bessel_k(x,y) * exp(y)
回报-nan
。我想为 Matlab 的besselk(x,y,1)
. 我该如何处理?
问问题
345 次
1 回答
1
我在 Boost 中没有看到任何你需要的东西(尽管你可以通过使用较低级别的函数自己实现它)。正如您所发现的,缩放的 Bessel 函数不是简单地通过相乘来计算的exp(z)
。GSL似乎已包含此功能,例如gsl_sf_bessel_Knu_scaled
. 对于“完全等价物”,您可以查看Amos的论文和代码,例如CBESK。Matlab 和 Octave 似乎都使用了这个实现。但是,代码是用 Fortran 编写的,因此您需要对其进行翻译或对其进行包装(该项目似乎已经这样做了,因此它可能很有用——还有其他的)。
您也可以使用 Matlab 的编码codegen
器并输出一些东西。
于 2014-07-07T18:01:40.923 回答