?tbmv
向量与三角带状矩阵乘积。
即: 或 或 。x为包含n个元素的向量,A为n*n的单元或非单元的三角带状矩阵。
接口定义
C interface:
void cblas_stbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const BLASINT N, const BLASINT K, const float *A, const BLASINT lda, float *X, const BLASINT incX);
void cblas_dtbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const BLASINT N, const BLASINT K, const double *A, const BLASINT lda, double *X, const BLASINT incX);
void cblas_ctbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const BLASINT N, const BLASINT K, const void *A, const BLASINT lda, void *X, const BLASINT incX);
void cblas_ztbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const BLASINT N, const BLASINT K, const void *A, const BLASINT lda, void *X, const BLASINT incX);
Fortran interface:
CALL STBMV(UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX)
CALL DTBMV(UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX)
CALL CTBMV(UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX)
CALL ZTBMV(UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX)
参数
参数名 |
类型 |
描述 |
输入/输出 |
---|---|---|---|
order |
枚举类型CBLAS_ORDER |
表示矩阵是行主序或列主序。 |
输入 |
Uplo |
枚举类型CBLAS_UPLO |
表示矩阵A是上三角或下三角矩阵。
|
输入 |
TransA |
枚举类型CBLAS_TRANSPOSE |
矩阵A为常规矩阵,转置矩阵或共轭矩阵。
|
输入 |
Diag |
枚举类型CBLAS_DIAG |
表示A是否是单元三角阵。
|
输入 |
N |
整型数 |
表示矩阵A的阶数,要求N大于或等于零。 |
输入 |
K |
整型数 |
表示矩阵A的超对角阶数,要求K大于或等于零。 |
输入 |
A |
|
三角带状矩阵A(lda, n)。 |
输入 |
lda |
整型数 |
矩阵A中每列存储的地址距离,要求lda大于或等于(k+1)。 |
输入 |
X |
|
向量X,向量规模至少是(1+(N-1)*abs(incX))。 |
输入/输出 |
incX |
整型数 |
表示X中向量增长步长,不能为零。 |
输入 |
依赖
#include "kblas.h"
示例
C interface:
int n = 7, k = 3, lda = 5, incx = 1; /** * | . . . 2.0 2.0 3.0 1.0 | * | . . 2.0 1.0 2.0 4.0 0.0 | * | . 2.0 2.0 3.0 4.0 2.0 1.0 | * A = | 1.0 3.0 3.0 3.0 3.0 3.0 3.0 | * | . . . . . . . | */ float a[35] = {0, 0, 0, 1.0, 0, 0, 0, 2.0, 3.0, 0, 0, 2.0, 2.0, 3.0, 0, 2.0, 1.0, 3.0, 3.0, 0, 2.0, 2.0, 4.0, 3.0, 0, 3.0, 4.0, 2.0, 3.0, 0, 1.0, 0.0, 1.0, 3.0, 0}; float x[7] = {2.0, 2.0, 1.0, 2.0, 1.0, 3.0, 4.0}; cblas_stbmv(CblasColMajor,CblasUpper, CblasNoTrans, CblasNonUnit, n, k, a, lda, x, incx); /** * Output x = |12.0, 12.0, 20.0, 26.0, 9.0, 13.0, 12.0| */
Fortran interface:
INTEGER :: N=7, K=3 INTEGER :: LDA=5, INCX=1 REAL(4) :: A(35), X(7) DATA A/0, 0, 0, 1.0, 0, $ 0, 0, 2.0, 3.0, 0, $ 0, 2.0, 2.0, 3.0, 0, $ 2.0, 1.0, 3.0, 3.0, 0, $ 2.0, 2.0, 4.0, 3.0, 0, $ 3.0, 4.0, 2.0, 3.0, 0, $ 1.0, 0.0, 1.0, 3.0, 0/ DATA X/2.0, 2.0, 1.0, 2.0, 1.0, 3.0, 4.0/ EXTERNAL STBMV CALL STBMV('U', 'N', 'N', N, K, A, LDA, X, INCX) * Output X = |12.0, 12.0, 20.0, 26.0, 9.0, 13.0, 12.0|