?syr2k
矩阵乘矩阵秩2更新,矩阵C为对称矩阵。
即: 或 。
alpha,beta为乘法系数,C为n*n的对称矩阵;第一种情况矩阵A,B为n*k,第二种情况矩阵A,B为k*n一般矩阵。
接口定义
C interface:
void cblas_ssyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const BLASINT N, const BLASINT K, const float alpha, const float *A, const BLASINT lda, const float *B, const BLASINT ldb, const float beta, float *C, const BLASINT ldc);
void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const BLASINT N, const BLASINT K, const double alpha, const double *A, const BLASINT lda, const double *B, const BLASINT ldb, const double beta, double *C, const BLASINT ldc);
void cblas_csyr2k(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 void *beta, void *C, const BLASINT ldc);
void cblas_zsyr2k(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 void *beta, void *C, const BLASINT ldc);
Fortran interface:
CALL SSYR2K(UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CALL DSYR2K(UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CALL CSYR2K(UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CALL ZSYR2K(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,K为矩阵A和B的列,否则为矩阵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 |
整型数 |
ldc至少max(1, n)。 |
输入 |
依赖
#include "kblas.h"
示例
C interface:
int n = 2, lda = 3, k = 2, ldb =3, ldc = 3; float alpha = 2.0, beta = 2.0; /** * | 4.0 1.0 | * A(3 * 2) = | 3.0 4.0 | * | . . | * * B(2 * 2) = | 2.0 3.0 | * | 11.0 -2.0 | * * | 3.0 2.0 | * C(3 * 2) = | -1.0 -6.0 | * | . . | */ float a[6] = {4.0, 3.0, 0, 1.0, 4.0, 0}; float b[4] = {2.0, 11.0, 3.0, -2.0}; float c[6] = {3.0, -1.0, 0, 2.0, -6.0, 0}; cblas_ssyr2k(CblasColMajor, CblasUpper, CblasNoTrans, n, k, alpha, a, lda, b, ldb, beta, c, ldc); /** * Output C * | 30.0 96.0 | * C(3 * 2) = | -1.0 184.0 | * | . . | * */
Fortran interface:
INTEGER :: N=2, K=2 INTEGER :: LDA=3, LDB=3, LDC=3 REAL(4) :: ALPHA=2.0, BETA=2.0 REAL(4) :: A(3, 2), B(2, 2), C(3, 3) DATA A/4.0, 3.0, 0, 1.0, 4.0, 0/ DATA C/3.0, -1.0, 0, 2.0, -6.0, 0/ EXTERNAL SSYR2K CALL SSYR2K('U', 'N', N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) * Output C * | 30.0 96.0 | * C(3 * 2) = | -1.0 184.0 | * | . . |