?her2k
复数矩阵乘矩阵秩2更新,矩阵C为复数埃尔米特矩阵。
即: 或 。
alpha,beta为乘法系数,C为n*n的埃尔米特矩阵;第一种情况矩阵A,B为n*k,第二种情况矩阵A,B为k*n。
接口定义
C interface:
void cblas_cher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const BLASINT N, const BLASINT K, const void *alpha, const void *A, const BLASINT lda, const void *B, const BLASINT ldb, const float beta, void *C, const BLASINT ldc);
void cblas_zher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const BLASINT N, const BLASINT K, const void *alpha, const void *A, const BLASINT lda, const void *B, const BLASINT ldb, const double beta, void *C, const BLASINT ldc);
Fortran interface:
CALL CHER2K(UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CALL ZHER2K(UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
参数
参数名 |
类型 |
描述 |
输入/输出 |
---|---|---|---|
order |
枚举类型CBLAS_ORDER |
表示矩阵是行主序或列主序。 |
输入 |
Uplo |
枚举类型CBLAS_UPLO |
矩阵C存储方式。 |
输入 |
Trans |
枚举类型CBLAS_TRANSPOSE |
矩阵A和B为常规矩阵,转置矩阵或共轭矩阵。 |
输入 |
N |
整型数 |
矩阵C的行。 |
输入 |
K |
整型数 |
当Trans = CblasNoTrans,表示矩阵A、B的列。 当Trans = CblasConjTrans,表示矩阵A、B的行。 |
输入 |
alpha |
|
乘法系数。 |
输入 |
A |
|
矩阵A(lda, ka)。 如果Trans = CblasNoTrans,ka = k,否则ka = n。 |
输入 |
lda |
整型数 |
|
输入 |
B |
|
矩阵B(ldb, kb)。 Trans = CblasNoTrans,kb = k,否则kb = n。 |
输入 |
ldb |
整型数 |
|
输入 |
beta |
|
乘法系数。 |
输入 |
C |
|
矩阵C(ldc, n)。 |
输入/输出 |
ldc |
整型数 |
ldc至少max(1, n)。 |
输入 |
依赖
#include "kblas.h"
示例
C interface:
int n = 2, lda = 2, k = 2, ldb =3, ldc = 3; float alpha[2] = {2.0, 1.0}, beta = 2.0; /** * | 4.0 1.0 1.0 2.0 | * A(2 * 2) = | 3.0 2.0 4.0 1.0 | * * B(2 * 2) = | 2.0 1.0 3.0 2.0 | * | 11.0 2.0 -2.0 1.0 | * * | 3.0 1.0 2.0 1.0 | * C(3 * 2) = | -1.0 1.0 -6.0 2.0 | * | . . | */ float a[8] = {4.0, 1.0, 3.0, 2.0, 1.0, 2.0, 4.0, 1.0}; float b[8] = {2.0, 1.0, 11.0, 2.0, 3.0, 2.0, -2.0, 1.0}; float c[12] = {3.0, 1.0, -1.0, 1.0, 0, 0, 2.0, 1.0, -6.0, 2.0, 0, 0}; cblas_cher2k(CblasColMajor, CblasUpper, CblasConjTrans, n, k, alpha, a, lda, b, ldb, beta, c, ldc); /** * Output C * | (218.0, 0.0) (123.0, -27.0) | * C(3 * 2) = | (-1.0 1.0) (46.0, 0.0) | * | . . | * */
Fortran interface:
INTEGER :: N=2, K=2 INTEGER :: LDA=2, LDB=3, LDC=3 COMPLEX(4) :: ALPHA=(2.0, 1.0) REAL(4) :: BETA=2.0 COMPLEX(4) :: A(2, 2), B(2, 2), C(3, 2) DATA A/(4.0, 1.0), (3.0, 2.0), (1.0, 2.0), (4.0, 1.0)/ DATA B/(2.0, 1.0), (11.0, 2.0), (3.0, 2.0), (-2.0, 1.0)/ DATA C/(3.0, 1.0), (-1.0, 1.0), (0, 0), (2.0, 1.0), (-6.0, 2.0), $ (0, 0)/ EXTERNAL CHER2K CALL CHER2K('U', 'C', N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) * Output C * | (218.0, 0.0) (123.0, -27.0) | * C(3 * 2) = | (-1.0 1.0) (46.0, 0.0) | * | . . |