【发布时间】:2012-06-06 09:29:45
【问题描述】:
我需要求解一个二维泊松方程,即 AX=B 中的方程组,其中 A 是 n×n 矩阵,B 是 n×1 向量。作为 2D Poisson 问题的离散化矩阵,我知道只有 5 个对角线不会为空。 Lapack 不提供解决此特定问题的函数,但它具有求解带状矩阵方程组的函数,即 DGBTRF(用于 LU 因式分解)和 DGBTRS。现在,5条对角线是:主对角线、主对角线上方和下方的第一条对角线以及主对角线上方和下方m条对角线的两条对角线。在阅读了有关带存储的 lapack 文档后,我了解到我必须创建一个 (3*m+1)×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);
【问题讨论】:
标签: c system lapack equations poisson