?hemm
复数埃尔米特矩阵乘矩阵。
即:
或
。
alpha,beta为乘法系数,A为埃尔米特矩阵,B和C为m*n一般矩阵。
接口定义
C interface:
void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const BLASINT M, const BLASINT N, const void *alpha, const void *A, const BLASINT lda, const void *B, const BLASINT ldb, const void *beta, void *C, const BLASINT ldc);
void cblas_zhemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const BLASINT M, const BLASINT N, const void *alpha, const void *A, const BLASINT lda, const void *B, const BLASINT ldb, const void *beta, void *C, const BLASINT ldc);
Fortran interface:
CALL CHEMM(SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CALL ZHEMM(SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
参数
参数名 |
类型 |
描述 |
输入/输出 |
|---|---|---|---|
order |
枚举类型CBLAS_ORDER |
表示矩阵是行主序或列主序。 |
输入 |
Side |
枚举类型CBLAS_SIDE |
埃尔米特矩阵A在矩阵B的左边还是右边。 |
输入 |
Uplo |
枚举类型CBLAS_UPLO |
表示使用矩阵A的上三角或下三角。
|
输入 |
M |
整型数 |
矩阵C的行。
|
输入 |
N |
整型数 |
矩阵C的列。
|
输入 |
alpha |
|
乘法系数。 |
输入 |
A |
|
埃尔米特矩阵A(lda, ka)。 如果Side = CblasLeft,ka = m,否则ka = n。 |
输入 |
lda |
整型数 |
如果Side = CblasLeft,lda至少max(1, m),否则至少max(1, n)。 |
输入 |
B |
|
矩阵B(ldb, n)。 |
输入 |
ldb |
整型数 |
|
输入 |
beta |
|
乘法系数。 |
输入 |
C |
|
矩阵C(ldc, n)。 |
输入/输出 |
ldc |
整型数 |
|
输入 |
依赖
#include "kblas.h"
示例
C interface:
int m = 2, n = 3, lda = 4, ldb =3, ldc = 5;
float alpha[2] = {2.0, 3.0}, beta[2] = {1.0, 6.0};
/**
*
* | (2.0, . ) . . |
* A = | (13.0, -2.0) (2.0, . ) . |
* | (-2.0, -6.0) (2.0, 14.0) (2.0, . ) |
* | . . . |
*
* | (2.0, 2.0) (-13.0, 12.0) (3.0, 3.0) |
* B = | (2.0, 6.0) (4.0, -5.0) (-11.0, -4.0) |
* | . . . |
*
* | (3.0, 6.0) (-1.0, 6.0) (1.0, 7.0) |
* | (-11.0, 8.0) (1.0, 1.0) (-14.0, 2.0) |
* C = | . . . |
* | . . . |
* | . . . |
*
*/
float a[24] = {2.0, 0, 13.0, -2.0, -2.0, -6.0, 0, 0,
0, 0, 2.0, 0, 2.0, 14.0, 0, 0,
0, 0, 0, 0,2.0, 0, 0, 0};
float b[18] = {2.0, 2.0, 2.0, 6.0, 0, 0,
-13.0, 12.0, 4.0, -5.0, 0, 0,
3.0, 3.0, -11.0, -4.0, 0, 0};
float c[30] = {3.0,6.0,-11.0,8.0,0,0,0,0,0,0,
-1.0,6.0,1.0,1.0,0,0,0,0,0,0,
1.0,7.0,-14.0,2.0,0,0,0,0,0,0};
cblas_chemm(CblasColMajor,CblasRight,CblasLower, m, n, alpha, a, lda, b, ldb, beta, c, ldc);
/**
* Ouput C
* | (-777.0, -39.0) (-423.0, 84.0) (-437.0, 849.0) |
* | (-10.0, 100.0) (337.0, -5.0) (-52.0, -602.0) |
* C = | . . . |
* | . . . |
* | . . . |
*
*/
Fortran interface:
INTEGER :: M=2, N=3
INTEGER :: LDA=4, LDB=3, LDC=5
COMPLEX(4) :: ALPHA=(2.0, 3.0), BETA=(1.0, 6.0)
COMPLEX(4) :: A(4, 3), B(3, 3), C(5, 3)
DATA A/(2.0, 0), (13.0, -2.0), (-2.0, -6.0), (0, 0),
$ (0, 0), (2.0, 0), (2.0, 14.0), (0, 0),
$ (0, 0), (0, 0), (2.0, 0), (0, 0)/
DATA B/(2.0, 2.0), (2.0, 6.0), (0, 0),
$ (-13.0, 12.0), (4.0, -5.0), (0, 0),
$ (3.0, 3.0), (-11.0, -4.0), (0, 0)/
DATA C/(3.0, 6.0), (-11.0, 8.0), (0, 0), (0, 0), (0, 0),
$ (-1.0, 6.0), (1.0, 1.0), (0, 0), (0, 0), (0, 0),
$ (1.0, 7.0), (-14.0, 2.0), (0, 0), (0, 0), (0, 0)/
EXTERNAL CHEMM
CALL CHEMM('R', 'L', M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
* Ouput C
* | (-777.0, -39.0) (-423.0, 84.0) (-437.0, 849.0) |
* | (-10.0, 100.0) (337.0, -5.0) (-52.0, -602.0) |
* C = | . . . |
* | . . . |
* | . . . |