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, а также вычисляется дерево устранения столбцов. Используется только структура разреженности mat.
Примечание
На этом шаге предполагается, что в матрице mat нет пустых строк.
постоянную ссылку на перестановку столбцов P, которая была применена к A таким образом, что A*P = Q*R. Она является комбинацией перестановки для сокращения заполнения и числового поворота столбцов.
выражение матрицы Q как произведение разреженных отражателей Хаусхолдера. Общее использование этой функции — её применение к плотной матрице или вектору
Внутренне этот вызов просто выполняет разреженное произведение между матрицей Q и разреженной единичной матрицей. Однако из-за того, что разреженные отражатели хранятся в неупорядоченном виде, для их сортировки перед выполнением произведения требуется два транспонирования.
постоянную ссылку на **разреженную** верхнюю треугольную матрицу R QR-разложения.
Предупреждение
Элементы возвращаемой матрицы не отсортированы. Это означает, что использование её в алгоритмах, ожидающих отсортированные элементы, приведет к ошибке. Это включает случайный доступ к коэффициентам (SpaseMatrix::coeff()) и покомпонентные операции. Однако произведения матриц и треугольные решения в порядке.
Чтобы отсортировать элементы, вы можете присвоить их в матрицу в порядке строк, а если требуется матрица в порядке столбцов, вы можете скопировать её снова:
Устанавливает порог, используемый для определения линейно зависимых столбцов во время факторизации.
На практике, если во время факторизации норма столбца, который должен быть исключен, ниже этого порога, то весь столбец обрабатывается как нулевой, и он перемещается в конец.