Spec-Zone.ru › Eigen3

Eigen::LDLT

шаблон<typename _MatrixType, int _UpLo>
класс Eigen::LDLT< _MatrixType, _UpLo >

Устойчивое разложение Холецкого матрицы с выбором опор.

Параметры шаблона
_MatrixType тип матрицы, для которой вычисляется разложение Холецкого LDLT
_UpLo треугольная часть, используемая для разложения: нижняя (по умолчанию) или верхняя. Другая треугольная часть не будет читаться.

Выполняет устойчивое разложение Холецкого положительно определенной или отрицательно определенной матрицы \( A \) такого, что \( A = P^TLDL^*P \), где P — матрица перестановок, L — нижняя треугольная матрица с единичной диагональю, а D — диагональная матрица.

Разложение использует выбор опор для обеспечения устойчивости, поэтому D будет иметь нули в правой нижней подматрице ранга(A) - n. Избегание квадратного корня из D также стабилизирует вычисления.

Запомните, что разложения Холецкого не являются разложениями, определяющими ранг. Также не используйте разложение Холецкого для определения того, имеет ли система уравнений решение.

Этот класс поддерживает механизм разложения на месте .

См. также
MatrixBase::ldlt(), SelfAdjointView::ldlt(), класс LLT
Inheritance graph
const LDLT & adjoint () const
шаблон<typename InputType >
LDLT< MatrixType, _UpLo > & compute (const EigenBase< InputType > &a)
ComputationInfo info () const
Сообщает, было ли предыдущее вычисление успешным. Подробнее...
bool isNegative (void) const
bool isPositive () const
LDLT ()
Конструктор по умолчанию. Подробнее...
шаблон<typename InputType >
LDLT (const EigenBase< InputType > &matrix)
Конструктор с разложением. Подробнее...
шаблон<typename InputType >
LDLT (EigenBase< InputType > &matrix)
Создает факторизацию LDLT из заданной матрицы. Подробнее...
LDLT (Index size)
Конструктор по умолчанию с предварительной выделением памяти. Подробнее...
Traits::MatrixL matrixL () const
const MatrixType & matrixLDLT () const
Traits::MatrixU matrixU () const
шаблон<typename Derived >
LDLT< MatrixType, _UpLo > & rankUpdate (const MatrixBase< Derived > &w, const typename LDLT< MatrixType, _UpLo >::RealScalar &sigma)
RealScalar rcond () const
MatrixType reconstructedMatrix () const
void setZero ()
шаблон<typename Rhs >
const Solve< LDLT, Rhs > solve (const MatrixBase< Rhs > &b) const
const TranspositionType & transpositionsP () const
Diagonal< const MatrixType > vectorD () const
- Публичные методы, унаследованные от Eigen::SolverBase< LDLT< _MatrixType, _UpLo > >
AdjointReturnType adjoint () const
LDLT< _MatrixType, _UpLo > & derived ()
const LDLT< _MatrixType, _UpLo > & derived () const
const Solve< LDLT< _MatrixType, _UpLo >, Rhs > solve (const MatrixBase< Rhs > &b) const
SolverBase ()
ConstTransposeReturnType transpose () const
- Публичные методы, унаследованные от Eigen::EigenBase< Derived >
EIGEN_CONSTEXPR Index cols () const EIGEN_NOEXCEPT
Derived & derived ()
const Derived & derived () const
EIGEN_CONSTEXPR Index rows () const EIGEN_NOEXCEPT
EIGEN_CONSTEXPR Index size () const EIGEN_NOEXCEPT
- Публичные типы, унаследованные от Eigen::EigenBase< Derived >
typedef Eigen::Index Index
Тип интерфейса для индексов. Подробнее...

LDLT() [1/4]

template<typename _MatrixType , int _UpLo>
Eigen::LDLT< _MatrixType, _UpLo >::LDLT ( )
inline

Конструктор по умолчанию.

Конструктор по умолчанию полезен в тех случаях, когда пользователь намерен выполнять разложения через LDLT::compute(const MatrixType&).

LDLT() [2/4]

template<typename _MatrixType , int _UpLo>
Eigen::LDLT< _MatrixType, _UpLo >::LDLT ( Index size )
inlineexplicit

Конструктор по умолчанию с предварительной выделением памяти.

Подобно конструктору по умолчанию, но с предварительной выделением памяти для внутренних данных в соответствии с заданным размером проблемы size.

См. также
LDLT()

LDLT() [3/4]

template<typename _MatrixType , int _UpLo>
template<typename InputType >
Eigen::LDLT< _MatrixType, _UpLo >::LDLT ( const EigenBase< InputType > & matrix )
inlineexplicit

Конструктор с разложением.

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

См. также
LDLT(Index size)

LDLT() [4/4]

template<typename _MatrixType , int _UpLo>
template<typename InputType >
Eigen::LDLT< _MatrixType, _UpLo >::LDLT ( EigenBase< InputType > & matrix )
inlineexplicit

Строит факторизацию LDLT из заданной матрицы.

Этот перегруженный конструктор предоставляется для разложения на месте , когда MatrixType является Eigen::Ref.

См. также
LDLT(const EigenBase&)

adjoint()

template<typename _MatrixType , int _UpLo>
const LDLT& Eigen::LDLT< _MatrixType, _UpLo >::adjoint ( ) const
inline
Возвращает
сопряженное значение *this, то есть постоянную ссылку на само разложение, поскольку основная матрица самосопряженная.

Этот метод предоставляется для совместимости с другими матричными разложениями, что позволяет использовать общий код, такой как:

x = decomposition.adjoint().solve(b) 

compute()

template<typename _MatrixType , int _UpLo>
template<typename InputType >
LDLT<MatrixType,_UpLo>& Eigen::LDLT< _MatrixType, _UpLo >::compute ( const EigenBase< InputType > & a )

Вычислить/перевычислить разложение LDLT A = L D L^* = U^* D U матрицы matrix

info()

template<typename _MatrixType , int _UpLo>
ComputationInfo Eigen::LDLT< _MatrixType, _UpLo >::info ( ) const
inline

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

Возвращает
Success если вычисление было успешным, NumericalIssue если разложение не удалось из-за нулевого элемента.

isNegative()

template<typename _MatrixType , int _UpLo>
bool Eigen::LDLT< _MatrixType, _UpLo >::isNegative ( void ) const
inline
Возвращает
true, если матрица отрицательно определена (полуопределённая)

isPositive()

template<typename _MatrixType , int _UpLo>
bool Eigen::LDLT< _MatrixType, _UpLo >::isPositive ( ) const
inline
Возвращает
true, если матрица положительно определена (полуопределённая)

matrixL()

template<typename _MatrixType , int _UpLo>
Traits::MatrixL Eigen::LDLT< _MatrixType, _UpLo >::matrixL ( ) const
inline
Возвращает
вид нижней треугольной матрицы L

matrixLDLT()

template<typename _MatrixType , int _UpLo>
const MatrixType& Eigen::LDLT< _MatrixType, _UpLo >::matrixLDLT ( ) const
inline
Возвращает
внутренняя матрица разложения LDLT

TODO: документировать структуру хранения

matrixU()

template<typename _MatrixType , int _UpLo>
Traits::MatrixU Eigen::LDLT< _MatrixType, _UpLo >::matrixU ( ) const
inline
Возвращает
вид верхней треугольной матрицы U

rankUpdate()

template<typename _MatrixType , int _UpLo>
template<typename Derived >
LDLT<MatrixType,_UpLo>& Eigen::LDLT< _MatrixType, _UpLo >::rankUpdate ( const MatrixBase< Derived > & w,
const typename LDLT< MatrixType, _UpLo >::RealScalar & sigma
)

Обновить разложение LDLT: при заданном A = L D L^T, эффективно вычислить разложение A + sigma w w^T.

Параметры
w вектор, который необходимо включить в разложение.
sigma скаляр, +1 для обновлений и -1 для "обновлений назад", которые соответствуют удалению ранее добавленных векторов-столбцов. Необязательно; значение по умолчанию равно +1.
См. также
setZero()

rcond()

template<typename _MatrixType , int _UpLo>
RealScalar Eigen::LDLT< _MatrixType, _UpLo >::rcond ( ) const
inline
Возвращает
оценку обратной условного числа матрицы, от которой *this является LDLT-разложением.

reconstructedMatrix()

template<typename MatrixType , int _UpLo>
MatrixType Eigen::LDLT< MatrixType, _UpLo >::reconstructedMatrix
Возвращает
матрицу, представленную разложением, то есть возвращает произведение: P^T L D L^* P. Эта функция предоставляется для отладки.

setZero()

template<typename _MatrixType , int _UpLo>
void Eigen::LDLT< _MatrixType, _UpLo >::setZero ( )
inline

Очистить существующее разложение

См. также
rankUpdate(w,sigma)

solve()

template<typename _MatrixType , int _UpLo>
template<typename Rhs >
const Solve<LDLT, Rhs> Eigen::LDLT< _MatrixType, _UpLo >::solve ( const MatrixBase< Rhs > & b ) const
inline
Возвращает
решение x уравнения \( A x = b \) с использованием текущего разложения A.

Эта функция также поддерживает решение на месте, используя синтаксис x = decompositionObject.solve(x).

Этот метод просто пытается найти наилучшее возможное решение. Если вы хотите проверить, существует ли решение или оно точное, просто вызовите эту функцию, чтобы получить результат, а затем вычислите ошибку этого результата, или используйте MatrixBase::isApprox() непосредственно, например так:

bool a_solution_exists = (A*result).isApprox(b, precision); 

Этот метод избегает деления на ноль, так что отсутствие решения само по себе не означает, что вы получите inf или nan значения.

Более точно, этот метод решает \( A x = b \) с помощью разложения \( A = P^T L D L^* P \) путём последовательного решения систем \( P^T y_1 = b \), \( L y_2 = y_1 \), \( D y_3 = y_2 \), \( L^* y_4 = y_3 \) и \( P x = y_4 \). Если матрица \( A \) является вырожденной, то \( D \) также будет вырожденной (все остальные матрицы обратимы). В этом случае вычисляется решение методом наименьших квадратов для \( D y_3 = y_2 \). Это не означает, что эта функция вычисляет решение методом наименьших квадратов для \( A x = b \), если \( A \) вырожденная.

См. также
MatrixBase::ldlt(), SelfAdjointView::ldlt()

transpositionsP()

template<typename _MatrixType , int _UpLo>
const TranspositionType& Eigen::LDLT< _MatrixType, _UpLo >::transpositionsP ( ) const
inline
Возвращает
матрицу перестановок P в виде последовательности транспонирования.

vectorD()

template<typename _MatrixType , int _UpLo>
Diagonal<const MatrixType> Eigen::LDLT< _MatrixType, _UpLo >::vectorD ( ) const
inline
Возвращает
коэффициенты диагональной матрицы D

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

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

Spec-Zone.ru

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