如何在Windows 7上的VS2010 C ++中使用GotoBlas库?

时间:2013-04-24 16:35:22

标签: visual-studio-2010 eigenvector eigenvalue

我在http://www.tacc.utexas.edu/tacc-projects/gotoblas2/下载了GotoBLAS库,我想使用syev()函数来计算矩阵的特征向量和特征值。但我是开源库的新手,我不知道如何使用它?任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

首先,正如其名称所示,GotoBLAS意味着仅提供BLAS,但其版本2.0也分发和编译LAPACK,其中包含单精度浮点函数ssyevdsyev为了您的兴趣的双重精度。换句话说,它相当于你想在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

希望这有帮助!