float *res = cblas_sasum (const MKL_INT n, const float *x, const MKL_INT incx);
float *res = cblas_scasum (const MKL_INT n, const void *x, const MKL_INT incx);
double *res = cblas_dasum (const MKL_INT n, const double *x, const MKL_INT incx);
double *res = cblas_dzasum (const MKL_INT n, const void *x, const MKL_INT incx);
cblas_?asum函数计算一个实向量的元素的大小和,或者复向量的元素实部和虚部的大小和:
res = |Re x1| + |Im x1| + |Re x2|+ |Im x2|+…+ |Re xn| + |Im xn|,
其中x是一个有n个元素的向量。
单精度实数为cblas_sasum,双精度实数cblas_dasum,单精度复数cblas_scasum,双精度复数cblas_dzasum,
n | 整数。指定向量x中的元素数量。 |
---|---|
x | 数组,大小至少为(1 + (n-1)*abs(incx))。 |
incx | 整数。指定索引向量x的增量。 |
res: 数组或者向量。结果存储位置,大小至少为(1 + (n-1)*abs(incx))。
cblas_saxpy (const MKL_INT n, const float a, const float *x, const MKL_INT incx, float *y, const MKL_INT incy);
cblas_daxpy (const MKL_INT n, const double a, const double *x, const MKL_INT incx, double *y, const MKL_INT incy);
cblas_caxpy (const MKL_INT n, const void *a, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);
cblas_zaxpy (const MKL_INT n, const void *a, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);
cblas_?axpy函数执行向量-向量运算,定义为y:= a*x + y,其中:a是标量,x, y是向量,每个向量的元素个数等于n。
单精度实数为cblas_sasum,双精度实数cblas_dasum,单精度复数cblas_scasum,双精度复数cblas_dzasum
n | 整数。指定向量x和y中的元素数量 |
---|---|
a | 指定标量a。 |
x | 数组,大小至少为(1 + (n-1)*abs(incx))。 |
incx | 整数。指定索引向量x的增量。 |
y | 数组,大小至少为(1 + (n-1)*abs(incy))。 |
incy | 整数。指定y元素的增量。 |
y: 包含更新后的向量y
cblas_scopy (const MKL_INT n, const float *x, const MKL_INT incx, float *y, const MKL_INT incy);
cblas_dcopy (const MKL_INT n, const double *x, const MKL_INT incx, double *y, const MKL_INT incy);
cblas_ccopy (const MKL_INT n, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);
cblas_zcopy (const MKL_INT n, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);
cblas_?copy函数执行定义为y = x的向量-向量操作,其中x和y是向量。
单精度实数为cblas_scopy,双精度实数cblas_dcopy,单精度复数cblas_ccopy,双精度复数cblas_zcopy
n | 整数。指定向量x和y中的元素数量 |
---|---|
x | 数组,大小至少为(1 + (n-1)*abs(incx))。 |
incx | 整数。指定索引向量x的增量。 |
y | 数组,大小至少为(1 + (n-1)*abs(incy))。 |
incy | 整数。指定y元素的增量。 |
y: 如果n是正的,则包含向量x的一个副本。否则,参数不变。
float *res = cblas_sdot (const MKL_INT n, const float *x, const MKL_INT incx, const float *y, const MKL_INT incy);
doublet *res = cblas_ddot (const MKL_INT n, const double *x, const MKL_INT incx, const double*y, const MKL_INT incy);
cblas_?dot函数执行向量-向量点乘操作,定义为
其中xi和yi是向量x和y的元素。
单精度实数为cblas_sdot,双精度实数cblas_ddot
n | 整数。指定向量x和y中的元素数量 |
---|---|
x | 数组,大小至少为(1 + (n-1)*abs(incx))。 |
incx | 整数。指定索引向量x的增量。 |
y | 数组,大小至少为(1 + (n-1)*abs(incy))。 |
incy | 整数。指定y元素的增量。 |
res: 包含x和y点乘的结果,如果n是正的。否则,res包含0。
float *res = cblas_sdsdot (const MKL_INT n, const float sb, const float *sx, const MKL_INT incx, const float *sy, const MKL_INT incy);
double *res = cblas_dsdot (const MKL_INT n, const float *sx, const MKL_INT incx, const float *sy, const MKL_INT incy);
cblas_?sdot函数以双精度计算两个向量的内积。两个函数都使用中间结果的双精度积累,但是cblas_sdsdot函数以单精度输出最终结果,而cblas_dsdot函数输出双精度结果。函数cblas_sdsdot还将标量值sb添加到内积中。
n | 整数。指定输入向量sx和sy中的元素数量。 |
---|---|
sb | 实数。添加到内积的单个精度标量(仅用于函数sdsdot)。 |
sx,sy | 数组,大小分别至少(1+(n-1)*abs(incx))和(1+(n-1)*abs(incy))。包含输入的单精度向量。 |
incx | 整数。指定x元素的增量。 |
incy | 整数。指定y元素的增量。 |
res: 包含sx与sy的点积结果(对于cblas_sdsdot添加sb),如果n为正。否则,res为cblas_sdsdot包含sb,为cblas_dsdot包含0。
cblas_cdotc_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *dotc);
cblas_zdotc_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *dotc);
cblas_?dotc函数执行向量-向量操作,定义为:
其中xi和yi是向量x和y的元素。
单精度复数为cblas_cdotc_sub,双精度复数cblas_zdotc_sub
n | 整数。指定向量x和y中的元素数量 |
---|---|
x | 数组,大小至少为(1 + (n-1)*abs(incx))。 |
incx | 整数。指定索引向量x的增量。 |
y | 数组,大小至少为(1 + (n-1)*abs(incy))。 |
incy | 整数。指定y元素的增量。 |
dotc | 数组,大小至少为(1 + (n-1)*abs(incy))。 |
dotc: 包含共轭的x和y点乘的结果,如果n是正的。否则,包含0。
cblas_cdotu_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *dotu);
cblas_zdotu_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *dotu);
其中xi和yi是向量x和y的元素。
单精度复数为cblas_cdotu_sub,双精度复数cblas_zdotu_sub
n | 整数。指定向量x和y中的元素数量 |
---|---|
x | 数组,大小至少为(1 + (n-1)*abs(incx))。 |
incx | 整数。指定索引向量x的增量。 |
y | 数组,大小至少为(1 + (n-1)*abs(incy))。 |
incy | 整数。指定y元素的增量。 |
dotu | 数组,大小至少为(1 + (n-1)*abs(incy))。 |
dotu: 包含x和y点乘的结果,如果n是正的。否则,包含0。
float *res = cblas_snrm2 (const MKL_INT n, const float *x, const MKL_INT incx);
double *res = cblas_dnrm2 (const MKL_INT n, const double *x, const MKL_INT incx);
float *res = cblas_scnrm2 (const MKL_INT n, const void *x, const MKL_INT incx);
double *res = cblas_dznrm2 (const MKL_INT n, const void *x, const MKL_INT incx);
cblas_?nrm2函数执行定义为res = ||x||的向量操作,其中:x是一个向量,res是包含x元素的欧氏范数的值
单精度实数为cblas_snrm2,双精度实数cblas_dnrm2,单精度复数为cblas_scnrm2,双精度复数cblas_dznrm2
n | 整数。指定向量y中的元素数量 |
---|---|
x | 数组,大小至少为(1 + (n-1)*abs(incx))。 |
incx | 整数。指定索引向量x的增量。 |
res: 包含向量x的欧氏范数。
cblas_srot (const MKL_INT n, float *x, const MKL_INT incx, float *y, const MKL_INT incy, const float c, const float s);
cblas_drot (const MKL_INT n, double *x, const MKL_INT incx, double *y, const MKL_INT incy, const double c, const double s);
cblas_csrot (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT incy, const float c, const float s);
cblas_zdrot (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT incy, const double c, const double s);
给定两个复向量x和y,将这两个向量的每个向量元素替换为:
xi = cxi + syi
yi = cyi - sxi
单精度实数为cblas_srot,双精度实数cblas_drot,单精度复数为cblas_csort,双精度复数cblas_zdrot
n | 整数。指定向量y中的元素数量 |
---|---|
x | 数组,大小至少为(1 + (n-1)*abs(incx))。 |
incx | 整数。指定索引向量x的增量。 |
y | 数组,大小至少为(1 + (n-1)*abs(incy))。 |
incy | 整数。指定索引向量y的增量。 |
c | 一个标量。 |
s | 一个标量。 |
x: 每个元素被替换为cx + sy。
y: 每个元素被替换为cy - sx
cblas_srotg (float *a, float *b, float *c, float *s);
cblas_drotg (double *a, double *b, double *c, double *s);
cblas_crotg (void *a, const void *b, float *c, void *s);
cblas_zrotg (void *a, const void *b, double *c, void *s);
给给定一个点的笛卡尔坐标(a, b),这些函数返回与给定旋转相关的参数c, s, r和z。参数c和s定义了一个酉矩阵,如:
定义参数z使|a| > |b|, z为s;否则,如果c不为0 z为1/c;否则z等于1。
单精度实数为cblas_srotg,双精度实数cblas_drotg,单精度复数为cblas_csortg,双精度复数cblas_zrotg
a | 为点p的x坐标 |
---|---|
b | 为点p的y坐标。 |
a | 包含与给定的旋转相关的参数r。 |
---|---|
b | 包含与给定旋转相关的参数z。 |
c | 包含与给定旋转相关联的参数c。 |
s | 包含与给定的旋转相关的参数s。 |
cblas_srotm (const MKL_INT n, float *x, const MKL_INT incx, float *y, const MKL_INT incy, const float *param);
cblas_drotm (const MKL_INT n, double *x, const MKL_INT incx, double *y, const MKL_INT incy, const double *param);
对于i=1到n,其中H是一个经过修改的Givens变换矩阵,其值通过param(5)数组存储在param(2)中。参见对param论点的讨论。
单精度实数为cblas_srotm,双精度实数cblas_drotg
x | 包含元素个数为n的向量。 |
---|---|
y | 包含元素个数为n的向量。 |
cblas_srotmg (float *d1, float *d2, float *x1, const float y1, float *param);
cblas_drotmg (double *d1, double *d2, double *x1, const double y1, double *param);
给定输入向量的笛卡尔坐标(x1, y1),这些例程计算将得到的向量的y分量归零的修正Givens变换矩阵H的分量:
单精度实数为cblas_sromg,双精度实数cblas_drotmg,
d1 | 提供输入向量的x坐标的比例因子。 |
---|---|
d2 | 提供输入向量的y坐标的比例因子。 |
x1 | 提供输入向量的x坐标。 |
y1 | 提供输入向量的y坐标。 |
d1 | 提供更新矩阵的第一个对角元素 |
---|---|
d2 | 提供更新矩阵的第二对角元素。 |
x1 | 提供缩放前旋转矢量的x坐标。 |
param | 数组大小5。 param数组的元素是:param(1)包含一个开关,标志。param(2-5)包含h11, h21, h12, h22,H的分量设置如下: 在最后三种情况下,矩阵元素是1。1。,0。根据标志的值假设,且不需要在参数向量中设置。 |
cblas_sscal (const MKL_INT n, const float a, float *x, const MKL_INT incx);
cblas_dscal (const MKL_INT n, const double a, double *x, const MKL_INT incx);
cblas_cscal (const MKL_INT n, const void *a, void *x, const MKL_INT incx);
cblas_zscal (const MKL_INT n, const void *a, void *x, const MKL_INT incx);
cblas_csscal (const MKL_INT n, const float a, void *x, const MKL_INT incx);
cblas_zdscal (const MKL_INT n, const double a, void *x, const MKL_INT incx);
cblas_?scal函数执行定义为x = a*x的向量操作,其中:a是标量,x是n元素向量。
单精度实数为cblas_sscal和cblas_csscal,双精度实数cblas_dscal和cblas_zdscal,单精度复数为cblas_cscal,双精度复数cblas_ zscal
n | 整数。指定向量x中的元素数量。 |
---|---|
a | 指定标量a。 |
x | 数组,大小至少为(1 + (n -1)*abs(incx))。 |
incx | 整数。指定x元素的增量 |
x: 更新后的向量x
cblas_sswap (const MKL_INT n, float *x, const MKL_INT incx, float *y, const MKL_INT incy);
cblas_dswap (const MKL_INT n, double *x, const MKL_INT incx, double *y, const MKL_INT incy);
cblas_cswap (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT incy);
cblas_zswap (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT incy);
给定两个向量x和y, ?swap例程返回交换后的向量y和x,彼此替换
单精度实数为cblas_sswap,双精度实数cblas_dswap,单精度复数为cblas_cswap,双精度复数cblas_ zswap
n | 整数。指定向量x和y中的元素数量。 |
---|---|
x | 数组,大小至少为(1 + (n -1)*abs(incx))。 |
incx | 整数。指定x元素的增量 |
y | 数组,大小至少为(1 + (n -1)*abs(incy))。 |
incy | 整数。指定y元素的增量 |
x | 包含结果向量x,即输入向量y。 |
---|---|
y | 包含结果向量y,即输入向量x。 |
CBLAS_INDEX index = cblas_isamax (const MKL_INT n, const float *x, const MKL_INT incx);
CBLAS_INDEX index = cblas_idamax (const MKL_INT n, const double *x, const MKL_INT incx);
CBLAS_INDEX index = cblas_icamax (const MKL_INT n, const void *x, const MKL_INT incx);
CBLAS_INDEX index = cblas_izamax (const MKL_INT n, const void *x, const MKL_INT incx);
已知向量x, cblas_i?amax函数返回向量元素x(i)的位置,该元素对于实数是最大的绝对值,对于复数是最大的和|Re(x(i))|+|Im(x(i))|。
如果n不为正,则返回0。
如果发现有多个向量元素具有相同的最大绝对值,则返回第一个遇到的向量元素的索引。
单精度实数为cblas_isamax,双精度实数cblas_idamax,单精度复数为cblas_icamax,双精度复数cblas_izamax
n | 整数。指定向量x中的元素数量 |
---|---|
x | 数组,大小至少为(1 + (n -1)*abs(incx))。 |
incx | 整数。指定x元素的增量 |
index:整数。包含绝对值最大的向量元素的位置,使得x(index)的绝对值最大。
CBLAS_INDEX index = cblas_isamin (const MKL_INT n, const float *x, const MKL_INT incx);
CBLAS_INDEX index = cblas_idamin (const MKL_INT n, const double *x, const MKL_INT incx);
CBLAS_INDEX index = cblas_icamin (const MKL_INT n, const void *x, const MKL_INT incx);
CBLAS_INDEX index = cblas_izamin (const MKL_INT n, const void *x, const MKL_INT incx);
已知向量x, cblas_i?amin函数返回向量元素x(i)的位置,该元素对于实数是最小的绝对值,对于复数是最小的和|Re(x(i))|+|Im(x(i))|。
如果n不为正,则返回0。
如果发现有多个向量元素具有相同的最大绝对值,则返回第一个遇到的向量元素的索引。
单精度实数为cblas_isamin,双精度实数cblas_idamin,单精度复数为cblas_icamin,双精度复数cblas_izamin
n | 整数。指定向量x中的元素数量 |
---|---|
x | 数组,大小至少为(1 + (n -1)*abs(incx))。 |
incx | 整数。指定x元素的增量 |
index:整数。包含绝对值最小的向量元素的位置,使得x(index)的绝对值最小。
float res = cblas_scabs1 (const void *z);
double res = cblas_dcabs1 (const void *z);
这个函数执行定义为res=|Re(z)|+|Im(z)|的操作,其中z是标量,res是包含复数z的绝对值的值
单精度复标量为cblas_scabs1,双精度复标量cblas_dcabs1
z:复标量
res:包含一个复数z的绝对值