我是C语言的初学者和学生。我需要优化文件中使用的cholesky因式分解。
https://github.com/RainerKuemmerle/g2o/blob/master/g2o/solvers/csparse/csparse_helper.cpp
对于ARM,使用矢量化并使用Ne10库。
但是我在理解函数cs_chol_workspace的逻辑上有困难。该函数返回一个指针变量N,该变量在函数中完全没有改变。即使我知道变量L代表分解后的矩阵,什么是Lx,Li和Lp?逻辑远比我的理解水平复杂得多。
在过去的几天里,我一直在尝试理解代码。任何帮助都将是非常感激的,因为我正在接近我的最后期限,但仍然没有运气。
发布于 2014-08-15 21:56:20
该函数返回一个指针变量N,该变量在函数中完全没有改变。
不是这样的。存储器被分配给csn,并且其地址在第96行被分配给N。
即使我知道变量L代表分解后的矩阵,什么是Lx,Li
Lp?
理解这一点的重要部分是我们如何存储矩阵。存储矩阵的标准方法是分配足够的内存来存储所有m * n条目,并以L_non_sparse[i][p]的形式访问它们。在这种情况下,数据结构被设计为保存稀疏矩阵:即大多数条目为0。因此,我们只需要跟踪非零条目的位置。在第107行,Lx、Li和Lp被定义为L的x、i和p组件。因此,我们通过L_non_sparse[ Li[j] ][ Lp[j] ] = Lx[j]访问L_non_sparse的非零条目。
这是基于cs.h中的定义的
https://stackoverflow.com/questions/25325028
复制相似问题