---
title: kml_sparse_?cscsv
description: "求解三角矩阵方程组计算，稀疏矩阵采用CSC格式存储，具体执行操作如下："
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/accel/kunpengaccel_kml_16_0225.html
sourcePath: /source/zh/kunpengboostkithistory/2200/accel/kunpengaccel_kml_16_0225.html
indexId: 065ed7cb34c2c4fad996d34afb4c83710d01aa4e13290a800168a94b8aadec8b74
---
# kml_sparse_?cscsv

求解三角矩阵方程组计算，稀疏矩阵采用CSC格式存储，具体执行操作如下：

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

其中，x和y为向量，A是m * m的稀疏矩阵，采用CSC格式存储。矩阵A中的给定列的非零元素的存储顺序必须与列中显示的顺序相同（从上到下）。

#### 接口定义

C interface：

kml_sparse_status_t kml_sparse_scscsv(const kml_sparse_operation_t opt, const KML_INT m, 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 float beta, float *y);

kml_sparse_status_t kml_sparse_dcscsv(const kml_sparse_operation_t opt, const KML_INT m, 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 double beta, double *y);

kml_sparse_status_t kml_sparse_ccscsv(const kml_sparse_operation_t opt, const KML_INT m, 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_Complex8 beta, KML_Complex8 *y);

kml_sparse_status_t kml_sparse_zcscsv(const kml_sparse_operation_t opt, const KML_INT m, 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_Complex16 beta, KML_Complex16 *y);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| opt | 枚举类型kml\_sparse\_operation\_t | 表示矩阵A的操作。 如果opt=KML\_SPARSE\_OPERATION\_NON\_TRANSPOSE，则A \* y = alpha \* x。 如果opt=KML\_SPARSE\_OPERATION\_TRANSPOSE，则AT \* y = alpha \* x 。 如果opt=KML\_SPARSE\_OPERATION\_CONJUGATE\_TRANSPOSE，则AH \* y = alpha \* x。 | 输入 |
| m | 整型数 | 表示A矩阵的行数，取值范围为[1, MAX\_KML\_INT]。 | 输入 |
| alpha | 在scscsv中，alpha是单精度浮点类型。 在dcscsv中，alpha是双精度浮点类型。 在ccscsv中，alpha是单精度复数。 在zcscsv中，alpha是双精度复数。 | 表示系数。 | 输入 |
| matdescra | char指针 | 矩阵的操作属性，具体参考matdescra说明。 | 输入 |
| val | 在scscsv中，val是单精度浮点数组。 在dcscsv中，val是双精度浮点数组。 在ccscsv中，val是单精度复数数组。 在zcscsv中，val是双精度复数数组。 | A矩阵中的非零元素。 | 输入 |
| indx | 整型数组 | indx[i]表示val数组中第i个元素在矩阵A中的行序号。 | 输入 |
| pntrb | 整型数组 | 长度为m的数组，包含矩阵A的列索引，pntrb[i] \- pntrb[0]表示第i列第一个非零元素在val和indx数组内的下标。 | 输入 |
| pntre | 整型数组 | 长度为m的数组，包含矩阵A的列索引，pntre[i] \- pntrb[0]\-1表示第i列最后一个非零元素在val和indx数组内的下标。 | 输入 |
| x | 在scscsv中，x是单精度浮点数组。 在dcscsv中，x是双精度浮点数组。 在ccscsv中，x是单精度复数数组。 在zcscsv中，x是双精度复数数组。 | 向量x。 | 输入 |
| y | 在scscsv中，y是单精度浮点数组。 在dcscsv中，y是双精度浮点数组。 在ccscsv中，y是单精度复数数组。 在zcscsv中，y是双精度复数数组。 | 向量y， 更新后输出。 | 输入/输出 |


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


#### 返回值

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


#### 依赖

C: "kspblas.h"

Fortran: "kspblas.f03"


#### 示例

C interface：

```
kml_sparse_operation_t opt = KML_SPARSE_OPERATION_NON_TRANSPOSE;
char *matdescra = "TLNC";
KML_INT m = 4;
float alpha = 1.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[4] = {6, 6, 4, 6};
float y[4] = {1, 1, 6, 1};
kml_sparse_status_t status =
kml_sparse_scscsv
(opt, m, alpha, matdescra, val, indx, pntrb, pntre, x, y);
/*
*  Output Y:
*     3.000000 -0.600000 0.125000 0.803571
*
* */
```
