2013-07-31 11 views
0

culadgesvd() 함수를 사용하여 행렬에 대한 SVD를 계산하고 싶습니다. 실제로 C/C++에서 문서의 정보를 사용하는 방법은 분명하지 않습니다. 누구든지 함수를 사용하는 방법을 보여주기 위해 완전한 작은 C 프로그램, 템플릿을 제공 할 수 있습니까? 그냥 두 줄 (culaInitialize()culaShutdown()과 같은 것들)을 사용하면이 기능이 오류없이 어떻게 실행되는지 확인할 필요가 있습니다.CULA의 culagesvd()

답변

2

나는 SVD가 무료 버전에 포함되어 있지 않다고 생각했다. 아래는 QR 분해의 예입니다.

#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; 
} 

및 사용하여 컴파일하십시오 .cpp 파일에 넣고

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

답장을 보내 주셔서 감사합니다. 너의 것이 내가 너에게 신용을 줄 유일한 대답이다. –