synaps/linalg/Uschur.h

00001 #ifndef SYNAPS_LINALG_USCHUR_H
00002 #define SYNAPS_LINALG_USCHUR_H
00003 //--------------------------------------------------------------------------
00004 #include <synaps/init.h>
00005 #include <synaps/linalg/MATRIX.m>
00006 #include <synaps/base/Range.h>
00007 #include <synaps/linalg/MethodName.h>
00008 
00009 __BEGIN_NAMESPACE_SYNAPS
00010 
00011 
00012 //--------------------------------------------------------------------------
00019 template <class M> inline 
00020 M USchur(M & m, int n)
00021 {
00022         M  A = m(Range2d(0,n-1,0,n-1));
00023         M  B=m(Range2d(0,n-1,n,m.nbcol()-1)),
00024         C=m(Range2d(n,m.nbrow()-1,0,n-1)),
00025         D=m(Range2d(n,m.nbrow()-1,n,m.nbcol()-1));
00026         using namespace MATRIX;
00027         solve(LU(),C.rep(),D.rep());
00028         B *= C;
00029         A -= B;
00030         return A;
00031 }
00032 //--------------------------------------------------------------------------
00033 
00034 __END_NAMESPACE_SYNAPS
00035 
00036 #endif // SYNAPS_LINALG_USCHUR_H
00037 

SYNAPS DOCUMENTATION
logo