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

标签 c++ complex-numbers gsl

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

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;
}

我在尝试编译时收到此错误:错误:预期在“*”标记之前的主表达式错误:表达式列表在初始化程序 [-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

关于c++ - GSL Dilogarithm函数在C++中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29419794/

相关文章:

c++ - 如何在不同的平台有不同的 Header?

c++ - Gradle-Visual C++编译器,vcpkg和外部库

c++ - C++如何计算复数的绝对值,防止溢出?

在 Windows 上使用 GSL 运行 C 代码的编译错误通过 R 调用

c++ - Cython、C++ 和 gsl

c++ - char (*(*a[4])())[5] 是什么意思?

c++ - 在arduino上编程atmega328p的UART

image-processing - 复数数组的离散小波变换(Daubechies 小波)

使用c编程的复数定理

c - 通过 make 将 GSL 链接到 C