使用 lapacke_dgesv 在 cpp 中求解线性方程组
solving linear equationsystem in cpp using lapacke_dgesv
我正在尝试求解 M*Z=V 形式的非常简单的方程组,其中 M 是 2x2 矩阵,V 和 Z 是具有 2 个条目的向量。如果我在 Matlab 中使用 Z = linsolve( M, V );
结果是正确的。
我需要以某种方式在 C++ 中实现它,所以我正在尝试使用 INTEL MKL 数学库。 Z 应计算为大约 [0.3091,0.6115]。但是 Z 的 LAPACKE_dgesv returns [1,2]。我做错了什么?
#include <iostream>
#include <math.h>
#include <vector>
#include <numeric>
#include <mkl.h>
#include <stdlib.h>
#include <stdio.h>
#include "mkl_lapacke.h"
using namespace std;
int main (){
const int N = 2;
const int NRHS = 1;
const int LDA = N;
const int LDB = NRHS;
MKL_INT n = N, nrhs = NRHS, lda = LDA, ldb =LDB, info;
MKL_INT z[2];
double M[LDA * N] = {
2, 1.5388,
1.5388, 2,
};
double V[LDB * N] = {
1.5593,
1.6987,
};
info = LAPACKE_dgesv(LAPACK_ROW_MAJOR, n, nrhs, M, lda, z, V, ldb);
cout << "solution for z" "\n";
for (int i = 0; i < 2; i++) {
cout << z[i] << " ";
}
}
您应该打印 V 向量而不是 z,z 只是主元信息。
我正在尝试求解 M*Z=V 形式的非常简单的方程组,其中 M 是 2x2 矩阵,V 和 Z 是具有 2 个条目的向量。如果我在 Matlab 中使用 Z = linsolve( M, V );
结果是正确的。
我需要以某种方式在 C++ 中实现它,所以我正在尝试使用 INTEL MKL 数学库。 Z 应计算为大约 [0.3091,0.6115]。但是 Z 的 LAPACKE_dgesv returns [1,2]。我做错了什么?
#include <iostream>
#include <math.h>
#include <vector>
#include <numeric>
#include <mkl.h>
#include <stdlib.h>
#include <stdio.h>
#include "mkl_lapacke.h"
using namespace std;
int main (){
const int N = 2;
const int NRHS = 1;
const int LDA = N;
const int LDB = NRHS;
MKL_INT n = N, nrhs = NRHS, lda = LDA, ldb =LDB, info;
MKL_INT z[2];
double M[LDA * N] = {
2, 1.5388,
1.5388, 2,
};
double V[LDB * N] = {
1.5593,
1.6987,
};
info = LAPACKE_dgesv(LAPACK_ROW_MAJOR, n, nrhs, M, lda, z, V, ldb);
cout << "solution for z" "\n";
for (int i = 0; i < 2; i++) {
cout << z[i] << " ";
}
}
您应该打印 V 向量而不是 z,z 只是主元信息。