?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:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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