Lapack 在 C++ 中的 dgeqrf

Lapack's dgeqrf in c++

我的项目是关于在 C++ 中为非常大的矩阵(例如 500*500)在 QR 分解中找到 Q。我最近开始使用 Lapack 包及其特殊功能 "dgeqrf"。我从一个简单的矩阵开始,如下所示 Code:blocks:

 #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 矩阵?我可以定义一个新的矩阵 double q[][]=dgeqrf(....) 并在我的项目中使用它吗? 很抱歉,如果我的问题很基本,但我找不到解决方案。

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