我试过了boost::math::cyl_bessel_k(x,y) * exp(y)
。在大多数情况下,这等于Matlab的缩放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)
会给我不同的值{{1 }}。但是10^-3
会返回boost::math::cyl_bessel_k(x,y) * exp(y)
。我想为Matlab的-nan
找到一个等价的陈述。我怎么处理这个?
答案 0 :(得分:1)
我没有在Boost中看到任何你需要的东西(尽管你可以通过使用低级函数自己实现它)。正如您所发现的那样,缩放的贝塞尔函数不是通过乘以exp(z)
来计算的。 GSL似乎已合并此功能,例如gsl_sf_bessel_Knu_scaled
。对于“完全等效”,您可以查看the paper和code by Amos,例如CBESK。 Matlab和Octave似乎都使用了这种实现方式。但是,代码是用Fortran编写的,所以你需要翻译它或者在它周围放一个包装器(this project似乎已经这样做了所以它可能是有用的 - 那里也有其他的。)
您也可以使用Matlab的Coder和codegen
来输出内容。