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

?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为常规矩阵,转置矩阵或共轭矩阵。

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

输入

N

整型数

矩阵C的主序长度。

输入

K

整型数

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

输入

alpha

  • 在ssyr2k中是单精度浮点类型。
  • 在dsyr2k中是双精度浮点类型。
  • 在csyr2k中是单精度复数类型。
  • 在zsyr2k中是双精度复数类型。

乘法系数。

输入

A

  • 在ssyr2k中是单精度浮点类型。
  • 在dsyr2k中是双精度浮点类型。
  • 在csyr2k中是单精度复数类型。
  • 在zsyr2k中是双精度复数类型。

矩阵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)。

输入

B

  • 在ssyr2k中是单精度浮点类型。
  • 在dsyr2k中是双精度浮点类型。
  • 在csyr2k中是单精度复数类型。
  • 在zsyr2k中是双精度复数类型。

矩阵B(ldb, kb)。

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

输入

ldb

整型数

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

输入

beta

  • 在ssyr2k中是单精度浮点类型。
  • 在dsyr2k中是双精度浮点类型。
  • 在csyr2k中是单精度复数类型。
  • 在zsyr2k中是双精度复数类型。

乘法系数。

输入

C

  • 在ssyr2k中是单精度浮点类型。
  • 在dsyr2k中是双精度浮点类型。
  • 在csyr2k中是单精度复数类型。
  • 在zsyr2k中是双精度复数类型。

对称矩阵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 | 
*                       |   .      .   |