?trmm
矩阵A为三角矩阵的矩阵乘法。
或
alpha为乘法系数,B为m*n的一般矩阵,A为三角矩阵。
接口定义
C interface:
void cblas_strmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const BLASINT M, const BLASINT N, const float alpha, const float *A, const BLASINT lda, float *B, const BLASINT ldb);
void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const BLASINT M, const BLASINT N, const double alpha, const double *A, const BLASINT lda, double *B, const BLASINT ldb);
void cblas_ctrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const BLASINT M, const BLASINT N, const void *alpha, const void *A, const BLASINT lda, void *B, const BLASINT ldb);
void cblas_ztrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const BLASINT M, const BLASINT N, const void *alpha, const void *A, const BLASINT lda, void *B, const BLASINT ldb);
Fortran interface:
CALL STRMM(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CALL DTRMM(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CALL CTRMM(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CALL ZTRMM(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
参数
参数名 |
类型 |
描述 |
输入/输出 |
---|---|---|---|
order |
枚举类型CBLAS_ORDER |
表示矩阵是行主序或列主序。 |
输入 |
Side |
枚举类型CBLAS_SIDE |
矩阵A在矩阵B的左边还是右边。
|
输入 |
Uplo |
枚举类型CBLAS_UPLO |
表示使用矩阵A的上三角或下三角。
|
输入 |
TranA |
枚举类型CBLAS_TRANSPOSE |
矩阵A是否为常规矩阵,转置矩阵或共轭矩阵。
|
输入 |
Diag |
枚举类型CBLAS_DIAG |
是否为单位三角矩阵。 |
输入 |
M |
整型数 |
矩阵B的行。 |
输入 |
N |
整型数 |
矩阵B的列。 |
输入 |
alpha |
|
乘法系数。 |
输入 |
A |
|
矩阵(lda, k)。
|
输入 |
lda |
整型数 |
|
输入 |
B |
|
矩阵B。 |
输入/输出 |
ldb |
整型数 |
矩阵为列存,ldb至少max(1, m),否则至少max(1, n)。 |
输入 |
依赖
#include "kblas.h"
示例
C interface:
int m = 3, n = 3, lda = 3, ldb = 3; float alpha = 1.0; /** * | 4.0 1.0 2.0 | * A = | . 1.0 3.0 | * | . . 1.0 | * * B = | 2.0 3.0 1.0| * | 11.0 -2.0 2.0| * | 1.0 1.0 6.0| */ float a[9] = {4.0, 0, 0, 1.0, 1.0, 0, 2.0, 3.0, 1.0}; float b[9] = {2.0, 11.0, 1.0, 3.0, -2.0, 1.0, 1.0, 2.0, 6.0}; cblas_strmm(CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, CblasNonUnit, m, n, alpha, a, lda, b, ldb); /** * Output B * | 8.000000 5.000000 14.000000| * B = | 44.000000 9.000000 18.000000| * | 4.000000 2.000000 11.000000| */
Fortran interface:
INTEGER :: M=3, N=3 INTEGER :: LDA=3, LDB=3 REAL(4) :: ALPHA=1.0 REAL(4) :: A(3, 3), B(3, 3) DATA A/4.0, 0, 0, 1.0, 1.0, 0, 2.0, 3.0, 1.0/ DATA B/2.0, 11.0, 1.0, 3.0, -2.0, 1.0, 1.0, 2.0, 6.0/ EXTERNAL STRMM CALL STRMM('R', 'U', 'N', 'N', M, N, ALPHA, A, LDA, B, LDB) * Output B * | 8.000000 5.000000 14.000000| * B = | 44.000000 9.000000 18.000000| * | 4.000000 2.000000 11.000000|