2017-08-05 47 views
0

據我所知,from the docboost C++函數庫的函數可以評估複數。Rcpp中的複合伽瑪函數

我試圖在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)' 

回答

2

您可能有錯誤的tgamma()這裏,嘗試boost::math::tgamma(...)。和/或您可能需要模板std::complex

我通常的做法是讓某些東西在命令行上先工作,然後通過Rcpp將這些代碼附加到R上。

+0

確實,我很愚蠢。我的代碼不適用於'boost :: math :: tgamma',但這是正確的答案。 –

2

基本上,你正在調用錯誤的功能。

您沒有指定名稱空間,所以ADL從z標準庫中找到std::tgamma

std::tgamma不需要std::complex作爲參數,所以你會得到一個編譯器錯誤。您需要改爲boost::math::tgamma

Boost的tgamma也不支持std::complex類型,所以你需要使用另一個庫或實現它自己。

+0

你說得對。最後我不需要Rcpp:我可以在'gsl'包中使用log-gamma函數,該函數適用於複數。 –