BLAS 1级例程(向量-向量操作)

BLAS 1级例程(向量-向量操作)

  1. cblas_?asum(计算向量元素的大小之和)

    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))。

  2. cblas_?axpy(计算向量-标量乘积并将结果添加到一个向量)

    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

  3. cblas_?copy(将一个向量复制到另一个向量)

    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的一个副本。否则,参数不变。

  4. cblas_?dot(计算向量与向量的点乘)

    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。

  5. cblas_?sdot(以双精度计算向量与向量的点乘)

    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。

  6. cblas_?dotc(计算共轭向量与另一个向量的点乘)

    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。

  7. cblas_?dotu(计算向量与向量的点乘)

    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);
    

    描述:

    cblas_?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。

  8. cblas_?nrm2(计算向量的欧氏范数)

    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的欧氏范数。

  9. cblas_?rot(执行平面内点的旋转)

    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

  10. cblas_?rotg(计算给定旋转的参数)

    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。
  11. cblas_?rotm(对平面上的点执行修正的Givens旋转)

    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);
    

    描述:

    给定两个向量x和y,将这两个向量的每个向量元素替换为:
    在这里插入图片描述

    对于i=1到n,其中H是一个经过修改的Givens变换矩阵,其值通过param(5)数组存储在param(2)中。参见对param论点的讨论。

    单精度实数为cblas_srotm,双精度实数cblas_drotg

    输入参数

    n 整数。指定向量x和y中的元素数量。
    x 数组,大小至少为(1 + (n -1)*abs(incx))。
    incx 整数。指定x元素的增量。
    y 数组,大小至少为(1 + (n -1)*abs(incy))。
    incy 整数。指定y元素的增量。
    param 数组大小5。 param数组的元素是: param(1)包含一个开关,标志。param(2-5)包含h11, h21, h12, h22,分别是数组H的分量。 根据flag的值,H的分量设置如下:在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在最后三种情况下,矩阵元素是1。1。,0。根据标志的值假设,且不需要在参数向量中设置。

    输出参数

    x 包含元素个数为n的向量。
    y 包含元素个数为n的向量。
  12. cblas_?rotmg(为一个修改的Givens旋转计算参数)

    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。根据标志的值假设,且不需要在参数向量中设置。
  13. cblas_?scal(计算向量与标量的乘积)

    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

  14. cblas_?swap(交换一个向量和另一个向量)

    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。
  15. cblas_i?amax(查找绝对值最大的元素的索引)

    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)的绝对值最大。

  16. cblas_i?amin(查找绝对值最小的元素的索引)

    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)的绝对值最小。

  17. cblas_?cabs1(计算复数的绝对值)

    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的绝对值

你可能感兴趣的:(MKL数学库)