---
title: ?gttrs
description: "求解三对角方程A*X=B或A**T *X=B或A**H *X=B，其中系数矩阵A由?gttrf分解而来。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC1/accel/kunpengaccel_kml_16_0346.html
sourcePath: /source/zh/kunpengboostkithistory/240RC1/accel/kunpengaccel_kml_16_0346.html
indexId: 542395e6237da1f809a6230c63b438bb4bd51895e1302ff02d8aff1224b0b2b976
---
# ?gttrs

求解三对角方程A*X=B或A**T *X=B或A**H *X=B，其中系数矩阵A由?gttrf分解而来。

#### 接口定义

C Interface：

void sgttrs_(const char *TRANS, const int *N, const int *NRHS, float *DL, float *D, float *DU, float *DU2, int *IPIV, float *B, const int *LDB, int *INFO);

void dgttrs_(const char *TRANS, const int *N, const int *NRHS, double *DL, double *D, double *DU, double *DU2, int *IPIV, double *B, const int *LDB, int *INFO);

void cgttrs_(const char *TRANS, const int *N, const int *NRHS, float _Complex *DL, float _Complex *D, float _Complex *DU, float _Complex *DU2, int *IPIV, float _Complex *B, const int *LDB, int *INFO);

void zgttrs_(const char *TRANS, const int *N, const int *NRHS, double _Complex *DL, double _Complex *D, double _Complex *DU, double _Complex *DU2, int *IPIV, double _Complex *B, const int *LDB, int *INFO);


Fortran Interface：

SGTTRS(TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB, INFO);

DGTTRS(TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB, INFO);

CGTTRS(TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB, INFO);

ZGTTRS(TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB, INFO);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| TRANS | 字符型 | 'N'，A\*X=B 'T'，A\*\*T\*X=B 'C'，A\*\*T\*X=B（共轭转置） | 输入 |
| N | 整数型 | 矩阵A的阶数，N ≥ 0。 | 输入 |
| NRHS | 整数型 | 矩阵B的列数，NRHS ≥ 0。 | 输入 |
| DL | 在sgttrs中为单精度浮点型数组。 在dgttrs中为双精度浮点型数组。 在cgttrs中为单精度复数型数组。 在zgttrs中为双精度复数型数组。 | LU分解中的L部分，维度为N\-1。 | 输入 |
| D | 在sgttrs中为单精度浮点型数组。 在dgttrs中为双精度浮点型数组。 在cgttrs中为单精度复数型数组。 在zgttrs中为双精度复数型数组。 | U的对角元素，维度为N。 | 输入 |
| DU | 在sgttrs中为单精度浮点型数组。 在dgttrs中为双精度浮点型数组。 在cgttrs中为单精度复数型数组。 在zgttrs中为双精度复数型数组。 | 为U的第一超对角元素。 | 输入 |
| DU2 | 在sgttrs中为单精度浮点型数组。 在dgttrs中为双精度浮点型数组。 在cgttrs中为单精度复数型数组。 在zgttrs中为双精度复数型数组。 | 为U的第二超对角元素。 | 输入 |
| IPIV | 整数型数组 | 转置数组。 | 输入 |
| B | 在sgttrs中为单精度浮点型数组。 在dgttrs中为双精度浮点型数组。 在cgttrs中为单精度复数型数组。 在zgttrs中为双精度复数型数组。 | 右端项矩阵，维度为(LDB, NRHS)。 | 输入、输出 |
| LDB | 整数型 | 矩阵B的主维。 | 输入 |
| INFO | 整数型 | 等于0：成功退出。 小于0：第\-info个参数值不合法。 | 输出 |


#### 依赖

include "klapack.h"


#### 示例

C Interface：

```
const char trans = 'N';
const int n = 4;
const int ldb = n;
const int nrhs = 1;
double dl[] = {0.565217, 0.170949, 0.482378};
double d[] = {0.923077, 0.899954, 0.318932, -0.186088};
double du[] = {0.043478, -0.085316, 0.566038};
double du2[] = {0.150943, 0.000000};
double b[] = {0.301370, 0.835616, 0.109589, 0.041096};
int ipiv[] = {2,2,3,4};
int info = 0;
dgttrs_(&trans, &n, &nrhs, dl, d, du, du2, ipiv, b, &ldb, &info);
if (info != 0) {
printf("ERROR, info = %d\n", info);
}
/*
* Output:
*   b:  0.882521        -0.172061       0.188567        0.138984
*/
```

Fortran Interface：

```
CHARACTER :: trans = "N"
PARAMETER (n = 4)
PARAMETER (ldb = 4)
PARAMETER (nrhs = 1)
INTEGER :: info = 0
REAL(8) :: d(n)
REAL(8) :: dl(n-1)
REAL(8) :: du(n-1)
REAL(8) :: du2(n-2)
REAL(8) :: b(ldb, nrhs)
INTEGER :: ipiv(n)
DATA d / 0.923077, 0.899954, 0.318932, -0.186088 /
DATA dl / 0.565217, 0.170949, 0.482378/
DATA du / 0.043478, -0.085316, 0.566038 /
DATA du2 / 0.150943, 0.000000 /
DATA b / 0.301370, 0.835616, 0.109589, 0.041096 /
DATA ipiv / 2,2,3,4 /
EXTERNAL DGTTRS
CALL DGTTRS(trans, n, nrhs, dl, d, du, du2, ipiv, b, ldb, info);
*
* Output:
*   d:  0.882521        -0.172061       0.188567        0.138984
```
