EN
注册

?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*X=B。
  • 'T':A**T*X=B。
  • 'C':A**T*X=B(共轭转置)。

输入

N

整数型

矩阵A的阶数,N ≥ 0。

输入

NRHS

整数型

矩阵B的列数,NRHS ≥ 0。

输入

DL

  • 在sgtts2中为单精度浮点型数组。
  • 在dgtts2中为双精度浮点型数组。
  • 在cgtts2中为单精度复数型数组。
  • 在zgtts2中为双精度复数型数组。

LU分解中的L部分,维度为N-1。

输入

D

  • 在sgtts2中为单精度浮点型数组。
  • 在dgtts2中为双精度浮点型数组。
  • 在cgtts2中为单精度复数型数组。
  • 在zgtts2中为双精度复数型数组。

U的对角元素,维度为N。

输入

DU

  • 在sgtts2中为单精度浮点型数组。
  • 在dgtts2中为双精度浮点型数组。
  • 在cgtts2中为单精度复数型数组。
  • 在zgtts2中为双精度复数型数组。

为U的第一超对角元素。

输入

DU2

  • 在sgtts2中为单精度浮点型数组。
  • 在dgtts2中为双精度浮点型数组。
  • 在cgtts2中为单精度复数型数组。
  • 在zgtts2中为双精度复数型数组。

为U的第二超对角元素。

输入

IPIV

整数型数组

转置数组。

输入

B

  • 在sgtts2中为单精度浮点型数组。
  • 在dgtts2中为双精度浮点型数组。
  • 在cgtts2中为单精度复数型数组。
  • 在zgtts2中为双精度复数型数组。

右端项矩阵,维度为(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
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词