g2o c ++库难以理解逻辑

时间:2014-08-15 10:38:20

标签: c++ c arm

我是C学生和初学者。我需要优化文件中使用的胆甾醇分解

https://github.com/RainerKuemmerle/g2o/blob/master/g2o/solvers/csparse/csparse_helper.cpp

用于使用矢量化和使用Ne10库的ARM。

但是我很难理解函数cs_chol_workspace的逻辑。该函数返回一个指针变量N,该变量在函数中根本没有改变。即使我理解变量L代表分解矩阵,Lx,Li和Lp是什么?逻辑远比我的理解水平复杂得多。

过去几天我一直在努力理解代码。当我接近我的截止日期并仍然没有运气时,任何帮助都会非常明显。

1 个答案:

答案 0 :(得分:0)

  

该函数返回一个指针变量N,该变量在函数中根本没有改变。

不正确。内存分配给csn,其地址在第96行分配给N

  

即使我明白变量L代表分解矩阵,Lx,Li和Lp是什么?

理解这一点的重要部分是我们如何存储矩阵。存储矩阵的标准方法是分配足够的内存来存储所有m * n条目,并将其作为L_non_sparse[i][p]访问。在这种情况下,数据结构被设计为保存稀疏矩阵:即大多数条目为0.因此,我们只需要跟踪非零条目的位置。在第107行,LxLiLp被定义为x的{​​{1}},ip组件}。因此,我们通过L访问L_non_sparse的非零条目。

这是基于cs.h

中的定义