template<typename _MatrixType, typename _OrderingType> class Eigen::SparseLU< _MatrixType, _OrderingType >
LU-разложение сверхузловых блоков для общих матриц.
Этот класс реализует сверхузловое LU-разложение для общих матриц. Он использует основные методы из последовательной библиотеки SuperLU (http://crd-legacy.lbl.gov/~xiaoye/SuperLU/). Он прозрачно обрабатывает вещественные и комплексные числа с одинарной и двойной точностью, в зависимости от типа скаляра входной матрицы. Код оптимизирован для выполнения операций BLAS-3 во время обновлений блоков сверхузлов. Он напрямую использует высокопроизводительные встроенные функции BLAS библиотеки Eigen. Кроме того, если размер сверхузла очень мал, вызовы BLAS избегаются для лучшей оптимизации компилятором. Для лучшей производительности следует компилировать с флагом NDEBUG, чтобы избежать многочисленных проверок границ векторов.
Важным параметром этого класса является метод упорядочивания. Он используется для переупорядочивания столбцов (и, возможно, строк) матрицы, чтобы уменьшить количество новых элементов, созданных во время численного разложения. Самый дешёвый доступный метод — COLAMD. Список встроенных и внешних методов упорядочивания см. в модуле OrderingMethods.
Простой пример с ключевыми этапами
VectorXd x(n), b(n);
SparseMatrix<double> A;
SparseLU<SparseMatrix<double>, COLAMDOrdering<int> > solver;
// fill A and b;// Compute the ordering permutation vector from the structural pattern of A
solver.analyzePattern(A);
// Compute the numerical factorization
solver.factorize(A);
//Use the factors to solve the linear system
x = solver.solve(b);
Предупреждение
Входная матрица A должна быть представлена в сжатом и столбцевом формате. В противном случае будет выполнена дорогая операция копирования. Вы можете вызвать недорогую функцию makeCompressed(), чтобы получить сжатую матрицу.
Примечание
В отличие от исходной реализации SuperLU, нет шага по выравниванию матрицы. Для матриц с плохой шкалой этот шаг может быть полезен для уменьшения пивотрования во время разложения. Если это относится к вашим матрицам, вы можете попробовать базовый метод масштабирования в "unsupported/Eigen/src/IterativeSolvers/Scaling.h"
Шаблонные параметры
_MatrixType
Тип разреженной матрицы. Он должен быть столбцевой SparseMatrix<>
_OrderingType
Метод упорядочивания, используемый, либо AMD, COLAMD, или METIS. По умолчанию — COLMAD
абсолютное значение определителя матрицы, для которой *this является QR-разложением.
Предупреждение
определитель может быть очень большим или очень маленьким, поэтому для матриц достаточно большого размера существует риск переполнения/подпотока. Один из способов обойти это — использовать logAbsDeterminant() вместо этого.
Перемежается с символическим разложением По завершении, info равно
= 0: успешное разложение
0: если info = i, и i
<= A->ncol: U(i,i) точно равно нулю. Разложение завершено, но фактор U точно вырожден, и деление на ноль произойдёт, если оно будет использовано для решения системы уравнений.
> A->ncol: количество байтов, выделенных при ошибке выделения памяти, плюс A->ncol. Если lwork = -1, это оценённое количество необходимого места, плюс A->ncol.
Success если вычисление прошло успешно, NumericalIssue если разложение LU обнаружило проблему, например, нулевую диагональ, InvalidInput если входная матрица недопустима