Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 template<typename T1>
00024 inline
00025 arma_warn_unused
00026 typename T1::elem_type
00027 det(const Base<typename T1::elem_type,T1>& X, const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0)
00028 {
00029 arma_extra_debug_sigprint();
00030
00031 typedef typename T1::elem_type eT;
00032
00033 const unwrap<T1> tmp(X.get_ref());
00034 const Mat<eT>& A = tmp.M;
00035
00036 arma_debug_check( !A.is_square(), "det(): matrix must be square" );
00037
00038 return auxlib::det(A);
00039 }
00040
00041
00042
00043
00044 template<typename T1>
00045 inline
00046 arma_warn_unused
00047 typename T1::elem_type
00048 det(const Op<T1, op_diagmat>& X)
00049 {
00050 arma_extra_debug_sigprint();
00051
00052 typedef typename T1::elem_type eT;
00053
00054 const diagmat_proxy<T1> A(X.m);
00055
00056 arma_debug_check( (A.n_elem == 0), "det(): given object has no elements" );
00057
00058 eT val = A[0];
00059
00060 for(u32 i=1; i<A.n_elem; ++i)
00061 {
00062 val *= A[i];
00063 }
00064
00065 return val;
00066 }
00067
00068
00069
00070
00071 template<typename T1>
00072 inline
00073 arma_warn_unused
00074 typename T1::elem_type
00075 det(const Op<T1,op_inv>& in, const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0)
00076 {
00077 arma_extra_debug_sigprint();
00078
00079 typedef typename T1::elem_type eT;
00080 isnt_fltpt<eT>::check();
00081
00082 eT tmp = det(in.m);
00083 arma_warn( (tmp == eT(0)), "det(): warning: denominator is zero" );
00084
00085 return eT(1) / tmp;
00086 }
00087
00088
00089
00090
00091 template<typename T1>
00092 inline
00093 arma_warn_unused
00094 typename T1::elem_type
00095 det(const Op<T1,op_trans>& in, const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0)
00096 {
00097 arma_extra_debug_sigprint();
00098
00099 typedef typename T1::elem_type eT;
00100
00101 const unwrap<T1> tmp(in.m);
00102 const Mat<eT>& X = tmp.M;
00103
00104 return det(X);
00105 }
00106
00107
00108
00109