?trtri

计算上/下三角矩阵的逆矩阵。

接口定义

C Interface:

void strtri_(const char *uplo, const char *diag, const int *n, float *a, const int *lda, int *info);

void dtrtri_(const char *uplo, const char *diag, const int *n, double *a, const int *lda, int *info);

void ctrtri_(const char *uplo, const char *diag, const int *n, float _Complex *a, const int *lda, int *info);

void ztrtri_(const char *uplo, const char *diag, const int *n, double _Complex *a, const int *lda, int *info);

Fortran Interface:

STRTRI(UPLO, DIAG, N, A, LDA, INFO)

DTRTRI(UPLO, DIAG, N, A, LDA, INFO)

CTRTRI(UPLO, DIAG, N, A, LDA, INFO)

ZTRTRI(UPLO, DIAG, N, A, LDA, INFO)

参数

参数名

类型

描述

输入/输出

UPLO

字符型

  • 'U':矩阵A的上三角部分。
  • 'L':矩阵A的下三角部分。

输入

DIAG

字符型

  • 'N':矩阵A为非单位三角矩阵。
  • 'U':矩阵为单位三角矩阵。

输入/输出

N

整数型

矩阵A的维度,N≥0。

输入

A

  • 在strtri中为单精度浮点型数组。
  • 在dtrtri中为双精度浮点型数组。
  • 在ctrtri中为单精度复数型数组。
  • 在ztrtri中为双精度复数型数组。
  • 调用前:如果UPLO='U',则矩阵A包含了上三角部分,下三角部分不会使用;如果UPLO='L',则矩阵A包含了下三角部分,上三角部分不会使用;如果DIAG='U',则对角元素不会使用。
  • 调用后:以相同格式存储矩阵A的逆矩阵。

输出

LDA

整数型

矩阵A的主维,LDA≥max(1,N)。

输入

INFO

整数型

执行结果:

  • 等于0:成功。
  • 小于0:第-info个参数值不合法。
  • 大于0:U的对角线上第info个元素为0,矩阵不可逆。

输出

依赖

#include "klapack.h"

示例

C Interface:

const char uplo = 'U';
const char diag = 'N';
const int n = 4;
const int lda = n;
/* 
* A: After Cholesky factorization (via potrf, stored in column-major): 
*  231.8009    33.9545    9.4153   11.1156    
*   33.9454   162.2902   6.6684   53.2023     
*   9.4153   6.6684  100.3220  71.5384   
*   11.1156   53.2023    71.5384  106.5638  
*/ 
double a[] = {231.8009,   33.9545,   9.4143,   11.1156, 
              33.9495,  162.2902,   6.6684,   53.2033, 
              9.4143,    6.6684,  100.322,   71.5384, 
              11.1156,   53.2033,  71.5384,  106.5638 }; 
int info = 0;
dtrtri_(&uplo, &diag, &n, a, &lda, &info);
if (info != 0) {
    printf("ERROR, info = %d\n", info);
}

/* 
* Output: 
*   a: 
*    0.004314    -0.000902    -0.000345    0.000232
*    33.954500    0.006162    -0.000410    -0.002801
*    9.414300    6.668400    0.009968    -0.006692
*    11.115600    53.203300    71.538400    0.009384
*/

Fortran Interface:

CHARACTER::uplo = "U"
CHARACTER::diag = "N"
PARAMETER (n = 4)  
PARAMETER (lda = 4)  
INTEGER :: info = 0 
REAL(8) :: a(lda, n) 
  
* A: After Cholesky factorization (via potrf, stored in column-major): 
*  231.8009    33.9545    9.4153   11.1156    
*   33.9454   162.2902   6.6684   53.2023     
*   9.4153   6.6684  100.3220  71.5384   
*   11.1156   53.2023    71.5384  106.5638 
  
DATA a / 231.8009,  33.9545,  9.4143, 11.1156, 
 $           33.9495,  162.2902, 6.6684, 53.2033, 
 $           9.4143,    6.6684,  100.322, 71.5384, 
 $           11.1156,   53.2033, 71.5384, 106.5638 / 

 EXTERNAL DTRTRI
 CALL DTRTRI(uplo, diag,  n, a, lda, info)

* 
* Output: 
*   a: 
*    0.004314    -0.000902    -0.000345    0.000232
*    33.954500    0.006162    -0.000410    -0.002801
*    9.414300    6.668400    0.009968    -0.006692
*    11.115600    53.203300    71.538400    0.009384
*