我的項目是關於在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(....)
並在我的項目中使用它嗎? 對不起,如果我的問題是非常基本的,但我找不到解決方案。
好像dgeqrf_期待'a'是一個扁平數組 – tinkertime
歡迎使用Stackoverflow。 @ yankee2905的回答修復了你報告的錯誤。你不想接受他的回答,因爲它揭示了你的* next *問題。 SO上的一個問題。如果你只是想在你的項目完成之前解決你的問題,恐怕這是錯誤的地方。您的下一個問題是您沒有鏈接定義了'dgeqrf_'的庫。您的下一個*問題*是[如何鏈接到帶有Code :: Blocks的庫?](http://stackoverflow.com/q/5862757/1362568) –
@MikeKinghan感謝您的回覆。我之前已經在建議的鏈接中完成了該程序。另外,我嘗試了「Armadillo」庫,我可以在那裏做一些簡單的計算,但是我不能通過這個錯誤進行QR分解:「對_gfortran_compare_string的未定義引用」。我也有這個問題在DEV C++。它似乎是安裝步驟中的問題。 – Ham82