如果你能帮我解决以下问题,我将不胜感激。我偶然发现了这堵墙,我真的说不出这里出了什么问题。我想用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系统,但它提供了毫无意义的结果。我希望一旦我做对了,我也会理解休眠和drtrs的问题。
干杯!
发布于 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向量正好指向相反的方向。

https://stackoverflow.com/questions/33693138
复制相似问题