библиотека g2o c ++ сложность в понимании логики

0

Я студент и новичок в 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? Логика намного сложнее, чем мой уровень понимания.

Я пытался понять код за последние несколько дней. Любая помощь будет чрезвычайно заметной, поскольку я приближаюсь к своему крайнему сроку и до сих пор не повезло.

Теги:
arm

1 ответ

0

Функция возвращает указательную переменную N, которая не изменяется вообще внутри функции.

Не правда. Память выделяется для csn, а ее адрес назначен N в строке 96.

Также, хотя я понимаю, что переменная L представляет собой факторизованную матрицу, что такое Lx, Li и Lp?

Важная часть, чтобы понять это, как мы храним матрицу. Стандартный способ хранения матрицы - выделить достаточное количество памяти для хранения всех записей m * n и получить к ним доступ как L_non_sparse[i][p]. В этом случае структура данных предназначена для хранения разреженных матриц: то есть большая часть записей равна 0. Поэтому нам нужно только отслеживать, где находятся ненулевые записи. В строке 107 Lx, Li и Lp определены как x, i и p компоненты L Поэтому мы обращаемся к ненулевым элементам L_non_sparse по L_non_sparse[ Li[j] ][ Lp[j] ] = Lx[j].

Это основано на определениях в cs.h

  • 0
    Спасибо за ответ. Можете ли вы объяснить, что это значит под xi и p частью матрицы немного больше. Если я правильно понял, i и p - две координаты двумерной матрицы. Содержит ли (Li (j), Lp (j)) координаты значения Lx (j) в матрице?
  • 0
    Так я прочитал определение csn в заголовочном файле.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню