MKL学习——矩阵向量操作

前言

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

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

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

所有函数概览

函数 缺失部分 描述
cblas_?gbmv s,d,c,z 一般带状矩阵与向量的乘积
c_blas_?gemv s,d,c,z 一般矩阵与向量的乘积
cblas_?ger s,d 一般矩阵的一阶更新
cblas_?gerc c,z 一般共轭矩阵的一阶更新
cblas_?genru c,z 一般矩阵的一阶更新,非共轭
cblas_?hbmv c,z Hermitian带状矩阵与向量的乘积
cblas_?hemv c,z Hermitian矩阵与向量乘积
cblas_?her c,z Hermitian矩阵的一阶更新
cblas_?her2 c,z Hermitian矩阵的二阶更新
cblas_?hpmv c,z Hermitian压缩矩阵与向量的乘积
cblas_?hpr c,z Hermitian压缩矩阵的一阶更新
cblas_?hpr2 c,z Hermitian压缩矩阵的二阶更新
cblas_?sbmv s,d 对称带状矩阵与向量之间的乘积
cblas_?spmv s,d 对称压缩矩阵与向量的乘积
cblas_?spr s,d 对称压缩矩阵的一阶更新
cblas_?spr2 s,d 对称压缩矩阵的二阶更新
cblas_?symv s,d 对称矩阵与向量的乘积
cblas_?syr s,d 对称矩阵的一阶更新
cblas_?syr2 s,d 对称矩阵的二阶更新
cblas_?tbmv s,d,c,z 三角带状矩阵与向量的乘积
cblas_?tbsv s,d,c,z 利用三角带状矩阵求解线性方程组
cblas_?tpmv s,d,c,z 三角压缩矩阵与向量的乘积
cblas_?tpsv s,d,c,z 利用三角压缩矩阵求解线性方程组
cblas_?trmv s,d,c,z 三角矩阵与向量的乘积
cblas_?trsv s,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

    y:=\\alpha*A*x+\\beta*y\\\\
    y:=\\alpha*A\’*x+\\beta*y\\\\
    y:=\\alpha*conjg(A\’)*x+beta*y

    其中

    α,β
    \\alpha,\\beta是标量,

    x,y
    x,y是向量,

    A
    A是mnm*n的矩阵,

    kl
    kl为次对角元(sub-diagonals)也就是

    i=j1
    i=j-1; ku是超对角元(super-diagonals)也就是

    i=j+1
    i=j+1。

  • 输入参数

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

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

    m : 矩阵的行数

    n : 矩阵的列数

    kl : 矩阵次对角元的个数

    ku : 矩阵超对角元的个数

    alpha : 标量

    a : 数组大小

    ldan
    lda*n

    lda : 矩阵的引导维度,lda至少是

    (kl+ku+1)
    (kl+ku+1)

    x : 数组,当trans=CblasNoTrans的时候至少是

    (1(n1)abs(incx))
    (1-(n-1)*abs(incx)),其它情况是

    (1+(m1)abs(incx))
    (1+(m-1)*abs(incx))。输入之前,数组x必须包含向量x

    incx : 索引增量

    beta : 标量

    y : 数组,当trans=CblasNoTrans的时候,至少是

    (1+(m1)abs(incy))
    (1+(m-1)*abs(incy)),其它情况为

    (1+(n1)abs(incy))
    (1+(n-1)*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

    y:=\\alpha*A*x+\\beta*y\\\\
    y:=\\alpha*A\’*x+\\beta*y\\\\
    y:=\\alpha*conjg(A\’)*x+\\beta*y

  • 输入参数

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

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

    m : 矩阵A的行数

    n : 矩阵A的列数

    alpha : 标量

    a : 数组大小

    ldak
    lda*k。当Layout=CblasColMajor的时候,

    k=n
    k=n;当Layout=CblasRowMajor的时候,

    k=m
    k=m

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

    x : 数组,当trans=CblasNoTrans至少是

    (1+(n1)abs(incx))
    (1+(n-1)*abs(incx)),否则就至少为

    (1+(m1)abs(incx))
    (1+(m-1)*abs(incx))。

    incx : 索引增量

    beta : 标量

    y : 数组,当trans=CblasNoTrans至少是

    (1+(m1)abs(incy))
    (1+(m-1)*abs(incy)),否则就至少为

    (1+(n1)abs(incy))
    (1+(n-1)*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

    A:=\\alpha*x*y\’+A

    其中

    α
    \\alpha是标量,

    x
    x是m维的向量,yy是n维的向量,A是一个m*n的一般矩阵

  • 输入参数

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

    m : 矩阵A的行数

    n : 矩阵A的列数

    alpha : 标量

    x : 数组,至少是

    (1+(m1)abs(incx))
    (1+(m-1)*abs(incx))大小。

    incx : 索引增量

    y:数组,至少是

    (1+(n1)abs(incy))
    (1+(n-1)*abs(incy))的大小

    incy : 索引增量

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

    k=n
    k=n;对于Layout=CblasRowMajor,那么

    km
    k-m

    lda : 引导维度。对于Layout=CblasColMajor,那么lda至少为

    max(1,m)
    max(1,m);对于Layout=CblasRowMajor,那么lda至少为

    max(1,n)
    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

    A:=\\alpha*x*conjg(y\’)+A

    其中,

    α
    \\alpha是一个标量,

    x
    x是一个m维的向量,yy是一个n维向量,A是一个

    mn
    m*n的矩阵。

  • 输入参数:

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

    m : 矩阵的行

    n : 矩阵的列数

    alpha : 标量

    x : 数组,至少

    (1+(m1)abs(incx))
    (1+(m-1)*abs(incx))大小

    incx : 索引增量

    y : 数组,至少为

    (1+(n1)abs(incy))
    (1+(n-1)*abs(incy))

    incy : 索引增量

    a : 数组大小

    ldak
    lda*k,对于Layout=CblasColMajor,

    k=n
    k=n;对于Layout=CblasRowMajor,

    k=m
    k=m

    lda : 指定引导维度。对于Layout=CblasColMajorlda必须至少为

    max(1,m)
    max(1,m),对于Layout=CblasRowMajorlda必须是

    max(1,n)
    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

    A:=\\alpha *x*y\’+A

    其中,

    x
    x是m维的向量,yy是n维的向量,

    A
    A是mnm*n的向量

  • 输入参数

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

    m : 矩阵A的行数

    n : 矩阵A的列数

    alpha : 标量

    x : 数组,至少

    (1+(m1)abs(incx))
    (1+(m-1)*abs(incx))

    incx : 索引增量

    y : 数组,至少

    (1+(n1)abs(incy))
    (1+(n-1)*abs(incy))

    incy : 索引增量

    a : 数组,大小为

    ladak
    lada*k

    lda : 主要索引维度,对于Layout=CblasColMajorlda的值至少为

    max(1,m)
    max(1,m);对于Layout=CblasRowMajor,lda的值至少为

    max(1,n)
    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

    y:=\\alpha*A*x+\\beta*y

    其中

    α
    \\alpha和

    β
    \\beta是标量,

    x,y
    x,y是n维向量,

    A
    A是nnn*n的Hermitian带状矩阵,具有k个超对角元。

  • 输入参数

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

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

    n : 矩阵的阶

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

    alpha : 标量

    a : 数组,大小

    ldan
    lda*n

    lda : 数组的引导维度,至少为

    (k+1)
    (k+1)

    x : 矩阵,至少为

    (1+(n1)abs(incx))
    (1+(n-1)*abs(incx))

    incx : 索引增量

    beta : 标量

    y : 数组,至少为

    (1+(n1)abs(incy))
    (1+(n-1)*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

    y:=\\alpha*A*x+\\beta*y

    其中,

    α
    \\alpha和

    β
    \\beta是标量,

    x,y
    x,y是n为向量,A是

    nn
    n*n的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

    A:=\\alpha*x*conjg(x\’)+A

    其中

    α
    \\alpha和

    β
    \\beta是标量,

    x
    x是n维向量,AA是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

    A:=\\alpha*x*conjg(y\’)+conjg(\\alpha)*y*congj(x\’)+A

    其中,

    α
    \\alpha是标量,

    x,y
    x,y是n维矩阵,

    A
    A是nnn*n的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

    y:=\\alpha*A*x+\\beta*y

    其中,

    α,β
    \\alpha,\\beta是标量,

    x,y
    x,y是n为向量,

    A
    A是一个nnn*n的矩阵,使用压缩存储形式

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

    A:=\\alpha*x*conjg(x\’)+A

    其中

    α
    \\alpha是标量,

    x
    x是n为向量,AA是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

    A:= \\alpha *x*conjg(y\’)+conjg(\\alpha)*y*conjg(x\’)+A

    其中,

    α
    \\alpha是标量,

    x,y
    x,y是n维向量,

    A
    A是nnn*n的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

    y:=\\alpha*A*x+\\beta*y

    其中

    α
    \\alpha 和

    β
    \\beta是标量,

    x,y
    x,y是n为向量,

    A
    A是nnn*n的对称带状矩阵,具有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
    y:=\\alpha*A*x+\\beta*y

    其中,

    α,β
    \\alpha,\\beta是标量,

    x,y
    x,y是n维向量,

    A
    A是nnn*n的对称矩阵,以压缩方式提供

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

    a:=\\alpha*x*x\’+A

    其中,

    α
    \\alpha是标量,

    x
    x是n维向量,A是nnn*n维对称矩阵,提供的是压缩存储形式

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

    A:=\\alpha*x*y\’+\\alpha*y*x\’+A

    其中,

    α
    \\alpha是标量,

    x,y
    x,y是n维向量,

    A
    A是nnn*n维对称矩阵,以压缩方式提供

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

    y:=\\alpha*A*x+\\beta*y

    其中

    α,β
    \\alpha,\\beta是标量,

    x,y
    x,y是n维向量,

    A
    A是nnn*n的对称矩阵

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

    A:=\\alpha*x*x\’+A

    其中,

    α
    \\alpha是标量,

    x
    x是n维向量,AA是$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

    A:=\\alpha*x*y\’+\\alpha*y*x\’+A

    其中,

    α
    \\alpha是标量,

    x,y
    x,y是n维向量,

    A
    A是nnn*n的矩阵

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 := A*x\\\\
    x := A\’*x\\\\
    x := conjg(A\’)*x,

    其中,

    x
    x是n为向量,AA是

    nn
    n*n单位或者非单位,上三角或者下三角的带状矩阵,具有

    (k+1)
    (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

    A*x = b\\\\
    A\’*x = b\\\\
    conjg(A\’)*x = b

    其中,

    b,x
    b,x是n维向量,

    A
    A是nnn*n的单元或者非单元,上三角或者下三角带状矩阵,具有

    (k+1)
    (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 := A*x\\\\
    x := A\’*x\\\\
    x := conjg(A\’)*x

    其中

    x
    x是一个n维的向量,AA是一个

    nn
    n*n的单元或者非单元,上三角或者下三角,以压缩方式提供

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,

    A*x = b\\\\
    A\’*x = b\\\\
    conjg(A\’)*x = b,

    其中,

    b,x
    b,x是n维向量,

    A
    A是nnn*n的单位或者非单位,上三角或者下三角矩阵,提供压缩方式存储

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 := A*x\\\\
    x := A\’*x\\\\
    x := conjg(A\’)*x

    其中,

    x
    x是n维向量,AA是

    nn
    n*n维的单元或者非单元,下三角或者上三角矩阵

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,

    A*x = b\\\\
    A\’*x = b\\\\
    conjg(A\’)*x = b,

    其中,

    b,x
    b,x是n维向量,

    A
    A是nnn*n的单位或者非单位,上三角或者下三角矩阵

后续

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

© 版权声明
THE END
喜欢就支持一下吧
点赞852 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容