Rcpp 中的复杂伽马函数
Complex gamma function in Rcpp
据我了解from the doc,boost
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
类型,因此您需要使用其他库或自己实现它。
据我了解from the doc,boost
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
.
std::tgamma
std::tgamma
没有将 std::complex
作为参数,所以你会得到一个编译器错误。你想要 boost::math::tgamma
而不是。
但是 Boost 的tgamma
也不支持std::complex
类型,因此您需要使用其他库或自己实现它。