如何解决使用lapacke_dgesv解决cpp中的线性方程组
我正在尝试求解一个非常简单的方程组,形式为M * Z = V,其中M是2x2矩阵,V和Z是具有2个条目的向量。如果我在Matlab中使用Z = linsolve( M,V );
,则结果正确。
我需要以某种方式在C ++中实现此功能,因此我尝试使用INTEL MKL Math库。 Z应该被计算为大约[0.3091,0.6115]。但是LAPACKE_dgesv为Z返回[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,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只是枢轴信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。