微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用lapacke_dgesv解决cpp中的线性方程组

如何解决使用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 举报,一经查实,本站将立刻删除。