GetFEM  5.4.2
gmm_range_basis.h File Reference

Extract a basis of the range of a (large sparse) matrix from the columns of this matrix. More...

#include "gmm_dense_qr.h"
#include "gmm_dense_lu.h"
#include "gmm_kernel.h"
#include "gmm_iter.h"
#include <set>
#include <list>

Go to the source code of this file.

Functions

template<typename Mat >
void gmm::range_basis (const Mat &B, std::set< size_type > &columns, double EPS=1E-12)
 Range Basis : Extract a basis of the range of a (large sparse) matrix selecting some column vectors of this matrix. More...
 

Detailed Description

Extract a basis of the range of a (large sparse) matrix from the columns of this matrix.

Author
Yves Renard Yves..nosp@m.Rena.nosp@m.rd@in.nosp@m.sa-l.nosp@m.yon.f.nosp@m.r
Date
March 10, 2009.

Definition in file gmm_range_basis.h.

Function Documentation

◆ range_basis()

template<typename Mat >
void gmm::range_basis ( const Mat &  B,
std::set< size_type > &  columns,
double  EPS = 1E-12 
)

Range Basis : Extract a basis of the range of a (large sparse) matrix selecting some column vectors of this matrix.

This is in particular useful to select an independent set of linear constraints.

The algorithm is optimized for two cases :

  • when the (non trivial) kernel is small. An iterativ algorithm based on Lanczos method is applied
  • when the (non trivial) kernel is large and most of the dependencies can be detected locally. A block Gram-Schmidt is applied first then a restarted Lanczos method when the remaining kernel is greatly smaller. The restarted Lanczos method could be improved or replaced by a block Lanczos method, a block Wiedelann method (in order to be parallelized for instance) or simply could compute more than one vector of the null space at each iteration. The LU decomposition has been tested for local elimination but gives bad results : the algorithm is unstable and do not permit to give the right number of vector at the end of the process. Moreover, the number of final vectors depends greatly on the number of vectors in a block of the local analysis.

Definition at line 490 of file gmm_range_basis.h.