---
title: ?her2k
description: "埃尔米特矩阵秩2更新。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/accel/kunpengaccel_kml_16_0059.html
sourcePath: /source/zh/kunpengboostkithistory/2200/accel/kunpengaccel_kml_16_0059.html
indexId: 9b9b2890f6faa28b9b78f7ffb7bf8246604a0078c8e689dd43beacd3ba2059ce74
---
# ?her2k

埃尔米特矩阵秩2更新。

或

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为常规矩阵，转置矩阵或共轭矩阵。 当Trans = CblasNoTrans 。 当Trans = CblasConjTrans 。 | 输入 |
| N | 整型数 | 矩阵C的行。 | 输入 |
| K | 整型数 | 当Trans = CblasNoTrans，表示矩阵A、B的列。 当Trans = CblasConjTrans，表示矩阵A、B的行。 | 输入 |
| alpha | 在cher2k中，alpha为单精度复数类型。 在zher2k中，alpha为双精度复数类型。 | 乘法系数。 | 输入 |
| A | 在cher2k中，A为单精度复数类型。 在zher2k中，A为双精度复数类型。 | 矩阵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 | 在cher2k中，B为单精度复数类型。 在zher2k中，B为双精度复数类型。 | 矩阵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 | 在cher2k中，beta为单精度复数类型。 在zher2k中，beta为双精度复数类型。 | 乘法系数。 | 输入 |
| C | 在cher2k中，C为单精度复数类型。 在zher2k中，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)    |
*                        |   .                 .        |
```
