2016-12-03 30 views
1

我的項目是關於在C++中爲非常大的矩陣(例如500 * 500)的QR分解中找到Q值。我最近開始使用Lapack軟件包,它的特殊功能是「dgeqrf」。我在代碼開始由簡單的矩陣如下:塊:Lapack的C++中的dgeqrf

#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」行:

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

誰能幫我這個錯誤?參數定義中有錯誤嗎? 另外,運行後,我如何使用Q矩陣?我可以定義一個新的matix double q[][]=dgeqrf(....)並在我的項目中使用它嗎? 對不起,如果我的問題是非常基本的,但我找不到解決方案。

+0

好像dgeqrf_期待'a'是一個扁平數組 – tinkertime

+0

歡迎使用Stackoverflow。 @ yankee2905的回答修復了你報告的錯誤。你不想接受他的回答,因爲它揭示了你的* next *問題。 SO上的一個問題。如果你只是想在你的項目完成之前解決你的問題,恐怕這是錯誤的地方。您的下一個問題是您沒有鏈接定義了'dgeqrf_'的庫。您的下一個*問題*是[如何鏈接到帶有Code :: Blocks的庫?](http://stackoverflow.com/q/5862757/1362568) –

+0

@MikeKinghan感謝您的回覆。我之前已經在建議的鏈接中完成了該程序。另外,我嘗試了「Armadillo」庫,我可以在那裏做一些簡單的計算,但是我不能通過這個錯誤進行QR分解:「對_gfortran_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