什么是" Matlab besselk(x,y,1)"在c ++中?

时间:2014-07-07 16:58:54

标签: c++ matlab boost bessel-functions

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

1 个答案:

答案 0 :(得分:1)

我没有在Boost中看到任何你需要的东西(尽管你可以通过使用低级函数自己实现它)。正如您所发现的那样,缩放的贝塞尔函数不是通过乘以exp(z)来计算的。 GSL似乎已合并此功能,例如gsl_sf_bessel_Knu_scaled。对于“完全等效”,您可以查看the papercode by Amos,例如CBESK。 Matlab和Octave似乎都使用了这种实现方式。但是,代码是用Fortran编写的,所以你需要翻译它或者在它周围放一个包装器(this project似乎已经这样做了所以它可能是有用的 - 那里也有其他的。)

您也可以使用Matlab的Coder和codegen来输出内容。