---
title: ?trtri
description: "计算上/下三角矩阵的逆矩阵。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0744.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0744.html
indexId: 5f4c6576aea38285afa04d10431668bc741539e00f0e689415e792b99d1bb83861
---
# ?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
*
```
