2015-04-02 35 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