【问题标题】:solving linear equationsystem in cpp using lapacke_dgesv使用 lapacke_dgesv 在 cpp 中求解线性方程组
【发布时间】:2020-08-28 12:18:00
【问题描述】:

我正在尝试求解一个非常简单的 M*Z=V 形式的方程系统,其中 M 是 2x2 矩阵,V 和 Z 是具有 2 个条目的向量。如果我在 Matlab 中使用Z = linsolve( M, V );,结果是正确的。 我需要以某种方式在 C++ 中实现它,所以我尝试使用 INTEL MKL 数学库。 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, 
        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] << "     ";
    }


}

【问题讨论】:

  • 看来z[] 被声明为int

标签: c++ lapack intel-mkl linear-equation


【解决方案1】:

您应该打印 V 向量而不是 z,z 只是枢轴信息。

【讨论】:

  • 我设置了一个页面来讨论 BLAS/LAPACK/ScaLAPACK 包的使用,请随时参考。现在它是空的,但几天后会添加更多信息。 ericzhng.github.io/docs-matrix-library/blog/2020/08/26/…
  • 在使用 BLAS/LAPACK 时,您还应该注意行优先或列优先矩阵格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2021-12-13
相关资源
最近更新 更多