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