2017-08-05 5 views
0

from the docを理解しているので、boost C++ライブラリのtgamma関数を複素数で評価することができます。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は標準ライブラリのstd::tgammaを見つけました。

パラメータとしてstd::complexを使用しないため、コンパイラエラーが発生します。代わりにboost::math::tgammaが必要です。

しかしブーストのtgammastd::complex種類をサポートしていませんので、あなたが別のライブラリを使用するか、それを自分で実装する必要があります。

+0

あなたはそうです。最後に私はRcppは必要ありません。複素数で動作する 'gsl'パッケージでlog-gamma関数を使うことができます。 –

関連する問題