首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dgeqrf(LAPACK)在c++中工作不正常

dgeqrf(LAPACK)在c++中工作不正常
EN

Stack Overflow用户
提问于 2015-11-13 12:49:46
回答 1查看 308关注 0票数 2

如果你能帮我解决以下问题,我将不胜感激。我偶然发现了这堵墙,我真的说不出这里出了什么问题。我想用c++下的LAPACK函数dgeqrf,dormqr和dtrtrs来求解齐次系统(15乘15)。但我试着看看能否直接解决简单得多的系统。我在这里发布的是我对dgeqrf的简单用法。

代码语言:javascript
复制
#include "lapacke.h"
#include "lapacke_config.h"
#include "lapacke_mangling.h"
#include "lapacke_utils.h"
using namespace std;

int main()
{

int     INFO=3;
double WORK[3];
int LWORK=3;
double TAU[3];
int     LDA = 3;
int     LDB = 3;
int     N = 3;


double det;

double  A[9] =
{
    1, 1, 0,
    0, 1, 0,
    0, 1, 1
};

// end of declarations
LAPACK_dgeqrf(&N,&N,A,&LDA,TAU,WORK,&LWORK,&INFO);
for(int i=0;i<N*N;i++){
cout<<A[i]<<",";
}
cout<<endl;
if (INFO!=0){
return 0;
}
det=pow(-1,N-1);
 for(int i=0;i<N;i++){
det = det * A[i*N+i];
}
cout<<det<<endl;

我不明白的是,为什么我得到R-矩阵,这是不正确的?打印结果显示:

代码语言:javascript
复制
 -1.41421,0.414214,0,-0.707107,0.707107,0,-0.707107,0.707107,1,

如果我把它与其他在线矩阵计算器核对一下,那是错误的。我知道上三角形加上对角线应该是我的R矩阵。更令人惊讶的是,我得到了行列式,这个行列式是正确的(我用更简单的例子来检验它)。R矩阵应该是唯一的,对吧?如果我想解决15乘15的问题,我应该把这个第一步解决.我希望有人能给我解释一下。我想说的是,我试图使用所有三个子程序来解决简单的3乘3系统,但它提供了毫无意义的结果。我希望一旦我做对了,我也会理解休眠和drtrs的问题。

干杯!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-13 13:02:58

这似乎是一个主要的行与列的主要问题。在C/C++中,我们通常有矩阵行,但在FORTRAN中(您使用的翻版可能是实现的)使用列-主格式。

尝试更改A中的行和列:

双A9 ={ 1,0,0,1,1,1,0,0,1 };

考虑到你发布的矩阵是列主矩阵,并将其插入在线QR计算器(http://www.bluebit.gr/matrix-calculator/)中,我会得到你发布的R矩阵,除了第一行的符号倒置外,这意味着第一个Q向量正好指向相反的方向。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33693138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档