我在http://www.tacc.utexas.edu/tacc-projects/gotoblas2/下载了GotoBLAS库,我想使用syev()
函数来计算矩阵的特征向量和特征值。但我是开源库的新手,我不知道如何使用它?任何人都可以帮助我吗?
答案 0 :(得分:1)
首先,正如其名称所示,GotoBLAS意味着仅提供BLAS,但其版本2.0也分发和编译LAPACK,其中包含单精度浮点函数ssyev
和dsyev
为了您的兴趣的双重精度。换句话说,它相当于你想在Visual Studio 2010中使用C ++中的LAPACK。
我想问题不是如何在VS2010中使用库,而是如何在C ++中使用LAPACK包。这里有一点提示:LAPACK是用Fortran编写的。由于历史原因,可以直接通过C语言访问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 ++的命令行中,
g++ -llapack your_file_name.cpp -o output_file_name
希望这有帮助!