文档
注册
评分
提单
论坛
小智

?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

  • 在sgetrf中为单精度浮点型数组。
  • 在dgetrf中为双精度浮点型数组。
  • 在cgetrf中为单精度复数型数组。
  • 在zgetrf中为双精度复数型数组。
  • 调用前保存矩阵A。
  • 调用后保存分解结果L和U,不保存L的对角线元素(均为1)。

输入/输出

lda

整数型

A的leading dimension大小,要求lda ≥ max(1, n)。

输入

ipiv

整数型数组

?getrf得到的主元索引,长度为min(m,n):1 ≤ ipiv ≤ min(m,n),表示分解中矩阵第i行与第ipiv[i-1]行交换。

输出

info

整数型

执行结果:

  • 等于0:成功。
  • 小于0:第-info个参数值不合法。
  • 大于0:矩阵U对角线上第info个元素为0,矩阵分解完成但U是奇异的,会导致求解线程方程组时出现除以零的错误。

输出

依赖

#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
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词