我在 ubntu 16.04 上安装了 GSL,使用:
sudo apt-get install libgsl2 libgsl-dev gsl-bin
安装的版本是 2.1+dfsg-2 。这在某些方面有效,但无法计算厄米多项式。测试代码是:
// include files
#include <iostream>
#include <iomanip>
#include <fstream>
#include <math.h>
using namespace std;
#include <gsl/gsl_sf_bessel.h> // gsl Bessel special function header
file
//packages I need
#include <gsl/gsl_sf_gamma.h>
#include <gsl/gsl_sf_hermite.h>
int
main (void)
{
double x = 5.0; // just a random test value
double y = gsl_sf_bessel_J0 (x); // see the GSL manual for details
cout << "J0(" << x << ") = "
<< setprecision(18) << setw(20) << y << endl;
y = gsl_sf_hermite_phys(10,x); // see the GSL manual for details
cout << "H10(" << x << ") = "
<< setprecision(18) << setw(20) << y << endl;
return 0;
}
这无法通过 进行编译g++ gsl_test.cpp -lgsl -lgslcblas -lm
。错误如下:
gsl_test.cpp:(.text+0xcd): undefined reference to`gsl_sf_hermite_phys'
collect2: error: ld returned 1 exit status
我知道“gsl_sf_hermite_phys”存在,因为我可以在手动安装 gsl 的系统上使用它。如果情况最糟,我可以自己手动安装 gsl,但我希望能够只使用终端命令来安装,并获得完全正常工作且最新的 GSL 安装。
**更新:** 事实证明 gsl/gsl_sf_hermite.h 标头不在 2.1+dfsg-2 中。我一定是在不知不觉中覆盖了旧安装。
我想我的问题是为什么 Hermite 多项式不存在以及如何通过终端安装 GSL 以便它们存在。
答案1
提到的gsl/gsl_sf_hermite.h
头文件在较新的 Ubuntu 版本中可用: