123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /**
- * @file tool_spmat.h
- * @brief 稀疏矩阵的函数原型。此模块是稀疏线性代数模块的一部分。
- * This is function prototypes for sparse matrix. This module serves as part of sparse linear algebra module.
- * @version 0.1
- * @date 2021-09-17
- *
- * @copyright Copyright (c) 2021
- *
- */
- #ifndef __TOOL_SPMAT_H__
- #define __TOOL_SPMAT_H__
- #include "csocp_config.h"
- /*
- * Creating and deleting methods
- */
- /** 创建新稀疏矩阵 Create a new sparse matrix */
- c_spmat *c_spmat_create(c_int nRow, /**< 行数 Number of rows */
- c_int nCol, /**< 列数 Number of columns */
- c_int nElem /**< 非零元素数量 Number of elements */
- );
- /** 从已有数据中生成稀疏矩阵 Generate a sparse matrix from existing arrays */
- c_spmat *c_spmat_generate(c_int nRow, /**< 行数 Number of rows */
- c_int nCol, /**< 列数 Number of columns */
- c_int nElem, /**< 非零元素数量 Number of elements */
- c_int *colBeg, /**< CSC矩阵的begin指针 Begin pointer of column-wise matrix */
- c_int *colIdx, /**< CSC矩阵的index指针 Index pointer of column-wise matrix */
- c_real *colElem /**< CSC矩阵的element指针 Element pointer of column-wise matrix */
- );
- /** 将数据加载到系数矩阵中 Load data to sparse matrix */
- void c_spmat_loaddata(c_spmat *dstMat, /**< 需要加载数据的稀疏矩阵 Matrix to load data */
- c_int *colBeg, /**< CSC矩阵的begin指针 Begin pointer of column-wise matrix */
- c_int *colIdx, /**< CSC矩阵的index指针 Index pointer of column-wise matrix */
- c_real *colElem /**< CSC矩阵的element指针 Element pointer of column-wise matrix */
- );
- /** 析构一个稀疏矩阵 Free a sparse matrix */
- void c_spmat_free(c_spmat **p_Mat);
- /*
- * Advanced operation methods
- */
- /** 寻找行/列中的最大值 Find maximal values for rows/columns of sparse matrix */
- void c_spmat_findmax(c_spmat *srcMat, /**< 输入:稀疏矩阵 Input sparse matrix */
- c_real *dstVal, /**< 输出:值 Output values */
- c_int ifCol /**< 行/列 Whether to compute for rows/columns */
- );
- /** 计算行/列的平方和 Calculate sum of squares for rows/columns of sparse matrix */
- void c_spmat_sumsquare(c_spmat *srcMat, /**< 输入:稀疏矩阵Input sparse matrix */
- c_real *dstVal, /**< 输出:值Output values */
- c_int ifCol /**< 行/列 Whether to compute for rows/columns */
- );
- /** 缩放行/列 Scale rows/columns of sparse matrix */
- void c_spmat_setscale(c_spmat *srcMat, /**< 输入:稀疏矩阵 Input sparse matrix */
- c_real *srcFactor, /**< 输入:缩放系数 Input scaling factors */
- c_int ifCol /**< 行/列 Whether to compute for rows/columns */
- );
- /** 矩阵转置 Transpose a sparse matrix and return transposed sparse matrix */
- c_spmat *c_spmat_transpose(c_spmat *srcMat /**< 输入:稀疏矩阵 Input sparse matrix */
- );
- /** 对称矩阵置换(仅保存上三角部分)Permutes a symmetric matrix with only the upper triangular part stored */
- void c_spmat_permute(c_spmat *srcMat, /**< 输入:对称稀疏矩阵 Input sparse matrix */
- c_int *srcInvP, /**< 输入:逆转置 Input inverse permutation */
- c_spmat *dstMat, /**< 输出:上三角矩阵 Output upper triangular sparse matrix */
- c_int *srcDstMap /**< Index map between input and output */
- );
- /** 稀疏矩阵-向量乘法 Sparse matrix-vector multiplication */
- void c_spmat_matvec(c_spmat *srcMat, /**< 输入:稀疏矩阵 Input sparse matrix */
- c_real *srcX, /**< 输入:稠密向量 Input dense vector */
- c_real *srcDstY, /**< 输入输出:稠密向量 Output + Input dense vector */
- c_int nSign, /**< 是否进行加/减 Whether to do summation or subtraction */
- c_int ifNewVec /**< 是否使用新向量Y存储结果 Whether to use vector Y for output only */
- );
- /** 稀疏矩阵转置-向量乘法 Sparse matrix-transpose-vector multiplication */
- void c_spmat_matvecm(c_spmat *srcMat, /**< 输入:稀疏矩阵 Input sparse matrix */
- c_real *srcX, /**< 输入:稠密向量 Input dense vector */
- c_real *srcDstY, /**< 输入输出:稠密向量 Output + Input dense vector */
- c_int ifNewVec, /**< 是否使用新向量Y存储结果 Whether to use vector Y for output only */
- c_int ifSkipDiag /**< 是否跳过对角元素 Whether to skip diagonal elements */
- );
- /*
- * Auxiliary methods
- */
- /** 存储稀疏矩阵 调试功能 Dump sparse matrix to file for debug purpose */
- void c_spmat_dump(c_spmat *srcMat, /**< 输入:稀疏矩阵 Input sparse matrix */
- char *matFile /**< 存储稀疏矩阵文件 Dumped matrix file */
- );
- /** 获取稀疏矩阵的内存需求量 Get memory requirment of sparse matrix */
- c_int c_spmat_getmem(c_int nCol, /**< 列数 Number of columns */
- c_int nElem /**< 非零元素数量 Number of elements */
- );
- #endif
|