C++ 中"Matlab besselk(x,y,1)"的确切等价物是什么?

What is the exact equivalent of "Matlab besselk(x,y,1)" in c++?

本文关键字:等价物 是什么 Matlab besselk C++      更新时间:2023-10-16

我试过boost::math::cyl_bessel_k(x,y) * exp(y)。在大多数情况下,这等于Matlab的缩放besselk(x,y,1)。但在某些情况下(例如,x=1, y=2000),当besselk(x,y)=0boost::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)找到一个等效的语句。我该如何处理?

我在Boost中没有看到任何您需要的东西(尽管您可能能够通过使用低级函数自己实现它)。正如您所发现的,缩放贝塞尔函数不是简单地通过乘以exp(z)来计算的。GSL似乎已经纳入了这个功能,例如,gsl_sf_bessel_Knu_scaled。对于"完全等价的",您可以查看Amos的论文和代码,例如,CBESK。Matlab和Octave似乎都使用了这种实现。然而,代码是用Fortran编写的,所以你需要翻译它或在它周围放一个包装器(这个项目似乎已经这样做了,所以它可能是有用的-还有其他的)。

您也可以使用Matlab的编码器和codegen来输出一些东西。