---
title: ?trtrs
description: "求解三角方程A * X = B，或A**T * X = B。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/accel/kunpengaccel_kml_16_0350.html
sourcePath: /source/zh/kunpengboostkithistory/2200/accel/kunpengaccel_kml_16_0350.html
indexId: ef7561e9b4a65d3057d9a5e8ea497fb9d442e33efde349358851585883fb48af74
---
# ?trtrs

求解三角方程A * X = B，或A**T * X = B。

#### 接口定义

C Interface：

void dtrtrs_(const char *uplo, const char *trans, const char *diag, const int *n, const int *nrhs, const double *a, const int *lda, double *b, const int *ldb, int *info);

void strtrs_(const char *uplo, const char *trans, const char *diag, const int *n, const int *nrhs, const float *a, const int *lda, float *b, const int *ldb, int *info);

void ctrtrs_(const char *uplo, const char *trans, const char *diag, const int *n, const int *nrhs, const float _Complex *a, const int *lda, float _Complex *b, const int *ldb, int *info);

void ztrtrs_(const char *uplo, const char *trans, const char *diag, const int *n, const int *nrhs, const double _Complex *a, const int *lda, double _Complex *b, const int *ldb, int *info);

Fortran Interface：

DTRTRS(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, INFO);

STRTRS(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, INFO);

CTRTRS(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, INFO);

ZTRTRS(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, INFO);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| UPLO | 字符型 | 'U'，A是上三角矩阵。 'L'，A是下三角矩阵。 | 输入 |
| TRANS | 字符型 | 'N'，A \* X = B 'T'，A\*\*T \* X = B 'C'，A\*\*H \* X = B（共轭转置） | 输入 |
| DIAG | 字符型 | 'N'，A是非单位三角矩阵。 'U'。A是单位三角矩阵。 | 输入 |
| N | 整数型 | 矩阵A的阶数，N ≥ 0。 | 输入 |
| NRHS | 整数型 | 矩阵B的列数，NRHS ≥ 0。 | 输入 |
| A | 在strtrs中为单精度浮点型数组。 在dtrtrs中为双精度浮点型数组。 在ctrtrs中为单精度复数型数组。 在ztrtrs中为双精度复数型数组。 | 三角矩阵A，大小为(LDA, N)。 | 输入 |
| LDA | 整数型 | 矩阵A的主维，LDA ≥ max(1, N)。 | 输入 |
| B | 在strtrs中为单精度浮点型数组。 在dtrtrs中为双精度浮点型数组。 在ctrtrs中为单精度复数型数组。 在ztrtrs中为双精度复数型数组。 | 输入时，为右端矩阵B，大小为(LDB, NRHS)。 输出时， 若INFO = 0，为方程的解矩阵X。 | 输入、输出 |
| LDB | 整数型 | 右端矩阵B的主维， LDB ≥ max(1, N)。 | 输入 |
| INFO | 整数型 | 等于0：成功。 小于0：第\-INFO个参数值不合法。 大于0：矩阵A的第INFO个对角元素为0，为奇异矩阵。 | 输出 |


#### 依赖

include "klapack.h"


#### 示例

C Interface：

```
const char uplo = 'L';
const char trans = 'N';
const char diag = 'N';
const int n = 4;
const int lda = n;
const int ldb = n;
const int nrhs = 1;
double *a = (double*)malloc(lda * n * sizeof(double));
double *b = (double*)malloc(ldb * nrhs * sizeof(double));
int info = 0;
// Generate Matrix A.
for (int i = 0; i < n; i++) {
for (int j = i; j < lda; j++) {
a[i * lda + j] = (rand() % 53 + 1) / 53.0;
}
}
// Generate right hand side matrix B.
for (int i = 0; i < ldb * nrhs; i++) {
b[i] = (rand() % 23 + 1) / 23.0;
}
// Call dtrtrs.
dtrtrs_(&uplo, &trans, &diag, &n, &nrhs, a, &lda, b, &ldb, &info);
if (info != 0) {
printf("ERROR, info = %d\n", info);
}
```

Fortran Interface：

```
CHARACTER :: uplo = "L"
CHARACTER :: trans = "N"
CHARACTER :: diag = "N"
PARAMETER (n = 4)
PARAMETER (lda = 4)
PARAMETER (ldb = 4)
PARAMETER (nrhs = 1)
INTEGER :: info = 0
REAL(8) :: d(lda, n)
REAL(8) :: b(ldb, nrhs)
EXTERNAL DTRTRS
CALL DTRTRS(uplo, trans, diag n, nrhs, a, lda, b, ldb, info);
```
