---
title: ?getrs
description: "求解一般线性方程A*X=B或A**T * X=B或A**H * X=B。其中系数矩阵A由?getrf分解而来。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0751.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0751.html
indexId: df035ec430d940c12f6a33294b9f6b7f9390a77095c7305c10fbe6a7ea9722c561
---
# ?getrs

求解一般线性方程A*X=B或A**T * X=B或A**H * X=B。其中系数矩阵A由?getrf分解而来。

#### 接口定义

C Interface：

void sgetrs_(const char *TRANS, const int *N, const int *NRHS, float *A, const int *LDA, int *IPIV, float *B, const int *LDB, int *INFO);

void dgetrs_(const char *TRANS, const int *N, const int *NRHS, double *A, const int *LDA, int *IPIV, double *B, const int *LDB, int *INFO);

void cgetrs_(const char *TRANS, const int *N, const int *NRHS, float _Complex *A, const int *LDA, int *IPIV, float _Complex *B, const int *LDB, int *INFO);

void zgetrs_(const char *TRANS, const int *N, const int *NRHS, double _Complex *A, const int *LDA, int *IPIV, double _Complex *B, const int *LDB, int *INFO);

Fortran Interface：

SGETRS(TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO);

DGETRS(TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO);

CGETRS(TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO);

ZGETRS(TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| TRANS | 字符型 | 'N'，A\*X=B。 'T'，A\*\*T\*X=B。 'C'，A\*\*H\*X=B（共轭转置）。 | 输入 |
| N | 整数型 | 矩阵A的阶数，N ≥ 0。 | 输入 |
| NRHS | 整数型 | 矩阵B的列数，NRHS ≥ 0。 | 输入 |
| A | 在sgetrs中为单精度浮点型数组。 在dgetrs中为双精度浮点型数组。 在cgetrs中为单精度复数型数组。 在zgetrs中为双精度复数型数组。 | 矩阵A的L和U部分，来自GETRF分解而来。大小为LDA\*N。 | 输入 |
| LDA | 整数型 | 矩阵A的主维，LDA ≥ max(1,N)。 | 输入 |
| IPIV | 整数型数组 | 置换数组。 | 输入 |
| B | 在sgetrs中为单精度浮点型数组 在dgetrs中为双精度浮点型数组 在cgetrs中为单精度复数型数组 在zgetrs中为双精度复数型数组 | 右端项矩阵，大小为LDB\*NRHS。 调用前：右端项矩阵B。 调用后：解矩阵X。 | 输入、输出 |
| LDB | 整数型 | 矩阵B的主维，LDB ≥ max(1, N)。 | 输入 |
| INFO | 整数型 | 等于0：成功退出。 小于0：第\-info个参数值不合法。 | 输出 |


#### 依赖

include "klapack.h"


#### 示例

C Interface：

```
char trans = 'N';
int n = 5; 
int nrhs = 1; 
int lda = 5; 
int ldb = 5; 
int ipiv[5]; 
int info = 0; 
double a[]={72.1673 , 66.1857 , 64.7644 , 28.0199 , 91.4151, 
            6.5180 , 62.8483 , 72.4323 , 46.5760 ,  8.6928, 
            28.9821 , 42.1828 , 18.6437 , 99.8612 , 35.6972, 
            67.9812 ,  5.0880 , 85.5035 ,79.2945 , 54.5920, 
            28.6869 , 49.7512 ,  7.5186 ,28.6929 , 84.6041}; 
double b[]={1.0, 2.0, 3.0, 4.0, 5.0}; 
dgetrf_(&n, &n, a, &lda, ipiv, &info);
dgetrs_(&trans, &n, &nrhs, a, &lda, ipiv, b, &ldb, &info); 
/* 
* Output: -0.073465    0.038136    -0.033917    0.055903    0.112798
*/
```

Fortran Interface：
```
CHARACTER::trans='N'
PARAMETER(n=5)
PARAMETER(nrhs=1)
PARAMETER(lda=5)
PARAMETER(ldb=5)
INTEGER::info =0
INTEGER :: ipiv(n)
REAL(8) :: a(n*n)
DATA a / 72.1673 , 66.1857 , 64.7644 , 28.0199 , 91.4151,
$           6.5180 , 62.8483 , 72.4323 , 46.5760 ,  8.6928,
$           28.9821 , 42.1828 , 18.6437 , 99.8612 , 35.6972,
$           67.9812 ,  5.0880 , 85.5035 ,79.2945 , 54.5920,
$           28.6869 , 49.7512 ,  7.5186 ,28.6929 , 84.6041 /
REAL(8) :: b(n, nrhs)
DATA b / 1.0, 2.0, 3.0, 4.0, 5.0 /
EXTERNAL DGETRF, DGETRS
CALL DGETRF(n, n, a, lda, ipiv, info);
CALL DGETRS(trans, n, nrhs, a, lda, ipiv, b, ldb, info);
* Output: -0.073465    0.038136    -0.033917    0.055903    0.112798
```
