EN
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

kml_sparse_?csrgemv

矩阵与向量计算,稀疏矩阵采用CSR格式存储,具体执行操作如下:

y = A * x或y = AT * x或y = AH * x,

其中,x和y为向量,A是的稀疏矩阵,采用CSR格式3数组存储。仅支持矩阵indx从1开始的矩阵。

接口定义

C interface:

kml_sparse_status_t kml_sparse_scsrgemv(const kml_sparse_operation_t opt, const KML_INT m, const float *a, const KML_INT *ia, const KML_INT *ja, const float *x, float *y);

kml_sparse_status_t kml_sparse_dcsrgemv(const kml_sparse_operation_t opt, const KML_INT m, const double *a, const KML_INT *ia, const KML_INT *ja, const double *x, double *y);

kml_sparse_status_t kml_sparse_ccsrgemv(const kml_sparse_operation_t opt, const KML_INT m, const KML_Complex8 *a, const KML_INT *ia, const KML_INT *ja, const KML_Complex8 *x, KML_Complex8 *y);

kml_sparse_status_t kml_sparse_zcsrgemv(const kml_sparse_operation_t opt, const KML_INT m, const KML_Complex16 *a ,const KML_INT *ia, const KML_INT *ja, const KML_Complex16 *x, KML_Complex16 *y);

Fortran interface:

RES = KML_SPARSE_SCSRGEMV(OPT, M, A, IA, JA, X, Y);

RES = KML_SPARSE_DCSRGEMV(OPT, M, A, IA, JA, X, Y);

RES = KML_SPARSE_CCSRGEMV(OPT, M, A, IA, JA, X, Y);

RES = KML_SPARSE_ZCSRGEMV(OPT, M, A, IA, JA, X, Y);

参数

参数名

类型

描述

输入/输出

opt

枚举类型kml_sparse_operation_t

表示矩阵A的操作,

  • 如果opt=KML_SPARSE_OPERATION_NON_TRANSPOSE,则
  • 如果opt=KML_SPARSE_OPERATION_TRANSPOSE,则
  • 如果opt=KML_SPARSE_OPERATION_CONJUGATE_TRANSPOSE,则

输入

m

整型数

表示A矩阵的行数和列数,取值范围为[1, MAX_KML_INT]。

输入

a

  • 在scsrgemv中,a是单精度浮点数组。
  • 在dcsrgemv中,a是双精度浮点数组。
  • 在ccsrgemv中,a是单精度复数数组。
  • 在zcsrgemv中,a是双精度复数数组。

A矩阵中的values数组,存储非零元素。

输入

ia

整型数组

长度为m+1的向量。

ia[i]-1表示A矩阵第i行第一个非零元素在val数组中的索引。

输入

ja

整型数组

ja[i]表示val数组中第i个元素在矩阵A中的列序号。

输入

x

  • 在scsrgemv中,x是单精度浮点数组。
  • 在dcsrgemv中,x是双精度浮点数组。
  • 在ccsrgemv中,x是单精度复数数组。
  • 在zcsrgemv中,x是双精度复数数组。

向量x的数组。

输入

y

  • 在scsrgemv中,y是单精度浮点数组。
  • 在dcsrgemv中,y是双精度浮点数组。
  • 在ccsrgemv中,y是单精度复数数组。
  • 在zcsrgemv中,y是双精度复数数组。

向量y的数组,更新后输出。

输入/输出

函数内部不对参数做完整校验,接口调用者需保证ia和ja内部元素不超出矩阵最大索引值。

返回值

函数执行状态,枚举类型kml_sparse_status_t。

依赖

C: "kspblas.h"

Fortran: "kspblas.f03"

示例

C interface:

    kml_sparse_operation_t opt = KML_SPARSE_OPERATION_NON_TRANSPOSE; 
    KML_INT m = 4; 
    float a[9] = {2, -3, 7, 1, -6, 8, -4, 5, 9}; 
    KML_INT ja[9] = {1, 2, 4, 3, 4, 1, 3, 4, 1}; 
    KML_INT ia[5] = {1, 4, 6, 9, 10}; 
    float x[4] = {1, 3, -2, 5}; 
    float y[4] = {-1, 1, 5, 3}; 
    kml_sparse_status_t status = kml_sparse_scsrgemv(opt, m, a, ia, ja, x, y); 
 
    /* 
     *  Output Y: 
     *     28.000000   -32.000000    41.000000     9.000000 
     * 
     */

Fortran interface:

    INTEGER(C_INT) :: OPT = KML_SPARSE_OPERATION_NON_TRANSPOSE 
    INTEGER(C_INT) :: M = 4 
    REAL(C_FLOAT) :: A(9), X(4), Y(4) 
    INTEGER(C_INT) :: JA(9), IA(5) 
    INTEGER(C_INT) :: STATUS 
    DATA A/2, -3, 7, 1, -6, 8, -4, 5, 9/ 
    DATA JA/1, 2, 4, 3, 4, 1, 3, 4, 1/   
    DATA IA/1, 4, 6, 9, 10/ 
    DATA X/1, 3, -2, 5/ 
    DATA Y/-1, 1, 5, 3/ 
    STATUS = KML_SPARSE_SCSRGEMV(OPT, M, A, IA, JA, X, Y) 
    ! 
    !  OUTPUT Y: 
    !     28.000000   -32.000000    41.000000     9.000000 
    !     
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词