Query: solver
OS: debian
Section: 2rheolef
Format: Original Unix Latex Style Formatted with HTML and a Horizontal Scroll Bar
solver(2rheolef) rheolef-6.1 solver(2rheolef)NAMEsolver - direct or interative solver interfaceDESCRIPTIONThe class implements a matrix factorization: LU factorization for an unsymmetric matrix and Choleski fatorisation for a symmetric one. Let a be a square invertible matrix in csr format (see csr(2)). csr<Float> a; We get the factorization by: solver<Float> sa (a); Each call to the direct solver for a*x = b writes either: vec<Float> x = sa.solve(b); When the matrix is modified in a computation loop but conserves its sparsity pattern, an efficient re-factorization writes: sa.update_values (new_a); x = sa.solve(b); This approach skip the long step of the symbolic factization step.ITERATIVE SOLVERThe factorization can also be incomplete, i.e. a pseudo-inverse, suitable for preconditionning iterative methods. In that case, the sa.solve(b) call runs a conjugate gradient when the matrix is symmetric, or a generalized minimum residual algorithm when the matrix is unsymmetric.AUTOMATIC CHOICE AND CUSTOMIZATIONThe symmetry of the matrix is tested via the a.is_symmetric() property (see csr(2)) while the choice between direct or iterative solver is switched from the a.pattern_dimension() value. When the pattern is 3D, an iterative method is faster and less memory consuming. Otherwhise, for 1D or 2D problems, the direct method is prefered. These default choices can be supersetted by using explicit options: solver_option_type opt; opt.iterative = true; solver<Float> sa (a, opt); See the solver.h header for the complete list of available options.IMPLEMENTATION NOTEThe implementation bases on the pastix library.IMPLEMENTATIONtemplate <class T, class M = rheo_default_memory_model> class solver_basic : public smart_pointer<solver_rep<T,M> > { public: // typedefs: typedef solver_rep<T,M> rep; typedef smart_pointer<rep> base; // allocator: solver_basic (); explicit solver_basic (const csr<T,M>& a, const solver_option_type& opt = solver_option_type()); void update_values (const csr<T,M>& a); // accessors: vec<T,M> trans_solve (const vec<T,M>& b) const; vec<T,M> solve (const vec<T,M>& b) const; }; // factorizations: template <class T, class M> solver_basic<T,M> ldlt(const csr<T,M>& a, const solver_option_type& opt = solver_option_type()); template <class T, class M> solver_basic<T,M> lu (const csr<T,M>& a, const solver_option_type& opt = solver_option_type()); template <class T, class M> solver_basic<T,M> ic0 (const csr<T,M>& a, const solver_option_type& opt = solver_option_type()); template <class T, class M> solver_basic<T,M> ilu0(const csr<T,M>& a, const solver_option_type& opt = solver_option_type()); typedef solver_basic<Float> solver;SEE ALSOcsr(2), csr(2) rheolef-6.1 rheolef-6.1 solver(2rheolef)
Related Man Pages |
---|
characteristic(2rheolef) - debian |
form(2rheolef) - debian |
vec(2rheolef) - debian |
basis(7rheolef) - debian |
asr(2rheolef) - linux |
Similar Topics in the Unix Linux Community |
---|
referenced symbol not found, how to solve? |
Loop through only the distinct values in a file |
fbackup problem |
On semi-supervised learning and sparsity |
File Program issue in c |