template<class Mthd, class Mat> Mat decomp(const Mat & m);
LUfor Lower-Upper triangular decomposition.
Bareissfor Lower-Upper triangular decomposition based on Bareiss method. It applies the following pivoting scheme:
where is the transformed matrix at step and is the initial matrix. At the end of this process, after some permutation of the rows, the matrix is upper triangular. If A is a square matrix, the last entry on the diagonal at the end of the process is the determinant of the matrix . Moreover, if has its coefficients in a ring, it is the same for the matrices , since the previous division is exact
QRfor Orthogonal-Upper triangular decomposition.
matrix_t T = Decomp<LU>(M); matrix_t R = Decomp<QR>(M);
where and are and matrices. The result is a matrix. On can use the following methods
matrix_t B = ...; matrix_t X = solve<LU>(A,B); matrix_t Y = solve<LS>(A,B);
LUfor Gauss method uses classical pivoting techniques (ie. LU decomposition) to compute the determinant.
Theorem: [GLVL96] For a real matrix of size , there exists two orthogonal matrices |
are called the th singular value of A, and are respectively the th left and right singular vectors.
Definition: For a matrix , the numerical rank of A is defined by: |
Theorem: [GLVL96] If is of rank and then |
The singular value decomposition of a matrix is the decomposition of the form
where and are orthognal matrices , and is a diagonal matrix such that . The values are called the singular values of .
vector_t s = Svd(m);
As a result, in order to determine the rank of a matrix , we find the singular values so that
eigen_vect. They also provide generalised eigenvalues and eigenvectors, for pairs of matrices
(a,B). If the internal representation of type
lapack::rep2d<double>, the routine
VectDse<std::complex<double> > v = eigen(A); VectDse<double> w = eigen(A, Real()); VectDse<double> w = eigen(A,B);