MKL学习——矩阵向量操作

前言

前面介绍的BLAS Level 1是向量-向量的操作,而这里的BLAS Level 2主要还是对矩阵-向量之间的操作。命名规则与前面的一样,主要记住定义的是数据类型

s实数域,单精度
c复数域,单精度
d实数域,双精度
z复数域,双精度

也可结合起来,比如sc代表实数域和复数域的单精度类型,dz代表实数域和复数域的双精度类型。

所有函数概览

函数缺失部分描述
cblas_?gbmvs,d,c,z一般带状矩阵与向量的乘积
c_blas_?gemvs,d,c,z一般矩阵与向量的乘积
cblas_?gers,d一般矩阵的一阶更新
cblas_?gercc,z一般共轭矩阵的一阶更新
cblas_?genruc,z一般矩阵的一阶更新,非共轭
cblas_?hbmvc,zHermitian带状矩阵与向量的乘积
cblas_?hemvc,zHermitian矩阵与向量乘积
cblas_?herc,zHermitian矩阵的一阶更新
cblas_?her2c,zHermitian矩阵的二阶更新
cblas_?hpmvc,zHermitian压缩矩阵与向量的乘积
cblas_?hprc,zHermitian压缩矩阵的一阶更新
cblas_?hpr2c,zHermitian压缩矩阵的二阶更新
cblas_?sbmvs,d对称带状矩阵与向量之间的乘积
cblas_?spmvs,d对称压缩矩阵与向量的乘积
cblas_?sprs,d对称压缩矩阵的一阶更新
cblas_?spr2s,d对称压缩矩阵的二阶更新
cblas_?symvs,d对称矩阵与向量的乘积
cblas_?syrs,d对称矩阵的一阶更新
cblas_?syr2s,d对称矩阵的二阶更新
cblas_?tbmvs,d,c,z三角带状矩阵与向量的乘积
cblas_?tbsvs,d,c,z利用三角带状矩阵求解线性方程组
cblas_?tpmvs,d,c,z三角压缩矩阵与向量的乘积
cblas_?tpsvs,d,c,z利用三角压缩矩阵求解线性方程组
cblas_?trmvs,d,c,z三角矩阵与向量的乘积
cblas_?trsvs,d,c,z利用三角矩阵求解线性方程组

所有函数详情

cblas_?gbmv

  • 作用 : 一般带状矩阵与向量的乘积
  • 定义函数
void cblas_sgbmv (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE trans, const MKL_INT m, const MKL_INT n, const MKL_INT kl, const MKL_INT ku, const float alpha, const float *a, const MKL_INT lda, const float *x, const MKL_INT incx, const float beta, float *y, const MKL_INT incy);

void cblas_dgbmv (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE trans, const MKL_INT m, const MKL_INT n, const MKL_INT kl, const MKL_INT ku, const double alpha, const double *a, const MKL_INT lda, const double *x, const MKL_INT incx, const double beta, double *y, const MKL_INT incy);

void cblas_cgbmv (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE trans, const MKL_INT m, const MKL_INT n, const MKL_INT kl, const MKL_INT ku, const void *alpha, const void *a, const MKL_INT lda, const void *x, const MKL_INT incx, const void *beta, void *y, const MKL_INT incy);

void cblas_zgbmv (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE trans, const MKL_INT m, const MKL_INT n, const MKL_INT kl, const MKL_INT ku, const void *alpha, const void *a, const MKL_INT lda, const void *x, const MKL_INT incx, const void *beta, void *y, const MKL_INT incy);
  • 运算

    ?gbmv是矩阵-向量的乘法

    y:=αAx+βyy:=αAx+βyy:=αconjg(A)x+betay

    其中 α,β 是标量, x,y 是向量, A mn的矩阵, kl 为次对角元(sub-diagonals)也就是 i=j1 ; ku是超对角元(super-diagonals)也就是 i=j+1

  • 输入参数

    Layout : 二维数组是行优先还是列优先

    trans : 对输入矩阵的变换情况。 CblasNoTrans表示不转置,CblasTrans表示转置,CblasConjTrans表示共轭转置

    m : 矩阵的行数

    n : 矩阵的列数

    kl : 矩阵次对角元的个数

    ku : 矩阵超对角元的个数

    alpha : 标量

    a : 数组大小 ldan

    lda : 矩阵的引导维度,lda至少是 (kl+ku+1)

    x : 数组,当trans=CblasNoTrans的时候至少是 (1(n1)abs(incx)) ,其它情况是 (1+(m1)abs(incx)) 。输入之前,数组x必须包含向量x

    incx : 索引增量

    beta : 标量

    y : 数组,当trans=CblasNoTrans的时候,至少是 (1+(m1)abs(incy)) ,其它情况为 (1+(n1)abs(incy))

    incy : 索引增量

  • 输出参数 : y是更新后的向量

cblas_?gemv

  • 作用 : 一般矩阵与向量之间的乘法

  • 定义函数

    void cblas_sgemv (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE trans, const MKL_INT m, const MKL_INT n, const float alpha, const float *a, const MKL_INT lda, const float *x, const MKL_INT incx, const float beta, float *y, const MKL_INT incy);
    
    void cblas_dgemv (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE trans, const MKL_INT m, const MKL_INT n, const double alpha, const double *a, const MKL_INT lda, const double *x, const MKL_INT incx, const double beta, double *y, const MKL_INT incy);
    
    void cblas_cgemv (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE trans, const MKL_INT m, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, const void *x, const MKL_INT incx, const void *beta, void *y, const MKL_INT incy);
    
    void cblas_zgemv (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE trans, const MKL_INT m, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, const void *x, const MKL_INT incx, const void *beta, void *y, const MKL_INT incy);
  • 运算

    y:=αAx+βyy:=αAx+βyy:=αconjg(A)x+βy

  • 输入参数

    Layout : 二维数组是行优先还是列优先

    trans : 对输入数据的三种变换trans=CblasNoTrans,CblasTrans,CblasConjTrans

    m : 矩阵A的行数

    n : 矩阵A的列数

    alpha : 标量

    a : 数组大小 ldak 。当Layout=CblasColMajor的时候, k=n ;当Layout=CblasRowMajor的时候, k=m

    lda : 数组a的引导维度。对于Layout=CblasColMajor的时候,lda至少是max(1,m),当Layout=CblasRowMajor的时候,lda至少是max(1,n)

    x : 数组,当trans=CblasNoTrans至少是 (1+(n1)abs(incx)) ,否则就至少为 (1+(m1)abs(incx))

    incx : 索引增量

    beta : 标量

    y : 数组,当trans=CblasNoTrans至少是 (1+(m1)abs(incy)) ,否则就至少为 (1+(n1)abs(incy))

    incy : 索引增量

  • 输出 : 更新矩阵y

cblas_?ger

  • 作用: 矩阵的一阶更新

  • 定义函数

    void cblas_sger (const CBLAS_LAYOUT Layout, const MKL_INT m, const MKL_INT n, const float alpha, const float *x, const MKL_INT incx, const float *y, const MKL_INT incy, float *a, const MKL_INT lda);
    
    void cblas_dger (const CBLAS_LAYOUT Layout, const MKL_INT m, const MKL_INT n, const double alpha, const double *x, const MKL_INT incx, const double *y, const MKL_INT incy, double *a, const MKL_INT lda);
  • 运算

    A:=αxy+A

    其中 α 是标量, x 是m维的向量,y是n维的向量,A是一个m*n的一般矩阵

  • 输入参数

    Layout: 二维数组是行优先还是列优先

    m : 矩阵A的行数

    n : 矩阵A的列数

    alpha : 标量

    x : 数组,至少是 (1+(m1)abs(incx)) 大小。

    incx : 索引增量

    y:数组,至少是 (1+(n1)abs(incy)) 的大小

    incy : 索引增量

    a : 数组,大小为lda*k。对于Layout=CblasColMajor那么 k=n ;对于Layout=CblasRowMajor,那么 km

    lda : 引导维度。对于Layout=CblasColMajor,那么lda至少为 max(1,m) ;对于Layout=CblasRowMajor,那么lda至少为 max(1,n)

  • 输出 : a是更新矩阵

cblas_?gerc

  • 作用 : 一般矩阵的一阶更新(共轭的)

  • 定义函数

    void cblas_cgerc (const CBLAS_LAYOUT Layout, const MKL_INT m, const MKL_INT n, const void *alpha, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *a, const MKL_INT lda);
    
    void cblas_zgerc (const CBLAS_LAYOUT Layout, const MKL_INT m, const MKL_INT n, const void *alpha, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *a, const MKL_INT lda);
  • 运算

    A:=αxconjg(y)+A

    其中, α 是一个标量, x 是一个m维的向量,y是一个n维向量,A是一个 mn 的矩阵。

  • 输入参数:

    Layout : 指定行优先(CblasRowMajor)还是列优先(CblasColMajor)

    m : 矩阵的行

    n : 矩阵的列数

    alpha : 标量

    x : 数组,至少 (1+(m1)abs(incx)) 大小

    incx : 索引增量

    y : 数组,至少为 (1+(n1)abs(incy))

    incy : 索引增量

    a : 数组大小 ldak ,对于Layout=CblasColMajor, k=n ;对于Layout=CblasRowMajor, k=m

    lda : 指定引导维度。对于Layout=CblasColMajorlda必须至少为 max(1,m) ,对于Layout=CblasRowMajorlda必须是 max(1,n)

  • 输出 : a更新的矩阵

cblas_?geru

  • 作用 : 一般矩阵的一阶更新(非共轭)

  • 定义函数

    void cblas_cgeru (const CBLAS_LAYOUT Layout, const MKL_INT m, const MKL_INT n, const void *alpha, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *a, const MKL_INT lda);
    void cblas_zgeru (const CBLAS_LAYOUT Layout, const MKL_INT m, const MKL_INT n, const void *alpha, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *a, const MKL_INT lda);
  • 运算

    A:=αxy+A

    其中, x 是m维的向量,y是n维的向量, A mn的向量

  • 输入参数

    Layout : 指定二维数组的存储是行优先(CblasRowMajor)还是列优先(CblasColMajor)

    m : 矩阵A的行数

    n : 矩阵A的列数

    alpha : 标量

    x : 数组,至少 (1+(m1)abs(incx))

    incx : 索引增量

    y : 数组,至少 (1+(n1)abs(incy))

    incy : 索引增量

    a : 数组,大小为 ladak

    lda : 主要索引维度,对于Layout=CblasColMajorlda的值至少为 max(1,m) ;对于Layout=CblasRowMajor,lda的值至少为 max(1,n)

  • 输出参数 : a更新完毕的矩阵

clbas_?hbmv

  • 作用 : 计算Hermitian带状矩阵与向量的乘法

  • 定义函数

    void cblas_chbmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const MKL_INT k, const void *alpha, const void *a, const MKL_INT lda, const void *x, const MKL_INT incx, const void *beta, void *y, const MKL_INT incy);
    
    void cblas_zhbmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const MKL_INT k, const void *alpha, const void *a, const MKL_INT lda, const void *x, const MKL_INT incx, const void *beta, void *y, const MKL_INT incy);
  • 运算

    y:=αAx+βy

    其中 α β 是标量, x,y 是n维向量, A nn的Hermitian带状矩阵,具有k个超对角元。

  • 输入参数

    Layout : 指定行优先(CblasRowMajor)还是列优先(CblasColMajor)

    uplo : 指定Hermitian带状矩阵的上三角或者下三角部分,如果uplo=CblasUpper,那么矩阵的上三角部分被使用;如果uplo=CblasLower,使用的就是下三角部分

    n : 矩阵的阶

    k : 如果uplo=CblasUpper,指定的是矩阵A的超对角元的个数;如果up=CblasLower,指定的就是矩阵的次对角元的个数

    alpha : 标量

    a : 数组,大小 ldan

    lda : 数组的引导维度,至少为 (k+1)

    x : 矩阵,至少为 (1+(n1)abs(incx))

    incx : 索引增量

    beta : 标量

    y : 数组,至少为 (1+(n1)abs(incy))

    incy : 索引增量

  • 输出 : y更新以后的向量

cblas_?hemv

  • 作用 : 使用Hermitian矩阵乘以向量
  • 定义函数
void cblas_chemv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, const void *x, const MKL_INT incx, const void *beta, void *y, const MKL_INT incy);

void cblas_zhemv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, const void *x, const MKL_INT incx, const void *beta, void *y, const MKL_INT incy);
  • 运算
    y:=αAx+βy

    其中, α β 是标量, x,y 是n为向量,A是 nn 的Hermitian矩阵

cblas_?her

  • 作用 : Hermitian矩阵的一阶更新

  • 定义函数

    void cblas_chemv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, const void *x, const MKL_INT incx, const void *beta, void *y, const MKL_INT incy);
    
    void cblas_zhemv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const void *alpha, const void *a, const MKL_INT lda, const void *x, const MKL_INT incx, const void *beta, void *y, const MKL_INT incy);
  • 运算

    A:=αxconjg(x)+A

    其中 α β 是标量, x 是n维向量,A是n维Hermitian矩阵

cblas_?her2

  • 作用 : Hermitian矩阵的二阶更新

  • 定义函数

    void cblas_cher2 (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const void *alpha, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *a, const MKL_INT lda);
    void cblas_zher2 (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const void *alpha, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *a, const MKL_INT lda);
  • 运算

    A:=αxconjg(y)+conjg(α)ycongj(x)+A

    其中, α 是标量, x,y 是n维矩阵, A nn的Hermitian矩阵

cblas_?hpmv

  • 作用: 使用Hermitian计算矩阵-向量的乘积

  • 定义函数

    void cblas_chpmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const void *alpha, const void *ap, const void *x, const MKL_INT incx, const void *beta, void *y, const MKL_INT incy);
    void cblas_zhpmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const void *alpha, const void *ap, const void *x, const MKL_INT incx, const void *beta, void *y, const MKL_INT incy);
  • 运算

    y:=αAx+βy

    其中, α,β 是标量, x,y 是n为向量, A 是一个nn的矩阵,使用压缩存储形式

cblas_?hpr

  • 作用 : Hermitian压缩矩阵的一阶更新

  • 定义函数

    void cblas_chpr (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const float alpha, const void *x, const MKL_INT incx, void *ap);
    
    void cblas_zhpr (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const double alpha, const void *x, const MKL_INT incx, void *ap);
    
    void cblas_chpr (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const float alpha, const void *x, const MKL_INT incx, void *ap);
    
    void cblas_zhpr (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const double alpha, const void *x, const MKL_INT incx, void *ap);
  • 运算

    A:=αxconjg(x)+A

    其中 α 是标量, x 是n为向量,A是Hermitian矩阵,提供的是压缩形式

cblas_?hpr2

  • 作用 : Hermitian压缩矩阵的二阶更新

  • 定义函数

    void cblas_chpr2 (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const void *alpha, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *ap);
    
    void cblas_zhpr2 (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const void *alpha, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *ap);
  • 运算

    A:=αxconjg(y)+conjg(α)yconjg(x)+A

    其中, α 是标量, x,y 是n维向量, A nn的Hermitian矩阵,使用压缩存储方式

cblas_?sbmv

  • 作用 : 对称带状矩阵与向量的乘积

  • 定义函数

    void cblas_ssbmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const MKL_INT k, const float alpha, const float *a, const MKL_INT lda, const float *x, const MKL_INT incx, const float beta, float *y, const MKL_INT incy);
    
    void cblas_dsbmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const MKL_INT k, const double alpha, const double *a, const MKL_INT lda, const double *x, const MKL_INT incx, const double beta, double *y, const MKL_INT incy);
  • 运算

    y:=αAx+βy

    其中 α β 是标量, x,y 是n为向量, A nn的对称带状矩阵,具有k个对角元

cblas_?spmv

  • 作用:对称压缩矩阵与向量的乘积

  • 定义函数

    void cblas_sspmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const float alpha, const float *ap, const float *x, const MKL_INT incx, const float beta, float *y, const MKL_INT incy);
    
    void cblas_dspmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const double alpha, const double *ap, const double *x, const MKL_INT incx, const double beta, double *y, const MKL_INT incy);
  • 运算

    y:=αAx+βy

    其中, α,β 是标量, x,y 是n维向量, A nn的对称矩阵,以压缩方式提供

cblas_?spr

  • 作用 : 对称压缩矩阵的一阶更新

  • 定义函数

    void cblas_sspr (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const float alpha, const float *x, const MKL_INT incx, float *ap);
    
    void cblas_dspr (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const double alpha, const double *x, const MKL_INT incx, double *ap);
  • 运算

    a:=αxx+A

    其中, α 是标量, x 是n维向量,A是nn维对称矩阵,提供的是压缩存储形式

cblas_?spr2

  • 作用 : 对称压缩矩阵的二阶更新

  • 定义函数

    void cblas_sspr2 (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const float alpha, const float *x, const MKL_INT incx, const float *y, const MKL_INT incy, float *ap);
    
    void cblas_dspr2 (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const double alpha, const double *x, const MKL_INT incx, const double *y, const MKL_INT incy, double *ap);
  • 运算

    A:=αxy+αyx+A

    其中, α 是标量, x,y 是n维向量, A nn维对称矩阵,以压缩方式提供

cblas_?symv

  • 作用 : 计算对称矩阵与向量的乘积

  • 定义函数

    void cblas_ssymv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const float alpha, const float *a, const MKL_INT lda, const float *x, const MKL_INT incx, const float beta, float *y, const MKL_INT incy);
    
    void cblas_dsymv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const double alpha, const double *a, const MKL_INT lda, const double *x, const MKL_INT incx, const double beta, double *y, const MKL_INT incy);
  • 运算

    y:=αAx+βy

    其中 α,β 是标量, x,y 是n维向量, A nn的对称矩阵

cblas_?syr

  • 作用 : 对称矩阵的一阶更新

  • 定义函数

    void cblas_ssyr (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const float alpha, const float *x, const MKL_INT incx, float *a, const MKL_INT lda);
    
    void cblas_dsyr (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const double alpha, const double *x, const MKL_INT incx, double *a, const MKL_INT lda);
  • 运算

    A:=αxx+A

    其中, α 是标量, x 是n维向量,A是$n*n的矩阵

cblas_?syr2

  • 作用 : 对称矩阵的二阶更新

  • 定义函数

    void cblas_ssyr2 (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const float alpha, const float *x, const MKL_INT incx, const float *y, const MKL_INT incy, float *a, const MKL_INT lda);
    
    void cblas_dsyr2 (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const MKL_INT n, const double alpha, const double *x, const MKL_INT incx, const double *y, const MKL_INT incy, double *a, const MKL_INT lda);
  • 运算

    A:=αxy+αyx+A

    其中, α 是标量, x,y 是n维向量, A nn的矩阵

cblas_?tbmv

  • 作用 : 使用三角带状矩阵,计算矩阵-向量乘积

  • 定义函数

    void cblas_stbmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const MKL_INT k, const float *a, const MKL_INT lda, float *x, const MKL_INT incx);
    
    void cblas_dtbmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const MKL_INT k, const double *a, const MKL_INT lda, double *x, const MKL_INT incx);
    
    void cblas_ctbmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const MKL_INT k, const void *a, const MKL_INT lda, void *x, const MKL_INT incx);
    
    void cblas_ztbmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const MKL_INT k, const void *a, const MKL_INT lda, void *x, const MKL_INT incx);
  • 运算

    x:=Axx:=Axx:=conjg(A)x,

    其中, x 是n为向量,A nn 单位或者非单位,上三角或者下三角的带状矩阵,具有 (k+1) 对角元

cblas_?tbsv

  • 作用 : 解线性方程组,要求系数是三角带状矩阵

  • 定义函数

    void cblas_stbsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const MKL_INT k, const float *a, const MKL_INT lda, float *x, const MKL_INT incx);
    
    void cblas_dtbsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const MKL_INT k, const double *a, const MKL_INT lda, double *x, const MKL_INT incx);
    
    void cblas_ctbsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const MKL_INT k, const void *a, const MKL_INT lda, void *x, const MKL_INT incx);
    
    void cblas_ztbsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const MKL_INT k, const void *a, const MKL_INT lda, void *x, const MKL_INT incx);
  • 运算

    Ax=bAx=bconjg(A)x=b

    其中, b,x 是n维向量, A nn的单元或者非单元,上三角或者下三角带状矩阵,具有 (k+1) 个对角元

cblas_?tpmv

  • 作用 : 使用三角压缩矩阵计算矩阵-向量的乘积

  • 定义函数

    void cblas_stpmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const float *ap, float *x, const MKL_INT incx);
    
    void cblas_dtpmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const double *ap, double *x, const MKL_INT incx);
    
    void cblas_ctpmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const void *ap, void *x, const MKL_INT incx);
    
    void cblas_ztpmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const void *ap, void *x, const MKL_INT incx);
  • 运算

    x:=Axx:=Axx:=conjg(A)x

    其中 x 是一个n维的向量,A是一个 nn 的单元或者非单元,上三角或者下三角,以压缩方式提供

cblas_?tpsv

  • 作用 : 解线性方程组,但是系数需要是三角压缩矩阵

  • 定义函数

    void cblas_stpsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const float *ap, float *x, const MKL_INT incx);
    
    void cblas_dtpsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const double *ap, double *x, const MKL_INT incx);
    
    void cblas_ctpsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const void *ap, void *x, const MKL_INT incx); 
    
    void cblas_ztpsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const void *ap, void *x, const MKL_INT incx);
  • 运算

    Ax=bAx=bconjg(A)x=b,

    其中, b,x 是n维向量, A nn的单位或者非单位,上三角或者下三角矩阵,提供压缩方式存储

cblas_?trmv

  • 作用 : 使用三角阵计算矩阵-向量的乘积

  • 定义函数

    void cblas_strmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const float *a, const MKL_INT lda, float *x, const MKL_INT incx);
    
    void cblas_dtrmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const double *a, const MKL_INT lda, double *x, const MKL_INT incx);
    
    void cblas_ctrmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const void *a, const MKL_INT lda, void *x, const MKL_INT incx);
    
    void cblas_ztrmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const void *a, const MKL_INT lda, void *x, const MKL_INT incx);
  • 运算

    x:=Axx:=Axx:=conjg(A)x

    其中, x 是n维向量,A nn 维的单元或者非单元,下三角或者上三角矩阵

cblas_?trsv

  • 作用 : 解线性方程组,但是系数是三角矩阵

  • 定义函数

    void cblas_strsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const float *a, const MKL_INT lda, float *x, const MKL_INT incx);
    
    void cblas_dtrsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const double *a, const MKL_INT lda, double *x, const MKL_INT incx);
    
    void cblas_ctrsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const void *a, const MKL_INT lda, void *x, const MKL_INT incx);
    
    void cblas_ztrsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, const
    CBLAS_TRANSPOSE trans, const CBLAS_DIAG diag, const MKL_INT n, const void *a, const MKL_INT lda, void *x, const MKL_INT incx);
  • 运算

    Ax=bAx=bconjg(A)x=b,

    其中, b,x 是n维向量, A nn的单位或者非单位,上三角或者下三角矩阵

后续

后续对矩阵-矩阵的运算进行学习,然后就是对这里面很多参数和名词做一个了解,最后就是使用C++实现以下常用的运算了。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值