Rcpp 中的复杂伽马函数

Complex gamma function in Rcpp

据我了解from the docboost C++ 库的tgamma 函数可以计算复数。

我正在尝试在 Rcpp 中使用它。这是我的代码:

// [[Rcpp::depends(BH)]]
#include <Rcpp.h>
#include <boost/math/special_functions/gamma.hpp>

// [[Rcpp::export]]
std::complex<double> gamma_boost(std::complex<double> z) { 
  std::complex<double> result = tgamma(z);
  return result;
}

此代码无法编译。我收到错误:

cannot convert 'std::complex<double>' to 'double' for argument '1' to 'double tgamma(double)'

你这里可能tgamma()错了,试试boost::math::tgamma(...)。 And/or 您可能需要在 std::complex 上制作模板。

我通常的做法是先在命令行上运行一些代码,然后通过 Rcpp 将这些代码附加到 R。

基本上,你调用了错误的函数。

您没有指定命名空间,因此由于 z.

,ADL 从标准库中找到 std::tgamma

std::tgamma 没有将 std::complex 作为参数,所以你会得到一个编译器错误。你想要 boost::math::tgamma 而不是。

但是 Boost 的tgamma 也不支持std::complex 类型,因此您需要使用其他库或自己实现它。