G2o c++库逻辑理解困难
g2o c++ library difficulty in understanding the logic
我是c语言的学生和初学者。我需要优化
文件中使用的随机分解。https://github.com/RainerKuemmerle/g2o/blob/master/g2o/solvers/csparse/csparse_helper.cpp为ARM使用向量化和使用Ne10库。
但是我很难理解函数cs_chol_workspace的逻辑。函数返回一个指针变量N,它在函数内部没有任何改变。即使我知道变量L代表分解矩阵,那么Lx Li和Lp是什么呢?逻辑远比我的理解水平复杂得多。
在过去的几天里,我一直在努力理解代码。任何帮助将是非常值得赞赏的,因为我接近我的最后期限,仍然没有运气。
函数返回一个指针变量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