2013-04-24 7 views
0

Я загрузил библиотеку GotoBLAS в http://www.tacc.utexas.edu/tacc-projects/gotoblas2/ и хочу использовать функцию syev() для вычисления собственных векторов и собственных значений матрицы. Но я новичок в библиотеке с открытым исходным кодом, и я не знаю, как его использовать? Может кто-нибудь мне помочь?Как использовать библиотеку GotoBlas в VS2010 C++ в Windows 7?

+0

Почему вы используете почти 2 ревизионных устаревших компилятора? –

ответ

1

Прежде всего, как это было предложено его именем, 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 

Надеется, что это помогает!