我正在尝试使用 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/