Я загрузил библиотеку GotoBLAS в http://www.tacc.utexas.edu/tacc-projects/gotoblas2/ и хочу использовать функцию syev()
для вычисления собственных векторов и собственных значений матрицы. Но я новичок в библиотеке с открытым исходным кодом, и я не знаю, как его использовать? Может кто-нибудь мне помочь?Как использовать библиотеку GotoBlas в VS2010 C++ в Windows 7?
ответ
Прежде всего, как это было предложено его именем, GotoBLAS означает обеспечить только BLAS, но его версия 2.0 также распространяет и компилирует LAPACK, которая содержит функцию ssyev
для одинарной точности поплавка и dsyev
для двойной точности ваших интересов , В порядке слов можно сказать, что вы хотите использовать LAPACK на C++ с visual studio 2010.
Я думаю, проблема заключается не в использовании библиотек в VS2010, а в том, как использовать пакет LAPACK с C++. Вот небольшой намек: LAPACK написан на Фортране. В силу исторических причин, библиотеки, написанные Fortran могут быть доступны непосредственно через С. В C++, в частности, необходимо объявить функцию, например, точка-продукта для двойной ddot
по
extern "C"{
double ddot_(
const int* n, // dimension
const double* dx, // []vector x
const int* incx,// index increment of each access of x
const double* dy, // []vector y
const int* incy // index increment of each access of y
);
}
В Fortran, каждой функции аргумент передается по ссылке, поэтому в C/C++ нам нужно передать аргументы указателями, даже для скаляров.
Как только вы объявите прототипы функций, вы можете использовать его повсюду. В этом случае, мы можем назвать это, например,
double x[] = {1,2,3};
double y[] = {1,1,1};
int inc = 1;
int n = 3;
std::cout << ddot_(&n, x, &inc, y, &inc) << std::endl;
Напечатанный результат должен быть 6
. Обратите особое внимание на то, где положить &
и где не делать этого. Очень легко ошибиться.
Убедитесь, что вы установили lapack
(или название вашей библиотеки GotoBLAS) в настройку библиотеки проектов. В командной строке с г ++, например,
g++ -llapack your_file_name.cpp -o output_file_name
Надеется, что это помогает!
Почему вы используете почти 2 ревизионных устаревших компилятора? –