dgeqrf(LAPACK)在C ++中无法正常工作

猫头鹰咬

如果您能帮助我解决以下问题,将不胜感激。我绊倒在墙上,我真的不能说出这里出了什么问题。我想在C ++下使用LAPACK函数dgeqrf,dormqr和dtrtrs来解决同类系统(15乘15)。但是我试图看看我是否可以直接解决更简单的系统。我在这里发布的是dgeqrf的简单用法。

#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-矩阵?打印输出给出:

 -1.41421,0.414214,0,-0.707107,0.707107,0,-0.707107,0.707107,1,

如果我对照其他在线矩阵计算器进行检查,那是错误的。我知道上三角形和对角线应该是我的R矩阵。而且更令人惊讶的是,我获得了正确的行列式(我对照更简单的示例对其进行了检查)。R-矩阵应该是唯一的,对吧?如果我想解决15乘15的问题,我应该解决第一步...我希望有人可以向我解释。我想先说一下,我尝试使用所有三个子例程来解决简单的3×3系统,但结果却毫无意义。我希望一旦我正确地做到这一点,我也将理解dormqr和drtrs的问题。

干杯!

香蕉

看来这是行主要与列主要的问题。在C / C ++中,我们通常使用行优先矩阵,但在FORTRAN(您可能使用的lapack可能在其中实现)中,则使用列优先矩阵。

尝试更改A中的行和列:

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

将您发布的矩阵考虑为以列为主的矩阵,然后将其插入在线QR计算器(http://www.bluebit.gr/matrix-calculator/)中,我得到了您发布的R矩阵,除了第一行的符号反转,这意味着第一个Q向量仅指向相反的方向。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Lapack的C ++中的dgeqrf

来自分类Dev

C中的加密无法正常工作

来自分类Dev

C中的内联汇编无法正常工作

来自分类Dev

C ++中的函数重载无法正常工作

来自分类Dev

C程序中的strcat无法正常工作

来自分类Dev

在C中复制的文件无法正常工作

来自分类Dev

'unshare'在C api中无法正常工作

来自分类Dev

睡眠语句在C ++中无法正常工作

来自分类Dev

C中的Char指针无法正常工作

来自分类Dev

指针在C中无法正常工作?

来自分类Dev

C中的内联汇编无法正常工作

来自分类Dev

OpenFileDialog类在C ++中无法正常工作

来自分类Dev

C ++中的函数重载无法正常工作

来自分类Dev

C中的TCP / IP无法正常工作

来自分类Dev

在C中复制的文件无法正常工作

来自分类Dev

For 循环无法正常工作以获取 c 中数组中的输入

来自分类Dev

数学运算在C#中无法正常工作

来自分类Dev

克隆对象在C#中无法正常工作

来自分类Dev

字符串比较在C中无法正常工作

来自分类Dev

C中的正则表达式无法正常工作

来自分类Dev

C ++ dll在.NET中似乎无法正常工作

来自分类Dev

带分隔符的fscanf在C中无法正常工作

来自分类Dev

C中的控制台着色无法正常工作

来自分类Dev

读取C中的bin文件无法正常工作

来自分类Dev

将float转换为int在C中无法正常工作

来自分类Dev

在C ++中获取行函数无法正常工作

来自分类Dev

if语句后,C中的getopt()无法正常工作

来自分类Dev

订阅C#中的Powershell进度无法正常工作

来自分类Dev

将char存储在数组C中无法正常工作