template<typename _Scalar, int _BlockAtCompileTime, int _Options, typename _StorageIndex> class Eigen::BlockSparseMatrix< _Scalar, _BlockAtCompileTime, _Options, _StorageIndex >
Многофункциональное разреженное представление матрицы, где каждый элемент — это блок.
Этот класс предоставляет функции для работы с блочно-разреженными матрицами, хранящимися в представлении, подобном BSR. Существуют два основных типа:
Все блоки имеют одинаковое количество строк и столбцов, называемое размером блока в дальнейшем. В этом случае, если этот размер блока известен на этапе компиляции, он может быть задан как параметр шаблона, как
Здесь bmat — это блочно-разреженная матрица b_rows x b_cols, где каждый коэффициент — это плотная матрица 3x3. Если размер блока фиксирован, но будет задан во время выполнения,
Второй случай — для блочно-разреженных матриц с переменным размером блоков. Здесь каждый блок имеет свои собственные размеры. Единственное ограничение заключается в том, что все блоки в строке (соответственно, в столбце) должны иметь одинаковое количество строк (соответственно, столбцов). Таким образом, в этом случае необходимо описать структуру матрицы, вызвав setBlockLayout(rowBlocks, colBlocks).
В любом из предыдущих случаев матрицу можно заполнить, вызвав setFromTriplets(). Обычную разреженную матрицу можно преобразовать в блочно-разреженную и наоборот. Очевидно, необходимо предварительно описать структуру блоков, вызвав либо setBlockSize() для блоков фиксированного размера, либо setBlockLayout для блоков переменного размера.
Параметры шаблона
_Scalar
Тип скаляра
_BlockAtCompileTime
Параметр структуры блоков. Он принимает следующие значения Dynamic : размер блока известен во время выполнения число : фиксированный размер блока известен на этапе компиляции
Присваивание из разреженной матрицы с тем же порядком хранения.
Преобразование из разреженной матрицы в блочно-разреженную матрицу.
Предупреждение
Перед вызовом этой функции необходимо вызвать либо setBlockLayout() (матрицы с блоками переменной длины) или setBlockSize() (для блоков фиксированного размера).
outerToBlock()
template<typename _Scalar , int _BlockAtCompileTime, int _Options, typename _StorageIndex >
Выделить внутренний массив указателей на блоки и их внутренние индексы.
Примечание
Для блоков фиксированного размера вызовите setBlockSize(), чтобы установить блок. И для блоков переменного размера вызовите setBlockLayout() перед использованием этой функции
Параметры
nonzerosblocks
Количество ненулевых блоков. Общее количество ненулевых элементов вычисляется в setBlockLayout() для блоков переменного размера
Учитывая разреженную матрицу, описывающую шаблон ненулевых блоков, эта функция подготавливает внутренние указатели для значений. После вызова этой функции любой ненулевой блок (bi, bj) можно установить с помощью простого вызова coeffRef(bi,bj).
Предупреждение
Перед вызовом этой функции необходимо вызвать либо setBlockLayout() (матрицы с блоками переменного размера) или setBlockSize() (для блоков фиксированного размера).
Параметры
blockPattern
Разреженная матрица булевых элементов, описывающих структуру блока