?gtts2
求解三对角方程A*X=B或A**T *X=B或A**H *X=B,其中系数矩阵A由?gttrf分解而来。
接口定义
C Interface:
sgtts2_(const int *trans, const int *n, const int *nrhs, const float *dl, const float *d, const float *du, const float *du2, const int *ipiv, float *b, const int *ldb);
dgtts2_(const int *trans, const int *n, const int *nrhs, const double *dl, const double *d, const double *du, const double *du2, const int *ipiv, double *b, const int *ldb);
cgtts2_(const int *trans, const int *n, const int *nrhs, const float _Complex *dl, const float _Complex *d, const float _Complex *du, const float _Complex *du2, const int *ipiv, float _Complex *b, const int *ldb);
zgtts2_(const int *trans, const int *n, const int *nrhs, const double _Complex *dl, const double _Complex *d, const double _Complex *du, const double _Complex *du2, const int *ipiv,double _Complex *b, const int *ldb);
Fortran Interface:
SGTTS2(TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB);
DGTTS2(TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB);
CGTTS2(TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB);
ZGTTS2(TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB);
参数
参数名 |
类型 |
描述 |
输入/输出 |
---|---|---|---|
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的主维。 |
输入 |
依赖
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}; dgtts2_(&trans, &n, &nrhs, dl, d, du, du2, ipiv, b, &ldb); /* * Output: * b: 0.882521 -0.172061 0.188567 0.138984 */
Fortran Interface:
CHARACTER :: trans = "N" PARAMETER (n = 4) PARAMETER (ldb = 4) PARAMETER (nrhs = 1) 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 DGTTS2 CALL DGTTS2(trans, n, nrhs, dl, d, du, du2, ipiv, b, ldb); * * Output: * d: 0.882521 -0.172061 0.188567 0.138984