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

kml_sparse_?cscsm

求解三角矩阵方程组计算,其中一个稀疏矩阵采用CSC格式存储,具体执行操作如下:

  • A * y = alpha * x
  • AT * y = alpha * x
  • AH * y = alpha * x

其中,x和y为m*n的稠密矩阵,A是采用CSC格式存储的m*m的稀疏矩阵。矩阵A中的给定列的非零元素的存储顺序必须与列中显示的顺序相同(从上到下)。

layout与sparse matrix indexing的关系如表1所示。

表1 layout与sparse matrix indexing关系

Sparse matrix indexing

Dense matrix layout

KML_SPARSE_INDEX_BASE_ZERO

KML_SPARSE_LAYOUT_ROW_MAJOR

KML_SPARSE_INDEX_BASE_ONE

KML_SPARSE_LAYOUT_COLUMN_MAJOR

接口定义

C interface:

kml_sparse_status_t kml_sparse_scscsm(const kml_sparse_operation_t opt, const KML_INT m, const KML_INT n, const float alpha, const char *matdescra, const float *val, const KML_INT *indx, const KML_INT *pntrb, const KML_INT *pntre, const float *x, const KML_INT ldx, float *y , const KML_INT ldy);

kml_sparse_status_t kml_sparse_dcscsm(const kml_sparse_operation_t opt, const KML_INT m, const KML_INT n, const double alpha, const char *matdescra, const double *val, const KML_INT *indx, const KML_INT *pntrb, const KML_INT *pntre,const double *x, const KML_INT ldx, double *y , const KML_INT ldy);

kml_sparse_status_t kml_sparse_ccscsm(const kml_sparse_operation_t opt, const KML_INT m, const KML_INT n, const KML_Complex8 alpha, const char *matdescra, const KML_Complex8 *val, const KML_INT *indx, const KML_INT *pntrb, const KML_INT *pntre, const KML_Complex8 *x, const KML_INT ldx, KML_Complex8 *y, const KML_INT ldy);

kml_sparse_status_t kml_sparse_zcscsm(const kml_sparse_operation_t opt, const KML_INT m, const KML_INT n, const KML_Complex16 alpha, const char *matdescra, const KML_Complex16 *val, const KML_INT *indx, const KML_INT *pntrb, const KML_INT *pntre, const KML_Complex16 *x, const KML_INT ldx, KML_Complex16 *y , const KML_INT ldy);

参数

参数名

类型

描述

输入/输出

opt

枚举类型kml_sparse_operation_t

表示是否转置:

  • KML_SPARSE_OPERATION_NON_TRANSPOSE,A * y = alpha * x。
  • KML_SPARSE_OPERATION_TRANSPOSE,AT * y = alpha * x 。
  • KML_SPARSE_OPERATION_CONJUGATE_TRANSPOSE,AH * y = alpha * x。

输入

m

整型数

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

输入

n

整型数

矩阵x的列数,取值范围为[1, MAX_KML_INT]。

输入

alpha

  • 在scscsm中,alpha是单精度浮点类型。
  • 在dcscsm中,alpha是双精度浮点类型。
  • 在ccscsm中,alpha是单精度复数。
  • 在zcscsm中,alpha是双精度复数。

标量alpha。

输入

matdescra

char指针

矩阵的操作属性,具体参考matdescra说明。

输入

val

  • 在scscsm中,val是单精度浮点数组。
  • 在dcscsm中,val是双精度浮点数组。
  • 在ccscsm中,val是单精度复数数组。
  • 在zcscsm中,val是双精度复数数组。

CSC格式中values数组,存储矩阵A的非零元素,长度为pntre[m-1] - pntrb[0]。

输入

indx

整型数组

CSC格式中columns数组,用于表示矩阵A中非零元素所在的行索引。

输入

pntrb

整型数组

长度为m的数组,包含矩阵A的列索引,pntrb[i] - pntrb[0]表示第i列第一个非零元素在val和indx数组内的下标。

输入

pntre

整型数组

长度为m的数组,包含矩阵A的列索引,pntre[i] - pntrb[0]-1表示第i列最后一个非零元素在val和indx数组内的下标。

输入

x

  • 在scscsm中,x是单精度浮点数组。
  • 在dcscsm中,x是双精度浮点数组。
  • 在ccscsm中,x是单精度复数数组。
  • 在zcscsm中,x是双精度复数数组。

矩阵x的value数组。

输入

ldx

整型数组

  • 矩阵indx从1开始时,矩阵x的主维度大小。
  • 矩阵indx从0开始时,矩阵x的第二维度大小。

输入

y

  • 在scscsm中,y是单精度浮点数组。
  • 在dcscsm中,y是双精度浮点数组。
  • 在ccscsm中,y是单精度复数数组。
  • 在zcscsm中,y是双精度复数数组。

矩阵y的value数组。

输入/输出

ldy

整型数组

  • 矩阵indx从1开始时,矩阵y的主维度大小。
  • 矩阵indx从0开始时,矩阵y的第二维度大小。

输入

x矩阵参数约束如表2所示。

表2 x矩阵参数约束

opt

x矩阵规模

x矩阵数据排布

参数范围

op(A) = A或AT或AH

m * n

行主序

m * ldbMAX_KML_INT

op(A) = A或AT或AH

m * n

列主序

ldb * nMAX_KML_INT

y矩阵参数约束如表3所示。

表3 y矩阵参数约束

opt

y矩阵规模

y矩阵数据排布

参数范围

op(A) = A或AT或AH

m * n

行主序

m * ldcMAX_KML_INT

op(A) = A或AT或AH

m * n

列主序

ldc * nMAX_KML_INT

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

返回值

函数执行状态,枚举类型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; 
    KML_INT n = 2; 
    float alpha = 1.0; 
    char *matdescra = "TLNC"; //三角矩阵,基0索引 
    float val[9] = {2, 3, 1, 5, 7, 8, 3, 6, 7}; 
    KML_INT indx[9] = {0, 1, 2, 1, 1, 2, 3, 0, 3}; 
    KML_INT pntrb[4] = {0, 3, 4, 7}; 
    KML_INT pntre[4] = {3, 4, 7, 9}; 
    float x[8] = {6, 7, 6, -3, 4, 6, 6, 8}; 
    float y[8] = {0, 0, 0, 0, 0, 0, 0, 0}; 
    KML_INT ldx = 2; 
    KML_INT ldy = 2; 
    kml_sparse_status_t status = kml_sparse_scscsm(opt, m, n, alpha, matdescra, val, indx, pntrb, pntre, x, ldx, y, ldy); 
    /* 
     *  Output Y: 
     *      3.000000  3.500000   
-0.600000  -2.700000   
0.125000  0.312500   
0.803571  1.008929 
     * 
     * */ 
搜索结果
找到“0”个结果

当前产品无相关内容

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