?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