我想使用该culadgesvd()
函数来计算矩阵的 SVD。我不清楚如何使用文档中的信息在 C/C++ 中实际使用它。谁能给我一个完整的小 C 程序,一个模板,以显示该函数的基本使用方式?只需几行(使用 and 之类的东西culaInitialize()
)culaShutdown()
就可以了,我只需要看看这个函数如何运行而不会出错。
问问题
494 次
1 回答
2
我认为 SVD 不包含在免费版本中(尽管如此)。以下是 QR 分解的示例。把它放在一个 .cpp 文件中:
#include<cula.h>
#include<iostream>
int main()
{
float x[] = {1, 2, 3, 4};
int n_rows = 2, n_cols = 2;
float scale[n_cols];
culaInitialize();
culaSgeqrf(n_rows, n_cols, &(x[0]), n_rows, &(scale[0]));
culaShutdown();
for(int ii = 1; ii < n_rows; ii++)
{
for(int jj = 0; jj < n_cols; jj++)
{
if(ii > jj) { x[ii + jj * n_rows] *= scale[jj]; }
}
}
for(int ii = 0; ii < n_rows * n_cols; ii++)
{
std::cout << x[ii] << std::endl;
}
return 0;
}
并使用以下方法编译它:
g++ -fPIC -c -I/usr/local/cula/include -Wl,-rpath,/usr/local/cula/lib64 -L/usr/local/cula/lib64 -lcula_lapack_basic gpuQR.cpp
g++ -o gpuQR gpuQR.o -Wl,-rpath,/usr/local/cula/lib64 -L/usr/local/cula/lib64 -lcula_lapack_basic
然后使用以下命令调用程序:
./gpuQR
-2.23607
0.894427
-4.91935
-0.894427
在这里查看我关于 CULA 和 Rcpp 的帖子。
于 2013-08-27T17:35:06.963 回答