我在http://www.tacc.utexas.edu/tacc-projects/gotoblas2/下载了 GotoBLAS 库,我想使用syev()
函数来计算矩阵的特征向量和特征值。但是我是一个开源库的新手,我不知道如何使用它?谁能帮我?
问问题
579 次
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 ddot
by
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 回答