?gttrs
求解三对角方程A*X=B或A**T *X=B或A**H *X=B,其中系数矩阵A由?gttrf分解而来。
接口定义
C Interface:
void sgttrs_(const char *TRANS, const int *N, const int *NRHS, float *DL, float *D, float *DU, float *DU2, int *IPIV, float *B, const int *LDB, int *INFO);
void dgttrs_(const char *TRANS, const int *N, const int *NRHS, double *DL, double *D, double *DU, double *DU2, int *IPIV, double *B, const int *LDB, int *INFO);
void cgttrs_(const char *TRANS, const int *N, const int *NRHS, float _Complex *DL, float _Complex *D, float _Complex *DU, float _Complex *DU2, int *IPIV, float _Complex *B, const int *LDB, int *INFO);
void zgttrs_(const char *TRANS, const int *N, const int *NRHS, double _Complex *DL, double _Complex *D, double _Complex *DU, double _Complex *DU2, int *IPIV, double _Complex *B, const int *LDB, int *INFO);
Fortran Interface:
SGTTRS(TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB, INFO);
DGTTRS(TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB, INFO);
CGTTRS(TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB, INFO);
ZGTTRS(TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB, INFO);
参数
参数名  | 
类型  | 
描述  | 
输入/输出  | 
|---|---|---|---|
TRANS  | 
字符型  | 
  | 
输入  | 
N  | 
整数型  | 
矩阵A的阶数,N ≥ 0。  | 
输入  | 
NRHS  | 
整数型  | 
矩阵B的列数,NRHS ≥ 0。  | 
输入  | 
DL  | 
  | 
LU分解中的L部分,维度为N-1。  | 
输入  | 
D  | 
  | 
U的对角元素,维度为N。  | 
输入  | 
DU  | 
  | 
为U的第一超对角元素。  | 
输入  | 
DU2  | 
  | 
为U的第二超对角元素。  | 
输入  | 
IPIV  | 
整数型数组  | 
转置数组。  | 
输入  | 
B  | 
  | 
右端项矩阵,维度为(LDB, NRHS)。  | 
输入、输出  | 
LDB  | 
整数型  | 
矩阵B的主维。  | 
输入  | 
INFO  | 
整数型  | 
  | 
输出  | 
依赖
include "klapack.h"
示例
C Interface:
const char trans = 'N';
const int n = 4;
const int ldb = n;
const int nrhs = 1;
double dl[] = {0.565217, 0.170949, 0.482378};
double d[] = {0.923077, 0.899954, 0.318932, -0.186088};
double du[] = {0.043478, -0.085316, 0.566038};
double du2[] = {0.150943, 0.000000};
double b[] = {0.301370, 0.835616, 0.109589, 0.041096};
int ipiv[] = {2,2,3,4};
int info = 0;
dgttrs_(&trans, &n, &nrhs, dl, d, du, du2, ipiv, b, &ldb, &info);
if (info != 0) {
    printf("ERROR, info = %d\n", info);
}
/* 
* Output: 
*   b:  0.882521        -0.172061       0.188567        0.138984
*/
Fortran Interface:
CHARACTER :: trans = "N" PARAMETER (n = 4) PARAMETER (ldb = 4) PARAMETER (nrhs = 1) INTEGER :: info = 0 REAL(8) :: d(n) REAL(8) :: dl(n-1) REAL(8) :: du(n-1) REAL(8) :: du2(n-2) REAL(8) :: b(ldb, nrhs) INTEGER :: ipiv(n) DATA d / 0.923077, 0.899954, 0.318932, -0.186088 / DATA dl / 0.565217, 0.170949, 0.482378/ DATA du / 0.043478, -0.085316, 0.566038 / DATA du2 / 0.150943, 0.000000 / DATA b / 0.301370, 0.835616, 0.109589, 0.041096 / DATA ipiv / 2,2,3,4 / EXTERNAL DGTTRS CALL DGTTRS(trans, n, nrhs, dl, d, du, du2, ipiv, b, ldb, info); * * Output: * d: 0.882521 -0.172061 0.188567 0.138984