我需要求解一个二维泊松方程,即 for AX=B 中的方程组,其中 A 是 n×n 矩阵,B 是 n×1 向量。作为 2D Poisson 问题的离散化矩阵,我知道只有 5 个对角线不会为空。Lapack 不提供解决此特定问题的函数,但它具有求解带状矩阵方程组的函数,即 DGBTRF(用于 LU 因式分解)和 DGBTRS。现在,5条对角线是:主对角线,主对角线上方和下方的第一条对角线以及主对角线上方和下方的两条对角线,m对角线wrt。在阅读了有关带存储的 lapack 文档后,我了解到我必须创建一个 (3*m+1)-by-n 矩阵来以带存储格式存储 A,我们将这个矩阵称为 AB。现在的问题:
1) dgbtrs 和 dgbtrs_ 有什么区别?英特尔 MKL 两者都提供,但我不明白为什么
2) dgbtrf 要求带存储矩阵是一个数组。我应该按行还是按列线性化 AB?
3)这是调用这两个函数的正确方法吗?
int n, m;
double *AB;
/*... fill n, m, AB, with appropriate numbers */
int *pivots;
int nrows = 3 * m + 1, info, rhs = 1;
dgbtrf_(&n, &n, &m, &m, AB, &nrows, pivots, &info);
char trans = 'N';
dgbtrs_(&trans, &n, &m, &m, &rhs, AB, &nrows, pivots, B, &n, &info);