2016-12-03 5 views
1

내 프로젝트는 C++에서 매우 큰 행렬 (예 : 500 * 500)에 대한 QR 분해에서 Q를 찾는 것에 관한 것입니다. 나는 Lapack 패키지를 최근에 사용하기 시작했으며 특별한 함수 "dgeqrf"를 사용하기 시작했다. 나는 코드에 다음과 같이 단순 매트릭스에 의해 시작 : 블록 :Lapack의 dgeqrf in C++

error: cannot convert 'double (*)[2]' to 'double*' for argument '3' to 'void dgeqrf_(int*, int*, double*, int*, double*, double*, int*, int*)' 

날이 오류에 대한 도움이 될 수 있습니다

#include <iostream> 
#include <lapacke.h> 

using namespace std; 

int main() 
{ 
    double a[6][2] = {{0,2},{2,-1},{2,-1},{0,1.5},{2,-1},{2,-1}}; 
    int m=6; 
    int n=2; 
    int info = 0; 
    int lda = m; 
    int lwork = n; 
    double *work; 
    double *tau; 
    dgeqrf_(&m, &n, a, &lda, tau, work, &lwork, &info); 

} 

코드를 실행 한 후, 나는 "dgeqrf"라인이 오류보고를? 매개 변수 정의에 실수가 있습니까? 또한 실행 후 어떻게 Q 매트릭스로 작업 할 수 있습니까? 새로운 matix double q[][]=dgeqrf(....)을 정의하고 그것을 내 프로젝트에서 사용할 수 있습니까? 내 질문이 매우 기본적인 것이지만 솔루션을 찾지 못해서 미안합니다.

+0

dgeqrf_는 'a'가 평평한 배열이 될 것으로 예상하고 있습니다. – tinkertime

+0

Welcome to Stackoverflow. @ yankee2905 님의 답변으로 신고 한 오류가 해결되었습니다. 당신은 그의 * next * 문제를 밝혀 내기 때문에 그의 대답을 받아들이지 않기를 원합니다. 한 번에 한 가지 질문. 프로젝트가 완료 될 때까지 문제를 해결하기 만하면이 프로젝트가 잘못된 곳으로 생각됩니다. 다음 문제는'dgeqrf_'가 정의 된 라이브러리를 링크하지 않는다는 것입니다. 다음 질문 * [코드 :: 블록이있는 라이브러리에 연결하려면 어떻게합니까?] (http://stackoverflow.com/q/5862757/1362568) –

+0

@MikeKinghan 응답 해 주셔서 감사합니다. 전에 권장 링크에서 절차를 완료했습니다. 또한 "Armadillo"라이브러리를 사용해 보았으나 거기에서 간단한 계산을 할 수는 있지만이 오류로 인해 QR 분해를 수행 할 수 없었습니다 : "_ffortran_compare_string에 대한 정의되지 않은 참조". 또한 DEV C++에서이 문제가 있습니다. 설치 단계에서 문제가있는 것 같습니다. – Ham82

답변

2
double a[12] = {0, 2, 2, 0, 2, 2, // row1 
       2,-1,-1,1.5,-1,-1}; // row2 
+0

나는 그것을했다. 그러나 아직 작동하지 않습니다. 이제 code :: Blocks는 새로운 오류를 보여줍니다 : "dgeqrf_ '에 대한 정의되지 않은 참조. 그것은 나를 혼란스럽게했다. – Ham82