---
title: ?potrf
description: "计算对称正定矩阵或者Hermite正定矩阵的Cholesky分解。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0728.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0728.html
indexId: 49b7440c321669244f86d41824ed2593a0222560d385b91c8677d9f60847dc9661
---
# ?potrf

计算对称正定矩阵或者Hermite正定矩阵的Cholesky分解。

即或者，上三角矩阵，下三角矩阵。

#### 接口定义

C Interface：

void spotrf_(const char *uplo, const int *n, float *a, const int *lda, int *info);

void dpotrf_(const char *uplo, const int *n, double *a, const int *lda, int *info);

void cpotrf_(const char *uplo, const int *n, float _Complex *a, const int *lda, int *info);

void zpotrf_(const char *uplo, const int *n, double _Complex *a, const int *lda, int *info);

Fortran Interface：

SPOTRF( uplo, n, a, lda, info);

DPOTRF( uplo, n, a, lda, info);

CPOTRF( uplo, n, a, lda, info);

ZPOTRF( uplo, n, a, lda, info);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| uplo | 字符型 | 'U'：保存A的上三角矩阵。 'L'：保存A的下三角矩阵。 | 输入 |
| n | 整数型 | 对称矩阵A的行数或列数。 | 输入 |
| a | 在spotrf中为单精度浮点型数组。 在dpotrf中为双精度浮点型数组。 在cpotrf中为单精度复数型数组。 在zpotrf中为双精度复数型数组。 | 调用前保存待分解的矩阵A。 当uplo = 'U'，调用后对角线以及对角线以上的部分保存上三角矩阵U。 当uplo = 'L'，调用后对角线以及对角线以下的部分保存下三角矩阵L。 | 输入/输出 |
| lda | 整数型 | A的leading dimension大小，要求lda≥max(1, n)。 | 输入 |
| info | 整数型 | 执行结果： 等于0：退出成功。 小于0：第\-info个参数值不合法。 大于0：A中info大小的主子式非正定，无法完成分解。 | 输出 |


#### 依赖

#include "klapack.h"


#### 示例

C Interface：

```
char uplo = 'L' 
int n = 4; 
int lda = 4; 
int info = 0; 
/* 
* A (stored in column-major): 
*  231.8009    33.9545    9.4153   11.1156    
*   33.9454   162.2902   6.6684   53.2023     
*   9.4153   6.6684  100.3220  71.5384   
*   11.1156   53.2023    71.5384  123.4425  
*/ 
double a[] = {231.8009,   33.9545,   9.4143,   11.1156, 
              33.9495,  162.2902,   6.6684,   53.2033, 
              9.4143,    6.6684,  100.322,   71.5384, 
              11.1156,   53.2033,  71.5384,  106.5638 }; 
 dpotrf_(&uplo, &n, a, &lda, &info); 
/* 
* Output: 
*  15.2250   33.9495   9.4143   11.1156 
*   2.2302   12.5426   6.6684   53.2033 
*   0.6183    0.4217   9.9881   71.5384 
*   0.7301     4.112   6.9436     6.396 
*/
```

Fortran Interface：

```
CHARACTER :: uplo = "L"
PARAMETER (n = 4)
PARAMETER (lda = 4)
INTEGER :: info = 0
REAL(8) :: a(n,n)
* A (stored in column-major):
*  231.8009    33.9545    9.4153   11.1156
*   33.9454   162.2902   6.6684   53.2023
*   9.4153   6.6684  100.3220  71.5384
*   11.1156   53.2023    71.5384  123.4425
DATA a / 231.8009,  33.9545,  9.4143, 11.1156,
$           33.9495,  162.2902, 6.6684, 53.2033,
$           9.4143,    6.6684,  100.322, 71.5384,
$           11.1156,   53.2033, 71.5384, 106.5638 /
EXTERNAL DPOTRF
CALL DPOTRF (uplo, n, a, lda, info);
* Output:
*  15.2250   33.9495   9.4143   11.1156
*   2.2302   12.5426   6.6684   53.2033
*   0.6183    0.4217   9.9881   71.5384
*   0.7301     4.112   6.9436     6.396
```
