Functions | |
template<typename T1 > | |
void | eig_sym (Col< typename T1::pod_type > &eigval, const Base< typename T1::elem_type, T1 > &X, const typename arma_blas_type_only< typename T1::elem_type >::result *junk=0) |
Eigenvalues of real/complex symmetric/hermitian matrix X. | |
template<typename T1 > | |
Col< typename T1::pod_type > | eig_sym (const Base< typename T1::elem_type, T1 > &X, const typename arma_blas_type_only< typename T1::elem_type >::result *junk=0) |
Eigenvalues of real/complex symmetric/hermitian matrix X. | |
template<typename T1 > | |
void | eig_sym (Col< typename T1::pod_type > &eigval, Mat< typename T1::elem_type > &eigvec, const Base< typename T1::elem_type, T1 > &X, const typename arma_blas_type_only< typename T1::elem_type >::result *junk=0) |
Eigenvalues and eigenvectors of real/complex symmetric/hermitian matrix X. | |
template<typename T1 > | |
void | eig_gen (Col< std::complex< typename T1::pod_type > > &eigval, Mat< typename T1::elem_type > &l_eigvec, Mat< typename T1::elem_type > &r_eigvec, const Base< typename T1::elem_type, T1 > &X, const typename arma_blas_type_only< typename T1::elem_type >::result *junk=0) |
Eigenvalues and eigenvectors (both left and right) of general real/complex square matrix X. | |
template<typename eT , typename T1 > | |
void | eig_gen (Col< std::complex< eT > > &eigval, Mat< std::complex< eT > > &eigvec, const Base< eT, T1 > &X, const char side= 'r', const typename arma_blas_type_only< typename T1::elem_type >::result *junk=0) |
Eigenvalues and eigenvectors of general real square matrix X. Optional argument 'side' specifies which eigenvectors should be computed: 'r' for right (default) and 'l' for left. | |
template<typename T , typename T1 > | |
void | eig_gen (Col< std::complex< T > > &eigval, Mat< std::complex< T > > &eigvec, const Base< std::complex< T >, T1 > &X, const char side= 'r', const typename arma_blas_type_only< typename T1::elem_type >::result *junk=0) |
Eigenvalues and eigenvectors of general complex square matrix X Optional argument 'side' specifies which eigenvectors should be computed: 'r' for right (default) and 'l' for left. |
void eig_sym | ( | Col< typename T1::pod_type > & | eigval, | |
const Base< typename T1::elem_type, T1 > & | X, | |||
const typename arma_blas_type_only< typename T1::elem_type >::result * | junk = 0 | |||
) | [inline] |
Eigenvalues of real/complex symmetric/hermitian matrix X.
Definition at line 31 of file fn_eig.hpp.
References auxlib::eig_sym(), and Base< elem_type, derived >::get_ref().
Referenced by eig_sym().
00032 { 00033 arma_extra_debug_sigprint(); 00034 00035 typedef typename T1::elem_type eT; 00036 00037 // unwrap_check not used as T1::elem_type and T1::pod_type may not be the same. 00038 // furthermore, it doesn't matter if A is an alias of S, as auxlib::eig() makes a copy of A 00039 00040 const unwrap<T1> tmp(X.get_ref()); 00041 const Mat<eT>& A = tmp.M; 00042 00043 auxlib::eig_sym(eigval, A); 00044 }
Col<typename T1::pod_type> eig_sym | ( | const Base< typename T1::elem_type, T1 > & | X, | |
const typename arma_blas_type_only< typename T1::elem_type >::result * | junk = 0 | |||
) | [inline] |
Eigenvalues of real/complex symmetric/hermitian matrix X.
Definition at line 52 of file fn_eig.hpp.
References eig_sym().
00053 { 00054 arma_extra_debug_sigprint(); 00055 00056 Col<typename T1::pod_type> out; 00057 eig_sym(out, X); 00058 00059 return out; 00060 }
void eig_sym | ( | Col< typename T1::pod_type > & | eigval, | |
Mat< typename T1::elem_type > & | eigvec, | |||
const Base< typename T1::elem_type, T1 > & | X, | |||
const typename arma_blas_type_only< typename T1::elem_type >::result * | junk = 0 | |||
) | [inline] |
Eigenvalues and eigenvectors of real/complex symmetric/hermitian matrix X.
Definition at line 68 of file fn_eig.hpp.
References auxlib::eig_sym(), and Base< elem_type, derived >::get_ref().
00074 { 00075 arma_extra_debug_sigprint(); 00076 00077 typedef typename T1::elem_type eT; 00078 00079 const unwrap<T1> tmp(X.get_ref()); 00080 const Mat<eT>& A = tmp.M; 00081 00082 auxlib::eig_sym(eigval, eigvec, A); 00083 }
void eig_gen | ( | Col< std::complex< typename T1::pod_type > > & | eigval, | |
Mat< typename T1::elem_type > & | l_eigvec, | |||
Mat< typename T1::elem_type > & | r_eigvec, | |||
const Base< typename T1::elem_type, T1 > & | X, | |||
const typename arma_blas_type_only< typename T1::elem_type >::result * | junk = 0 | |||
) | [inline] |
Eigenvalues and eigenvectors (both left and right) of general real/complex square matrix X.
Definition at line 98 of file fn_eig.hpp.
References auxlib::eig_gen(), and Base< elem_type, derived >::get_ref().
00105 { 00106 arma_extra_debug_sigprint(); 00107 00108 typedef typename T1::elem_type eT; 00109 00110 const unwrap<T1> tmp(X.get_ref()); 00111 const Mat<eT>& A = tmp.M; 00112 00113 auxlib::eig_gen(eigval, l_eigvec, r_eigvec, A, 'b'); 00114 }
void eig_gen | ( | Col< std::complex< eT > > & | eigval, | |
Mat< std::complex< eT > > & | eigvec, | |||
const Base< eT, T1 > & | X, | |||
const char | side = 'r' , |
|||
const typename arma_blas_type_only< typename T1::elem_type >::result * | junk = 0 | |||
) | [inline] |
Eigenvalues and eigenvectors of general real square matrix X. Optional argument 'side' specifies which eigenvectors should be computed: 'r' for right (default) and 'l' for left.
Definition at line 125 of file fn_eig.hpp.
References arma_stop(), Mat< eT >::at(), conj(), auxlib::eig_gen(), Base< elem_type, derived >::get_ref(), and Mat< eT >::set_size().
00132 { 00133 arma_extra_debug_sigprint(); 00134 00135 //std::cout << "real" << std::endl; 00136 00137 const unwrap<T1> tmp(X.get_ref()); 00138 const Mat<eT>& A = tmp.M; 00139 00140 Mat<eT> dummy_eigvec; 00141 Mat<eT> tmp_eigvec; 00142 00143 switch(side) 00144 { 00145 case 'r': 00146 auxlib::eig_gen(eigval, dummy_eigvec, tmp_eigvec, A, side); 00147 break; 00148 00149 case 'l': 00150 auxlib::eig_gen(eigval, tmp_eigvec, dummy_eigvec, A, side); 00151 break; 00152 00153 default: 00154 arma_stop("eig_gen(): parameter 'side' is invalid"); 00155 return; 00156 } 00157 00158 00159 const u32 n = A.n_rows; 00160 00161 if(n > 0) 00162 { 00163 eigvec.set_size(n,n); 00164 00165 for(u32 j=0; j<n; ++j) 00166 { 00167 if( (j < n-1) && (eigval[j] == std::conj(eigval[j+1])) ) 00168 { 00169 // eigvec.col(j) = Mat< std::complex<eT> >( tmp_eigvec.col(j), tmp_eigvec.col(j+1) ); 00170 // eigvec.col(j+1) = Mat< std::complex<eT> >( tmp_eigvec.col(j), -tmp_eigvec.col(j+1) ); 00171 00172 for(u32 i=0; i<n; ++i) 00173 { 00174 eigvec.at(i,j) = std::complex<eT>( tmp_eigvec.at(i,j), tmp_eigvec.at(i,j+1) ); 00175 eigvec.at(i,j+1) = std::complex<eT>( tmp_eigvec.at(i,j), -tmp_eigvec.at(i,j+1) ); 00176 } 00177 00178 ++j; 00179 } 00180 else 00181 { 00182 // eigvec.col(i) = tmp_eigvec.col(i); 00183 00184 for(u32 i=0; i<n; ++i) 00185 { 00186 eigvec.at(i,j) = std::complex<eT>(tmp_eigvec.at(i,j), eT(0)); 00187 } 00188 00189 } 00190 } 00191 } 00192 00193 }
void eig_gen | ( | Col< std::complex< T > > & | eigval, | |
Mat< std::complex< T > > & | eigvec, | |||
const Base< std::complex< T >, T1 > & | X, | |||
const char | side = 'r' , |
|||
const typename arma_blas_type_only< typename T1::elem_type >::result * | junk = 0 | |||
) | [inline] |
Eigenvalues and eigenvectors of general complex square matrix X Optional argument 'side' specifies which eigenvectors should be computed: 'r' for right (default) and 'l' for left.
Definition at line 204 of file fn_eig.hpp.
References arma_stop(), auxlib::eig_gen(), and Base< elem_type, derived >::get_ref().
00211 { 00212 arma_extra_debug_sigprint(); 00213 //std::cout << "complex" << std::endl; 00214 00215 typedef typename std::complex<T> eT; 00216 00217 const unwrap<T1> tmp(X.get_ref()); 00218 const Mat<eT>& A = tmp.M; 00219 00220 Mat<eT> dummy_eigvec; 00221 00222 switch(side) 00223 { 00224 case 'r': 00225 auxlib::eig_gen(eigval, dummy_eigvec, eigvec, A, side); 00226 break; 00227 00228 case 'l': 00229 auxlib::eig_gen(eigval, eigvec, dummy_eigvec, A, side); 00230 break; 00231 00232 default: 00233 arma_stop("eig_gen(): parameter 'side' is invalid"); 00234 } 00235 }