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
我的项目是关于在 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