auxlib_proto.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2009 NICTA and the authors listed below
00002 // 
00003 // Authors:
00004 // - Conrad Sanderson (conradsand at ieee dot org)
00005 // - Edmund Highcock (edmund dot highcock at merton dot ox dot ac dot uk)
00006 // 
00007 // This file is part of the Armadillo C++ library.
00008 // It is provided without any warranty of fitness
00009 // for any purpose. You can redistribute this file
00010 // and/or modify it under the terms of the GNU
00011 // Lesser General Public License (LGPL) as published
00012 // by the Free Software Foundation, either version 3
00013 // of the License or (at your option) any later version.
00014 // (see http://www.opensource.org/licenses for more info)
00015 
00016 
00017 //! \addtogroup auxlib
00018 //! @{
00019 
00020 
00021 //! wrapper for accessing external functions defined in ATLAS, LAPACK or BLAS libraries
00022 class auxlib
00023   {
00024   public:
00025   
00026   template<typename eT>
00027   inline static const eT& tmp_real(const eT& X)              { return X; }
00028   
00029   template<typename T>
00030   inline static const T&  tmp_real(const std::complex<T>& X) { return X.real(); }
00031 
00032 
00033   //
00034   // inv
00035   
00036   template<typename eT>
00037   inline static void inv_noalias(Mat<eT>& out, const Mat<eT>& X);
00038   
00039   template<typename eT>
00040   inline static void inv_inplace(Mat<eT>& X);
00041   
00042   
00043   //
00044   // det
00045   
00046   template<typename eT>
00047   inline static eT det(const Mat<eT>& X);
00048   
00049   
00050   //
00051   // lu
00052   
00053   template<typename eT>
00054   inline static void lu(Mat<eT>& L, Mat<eT>& U, podarray<int>& ipiv, const Mat<eT>& X_orig);
00055   
00056   template<typename eT>
00057   inline static void lu(Mat<eT>& L, Mat<eT>& U, Mat<eT>& P, const Mat<eT>& X);
00058   
00059   template<typename eT>
00060   inline static void lu(Mat<eT>& L, Mat<eT>& U, const Mat<eT>& X);
00061   
00062   
00063   //
00064   // eig
00065   
00066   template<typename eT> 
00067   inline static void eig_sym(Col<eT>& eigval, const Mat<eT>& A);
00068   
00069   template<typename T> 
00070   inline static void eig_sym(Col<T>& eigval, const Mat< std::complex<T> >& A);
00071 
00072   template<typename eT>
00073   inline static void eig_sym(Col<eT>& eigval, Mat<eT>& eigvec, const Mat<eT>& A);
00074   
00075   template<typename T>
00076   inline static void eig_sym(Col<T>& eigval, Mat< std::complex<T> >& eigvec, const Mat< std::complex<T> >& A);
00077 
00078   template<typename eT>
00079   inline static void eig_gen(Col< std::complex<eT> >& eigval, Mat<eT>& l_eigvec, Mat<eT>& r_eigvec, const Mat<eT>& A, const char side);
00080 
00081   template<typename T>
00082   inline static void eig_gen(Col< std::complex<T> >& eigval, Mat< std::complex<T> >& l_eigvec, Mat< std::complex<T> >& r_eigvec, const Mat< std::complex<T> >& A, const char side);
00083   
00084   //
00085   // chol
00086   
00087   template<typename eT> 
00088   inline static bool chol(Mat<eT>& out, const Mat<eT>& X);
00089   
00090   
00091   //
00092   // qr
00093   
00094   template<typename eT> 
00095   inline static bool qr(Mat<eT>& Q, Mat<eT>& R, const Mat<eT>& X);
00096   
00097   
00098   //
00099   // svd
00100   
00101   template<typename eT>
00102   inline static bool svd(Col<eT>& S, const Mat<eT>& X);
00103   
00104   template<typename T>
00105   inline static bool svd(Col<T>& S, const Mat< std::complex<T> >& X);
00106   
00107   template<typename eT>
00108   inline static bool svd(Mat<eT>& U, Col<eT>& S, Mat<eT>& V, const Mat<eT>& X);
00109   
00110   template<typename T> 
00111   inline static bool svd(Mat< std::complex<T> >& U, Col<T>& S, Mat< std::complex<T> >& V, const Mat< std::complex<T> >& X);
00112   
00113   
00114   // solve
00115   
00116   template<typename eT>
00117   inline static bool solve(Mat<eT>& out, const Mat<eT>& A, const Mat<eT>& B);
00118   
00119   template<typename eT>
00120   inline static bool solve_od(Mat<eT>& out, const Mat<eT>& A, const Mat<eT>& B);
00121   
00122   template<typename eT>
00123   inline static bool solve_ud(Mat<eT>& out, const Mat<eT>& A, const Mat<eT>& B);
00124   
00125   };
00126 
00127 
00128 //! @}