中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

?gttrf

计算一般三对角矩阵A的LU分解。

接口定义

C Interface:

void sgttrf(const int *N, float *DL, float *D, float *DU, float *DU2, int *IPIV, int *INFO);

void dgttrf(const int *N, double *DL, double *D, double *DU, double *DU2, int *IPIV, int *INFO);

void cgttrf(const int *N, float _Complex *DL, float _Complex *D, float _Complex *DU, float _Complex *DU2, int *IPIV, int *INFO);

void zgttrf(const int *N, double _Complex *DL, double _Complex *D, double _Co mplex *DU, double _Complex *DU2, int *IPIV, int *INFO);

Fortran Interface

SGTTRF(N,DL,D,DU,DU2,IPIV,INFO);

DGTTRF(N,DL,D,DU,DU2,IPIV,INFO);

CGTTRF(N,DL,D,DU,DU2,IPIV,INFO);

ZGTTRF(N,DL,D,DU,DU2,IPIV,INFO);

参数

参数名

类型

描述

输入/输出

N

整数型

矩阵A的维数,N≥0。

输入

DL

  • 在sgttrf中为单精度浮点型数组。
  • 在dgttrf中为双精度浮点型数组。
  • 在cgttrf中为单精度复数型数组。
  • 在zgttrf中为双精度复数型数组。

输入时,为三对角矩阵A的次对角元素,维度为N-1。

输出时,为L矩阵。

输入、输出

D

  • 在sgttrf中为单精度浮点型数组。
  • 在dgttrf中为双精度浮点型数组。
  • 在cgttrf中为单精度复数型数组。
  • 在zgttrf中为双精度复数型数组。

输入时,为三对角矩阵A的对角元素,维度为N。

输出时,为U的对角元素。

输入、输出

DU

  • 在sgttrf中为单精度浮点型数组。
  • 在dgttrf中为双精度浮点型数组。
  • 在cgttrf中为单精度复数型数组。
  • 在zgttrf中为双精度复数型数组。

输入时,为三对角矩阵A的超对角元素,维度为N-1。

输出时,为U的第一超对角元素。

输入、输出

DU2

  • 在sgttrf中为单精度浮点型数组。
  • 在dgttrf中为双精度浮点型数组。
  • 在cgttrf中为单精度复数型数组。
  • 在zgttrf中为双精度复数型数组。

输出时,为U的第二超对角元素。

输出

IPIV

整数型

转置数组。

输出

INFO

整数型

  • 等于0:成功退出。
  • 小于0:第-info个参数值不合法。
  • 大于0:表示U(INFO, INFO)为零,分解失败。

输出

依赖

#include "klapack.h"

示例

C Interface:

const int n = 4;
double dl[] = {0.923077, 0.153846, 0.153846};
double d[] = {0.521739, 0.043478, 0.304348, 0.086957};
double du[] = {0.924528, 0.150943, 0.566038};
double du2[] = {0.986301, 0.397260};
double ipiv[4];
int info = 0;
dgttrf_(&n, dl, d, du, du2, ipiv, &info);
if (info != 0) {
    printf("ERROR, info = %d\n", info);
}

/* 
* Output: 
*   d:    0.923077        0.899954        0.318932        -0.186088
*   dl:   0.565217        0.170949        0.482378
*   du:   0.043478        -0.085316       0.566038
*   du2:  0.150943        0.000000
*   ipiv: 2       2       3       4
*/

Fortran Interface:

PARAMETER (n = 4)  
INTEGER :: info = 0 
REAL(8) :: d(n) 
REAL(8) :: dl(n-1)
REAL(8) :: du(n-1)
REAL(8) :: du2(n-2)
INTEGER :: ipiv(n)
  
DATA d / 0.521739, 0.043478, 0.304348, 0.086957 / 
DATA dl / 0.923077, 0.153846, 0.153846 /
DATA du / 0.924528, 0.150943, 0.566038 /
DATA du2 / 0.986301, 0.397260 /
 EXTERNAL DGTTRF 
 CALL DGTTRF(n, dl, d, du, du2, ipiv, info);
* 
* Output: 
*   d:    0.923077        0.899954        0.318932        -0.186088
*   dl:   0.565217        0.170949        0.482378
*   du:   0.043478        -0.085316       0.566038
*   du2:  0.150943        0.000000
*   ipiv: 2       2       3       4