【问题标题】:Lapack's dgeqrf in c++Lapack 在 C++ 中的 dgeqrf
【发布时间】: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


【解决方案1】:
double a[12] = {0, 2, 2,  0, 2, 2,  // row1
                2,-1,-1,1.5,-1,-1}; // row2

【讨论】:

  • 我做到了。但它还没有工作。现在 code::Blocks 显示新错误:“未定义对 `dgeqrf_' 的引用”。这让我很困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多