C+中的QR分解+;拉帕克 我最近安装了一个新的C++矩阵计算程序库,叫做我是该领域的初学者,希望通过使用dgeqrf函数测试其在QR分解中的应用。我准备了以下简单代码: #include <iostream> #include <lapacke.h> using namespace std; int main() { double a[4] = {0, 2, 2, -1}; int m=2; int n=2; int info = 0; int lda = m; int lwork = n; double *work; double *tau; dgeqrfp_(&m, &n, a, &lda, tau, work, &lwork, &info); }

C+中的QR分解+;拉帕克 我最近安装了一个新的C++矩阵计算程序库,叫做我是该领域的初学者,希望通过使用dgeqrf函数测试其在QR分解中的应用。我准备了以下简单代码: #include <iostream> #include <lapacke.h> using namespace std; int main() { double a[4] = {0, 2, 2, -1}; int m=2; int n=2; int info = 0; int lda = m; int lwork = n; double *work; double *tau; dgeqrfp_(&m, &n, a, &lda, tau, work, &lwork, &info); },c++,matrix,linear-algebra,lapack,C++,Matrix,Linear Algebra,Lapack,我不知道问题出在哪里,但我认为我对dgeqrf函数的定义是错误的 此外,dgeqrf是一个void函数。我需要将其结果(Q矩阵)保存到另一个矩阵中,并在计算中使用它 有人对此有想法吗?如中所述,TAU和WORK应该是函数可以使用的数组 特别是,工作应为一个双数组,且至少具有长度LWORK,用作内部临时存储器 TAU是用于输出QR分解的基本反射器的阵列,其长度(至少)min(n,m) 因此,您的完整通话将如下所示: #include <iostream> #include <la

我不知道问题出在哪里,但我认为我对
dgeqrf
函数的定义是错误的

此外,
dgeqrf
是一个
void
函数。我需要将其结果(Q矩阵)保存到另一个矩阵中,并在计算中使用它

有人对此有想法吗?

如中所述,
TAU
WORK
应该是函数可以使用的数组

特别是,
工作
应为一个双数组,且至少具有长度
LWORK
,用作内部临时存储器

TAU
是用于输出QR分解的基本反射器的阵列,其长度(至少)
min(n,m)

因此,您的完整通话将如下所示:

#include <iostream>
#include <lapacke.h>
using namespace std;
int main()
{
    double a[4] = {0,2,2,-1};
    int m=2;
    int n=2;
    int info = 0;
    int lda = m;
    int lwork = n;
    double work[2];
    double tau[2];
    dgeqrfp_(&m, &n, a, &lda, tau, work, &lwork, &info);
}
#包括
#包括
使用名称空间std;
int main()
{
双a[4]={0,2,2,-1};
int m=2;
int n=2;
int info=0;
int-lda=m;
int lwork=n;
双重劳动[2];
双头[2];
dgeqrfp(m、n、a、lda、tau、work、lwork和info);
}

假定
tau
work
参数是预先分配的数组。有关更多信息(特别是关于所需数组的长度),请参阅DOC.@ BaummitAugen,但我找不到关于如何在DOC或Internet中的“DGESQR”函数的简单C++示例中确定参数的方法。好吧,好的,如果没有找到,我会找一个DUPE并写一个答案。给我几分钟。
#include <iostream>
#include <lapacke.h>
using namespace std;
int main()
{
    double a[4] = {0,2,2,-1};
    int m=2;
    int n=2;
    int info = 0;
    int lda = m;
    int lwork = n;
    double work[2];
    double tau[2];
    dgeqrfp_(&m, &n, a, &lda, tau, work, &lwork, &info);
}