Я установил GSL на ubntu 16.04, используя:
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. Я, должно быть, переписал старую установку, не осознавая этого.
Думаю, мой вопрос в том, почему нет полиномов Эрмита и как установить GSL через терминал, чтобы они там были.
Упомянутый gsl/gsl_sf_hermite.h
заголовочный файл доступен в более новых релизах Ubuntu: