---
title: ?sptrf
description: "C Interface："
url: https://www.hikunpeng.com/document/detail/zh/kunpengaccel/math-lib/devg-kml/kunpengaccel_kml_0681.html
sourcePath: /source/zh/kunpengaccel/math-lib/devg-kml/kunpengaccel_kml_0681.html
indexId: 787371c35ffe7f415f35fd072dca8d1e76f2beaf1e0d07ba0966ca1cf76c0d3268
---
# ?sptrf

#### 接口定义

C Interface：

void ssptrf_(const char *uplo, const int *n, float *ap, int *ipiv, int *info);

void dsptrf_(const char *uplo, const int *n, double *ap, int *ipiv, int *info);

void csptrf_(const char *uplo, const int *n, float _Complex *ap, int *ipiv, int *info);

void zsptrf_(const char *uplo, const int *n, double _Complex *ap, int *ipiv, int *info);

Fortran Interface：

SSPTRF(UPLO, N, AP, IPIV, INFO);

DSPTRF(UPLO, N, AP, IPIV, INFO);

CSPTRF(UPLO, N, AP, IPIV, INFO);

ZSPTRF(UPLO, N, AP, IPIV, INFO);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| UPLO | 字符数 | 'U'：保存A的上三角矩阵。 'L'：保存A的下三角矩阵。 | 输入 |
| N | 整数型 | 矩阵A的维数，N≥0。 | 输入 |
| AP | 在ssptrf中为单精度浮点型数组。 在dsptrf中为双精度浮点型数组。 在csptrf中为单精度复数型数组。 在zsptrf中为双精度复数型数组。 | 输入时，为压缩对称矩阵A，大小为N\*(N+1)/2。 输出时，块对角矩阵D，和用于获得因子U或L的乘法器，存储为上或下三角矩阵覆盖A。 | 输入、输出 |
| IPIV | 整数型 | 转置数组，大小为N，表示对角矩阵D的块结构和交换细节。 若IPIV(k) > 0，第k与IPIV(k)的行列交换，且D(k,k)是1\*1的对角线块。 若UPLO='U'且IPIV(k)=IPIV(k\-1) < 0，则第k\-1与\-IPIV(k)的行列交换，且D(k\-1:k, k\-1:k)是2\*2的对角线块。 若UPLO='L'且IPIV(k)=IPIV(k+1) < 0，则第k+1与\-IPIV(k)的行列交换，且D(k:k+1;k:k+1)是2\*2的对角线块。 | 输出 |
| INFO | 整数型 | 等于0：成功退出。 小于0：第\-info个参数值不合法。 大于0：表示U(INFO, INFO)为零，分解失败。 | 输出 |


#### 依赖

#include "klapack.h"


#### 示例

C Interface：

```
const char uplo = 'U';
const int n = 4;
double ap[] = {0.521739, 0.043478, 0.304348, 0.130435, 0.304348, 0.043478, 0.652174, 0.086957, 0.521739, 0.086957};
double ipiv[4];
int info = 0;
dsptrf_(&uplo, &n, ap, ipiv, &info);
if (info != 0) {
    printf("ERROR, info = %d\n", info);
}

/* 
* Output: 
*   ap: -0.129534   1.024339   0.302185   -0.492537   -0.044777   -0.728261   1.250000   0.083333  0.250000  0.521739
*   ipiv: 1       2       1       1
*/
```

Fortran Interface：

```
CHARACTER::uplo = "U"
PARAMETER (n = 4)
INTEGER :: info = 0
REAL(8) :: ap(n*(n+1)/2)
INTEGER :: ipiv(n)
DATA ap / 0.521739, 0.043478, 0.304348, 0.130435, 0.304348, 0.043478, 0.652174, 0.086957, 0.521739, 0.086957 /
EXTERNAL DSPTRF
CALL DSPTRF(uplo, n, ap, ipiv, info)
*
* Output:
*   ap: -0.129534   1.024339   0.302185   -0.492537   -0.044777   -0.728261   1.250000   0.083333  0.250000  0.521739
*   ipiv: 1       2       1       1
```
