Spec-Zone.ru › Eigen3

Eigen::SparseQR

template<typename _MatrixType, typename _OrderingType>
class Eigen::SparseQR< _MatrixType, _OrderingType >

Левостороннее QR-разложение разреженных матриц с численным выбором столбцов.

Этот класс реализует левостороннее QR-разложение разреженных матриц с численным выбором столбцов. Если норма столбца меньше заданного порога, он неявно перемещается в конец. Полученное QR-разложение задаётся равенством A*P = Q*R, где R — верхняя треугольная или трапецеидальная матрица.

P — перестановка столбцов, которая является произведением перестановки, уменьшающей заполнение, и числовой перестановки. Воспользуйтесь colsPermutation() для её получения.

Q — ортогональная матрица, представленная как произведение отражателей Хаусхолдера. Используйте matrixQ() для получения выражения и matrixQ().adjoint() для получения сопряжённой матрицы. Затем вы можете применить её к вектору.

R — разреженная треугольная или трапецеидальная матрица. Последнее имеет место, когда ранг A меньше размера. matrixR().topLeftCorner(rank(), rank()) всегда возвращает треугольный множитель полного ранга.

Шаблонные параметры
_MatrixType Тип разреженной матрицы A, должен быть SparseMatrix<> со столбцами, хранящимися в порядке следования.
_OrderingType Метод заполнения. Смотрите модуль OrderingMethods для списка встроенных и внешних методов упорядочивания.

Этот класс соответствует концепции разрешенного решателя.

Стратегия численного выбора столбцов и порог по умолчанию совпадают со стратегией SuiteSparse QR, подробно описанной в следующей статье: Tim Davis, "Algorithm 915, SuiteSparseQR: Multifrontal Multithreaded Rank-Revealing Sparse QR Factorization, ACM Trans. on Math. Soft. 38(1), 2011. Несмотря на то, что стратегия квалифицируется как "раскрывающая ранг", она может потерпеть неудачу для некоторых проблем с недостаточным рангом. При использовании этого класса для решения линейных или задач наименьших квадратов настоятельно рекомендуется проверить точность вычисленного решения. Если произошла неудача, обычно помогает увеличить порог с помощью setPivotThreshold.

Предупреждение
Входная разреженная матрица A должна быть в сжатом формате (см. SparseMatrix::makeCompressed()).
Для комплексных матриц matrixQ().transpose() фактически вернёт сопряжённую матрицу.
Inheritance graph
void analyzePattern (const MatrixType &mat)
Предварительный этап QR-разложения. Подробнее...
Index cols () const
const PermutationType & colsPermutation () const
void compute (const MatrixType &mat)
void factorize (const MatrixType &mat)
Выполняет численное QR-разложение входной матрицы. Подробнее...
ComputationInfo info () const
Сообщает, был ли успешен предыдущий расчёт. Подробнее...
std::string lastErrorMessage () const
SparseQRMatrixQReturnType< SparseQR > matrixQ () const
const QRMatrixType & matrixR () const
Index rank () const
Index rows () const
void setPivotThreshold (const RealScalar &threshold)
template<typename Rhs >
const Solve< SparseQR, Rhs > solve (const MatrixBase< Rhs > &B) const
SparseQR (const MatrixType &mat)
- Публичные члены-функции, унаследованные от Eigen::SparseSolverBase< SparseQR< _MatrixType, _OrderingType > >
const Solve< SparseQR, Rhs > solve (const MatrixBase< Rhs > &b) const
const Solve< SparseQR< _MatrixType, _OrderingType >, Rhs > solve (const SparseMatrixBase< Rhs > &b) const
SparseSolverBase ()

SparseQR()

template<typename _MatrixType , typename _OrderingType >
Eigen::SparseQR< _MatrixType, _OrderingType >::SparseQR ( const MatrixType & mat )
inlineexplicit

Конструирует QR-разложение матрицы mat.

Предупреждение
Матрица mat должна быть в сжатом формате (см. SparseMatrix::makeCompressed()).
См. также
compute()

analyzePattern()

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

Предварительный этап QR-разложения.

Предупреждение
Матрица mat должна быть в сжатом формате (см. SparseMatrix::makeCompressed()).

На этом шаге вычисляется и применяется перестановка, уменьшающая заполнение, к столбцам A, а также вычисляется дерево устранения столбцов. Используется только структура разреженности mat.

Примечание
На этом шаге предполагается, что в матрице mat нет пустых строк.

cols()

template<typename _MatrixType , typename _OrderingType >
Index Eigen::SparseQR< _MatrixType, _OrderingType >::cols ( void ) const
inline
Возвращает
количество столбцов представленной матрицы.

colsPermutation()

template<typename _MatrixType , typename _OrderingType >
const PermutationType& Eigen::SparseQR< _MatrixType, _OrderingType >::colsPermutation ( ) const
inline
Возвращает
постоянную ссылку на перестановку столбцов P, которая была применена к A таким образом, что A*P = Q*R. Она является комбинацией перестановки для сокращения заполнения и числового поворота столбцов.

compute()

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

Вычисляет QR-разложение разреженной матрицы mat.

Предупреждение
Матрица mat должна быть в сжатом формате (см. SparseMatrix::makeCompressed()).
См. также
analyzePattern(), factorize()

factorize()

template<typename MatrixType , typename OrderingType >
void Eigen::SparseQR< MatrixType, OrderingType >::factorize ( const MatrixType & mat )

Выполняет числовое QR-разложение входной матрицы.

Функция SparseQR::analyzePattern(const MatrixType&) должна быть вызвана предварительно с матрицей, имеющей ту же структуру разреженности, что и mat.

Параметры
mat Разреженная матрица в порядке следования столбцов

info()

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

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

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

lastErrorMessage()

template<typename _MatrixType , typename _OrderingType >
std::string Eigen::SparseQR< _MatrixType, _OrderingType >::lastErrorMessage ( ) const
inline
Возвращает
Строку, описывающую тип ошибки. Этот метод предназначен для облегчения отладки, а не для обработки ошибок.

matrixQ()

template<typename _MatrixType , typename _OrderingType >
SparseQRMatrixQReturnType<SparseQR> Eigen::SparseQR< _MatrixType, _OrderingType >::matrixQ ( void ) const
inline
Возвращает
выражение матрицы Q как произведение разреженных отражателей Хаусхолдера. Общее использование этой функции — её применение к плотной матрице или вектору
VectorXd B1, B2;
// Initialize B1
B2 = matrixQ() * B1;

Чтобы получить обычное представление SparseMatrix матрицы Q:

SparseMatrix<double> Q;
Q = SparseQR<SparseMatrix<double> >(A).matrixQ();

Внутренне этот вызов просто выполняет разреженное произведение между матрицей Q и разреженной единичной матрицей. Однако из-за того, что разреженные отражатели хранятся в неупорядоченном виде, для их сортировки перед выполнением произведения требуется два транспонирования.

matrixR()

template<typename _MatrixType , typename _OrderingType >
const QRMatrixType& Eigen::SparseQR< _MatrixType, _OrderingType >::matrixR ( ) const
inline
Возвращает
постоянную ссылку на **разреженную** верхнюю треугольную матрицу R QR-разложения.
Предупреждение
Элементы возвращаемой матрицы не отсортированы. Это означает, что использование её в алгоритмах, ожидающих отсортированные элементы, приведет к ошибке. Это включает случайный доступ к коэффициентам (SpaseMatrix::coeff()) и покомпонентные операции. Однако произведения матриц и треугольные решения в порядке.

Чтобы отсортировать элементы, вы можете присвоить их в матрицу в порядке строк, а если требуется матрица в порядке столбцов, вы можете скопировать её снова:

SparseMatrix<double>          R  = qr.matrixR();  // column-major, not sorted!
SparseMatrix<double,RowMajor> Rr = qr.matrixR();  // row-major, sorted
SparseMatrix<double>          Rc = Rr;            // column-major, sorted

rank()

template<typename _MatrixType , typename _OrderingType >
Index Eigen::SparseQR< _MatrixType, _OrderingType >::rank ( ) const
inline
Возвращает
количество линейно независимых столбцов, определённое порогом поворота.
См. также
setPivotThreshold()

rows()

template<typename _MatrixType , typename _OrderingType >
Index Eigen::SparseQR< _MatrixType, _OrderingType >::rows ( void ) const
inline
Возвращает
количество строк представленной матрицы.

setPivotThreshold()

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

Устанавливает порог, используемый для определения линейно зависимых столбцов во время факторизации.

На практике, если во время факторизации норма столбца, который должен быть исключен, ниже этого порога, то весь столбец обрабатывается как нулевой, и он перемещается в конец.

solve()

template<typename _MatrixType , typename _OrderingType >
template<typename Rhs >
const Solve<SparseQR, Rhs> Eigen::SparseQR< _MatrixType, _OrderingType >::solve ( const MatrixBase< Rhs > & B ) const
inline
Возвращает
решение X уравнения \( A X = B \) с использованием текущего разложения A.
См. также
compute()

The documentation for this class was generated from the following file:
  • SparseQR.h

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

Spec-Zone.ru

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