前言
前面介绍的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:=α∗A∗x+β∗yy:=α∗A′∗x+β∗yy:=α∗conjg(A′)∗x+beta∗y
其中α,β是标量,x,y是向量,A是m∗n 的矩阵,kl为次对角元(sub-diagonals
)也就是i=j−1;ku
是超对角元(super-diagonals
)也就是i=j+1。输入参数
Layout
: 二维数组是行优先还是列优先trans
: 对输入矩阵的变换情况。CblasNoTrans
表示不转置,CblasTrans
表示转置,CblasConjTrans
表示共轭转置m
: 矩阵的行数n
: 矩阵的列数kl
: 矩阵次对角元的个数ku
: 矩阵超对角元的个数alpha
: 标量a
: 数组大小lda∗nlda
: 矩阵的引导维度,lda
至少是(kl+ku+1)x
: 数组,当trans=CblasNoTrans
的时候至少是(1−(n−1)∗abs(incx)),其它情况是(1+(m−1)∗abs(incx))。输入之前,数组x
必须包含向量x
incx
: 索引增量beta
: 标量y
: 数组,当trans=CblasNoTrans
的时候,至少是(1+(m−1)∗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:=α∗A∗x+β∗yy:=α∗A′∗x+β∗yy:=α∗conjg(A′)∗x+β∗y输入参数
Layout
: 二维数组是行优先还是列优先trans
: 对输入数据的三种变换trans
=CblasNoTrans
,CblasTrans
,CblasConjTrans
m
: 矩阵A的行数n
: 矩阵A的列数alpha
: 标量a
: 数组大小lda∗k。当Layout=CblasColMajor
的时候,k=n;当Layout=CblasRowMajor
的时候,k=mlda
: 数组a的引导维度。对于Layout=CblasColMajor
的时候,lda
至少是max(1,m)
,当Layout=CblasRowMajor
的时候,lda
至少是max(1,n)
x
: 数组,当trans=CblasNoTrans
至少是(1+(n−1)∗abs(incx)),否则就至少为(1+(m−1)∗abs(incx))。incx
: 索引增量beta
: 标量y
: 数组,当trans=CblasNoTrans
至少是(1+(m−1)∗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:=α∗x∗y′+A
其中α是标量,x是m维的向量,y 是n维的向量,A是一个m*n的一般矩阵输入参数
Layout
: 二维数组是行优先还是列优先m
: 矩阵A的行数n
: 矩阵A的列数alpha
: 标量x
: 数组,至少是(1+(m−1)∗abs(incx))大小。incx
: 索引增量y
:数组,至少是(1+(n−1)∗abs(incy))的大小incy
: 索引增量a
: 数组,大小为lda*k
。对于Layout=CblasColMajor
那么k=n;对于Layout=CblasRowMajor
,那么k−mlda
: 引导维度。对于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:=α∗x∗conjg(y′)+A
其中,α是一个标量,x是一个m维的向量,y 是一个n维向量,A是一个m∗n的矩阵。输入参数:
Layout
: 指定行优先(CblasRowMajor
)还是列优先(CblasColMajor
)m
: 矩阵的行n
: 矩阵的列数alpha
: 标量x
: 数组,至少(1+(m−1)∗abs(incx))大小incx
: 索引增量y
: 数组,至少为(1+(n−1)∗abs(incy))incy
: 索引增量a
: 数组大小lda∗k,对于Layout=CblasColMajor
,k=n;对于Layout=CblasRowMajor
,k=mlda
: 指定引导维度。对于Layout=CblasColMajor
,lda
必须至少为max(1,m),对于Layout=CblasRowMajor
,lda
必须是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:=α∗x∗y′+A
其中,x是m维的向量,y 是n维的向量,A是m∗n 的向量输入参数
Layout
: 指定二维数组的存储是行优先(CblasRowMajor
)还是列优先(CblasColMajor
)m
: 矩阵A的行数n
: 矩阵A的列数alpha
: 标量x
: 数组,至少(1+(m−1)∗abs(incx))incx
: 索引增量y
: 数组,至少(1+(n−1)∗abs(incy))incy
: 索引增量a
: 数组,大小为lada∗klda
: 主要索引维度,对于Layout=CblasColMajor
,lda
的值至少为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:=α∗A∗x+β∗y
其中α和β是标量,x,y是n维向量,A是n∗n 的Hermitian带状矩阵,具有k个超对角元。输入参数
Layout
: 指定行优先(CblasRowMajor
)还是列优先(CblasColMajor
)uplo
: 指定Hermitian带状矩阵的上三角或者下三角部分,如果uplo=CblasUpper
,那么矩阵的上三角部分被使用;如果uplo=CblasLower
,使用的就是下三角部分n
: 矩阵的阶k
: 如果uplo=CblasUpper
,指定的是矩阵A的超对角元的个数;如果up=CblasLower
,指定的就是矩阵的次对角元的个数alpha
: 标量a
: 数组,大小lda∗nlda
: 数组的引导维度,至少为(k+1)x
: 矩阵,至少为(1+(n−1)∗abs(incx))incx
: 索引增量beta
: 标量y
: 数组,至少为(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:=α∗A∗x+β∗y
其中,α和β是标量,x,y是n为向量,A是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:=α∗x∗conjg(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:=α∗x∗conjg(y′)+conjg(α)∗y∗congj(x′)+A
其中, α是标量,x,y是n维矩阵,A是n∗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:=α∗A∗x+β∗y
其中,α,β是标量,x,y是n为向量,A是一个n∗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:=α∗x∗conjg(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:=α∗x∗conjg(y′)+conjg(α)∗y∗conjg(x′)+A
其中,α是标量,x,y是n维向量,A是n∗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:=α∗A∗x+β∗y
其中α和β是标量,x,y是n为向量,A是n∗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:=α∗A∗x+β∗y
其中,α,β是标量,x,y是n维向量,A是
n∗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:=α∗x∗x′+A
其中,α是标量,x是n维向量,A是n∗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:=α∗x∗y′+α∗y∗x′+A
其中,α是标量,x,y是n维向量,A是n∗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:=α∗A∗x+β∗y
其中α,β是标量,x,y是n维向量,A是n∗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:=α∗x∗x′+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:=α∗x∗y′+α∗y∗x′+A
其中,α是标量,x,y是n维向量,A是n∗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:=A∗xx:=A′∗xx:=conjg(A′)∗x,
其中,x是n为向量,A 是n∗n单位或者非单位,上三角或者下三角的带状矩阵,具有(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);
运算
A∗x=bA′∗x=bconjg(A′)∗x=b
其中,b,x是n维向量,A是n∗n 的单元或者非单元,上三角或者下三角带状矩阵,具有(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:=A∗xx:=A′∗xx:=conjg(A′)∗x
其中x是一个n维的向量,A 是一个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);
运算
A∗x=bA′∗x=bconjg(A′)∗x=b,
其中,b,x是n维向量,A是n∗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:=A∗xx:=A′∗xx:=conjg(A′)∗x
其中,x是n维向量,A 是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);
运算
A∗x=bA′∗x=bconjg(A′)∗x=b,
其中,b,x是n维向量,A是n∗n 的单位或者非单位,上三角或者下三角矩阵
后续
后续对矩阵-矩阵的运算进行学习,然后就是对这里面很多参数和名词做一个了解,最后就是使用C++实现以下常用的运算了。