GSL Dilogarithm函数在C++中的使用

Usage of GSL Dilogarithm function in C++

我正在尝试使用 GSL 库为 C++ 程序提供的双对数函数。我知道如何为实数参数调用函数(returns 实数):

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:双对数的实部。但是到目前为止,我尝试的所有操作都出现错误。

#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]

谁能告诉我如何让这个功能发挥作用?谢谢

您需要传递指向 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