MKL学习——矩阵向量操作

来源:互联网 发布:英雄联盟淘宝网 编辑:程序博客网 时间:2024/06/09 15:57

前言

前面介绍的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

    其中α,β是标量,x,y是向量,Amn的矩阵,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维的向量,Amn的向量

  • 输入参数

    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维向量,Ann的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维矩阵,Ann的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维向量,Ann的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为向量,Ann的对称带状矩阵,具有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维向量,Ann的对称矩阵,以压缩方式提供

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维向量,Ann维对称矩阵,以压缩方式提供

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维向量,Ann的对称矩阵

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维向量,Ann的矩阵

cblas_?tbmv

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

  • 定义函数

    void cblas_stbmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, constCBLAS_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, constCBLAS_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, constCBLAS_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, constCBLAS_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为向量,Ann单位或者非单位,上三角或者下三角的带状矩阵,具有(k+1)对角元

cblas_?tbsv

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

  • 定义函数

    void cblas_stbsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, constCBLAS_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, constCBLAS_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, constCBLAS_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, constCBLAS_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维向量,Ann的单元或者非单元,上三角或者下三角带状矩阵,具有(k+1)个对角元

cblas_?tpmv

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

  • 定义函数

    void cblas_stpmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, constCBLAS_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, constCBLAS_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, constCBLAS_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, constCBLAS_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, constCBLAS_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, constCBLAS_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, constCBLAS_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, constCBLAS_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维向量,Ann的单位或者非单位,上三角或者下三角矩阵,提供压缩方式存储

cblas_?trmv

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

  • 定义函数

    void cblas_strmv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, constCBLAS_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, constCBLAS_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, constCBLAS_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, constCBLAS_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维向量,Ann维的单元或者非单元,下三角或者上三角矩阵

cblas_?trsv

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

  • 定义函数

    void cblas_strsv (const CBLAS_LAYOUT Layout, const CBLAS_UPLO uplo, constCBLAS_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, constCBLAS_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, constCBLAS_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, constCBLAS_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维向量,Ann的单位或者非单位,上三角或者下三角矩阵

后续

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

1 0
原创粉丝点击