?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