提问者:小点点

用LAPACK实现C++中的QR分解


我最近安装了一个用C++进行矩阵计算的新库,叫做Lapack。我是这个领域的初学者,想用函数测试它在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);
}

我构建它时没有出错,但当我尝试运行它时,它并不工作。我收到这些警告信息:

D:\c++ code\lllll\main.cpp|15|warning: 'tau' is used uninitialized in this function [-Wuninitialized]|
D:\c++ code\lllll\main.cpp|15|warning: 'work' is used uninitialized in this function [-Wuninitialized]|

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

而且,是一个函数。我需要将它的结果(Q矩阵)保存到另一个矩阵中,并在我的计算中使用它。

有人对此有什么想法吗?


共1个答案

匿名用户

如文档中所述,应该是函数可以工作的数组。

特别地,应该是的数组,并且具有(至少)长度,它被用作内部临时存储器。

是用于输出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[2];
    double tau[2];
    dgeqrfp_(&m, &n, a, &lda, tau, work, &lwork, &info);
}

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(lapack|c++|中|qr|分解)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?