?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的阶数,N ≥ 0。 |
输入 |
NRHS |
整数型 |
矩阵B的列数,NRHS ≥ 0。 |
输入 |
A |
|
矩阵A的L和U部分,来自GETRF分解而来。大小为LDA*N。 |
输入 |
LDA |
整数型 |
矩阵A的主维,LDA ≥ max(1,N)。 |
输入 |
IPIV |
整数型数组 |
转置数组。 |
输入 |
B |
|
右端项矩阵,大小为LDB*NRHS。
|
输入、输出 |
LDB |
整数型 |
矩阵B的主维,LDB ≥ max(1, N)。 |
输入 |
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 */
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