?gbmv
向量与带状矩阵乘积。
即:或或
对于Fortran接口另有:或或
alpha和beta是乘法系数,x和y是向量,A是m*n的带状矩阵。
接口定义
C interface:
void cblas_sgbmv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const BLASINT M, const BLASINT N, const BLASINT KL, const BLASINT KU, const float alpha, const float *A, const BLASINT lda, const float *X, const BLASINT incX, const float beta, float *Y, const BLASINT incY);
void cblas_dgbmv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const BLASINT M, const BLASINT N, const BLASINT KL, const BLASINT KU, const double alpha, const double *A, const BLASINT lda, const double *X, const BLASINT incX, const double beta, double *Y, const BLASINT incY);
void cblas_cgbmv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const BLASINT M, const BLASINT N, const BLASINT KL, const BLASINT KU, const void *alpha, const void *A, const BLASINT lda, const void *X, const BLASINT incX, const void *beta, void *Y, const BLASINT incY);
void cblas_zgbmv(const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const BLASINT M, const BLASINT N, const BLASINT KL, const BLASINT KU, const void *alpha, const void *A, const BLASINT lda, const void *X, const BLASINT incX, const void *beta, void *Y, const BLASINT incY);
Fortran interface:
CALL SGBMV(TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CALL DGBMV(TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CALL CGBMV(TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CALL ZGBMV(TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
参数
参数名 |
类型 |
描述 |
输入/输出 |
---|---|---|---|
order |
枚举类型CBLAS_ORDER |
表示矩阵是行主序或列主序。 |
输入 |
TransA |
枚举类型CBLAS_TRANSPOSE |
矩阵A为常规矩阵,转置矩阵或共轭矩阵。
对于Fortran接口另有: |
输入 |
M |
整型数 |
表示矩阵A的行数,要求M大于或等于零。 |
输入 |
N |
整型数 |
表示矩阵A的列数,要求N大于或等于零。 |
输入 |
KL |
整型数 |
表示A的次对角阶数,要求KL大于或等于零。 |
输入 |
KU |
整型数 |
表示A的超对角阶数,要求KU大于或等于零。 |
输入 |
alpha |
|
表示乘法系数。 |
输入 |
A |
|
带状矩阵,矩阵规模是lda*N。 |
输入 |
lda |
整型数 |
矩阵A中主维度长度,要求lda大于或等于(KL+KU+1)。 |
输入 |
X |
|
向量X。 如果TransA=CblasNoTrans,则向量规模至少是(1+(N-1)*abs(incX))。 否则,向量规模至少是(1+(M-1)*abs(incX))。 |
输入 |
incX |
整型数 |
表示X中向量增长步长,不能为零。 |
输入 |
beta |
|
乘法系数。 |
输入 |
Y |
|
向量Y。 如果TransA=CblasNoTrans,则向量规模至少是(1+(M-1)*abs(incY))。 否则,向量规模至少是(1+(N-1)*abs(incY))。 |
输入/输出 |
incY |
整型数 |
表示Y中向量增长步长,不能为零。 |
输入 |
依赖
#include "kblas.h"
示例
C interface:
int m = 5, n = 4; float alpha = 2.0; /** * | . . 2.0 2.0 | * | . 1.0 2.0 3.0 | * | 1.0 2.0 2.0 4.0 | * A = | 1.0 3.0 2.0 5.0 | * | 1.0 4.0 2.0 . | * | 1.0 5.0 . . | * | . . . . | * | . . . . | */ float a[32] = {0, 0, 1.0, 1.0, 1.0, 1.0, 0, 0, 0, 1.0, 2.0, 3.0, 4.0, 5.0, 0, 0, 2.0, 2.0, 2.0, 2.0, 2.0, 0, 0, 0, 2.0, 3.0, 4.0, 5.0, 0, 0, 0, 0}; float x[4] = {2.0, 2.0, 3.0, 4.0}; float y[5] = {1.0, 1.0, 13.0, 4.0, 5.0}; cblas_sgbmv(CblasColMajor,CblasNoTrans, m, n, 3, 2, alpha, a, 8, x, 1, 10.0, y, 1); /** * Ouput y: 30.0, 50.0, 182.0, 104.0, 122.0 */
Fortran interface:
INTEGER :: M=5 INTEGER :: N=4 REAL(4) :: ALPHA=2.0 REAL(4) A(8, 4) DATA A /0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 3, 4, 5, 0, 0, 0, 0/ REAL(4) X(4) DATA X /2, 2, 3, 4/ REAL(4) Y(5) DATA Y /1, 1, 13, 4, 5/ CALL SGBMV('N', M, N, 3, 2, ALPHA, A, 8, X, 1, 10, Y, 1) * Ouput y: 20.0 40.0 52.0 64.0 72.0