2015-04-02 143 views
1

我正在尝试将GSL库提供的dilogarithm函数用于C++程序。我得到如何调用一个真正的参数的函数(它返回一个实数):在C++中使用GSL Dilogarithm函数

gsl_sf_dilog(double x) 

但在参数是复杂的情况下,我不知道如何正确地调用该函数。在GSL手册说,对于一个复杂的参数,调用函数如下:

int gsl_sf_complex_dilog_e (double r, double theta, gsl_sf_result *result_re, gsl_sf_result * result_im) 

我想出来的方案是result_re:在dilogarithm的实部。但是,到目前为止,我只尝试过所有我尝试过的错误。

#include <iostream> 
#include <gsl/gsl_sf_dilog.h> 
#include <gsl/gsl_sf_result.h> 
#include <cmath> 
#include <complex> 

int main (void) 
{ 
    double res1, res2; 
    double dilog = gsl_sf_complex_dilog_e(3.,M_PI/2.,  gsl_sf_result*res1,gsl_sf_result*res2); 
    return 0; 
} 

我得到这个错误,当我尝试编译:error: expected primary-expression before ‘*’ tokenerror: expression list treated as compound expression in initializer [-fpermissive]

谁能告诉我怎样才能让此功能工作?谢谢

+0

什么是在'gsl_sf_complex_dilog_e'称之为 '\' 反斜线? – emsr 2015-04-02 19:22:18

+0

我的不好。我把它们放在一起表示它应该全部在同一行上,函数调用中没有反斜杠。我已经编辑它使其更清晰。 – talkingpie 2015-04-03 22:27:08

回答

0

您需要传递指向gsl_sf_result结构不是双打,因为你正在尝试。

您可以从这些结构的val成员中获得结果。

一个修正你的代码的版本是:

#include <iostream> 
#include <cmath> 
#include <gsl/gsl_sf_dilog.h> 
#include <gsl/gsl_sf_result.h> 

int main() 
{ 
    gsl_sf_result re, im; 
    gsl_sf_complex_dilog_e(3., M_PI/2., &re, &im); 

    std::cout << re.val << " + " << im.val << "i" << std::endl; 

    return 0; 
} 

,输出:

-0.987666 + 2.05507i