fn_qr.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2010 NICTA and the authors listed below
00002 // http://nicta.com.au
00003 // 
00004 // Authors:
00005 // - Conrad Sanderson (conradsand at ieee dot org)
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 fn_qr
00018 //! @{
00019 
00020 
00021 //! QR decomposition
00022 template<typename T1>
00023 inline
00024 void
00025 qr
00026   (
00027   Mat<typename T1::elem_type>& Q,
00028   Mat<typename T1::elem_type>& R,
00029   const Base<typename T1::elem_type,T1>& X,
00030   const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0
00031   )
00032   {
00033   arma_extra_debug_sigprint();
00034   
00035   typedef typename T1::elem_type eT;
00036 
00037   arma_debug_check( (&Q == &R), "qr(): Q and R are the same object");
00038   
00039   const unwrap_check<T1> tmp1(X.get_ref(), Q);
00040   const Mat<eT>&     A = tmp1.M;
00041   
00042   const unwrap_check< Mat<eT> > tmp2(A, R);
00043   const Mat<eT>&            B = tmp2.M;
00044   
00045   const bool ok = auxlib::qr(Q, R, B);
00046   
00047   if(ok == false)
00048     {
00049     Q.reset();
00050     R.reset();
00051     arma_print("qr(): factorisation failed");
00052     }
00053   
00054   }
00055 
00056 
00057 //! @}