【发布时间】:2016-12-03 13:22:10
【问题描述】:
我的项目是关于在 C++ 中为非常大的矩阵(例如 500*500)在 QR 分解中找到 Q。我最近开始使用 Lapack 包及其特殊功能“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成为扁平数组 -
欢迎来到 Stackoverflow。 @yankee2905 的回答修复了您报告的错误。你不想接受他的回答,因为它揭示了你的下一个问题。在 SO 上一次一个问题。如果您只是希望在项目完成之前解决您的问题,恐怕这是错误的地方。您的下一个问题是您没有链接定义
dgeqrf_的库。您的下一个问题是How do I link to a library with Code::Blocks? -
@MikeKinghan 感谢您的回复。我之前已经完成了推荐链接中的程序。另外,我尝试了“犰狳”库,我可以在那里进行一些简单的计算,但我无法通过以下错误进行 QR 分解:“未定义的对 _gfortran_compare_string 的引用”。我在 DEV C++ 中也有这个问题。似乎问题出在安装步骤中。
标签: c++ codeblocks lapack