中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

?trtrs

求解三角方程A * X = B,或A**T * X = B。

接口定义

C Interface:

void dtrtrs_(const char *uplo, const char *trans, const char *diag, const int *n, const int *nrhs, const double *a, const int *lda, double *b, const int *ldb, int *info);

void strtrs_(const char *uplo, const char *trans, const char *diag, const int *n, const int *nrhs, const float *a, const int *lda, float *b, const int *ldb, int *info);

void ctrtrs_(const char *uplo, const char *trans, const char *diag, const int *n, const int *nrhs, const float _Complex *a, const int *lda, float _Complex *b, const int *ldb, int *info);

void ztrtrs_(const char *uplo, const char *trans, const char *diag, const int *n, const int *nrhs, const double _Complex *a, const int *lda, double _Complex *b, const int *ldb, int *info);

Fortran Interface:

DTRTRS(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, INFO);

STRTRS(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, INFO);

CTRTRS(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, INFO);

ZTRTRS(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, INFO);

参数

参数名

类型

描述

输入/输出

UPLO

字符型

  • 'U',A是上三角矩阵。
  • 'L',A是下三角矩阵。

输入

TRANS

字符型

  • 'N',A * X = B
  • 'T',A**T * X = B
  • 'C',A**H * X = B(共轭转置)

输入

DIAG

字符型

  • 'N',A是非单位三角矩阵。
  • 'U'。A是单位三角矩阵。

输入

N

整数型

矩阵A的阶数,N ≥ 0。

输入

NRHS

整数型

矩阵B的列数,NRHS ≥ 0。

输入

A

  • 在strtrs中为单精度浮点型数组。
  • 在dtrtrs中为双精度浮点型数组。
  • 在ctrtrs中为单精度复数型数组。
  • 在ztrtrs中为双精度复数型数组。

三角矩阵A,大小为(LDA, N)。

输入

LDA

整数型

矩阵A的主维,LDA ≥ max(1, N)。

输入

B

  • 在strtrs中为单精度浮点型数组。
  • 在dtrtrs中为双精度浮点型数组。
  • 在ctrtrs中为单精度复数型数组。
  • 在ztrtrs中为双精度复数型数组。

输入时,为右端矩阵B,大小为(LDB, NRHS)。

输出时, 若INFO = 0,为方程的解矩阵X。

输入、输出

LDB

整数型

右端矩阵B的主维, LDB ≥ max(1, N)。

输入

INFO

整数型

  • 等于0:成功。
  • 小于0:第-INFO个参数值不合法。
  • 大于0:矩阵A的第INFO个对角元素为0,为奇异矩阵。

输出

依赖

include "klapack.h"

示例

C Interface:

const char uplo = 'L';
const char trans = 'N';
const char diag = 'N';
const int n = 4;
const int lda = n;
const int ldb = n;
const int nrhs = 1;

double *a = (double*)malloc(lda * n * sizeof(double));
double *b = (double*)malloc(ldb * nrhs * sizeof(double));
int info = 0;

// Generate Matrix A.
for (int i = 0; i < n; i++) {
    for (int j = i; j < lda; j++) {
        a[i * lda + j] = (rand() % 53 + 1) / 53.0;
    }
}
// Generate right hand side matrix B.
for (int i = 0; i < ldb * nrhs; i++) {
    b[i] = (rand() % 23 + 1) / 23.0;
}

// Call dtrtrs.
dtrtrs_(&uplo, &trans, &diag, &n, &nrhs, a, &lda, b, &ldb, &info);
if (info != 0) {
    printf("ERROR, info = %d\n", info);
}

Fortran Interface:

CHARACTER :: uplo = "L"
CHARACTER :: trans = "N"
CHARACTER :: diag = "N"
PARAMETER (n = 4) 
PARAMETER (lda = 4)
PARAMETER (ldb = 4)
PARAMETER (nrhs = 1) 
INTEGER :: info = 0 
REAL(8) :: d(lda, n) 
REAL(8) :: b(ldb, nrhs) 

 EXTERNAL DTRTRS 
 CALL DTRTRS(uplo, trans, diag n, nrhs, a, lda, b, ldb, info);
搜索结果
找到“0”个结果

当前产品无相关内容

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