2013-07-31 71 views
0

我想使用culadgesvd()函数来计算矩阵的SVD。我不清楚如何在C/C++中用文档中的信息实际使用它。任何人都可以给我一个完整的小C程序,一个模板,以显示如何基本上使用该功能?只需几行(像culaInitialize()culaShutdown()这样的东西)就可以了,我只需要看看这个函数如何运行而不会出错。culagesvd()in CULA

回答

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 here岗位。

+0

谢谢你的回答。你是我给你的唯一答案。 –