0

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

4

1 回答 1

1

首先,顾名思义,GotoBLAS 的意思是只提供 BLAS,但它的 2.0 版本还分发和编译 LAPACK,其中包含您感兴趣ssyev的单精度浮点和dsyev双精度功能。换句话说,相当于说你想在 Visual Studio 2010 中使用 C++ 中的 LAPACK。

我想问题不在于如何在 VS2010 中使用库,而是如何在 C++ 中使用 LAPACK 包。这里有一个小提示:LAPACK 是用 Fortran 编写的。由于历史原因,C语言可以直接访问Fortran编写的库。在C++中,具体需要声明函数,例如dot-product for double ddotby

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

希望这可以帮助!

于 2013-07-20T20:48:09.303 回答