---
title: ?pptrs
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_0613.html
sourcePath: /source/zh/kunpengboostkithistory/240RC1/accel/kunpengaccel_kml_16_0613.html
indexId: 99b38171b02a56fbbb3aef4d2a3e4286aa98a3a6131d9293175ed833355e605176
---
# ?pptrs

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

#### 接口定义

C Interface：

void spptrs_(const char *UPLO, const int *N, const int *NRHS, float *AP, float *B, const int *LDB, int *INFO);

void dpptrs_(const char *UPLO, const int *N, const int *NRHS, double *AP, double *B, const int *LDB, int *INFO);

void cpptrs_(const char *UPLO, const int *N, const int *NRHS, float _Complex *AP, int *IPIV, float _Complex *B, const int *LDB, int *INFO);

void zpptrs_(const char *UPLO, const int *N, const int *NRHS, double _Complex *AP, int *IPIV, double _Complex *B, const int *LDB, int *INFO);

Fortran Interface：

SPPTRS(UPLO, N, NRHS, AP, B, LDB, INFO);

DPPTRS(UPLO, N, NRHS, AP, B, LDB, INFO);

CPPTRS(UPLO, N, NRHS, AP, B, LDB, INFO);

ZPPTRS(UPLO, N, NRHS, AP, B, LDB, INFO);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| UPLO | 字符型 | 'U'：存储矩阵A的上三角部分。 'T'：存储矩阵A的下三角部分。 | 输入 |
| N | 整数型 | 矩阵A的阶数，N ≥ 0。 | 输入 |
| NRHS | 整数型 | 矩阵B的列数，NRHS ≥ 0。 | 输入 |
| AP | 在spptrs中为单精度浮点型数组。 在dpptrs中为双精度浮点型数组。 在cpptrs中为单精度复数型数组。 在zpptrs中为双精度复数型数组。 | 压缩存储矩阵A的Cholesky分解得到的L和U。大小为N\*(N+1)/2。 | 输入 |
| B | 在spptrs中为单精度浮点型数组。 在dpptrs中为双精度浮点型数组。 在cpptrs中为单精度复数型数组。 在zpptrs中为双精度复数型数组。 | 右端项矩阵，大小为LDB\*NRHS。 调用前：右端项矩阵B。 调用后：解矩阵X。 | 输入、输出 |
| LDB | 整数型 | 矩阵B的主维，LDB ≥ max(1, N)。 | 输入 |
| INFO | 整数型 | 等于0：成功退出。 小于0：第\-info个参数值不合法。 | 输出 |


#### 依赖

include "klapack.h"


#### 示例

C Interface：

```
const char uplo = 'U';
const int n = 4;
const int nrhs = 1;
const int ldb = n;
double ap[] = {231.8009,33.9545,162.2902,9.4143,6.6684,100.322,11.1156,53.2033,71.5384,106.5638};
int info = 0;
double b[]={1.0, 2.0, 3.0, 4.0};
dpptrf_(&uplo, &n, ap, &info);
dpptrs_(&uplo, &n, &nrhs, ap, b, &ldb, &info);
if (info != 0) {
printf("ERROR, info = %d\n", info);
}
/*
* Output:
*   ap: 0.002361    0.000904    0.006432    0.032521
*/
```

Fortran Interface：
```
CHARACTER::uplo = "U"
PARAMETER (n = 4)
PARAMETER (nrhs = 4)
PARAMETER (ldb = n)
INTEGER :: info = 0
REAL(8) :: ap(n*(n+1)/2)
DATA ap / 231.8009,33.9545,162.2902,9.4143,6.6684,100.322,11.1156,53.2033,71.5384,106.5638 /
DATA b / 1.0, 2.0, 3.0, 4.0 /
EXTERNAL DPPTRF,DPPTRS
CALL DPPTRF(uplo, n, ap, info);
CALL DPPTRS(uplo, n, nrhs, ap, b, ldb, info);
*
* Output:
*   ap: 0.002361    0.000904    0.006432    0.032521
```
