Spec-Zone.ru › Eigen3

Eigen::SparseLU

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

Этот класс следует концепции разреженных решателей.

См. также
Концепция разреженных решателей
Модуль OrderingMethods
Inheritance graph
Скаляр absDeterminant ()
const SparseLUTransposeView< true, SparseLU< _MatrixType, _OrderingType > > adjoint ()
void analyzePattern (const MatrixType &matrix)
const PermutationType & colsPermutation () const
void compute (const MatrixType &matrix)
Скаляр determinant ()
void factorize (const MatrixType &matrix)
ComputationInfo info () const
Указывает, была ли предыдущая операция успешной. Подробнее...
void isSymmetric (bool sym)
std::string lastErrorMessage () const
Скаляр logAbsDeterminant () const
SparseLUMatrixLReturnType< SCMatrix > matrixL () const
SparseLUMatrixUReturnType< SCMatrix, MappedSparseMatrix< Scalar, ColMajor, StorageIndex > > matrixU () const
const PermutationType & rowsPermutation () const
void setPivotThreshold (const RealScalar &thresh)
Скаляр signDeterminant ()
template<typename Rhs >
const Solve< SparseLU, Rhs > solve (const MatrixBase< Rhs > &B) const
const SparseLUTransposeView< false, SparseLU< _MatrixType, _OrderingType > > transpose ()
- Публичные члены-функции, унаследованные от Eigen::SparseSolverBase< SparseLU< _MatrixType, _OrderingType > >
const Solve< SparseLU< _MatrixType, _OrderingType >, Rhs > solve (const MatrixBase< Rhs > &b) const
const Solve< SparseLU< _MatrixType, _OrderingType >, Rhs > solve (const SparseMatrixBase< Rhs > &b) const
SparseSolverBase ()

absDeterminant()

template<typename _MatrixType , typename _OrderingType >
Скаляр Eigen::SparseLU< _MatrixType, _OrderingType >::absDeterminant ( )
inline
Возвращает
абсолютное значение определителя матрицы, для которой *this является QR-разложением.
Предупреждение
определитель может быть очень большим или очень маленьким, поэтому для матриц достаточно большого размера существует риск переполнения/подпотока. Один из способов обойти это — использовать logAbsDeterminant() вместо этого.
См. также
logAbsDeterminant(), signDeterminant()

adjoint()

template<typename _MatrixType , typename _OrderingType >
const SparseLUTransposeView<true, SparseLU<_MatrixType,_OrderingType> > Eigen::SparseLU< _MatrixType, _OrderingType >::adjoint ( )
inline
Возвращает
выражение сопряжённой матрицы

Типичное использование — решение сопряжённой задачи A' x = b:

solver.compute(A);
x = solver.adjoint().solve(b);

Для вещественных типов скаляров эта функция эквивалентна transpose().

См. также
transpose(), solve()

analyzePattern()

template<typename MatrixType , typename OrderingType >
void Eigen::SparseLU< MatrixType, OrderingType >::analyzePattern ( const MatrixType & mat )

Вычисление перестановок столбцов для минимизации заполнения

  • Применение этой перестановки к входной матрице -
  • Вычисление дерева устранения столбцов для преобразованной матрицы
  • Обработка дерева устранения и перестановки столбцов в постфиксной записи

colsPermutation()

template<typename _MatrixType , typename _OrderingType >
const PermutationType& Eigen::SparseLU< _MatrixType, _OrderingType >::colsPermutation ( ) const
inline
Возвращает
ссылку на перестановку столбцов \( P_c^T \) такую, что \(P_r A P_c^T = L U\)
См. также
rowsPermutation()

compute()

template<typename _MatrixType , typename _OrderingType >
void Eigen::SparseLU< _MatrixType, _OrderingType >::compute ( const MatrixType & matrix )
inline

Вычисление символического и числового разложения входной разреженной матрицы. Входная матрица должна быть в строчно-главной форме хранения.

determinant()

template<typename _MatrixType , typename _OrderingType >
Scalar Eigen::SparseLU< _MatrixType, _OrderingType >::determinant ( )
inline
Возвращает
Детерминант матрицы.
См. также
absDeterminant(), logAbsDeterminant()

factorize()

template<typename MatrixType , typename OrderingType >
void Eigen::SparseLU< MatrixType, OrderingType >::factorize ( const MatrixType & matrix )
  • Числовое разложение
  • Перемежается с символическим разложением По завершении, info равно

    = 0: успешное разложение

0: если info = i, и i

<= A->ncol: U(i,i) точно равно нулю. Разложение завершено, но фактор U точно вырожден, и деление на ноль произойдёт, если оно будет использовано для решения системы уравнений.

> A->ncol: количество байтов, выделенных при ошибке выделения памяти, плюс A->ncol. Если lwork = -1, это оценённое количество необходимого места, плюс A->ncol.

info()

template<typename _MatrixType , typename _OrderingType >
ComputationInfo Eigen::SparseLU< _MatrixType, _OrderingType >::info ( ) const
inline

Сообщает, было ли предыдущее вычисление успешным.

Возвращает
Success если вычисление прошло успешно, NumericalIssue если разложение LU обнаружило проблему, например, нулевую диагональ, InvalidInput если входная матрица недопустима
См. также
iparm()

isSymmetric()

template<typename _MatrixType , typename _OrderingType >
void Eigen::SparseLU< _MatrixType, _OrderingType >::isSymmetric ( bool sym )
inline

Указывает, что структура входной матрицы симметрична

lastErrorMessage()

template<typename _MatrixType , typename _OrderingType >
std::string Eigen::SparseLU< _MatrixType, _OrderingType >::lastErrorMessage ( ) const
inline
Возвращает
строку, описывающую тип ошибки

logAbsDeterminant()

template<typename _MatrixType , typename _OrderingType >
Scalar Eigen::SparseLU< _MatrixType, _OrderingType >::logAbsDeterminant ( ) const
inline
Возвращает
натуральный логарифм абсолютного значения детерминанта матрицы, для которой **этот объект является разложением QR
Примечание
Этот метод полезен для работы с риском переполнения/потерь точности, присущим вычислению детерминанта.
См. также
absDeterminant(), signDeterminant()

matrixL()

template<typename _MatrixType , typename _OrderingType >
SparseLUMatrixLReturnType<SCMatrix> Eigen::SparseLU< _MatrixType, _OrderingType >::matrixL ( ) const
inline
Возвращает
выражение матрицы L, хранящейся внутри как суперузлы Единственная операция, доступная с этим выражением, — треугольное решение
y = b; matrixL().solveInPlace(y);

matrixU()

template<typename _MatrixType , typename _OrderingType >
SparseLUMatrixUReturnType<SCMatrix,MappedSparseMatrix<Scalar,ColMajor,StorageIndex> > Eigen::SparseLU< _MatrixType, _OrderingType >::matrixU ( ) const
inline
Возвращает
выражение матрицы U. Единственная операция, доступная с этим выражением, — треугольное решение
y = b; matrixU().solveInPlace(y);

rowsPermutation()

template<typename _MatrixType , typename _OrderingType >
const PermutationType& Eigen::SparseLU< _MatrixType, _OrderingType >::rowsPermutation ( ) const
inline
Возвращает
ссылку на перестановку строк \( P_r \) такую, что \(P_r A P_c^T = L U\)
См. также
colsPermutation()

setPivotThreshold()

template<typename _MatrixType , typename _OrderingType >
void Eigen::SparseLU< _MatrixType, _OrderingType >::setPivotThreshold ( const RealScalar & thresh )
inline

Устанавливает порог для диагонального элемента, чтобы он считался приемлемым опорным элементом.

signDeterminant()

template<typename _MatrixType , typename _OrderingType >
Scalar Eigen::SparseLU< _MatrixType, _OrderingType >::signDeterminant ( )
inline
Возвращает
число, представляющее знак детерминанта
См. также
absDeterminant(), logAbsDeterminant()

solve()

шаблон<typename _MatrixType , typename _OrderingType >
шаблон<typename Rhs >
const Решение<SparseLU, Rhs> Eigen::SparseLU< _MatrixType, _OrderingType >::solve ( const МатрицаБазовая< Rhs > & B ) const
inline
Возвращает
решение X уравнения \( A X = B \) используя текущее разложение A.
Предупреждение
целевая матрица X в X = this->solve(B) должна быть в формате столбцов.
См. также
compute()

transpose()

шаблон<typename _MatrixType , typename _OrderingType >
const SparseLUTransposeView<false,SparseLU<_MatrixType,_OrderingType> > Eigen::SparseLU< _MatrixType, _OrderingType >::transpose ( )
inline
Возвращает
выражение транспонированной факторизованной матрицы.

Типичное использование — решение транспонированной задачи A^T x = b:

solver.compute(A);
x = solver.transpose().solve(b);
См. также
adjoint(), solve()

Документация для этого класса была сгенерирована из следующего файла:
  • SparseLU.h

© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1SparseLU.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API