---
title: ?pttrs
description: "求解三对角方程AX=B，其中系数矩阵A由?pttrf分解而来。"
url: https://www.hikunpeng.com/document/detail/zh/hpchistory/hpckit/develop2400/kunpengaccel_kml_0696.html
sourcePath: /source/zh/hpchistory/hpckit/develop2400/kunpengaccel_kml_0696.html
indexId: 0f7e1d490aa8de4630e8f57172b6270c177f956eb58c0c294befb081dbfea06467
---
# ?pttrs

求解三对角方程AX=B，其中系数矩阵A由?pttrf分解而来。

#### 接口定义

C Interface：

void spttrs_(const int *N, const int *NRHS, float *D, float *E, float *B, const int *LDB, int *INFO);

void dpttrs_(const int *N, const int *NRHS, double *D, double *E, double *B, const int *LDB, int *INFO);

void cpttrs_(const char *UPLO, const int *N, const int *NRHS, float *D, float _Complex *E, float _Complex *B, const int *LDB, int *INFO);

void zpttrs_(const char *UPLO, const int *N, const int *NRHS, double *D, double _Complex *E, double _Complex *B, const int *LDB, int *INFO);

Fortran Interface：

SPTTRS(N, NRHS, D, E, B, LDB, INFO);

DPTTRS(N, NRHS, D, E, B, LDB, INFO);

CPTTRS(UPLO, N, NRHS, D, E, B, LDB, INFO);

ZPTTRS(UPLO, N, NRHS, D, E, B, LDB, INFO);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| UPLO（复数类型特有） | 字符型 | 'U'： A=U\*\*H\*D\*U 'L'： A=L\*D\*L\*\*H | 输入 |
| N | 整数型 | 矩阵A的维数，N ≥ 0。 | 输入 |
| NRHS | 整数型 | 矩阵B的列数，NRHS ≥ 0。 | 输入 |
| D | 在spttrs/cpttrs中为单精度浮点型数组。 在dpttrs/zpttrs中为双精度浮点型数组。 | 三对角矩阵A的对角元素，维度为N。 | 输入 |
| E | 在spttrs中为单精度浮点型数组。 在dpttrs中为双精度浮点型数组。 在cpttrs中为单精度复数型数组。 在zpttrs中为双精度复数型数组。 | 三对角矩阵A的次对角元素，维度为N\-1。 | 输入 |
| B | 在spttrs中为单精度浮点型数组。 在dpttrs中为双精度浮点型数组。 在cpttrs中为单精度复数型数组。 在zpttrs中为双精度复数型数组。 | 输入时，为右端项矩阵，维度为(LDB, NRHS)。 输出时，为解X，维度为(LDB, NRHS)。 | 输入、输出 |
| LDB | 整数型 | 矩阵B的主维。 | 输入 |
| INFO | 整数型 | 等于0：成功退出。 小于0：第\-info个参数值不合法。 | 输出 |


#### 依赖

#include "klapack.h"


#### 示例

C Interface：

```
const int n = 4;
    const int ldb = n;
    const int nrhs = 1;
    double d[] = {7.608696,7.739130, 7.347826,4.652174};
    double e[] = {0.352941,0.000000,0.823529};
    double b[] = {0.300000,0.100000,0.700000,0.200000};
    int info = 0;
    
    dpttrs_(&n, &nrhs, d, e, b, &ldb, &info);
/* 
* Output: 
*   b: 0.039697        -0.000760       0.161909        -0.080924
*/
```

Fortran Interface：

```
PARAMETER (n = 4)
PARAMETER (ldb = 4)
PARAMETER (nrhs = 1)
INTEGER :: info = 0
REAL(8) :: d(n)
REAL(8) :: e(n-1)
REAL(8) :: b(ldb, nrhs)
DATA d / 7.608696,7.739130, 7.347826,4.652174 /
DATA e / 0.352941,0.000000,0.823529 /
DATA b / 0.300000,0.100000,0.700000,0.200000 /
EXTERNAL DPTTRS
CALL DPTTRS(n, nrhs, d, e, b, ldb, info);
*
* Output:
*  b: 0.039697        -0.000760       0.161909        -0.080924
```
