annotate armadillo-3.900.4/include/armadillo_bits/fn_inv.hpp @ 84:55a047986812 tip

Update library URI so as not to be document-local
author Chris Cannam
date Wed, 22 Apr 2020 14:21:57 +0100
parents 1ec0e2823891
children
rev   line source
Chris@49 1 // Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
Chris@49 2 // Copyright (C) 2008-2011 Conrad Sanderson
Chris@49 3 //
Chris@49 4 // This Source Code Form is subject to the terms of the Mozilla Public
Chris@49 5 // License, v. 2.0. If a copy of the MPL was not distributed with this
Chris@49 6 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
Chris@49 7
Chris@49 8
Chris@49 9 //! \addtogroup fn_inv
Chris@49 10 //! @{
Chris@49 11
Chris@49 12
Chris@49 13
Chris@49 14 //! delayed matrix inverse (general matrices)
Chris@49 15 template<typename T1>
Chris@49 16 arma_inline
Chris@49 17 const Op<T1, op_inv>
Chris@49 18 inv
Chris@49 19 (
Chris@49 20 const Base<typename T1::elem_type,T1>& X,
Chris@49 21 const bool slow = false,
Chris@49 22 const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0
Chris@49 23 )
Chris@49 24 {
Chris@49 25 arma_extra_debug_sigprint();
Chris@49 26 arma_ignore(junk);
Chris@49 27
Chris@49 28 return Op<T1, op_inv>(X.get_ref(), ((slow == false) ? 0 : 1), 0);
Chris@49 29 }
Chris@49 30
Chris@49 31
Chris@49 32
Chris@49 33 //! remove the inverse operation if applied twice consecutively
Chris@49 34 template<typename T1>
Chris@49 35 arma_inline
Chris@49 36 const T1&
Chris@49 37 inv(const Op<T1, op_inv>& X, const bool slow = false)
Chris@49 38 {
Chris@49 39 arma_extra_debug_sigprint();
Chris@49 40 arma_ignore(slow);
Chris@49 41
Chris@49 42 return X.m;
Chris@49 43 }
Chris@49 44
Chris@49 45
Chris@49 46
Chris@49 47 //! delayed matrix inverse (triangular matrices)
Chris@49 48 template<typename T1>
Chris@49 49 arma_inline
Chris@49 50 const Op<T1, op_inv_tr>
Chris@49 51 inv
Chris@49 52 (
Chris@49 53 const Op<T1, op_trimat>& X,
Chris@49 54 const bool slow = false,
Chris@49 55 const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0
Chris@49 56 )
Chris@49 57 {
Chris@49 58 arma_extra_debug_sigprint();
Chris@49 59 arma_ignore(slow);
Chris@49 60 arma_ignore(junk);
Chris@49 61
Chris@49 62 return Op<T1, op_inv_tr>(X.m, X.aux_uword_a, 0);
Chris@49 63 }
Chris@49 64
Chris@49 65
Chris@49 66
Chris@49 67 //! delayed matrix inverse (symmetric positive definite matrices)
Chris@49 68 template<typename T1>
Chris@49 69 arma_inline
Chris@49 70 const Op<T1, op_inv_sympd>
Chris@49 71 inv
Chris@49 72 (
Chris@49 73 const Op<T1, op_sympd>& X,
Chris@49 74 const bool slow = false,
Chris@49 75 const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0
Chris@49 76 )
Chris@49 77 {
Chris@49 78 arma_extra_debug_sigprint();
Chris@49 79 arma_ignore(slow);
Chris@49 80 arma_ignore(junk);
Chris@49 81
Chris@49 82 return Op<T1, op_inv_sympd>(X.m, 0, 0);
Chris@49 83 }
Chris@49 84
Chris@49 85
Chris@49 86
Chris@49 87 template<typename T1>
Chris@49 88 inline
Chris@49 89 bool
Chris@49 90 inv
Chris@49 91 (
Chris@49 92 Mat<typename T1::elem_type>& out,
Chris@49 93 const Base<typename T1::elem_type,T1>& X,
Chris@49 94 const bool slow = false,
Chris@49 95 const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0
Chris@49 96 )
Chris@49 97 {
Chris@49 98 arma_extra_debug_sigprint();
Chris@49 99 arma_ignore(junk);
Chris@49 100
Chris@49 101 try
Chris@49 102 {
Chris@49 103 out = inv(X,slow);
Chris@49 104 }
Chris@49 105 catch(std::runtime_error&)
Chris@49 106 {
Chris@49 107 return false;
Chris@49 108 }
Chris@49 109
Chris@49 110 return true;
Chris@49 111 }
Chris@49 112
Chris@49 113
Chris@49 114
Chris@49 115 //! @}