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 ‘*’ token
和 error: 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
我正在尝试使用 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 ‘*’ token
和 error: 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