?getrf
计算矩阵A的LU分解,允许行交换(partial pivoting)。
分解结果为A=PLU,其中P为置换矩阵、L为下三角矩阵或下阶梯矩阵且对角线为1,U是上三角矩阵或上阶梯矩阵。
接口定义
C Interface:
void sgetrf_(const int *m, const int *n, float *a, const int *lda, int *ipiv, int *info);
void dgetrf_(const int *m, const int *n, double *a, const int *lda, int *ipiv, int *info);
void cgetrf_(const int *m, const int *n, float _Complex *a, const int *lda, int *ipiv, int *info);
void zgetrf_(const int *m, const int *n, double _Complex *a, const int *lda, int *ipiv, int *info);
Fortran Interface:
SGETRF(m, n, a, lda, ipiv, info)
DGETRF(m, n, a, lda, ipiv, info)
CGETRF(m, n, a, lda, ipiv, info)
ZGETRF(m, n, a, lda, ipiv, info)
参数
参数名 |
类型 |
描述 |
输入/输出 |
---|---|---|---|
m |
整数型 |
矩阵A的行数。 |
输入 |
n |
整数型 |
矩阵A的列数。 |
输入 |
a |
|
|
输入/输出 |
lda |
整数型 |
A的leading dimension大小,要求lda ≥ max(1, n)。 |
输入 |
ipiv |
整数型数组 |
?getrf得到的主元索引,长度为min(m,n):1 ≤ ipiv ≤ min(m,n),表示分解中矩阵第i行与第ipiv[i-1]行交换。 |
输出 |
info |
整数型 |
执行结果:
|
输出 |
依赖
#include "klapack.h"
示例
C Interface:
int m = 4; int n = 4; int lda = 4; int ipiv[4]; int info = 0; /* * A (stored in column-major): * 1.80 2.88 2.05 -0.89 * 5.25 -2.95 -0.95 -3.80 * 1.58 -2.69 -2.90 -1.04 * -1.11 -0.66 -0.59 0.80 */ double a[] = {1.80, 5.25, 1.58, -1.11, 2.88, -2.95, -2.69, -0.66, 2.05, -0.95, -2.90, -0.59, -0.89, -3.80, -1.04, 0.80}; dgetrf_(&m, &n, a, &lda, ipiv, &info); /* * Output: * 5.2500 -2.9500 -0.9500 -3.8000 * 0.3429 3.8914 2.3757 0.4129 * 0.3010 -0.4631 -1.5139 0.2948 * -0.2114 -0.3299 0.0047 0.1314 */
Fortran Interface:
PARAMETER (m = 4) PARAMETER (n = 4) PARAMETER (lda = 4) INTEGER :: ipiv(4) INTEGER :: info = 0 * A (stored in column-major): * 1.80 2.88 2.05 -0.89 * 5.25 -2.95 -0.95 -3.80 * 1.58 -2.69 -2.90 -1.04 * -1.11 -0.66 -0.59 0.80 REAL(8) :: a(m, n) DATA a / 1.80, 5.25, 1.58, -1.11, $ 2.88, -2.95, -2.69, -0.66, $ 2.05, -0.95, -2.90, -0.59, $ -0.89, -3.80, -1.04, 0.80 / EXTERNAL DGETRF CALL DGETRF(m, n, a, lda, ipiv, info); * Output: * 5.2500 -2.9500 -0.9500 -3.8000 * 0.3429 3.8914 2.3757 0.4129 * 0.3010 -0.4631 -1.5139 0.2948 * -0.2114 -0.3299 0.0047 0.1314