---
title: ?sbmv
description: "向量与对称带状矩阵乘积。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0632.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0632.html
indexId: 1dd29189568bc86134c23fe1412159ad59aec819a791fa1f2835987f30a54b3461
---
# ?sbmv

向量与对称带状矩阵乘积。

即。alpha和beta是乘法系数，x和y是含有n个元素的向量，A是n*n的对称带状矩阵。

#### 接口定义

C interface：

void cblas_ssbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const BLASINT N, const BLASINT K, const float alpha, const float *A, const BLASINT lda, const float *X, const BLASINT incX, const float beta, float *Y, const BLASINT incY);

void cblas_dsbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const BLASINT N, const BLASINT K, const double alpha, const double *A, const BLASINT lda, const double *X, const BLASINT incX, const double beta, double *Y, const BLASINT incY);

Fortran interface：

CALL SSBMV(UPLO, N, K, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)

CALL DSBMV(UPLO, N, K, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| order | 枚举类型CBLAS\_ORDER | 表示矩阵是行主序或列主序。 | 输入 |
| Uplo | 枚举类型CBLAS\_UPLO | 表示使用矩阵A的上三角或下三角。 如果Uplo=CblasUpper，则使用A的上三角部分。 如果Uplo=CblasLower，则使用A的下三角部分。 | 输入 |
| N | 整型数 | 表示矩阵A的阶数，要求N大于或等于零。 | 输入 |
| K | 整型数 | 表示矩阵A的超对角阶数，要求K大于或等于零。 | 输入 |
| alpha | 在ssbmv中是单精度浮点类型。 在dsbmv中是双精度浮点类型。 | 表示乘法系数。 | 输入 |
| A | 在ssbmv中是单精度浮点类型。 在dsbmv中是双精度浮点类型。 | 对称带状矩阵，矩阵规模是lda\*n。 | 输入 |
| lda | 整型数 | 矩阵A中每列存储的地址距离，要求lda大于或等于(k+1)。 | 输入 |
| X | 在ssbmv中是单精度浮点类型。 在dsbmv中是双精度浮点类型。 | 向量X，向量规模至少是(1+(N\-1)\*abs(incX))。 | 输入 |
| incX | 整型数 | 表示X中向量增长步长，不能为零。 | 输入 |
| beta | 在ssbmv中是单精度浮点类型。 在dsbmv中是双精度浮点类型。 | 乘法系数。 | 输入 |
| Y | 在ssbmv中是单精度浮点类型。 在dsbmv中是双精度浮点类型。 | 向量Y，向量规模至少是(1+(N\-1)\*abs(incY))。 | 输入/输出 |
| incY | 整型数 | 表示Y中向量增长步长，不能为零。 | 输入 |


#### 依赖

#include "kblas.h"


#### 示例

C interface：

```
int n = 4, k = 2; 
    float alpha = 2.0; 
    /** 
     *        |  .    .   2.0  2.0 | 
     *        |  .   1.0  2.0  3.0 | 
     *        | 1.0  2.0  2.0  4.0 | 
     *  A  =  | 1.0  3.0  2.0  5.0 | 
     *        | 1.0  4.0  2.0  6.0 | 
     *        | 1.0  5.0  2.0  2.0 | 
     *        |  .    .    .    .  | 
     *        |  .    .    .    .  | 
     */ 
    float a[32] = {0, 0, 1.0, 1.0, 1.0, 1.0, 0, 0, 
                   0, 1.0, 2.0, 3.0, 4.0, 5.0, 0, 0, 
                   2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0, 0, 
                   2.0, 3.0, 4.0, 5.0, 6.0, 2.0, 0, 0}; 
    float x[4] = {2.0, 2.0, 3.0, 4.0}; 
    float y[4] = {1.0, 1.0, 13.0, 4.0}; 
 
    cblas_ssbmv(CblasColMajor,CblasUpper, n, k, alpha, a, 8, x, 1, 1.0, y, 1); 
    /** 
     * Output y = |21.0, 41.0, 65.0, 62.0| 
     */
```

Fortran interface：

```
INTEGER :: N=4, K=2
REAL(4) :: ALPHA=2.0
REAL(4) :: BETA=1.0
REAL(4) :: A(32)
DATA A/0, 0, 1.0, 1.0, 1.0, 1.0, 0, 0,
$       0, 1.0, 2.0, 3.0, 4.0, 5.0, 0, 0,
$       2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0, 0,
$       2.0, 3.0, 4.0, 5.0, 6.0, 2.0, 0, 0/
REAL(4) :: X(4), Y(4)
DATA X/2.0, 2.0, 3.0, 4.0/
DATA Y/1.0, 1.0, 13.0, 4.0/
EXTERNAL SSBMV
CALL SSBMV('L', N, K, ALPHA, A, 8, X, 1, BETA, Y, 1)
*     Output Y = |21.0, 41.0, 65.0, 62.0|
```
