GEL  2
GEL is a library for Geometry and Linear Algebra
Classes | Typedefs | Functions
LinAlg Namespace Reference

The Linear Algebra Implementation/Module/Package. More...

Classes

class  CMatrixType
 The Matrix type. More...
class  CVectorType
 The Vector type. More...

Typedefs

typedef CMatrixType< double > CMatrix
 The Matrix annotation intended for use.
typedef CVectorType< double > CVector
 The Vector annotation intended for use.

Functions

void LinearSolveSym (const CMatrix &A, const CVector &b, CVector &x)
Singular Value Decomposition SVD

These functions perform the Singular Value Decomposition SVD of the MxN matrix A. The SVD is defined by:

A=U*S*V^T

where:

  • U is a M by M orthogonal matrix
  • V is a N by N orthogonal matrix
  • S is a M by N diaggonal matrix. The values in the diagonal are the singular values
Parameters:
Athe matrix to perform SVD on
Returns:
U will be resized if it is does not have the correct dimensions
V will be resized if it is does not have the correct dimensions
S will be resized if it is does not have the correct dimensions.
Exceptions:
assert(info==0)for Lapack. Add a throw statement later.
Version:
Aug 2001
Author:
Henrik Aans
void SVD (const CMatrix &A, CMatrix &U, CMatrix &S, CMatrix &V)
 SVD of A, where the singular values are returned in a 'diagonal' Matrix.
CVector SVD (const CMatrix &A)
 SVD of A, returning only the singular values in a Vector.
Linear Equations

These functions solve the system of linear equations

A*x=b

for x, where:

  • A is a N by N matrix
  • b is a N vector
  • x is a N vector

There a speceilaized functions for symetric positive definite (SPD) matrices yeilding better performance. These are denote by SPD in there function name.

Parameters:
Athe NxN square matrix
bthe N vector
Returns:
x will be resized if it is does not have the correct dimensions
Exceptions:
assert(info==0)for Lapack. Add a throw statement later.
assert(A.Row()==A.Col()).Add a throw statement later.
assert(A.Row()==b.Length()).Add a throw statement later.
Version:
Aug 2001
Author:
Henrik Aans
void LinearSolve (const CMatrix &A, const CVector &b, CVector &x)
 Solves Ax=b for x.
CVector LinearSolve (const CMatrix &A, const CVector &b)
 Solves Ax=b for x and returns x.
void LinearSolveSPD (const CMatrix &A, const CVector &b, CVector &x)
 Solves Ax=b for x, where A is SPD.
CVector LinearSolveSPD (const CMatrix &A, const CVector &b)
 Solves Ax=b for x and returns x, where A is SPD.
Linear Least Squares

These functions solve the Linear Least Squares problem:

min_x ||Ax-b||^2

for x, where:

  • || || denotes the 2-norm
  • A is a M by N matrix. For a well formed M>=N and rank (A)=N. See below.
  • b is a M vector.
  • x is a N vector

If the solution is not well formed the algorithm provided will find a solution, x, which is not unique, but which sets the objective function to 0. The reson being that the underlining algorithm works by SVD.

Parameters:
Athe MxN matrix
bthe M vector
Returns:
x will be resized if it is does not have the correct dimensions
Exceptions:
assert(info==0)for Lapack. Add a throw statement later.
assert(A.Rows()==b.Length());.Add a throw statement later.
Version:
Aug 2001
Author:
Henrik Aans
void LinearLSSolve (const CMatrix &A, const CVector &b, CVector &x)
 Solves the Linear Least Squares problem min_x ||Ax=b||^2 for x.
CVector LinearLSSolve (const CMatrix &A, const CVector &b)
 Solves the Linear Least Squares problem min_x ||Ax=b||^2 for x, and returnes x.
Matrix Inversion

These functions inverts the square matrix A. This matrix A must have full rank.

Parameters:
Asquare matrix
Returns:
InvA the invers of A for one instance.
Exceptions:
assert(info==0)for Lapack. This wil among others happen if A is rank deficient. Add a throw statement later.
assert(A.Rows()==A.Cols()).Add a throw statement later.
Version:
Aug 2001
Author:
Henrik Aans
void Invert (CMatrix &A)
 Invertes the square matrix A. That is here A is altered as opposed to the other Invert functions.
void Inverted (const CMatrix &A, CMatrix &InvA)
 Returns the inverse of the square matrix A in InvA.
CMatrix Inverted (const CMatrix &A)
 Returns the inverse of the square matrix A.
QR Factorization

This function returns the QR factorization of A, such that Q*R=A where Q is a orthonormal matrix and R is an upper triangular matrix. However, in the case of A.Col()>A.Row(), the last A.Col-A.Row columns of Q are 'carbage' and as such not part of a orthonormal matrix.

Parameters:
Athe input matrix
Returns:
Q an orthonormal matrix. (See above)
R an upper triangular matrix.
Exceptions:
assert(info==0)for Lapack. This wil among others happen if A is rank deficient. Add a throw statement later.
assert(A.Rows()>0&& A.Cols()>0). Add a throw statement later.
Version:
Aug 2001
Author:
Henrik Aans
void QRfact (const CMatrix &A, CMatrix &Q, CMatrix &R)
RQ Factorization

This function returns the RQ factorization of A, such that R*Q=A where Q is a orthonormal matrix and R is an upper triangular matrix. However, in the case of A not beeing a square matrix, there might be some fuck up of Q.

Parameters:
Athe input matrix
Returns:
Q an orthonormal matrix. (See above)
R an upper triangular matrix.
Exceptions:
assert(info==0)for Lapack. This wil among others happen if A is rank deficient. Add a throw statement later.
assert(A.Rows()>0&& A.Cols()>0). Add a throw statement later.
Version:
Aug 2001
Author:
Henrik Aans
void RQfact (const CMatrix &A, CMatrix &R, CMatrix &Q)
Find eigensolutions of a symmetric real matrix.

This function accepts a real symmetric matrix Q and a vector b. When the function returns, the eigenvalues of the matrix Q will be stored in b and the eigenvectors form the columns of Q. This function is based on the Lapack function dsyev, and returns its info code. A code of 0 indicates success, and a code < 0 indicates an error. Probably Q is not a real symmetric matrix. If the code is > 0 "the algorithm failed to converge; code off-diagonal elements of an intermediate tridiagonal form did not converge to zero." Presumably this means that code contains the number of eigenvalues which are ok.

Author:
Andreas Brentzen.
int EigenSolutionsSym (CMatrix &Q, CVector &b)
I/O from MatLab

Reads or writes the type to or from a m-file with a somwhat strict format. MatLab can 'load' the matrix by running the m-file in question, and write to the format via the 'LinAlg.m' function.

Since MatLab uses double as the working percision, this is the only value of T where this interface to MatLab works. For other types, this functionality is good for loading, saving and debuging.

Todo:

write the LinAlg.m fuction.

make a template overloading, of these functions.

Author:
Henrik Aans
Version:
Aug 2001
void FromMatlab (CMatrix &A, const std::string &VarName, const std::string &FileName)
Additional matrix operators

These are operators heavily associated with CMAtrixType, but not included in the class definition it self.

template<class T >
CMatrixType< T > operator+ (const T &Lhs, const CMatrixType< T > &Rhs)
template<class T >
CMatrixType< T > operator* (const T &Lhs, const CMatrixType< T > &Rhs)
template<class T >
std::ostream & operator<< (std::ostream &s, const CMatrixType< T > &A)
template<class T >
std::istream & operator>> (std::istream &s, CMatrixType< T > &A)
Additional vector operators

These are operators heavily associated with CVectorType, but not included in the class definition it self.

template<class T >
CVectorType< T > operator+ (const T &Lhs, const CVectorType< T > &Rhs)
template<class T >
CVectorType< T > operator* (const T &Lhs, const CVectorType< T > &Rhs)
template<class T >
std::ostream & operator<< (std::ostream &s, const CVectorType< T > &a)
template<class T >
std::istream & operator>> (std::istream &s, CVectorType< T > &a)

Detailed Description

The Linear Algebra Implementation/Module/Package.

This is the linear algebra package deal with vector and matrix types plus the basic operation on them. The Vector and Matrix Types are templated such that the precision of a given 'system' can be changen. Though the precision or type in mind is the double. Special types for 2 and 3 vectors (CVec2 and CVec3) are included for improved performance. The more advanced linear algebra functions are supplied by lincage to the LaPack package.

Test:
The functionality in this pacage has if nothing else is mentioned been tested by making small functions utilizing the functions. The reason being that the functions here are rather esay to validate due to their functional simplicity.

A list of improvements in mind is:

Author:
Henrik Aanęs
Version:
Aug 2001
 All Classes Namespaces Files Functions Variables Typedefs Enumerations