max@0
|
1 // Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
|
max@0
|
2 // Copyright (C) 2008-2011 Conrad Sanderson
|
max@0
|
3 //
|
max@0
|
4 // This file is part of the Armadillo C++ library.
|
max@0
|
5 // It is provided without any warranty of fitness
|
max@0
|
6 // for any purpose. You can redistribute this file
|
max@0
|
7 // and/or modify it under the terms of the GNU
|
max@0
|
8 // Lesser General Public License (LGPL) as published
|
max@0
|
9 // by the Free Software Foundation, either version 3
|
max@0
|
10 // of the License or (at your option) any later version.
|
max@0
|
11 // (see http://www.opensource.org/licenses for more info)
|
max@0
|
12
|
max@0
|
13
|
max@0
|
14 //! \addtogroup fn_lu
|
max@0
|
15 //! @{
|
max@0
|
16
|
max@0
|
17
|
max@0
|
18
|
max@0
|
19 //! immediate lower upper decomposition, permutation info is embedded into L (similar to Matlab/Octave)
|
max@0
|
20 template<typename T1>
|
max@0
|
21 inline
|
max@0
|
22 bool
|
max@0
|
23 lu
|
max@0
|
24 (
|
max@0
|
25 Mat<typename T1::elem_type>& L,
|
max@0
|
26 Mat<typename T1::elem_type>& U,
|
max@0
|
27 const Base<typename T1::elem_type,T1>& X,
|
max@0
|
28 const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0
|
max@0
|
29 )
|
max@0
|
30 {
|
max@0
|
31 arma_extra_debug_sigprint();
|
max@0
|
32 arma_ignore(junk);
|
max@0
|
33
|
max@0
|
34 arma_debug_check( (&L == &U), "lu(): L and U are the same object");
|
max@0
|
35
|
max@0
|
36 const bool status = auxlib::lu(L, U, X);
|
max@0
|
37
|
max@0
|
38 if(status == false)
|
max@0
|
39 {
|
max@0
|
40 L.reset();
|
max@0
|
41 U.reset();
|
max@0
|
42 arma_bad("lu(): failed to converge", false);
|
max@0
|
43 }
|
max@0
|
44
|
max@0
|
45 return status;
|
max@0
|
46 }
|
max@0
|
47
|
max@0
|
48
|
max@0
|
49
|
max@0
|
50 //! immediate lower upper decomposition, also providing the permutation matrix
|
max@0
|
51 template<typename T1>
|
max@0
|
52 inline
|
max@0
|
53 bool
|
max@0
|
54 lu
|
max@0
|
55 (
|
max@0
|
56 Mat<typename T1::elem_type>& L,
|
max@0
|
57 Mat<typename T1::elem_type>& U,
|
max@0
|
58 Mat<typename T1::elem_type>& P,
|
max@0
|
59 const Base<typename T1::elem_type,T1>& X,
|
max@0
|
60 const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0
|
max@0
|
61 )
|
max@0
|
62 {
|
max@0
|
63 arma_extra_debug_sigprint();
|
max@0
|
64 arma_ignore(junk);
|
max@0
|
65
|
max@0
|
66 arma_debug_check( ( (&L == &U) || (&L == &P) || (&U == &P) ), "lu(): two or more output objects are the same object");
|
max@0
|
67
|
max@0
|
68 const bool status = auxlib::lu(L, U, P, X);
|
max@0
|
69
|
max@0
|
70 if(status == false)
|
max@0
|
71 {
|
max@0
|
72 L.reset();
|
max@0
|
73 U.reset();
|
max@0
|
74 P.reset();
|
max@0
|
75 arma_bad("lu(): failed to converge", false);
|
max@0
|
76 }
|
max@0
|
77
|
max@0
|
78 return status;
|
max@0
|
79 }
|
max@0
|
80
|
max@0
|
81
|
max@0
|
82
|
max@0
|
83 //! @}
|