#include <Cholesky.h>
Public Member Functions | |
template<class P2, class B2> | |
Cholesky (const Matrix< Size, Size, P2, B2 > &m) | |
Cholesky (int size) | |
template<class P2, class B2> | |
void | compute (const Matrix< Size, Size, P2, B2 > &m) |
void | do_compute () |
template<int Size2, class P2, class B2> | |
Vector< Size, Precision > | backsub (const Vector< Size2, P2, B2 > &v) |
template<int Size2, int C2, class P2, class B2> | |
Matrix< Size, C2, Precision > | backsub (const Matrix< Size2, C2, P2, B2 > &m) |
Matrix< Size, Size, Precision > | get_inverse () |
Precision | determinant () |
Also can compute A = S*S^T, with S lower triangular. The LDL^T form is faster to compute than the class Cholesky decomposition. The decomposition can be used to compute A^-1*x, A^-1*M, M*A^-1*M^T, and A^-1 itself, though the latter rarely needs to be explicitly represented. Also efficiently computes det(A) and rank(A). It can be used as follows:
// Declare some matrices. Matrix<3> A = ...; // we'll pretend it is pos-def Matrix<2,3> M; Matrix<2> B; Vector<3> y = make_Vector(2,3,4); // create the Cholesky decomposition of A Cholesky<3> chol(A); // compute x = A^-1 * y x = cholA.backsub(y); //compute A^-1 Matrix<3> Ainv = cholA.get_inverse();
Cholesky decomposition of a symmetric matrix. Only the lower half of the matrix is considered This uses the non-sqrt version of the decomposition giving symmetric M = L*D*L.T() where the diagonal of L contains ones
Size | the size of the matrix | |
Precision | the precision of the entries in the matrix and its decomposition |
TooN::Cholesky< Size, Precision >::Cholesky | ( | const Matrix< Size, Size, P2, B2 > & | m | ) |
Construct the Cholesky decomposition of a matrix.
This initialises the class, and performs the decomposition immediately. Run time is O(N^3)
TooN::Cholesky< Size, Precision >::Cholesky | ( | int | size | ) |
Constructor for Size=Dynamic.
void TooN::Cholesky< Size, Precision >::compute | ( | const Matrix< Size, Size, P2, B2 > & | m | ) |
Compute the LDL^T decomposition of another matrix.
Run time is O(N^3)
Vector<Size, Precision> TooN::Cholesky< Size, Precision >::backsub | ( | const Vector< Size2, P2, B2 > & | v | ) |
Compute x = A^-1*v Run time is O(N^2).
Matrix<Size,Size,Precision> TooN::Cholesky< Size, Precision >::get_inverse | ( | ) |
Compute A^-1 and store in M Run time is O(N^3).