中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

?syrk

矩阵乘矩阵秩k更新,矩阵C为对称矩阵。

即:

alpha,beta为乘法系数,C为n*n的对称矩阵;第一种情况矩阵A为n*k,第二种情况矩阵A为k*n一般矩阵。

接口定义

C interface:

void cblas_ssyrk(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 beta, float *C, const BLASINT ldc);

void cblas_dsyrk(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 beta, double *C, const BLASINT ldc);

void cblas_csyrk(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 *beta, void *C, const BLASINT ldc);

void cblas_zsyrk(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 *beta, void *C, const BLASINT ldc);

Fortran interface:

CALL SSYRK(UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC)

CALL DSYRK(UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC)

CALL CSYRK(UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC)

CALL ZSYRK(UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC)

参数

参数名

类型

描述

输入/输出

order

枚举类型CBLAS_ORDER

表示矩阵是行主序或列主序。

输入

Uplo

枚举类型CBLAS_UPLO

矩阵C存储方式。

输入

Trans

枚举类型CBLAS_TRANSPOSE

矩阵A和C为常规矩阵、转置矩阵或共轭矩阵。

  • 当Trans = CblasNoTrans,
  • 当Trans = CblasTrans/CblasConjTrans,

输入

N

整型数

矩阵C的主序长度。

输入

K

整型数

当Trans = CblasNoTrans,K为矩阵A的列,否则为矩阵A的行。

输入

alpha

  • 在ssyrk中是单精度浮点类型。
  • 在dsyrk中是双精度浮点类型。
  • 在csyrk中是单精度复数类型。
  • 在zsyrk中是双精度复数类型。

乘法系数。

输入

A

  • 在ssyrk中是单精度浮点类型。
  • 在dsyrk中是双精度浮点类型。
  • 在csyrk中是单精度复数类型。
  • 在zsyrk中是双精度复数类型。

矩阵A(lda, ka)。

当Trans = CblasNoTrans, ka = k,否则ka = n。

输入

lda

整型数

  • 矩阵为列存,Trans = CblasNoTrans,lda至少max(1, n),否则至少max(1, k)。
  • 矩阵为行存,Trans = CblasNoTrans,lda至少max(1, k),否则至少max(1, n)。

输入

beta

  • 在ssyrk中是单精度浮点类型。
  • 在dsyrk中是双精度浮点类型。
  • 在csyrk中是单精度复数类型。
  • 在zsyrk中是双精度复数类型。

乘法系数。

输入

C

  • 在ssyrk中是单精度浮点类型。
  • 在dsyrk中是双精度浮点类型。
  • 在csyrk中是单精度复数类型。
  • 在zsyrk中是双精度复数类型。

对称矩阵C。

输入/输出

ldc

整型数

ldc至少max(1, n)。

输入

依赖

#include "kblas.h"

示例

C interface:

    int n = 3, lda = 3, k = 2,  ldc = 3; 
    float alpha = 2.0, beta = 2.0;  
    /** 
     *                   | 4.0   1.0  | 
     *    A(3 * 2)    =  | 3.0   4.0  | 
     *                   |  .     .   | 
     * 
     *                    |  3.0   2.0  .| 
     *     C(3 * 3)    =  | -1.0  -6.0  .| 
     *                    |   .     .   .| 
     */ 
    float a[6] = {4.0, 3.0, 0, 1.0, 4.0, 0}; 
    float c[9] = {3.0, -1.0, 0, 2.0, -6.0, 0, 0, 0, 0}; 
 
    cblas_ssyrk(CblasColMajor, CblasUpper, CblasNoTrans, n, k, alpha, a, lda, beta, c, ldc); 
    /** 
     * Output C 
     *                   |  40.0  36.0  .| 
     *    C(3 * 3)    =  |  -1.0  38.0  .| 
     *                   |   .      .   .| 
     * 
     */

Fortran interface:

      INTEGER :: N=3, K=2 
      INTEGER :: LDA=3, LDC=3 
      REAL(4) :: ALPHA=2.0, BETA=2.0 
      REAL(4) :: A(3, 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 SSYRK 
      CALL SSYRK('U', 'N', N, K, ALPHA, A, LDA, BETA, C, LDC) 
 
*     Output C 
*                       |  40.0  36.0  .| 
*        C(3 * 3)    =  |  30.0  38.0  .| 
*                       |   .      .   .|