template<class Mthd, class Mat> Mat decomp(const Mat & m);
LU
for Lower-Upper triangular decomposition.Bareiss
for 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
QR
for Orthogonal-Upper triangular decomposition.matrix_t T = Decomp<LU>(M); matrix_t R = Decomp<QR>(M);
synaps/linalg/decomp.h
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);
synaps/linalg/solve.h
LU
for Gauss method uses classical pivoting techniques (ie. LU decomposition) to compute the determinant.
synaps/linalg/Det.h
Theorem: [GLVL96] For a real matrix of size , there exists two orthogonal matrices
such that
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);
synaps/linalg/svd.h
As a result, in order to determine the rank of a matrix , we find the singular values so that
The function
Rank(A);
synaps/linalg/rank.h
eigen
and 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 dgeeg
or dgegv
are called. VectDse<std::complex<double> > v = eigen(A); VectDse<double> w = eigen(A, Real()); VectDse<double> w = eigen(A,B);
synaps/linalg/eigen.h
synaps/linalg/FFT.h