Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00016
00017
00018
00019 template<typename T1>
00020 inline
00021 bool
00022 svd
00023 (
00024 Col<typename T1::pod_type>& S,
00025 const Base<typename T1::elem_type,T1>& X,
00026 const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0
00027 )
00028 {
00029 arma_extra_debug_sigprint();
00030 arma_ignore(junk);
00031
00032
00033
00034 const bool status = auxlib::svd(S, X);
00035
00036 if(status == false)
00037 {
00038 S.reset();
00039 arma_bad("svd(): failed to converge", false);
00040 }
00041
00042 return status;
00043 }
00044
00045
00046
00047 template<typename T1>
00048 inline
00049 Col<typename T1::pod_type>
00050 svd
00051 (
00052 const Base<typename T1::elem_type,T1>& X,
00053 const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0
00054 )
00055 {
00056 arma_extra_debug_sigprint();
00057 arma_ignore(junk);
00058
00059 Col<typename T1::pod_type> out;
00060
00061 const bool status = auxlib::svd(out, X);
00062
00063 if(status == false)
00064 {
00065 out.reset();
00066 arma_bad("svd(): failed to converge");
00067 }
00068
00069 return out;
00070 }
00071
00072
00073
00074 template<typename T1>
00075 inline
00076 bool
00077 svd
00078 (
00079 Mat<typename T1::elem_type>& U,
00080 Col<typename T1::pod_type >& S,
00081 Mat<typename T1::elem_type>& V,
00082 const Base<typename T1::elem_type,T1>& X,
00083 const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0
00084 )
00085 {
00086 arma_extra_debug_sigprint();
00087 arma_ignore(junk);
00088
00089 typedef typename T1::elem_type eT;
00090
00091 arma_debug_check
00092 (
00093 ( ((void*)(&U) == (void*)(&S)) || (&U == &V) || ((void*)(&S) == (void*)(&V)) ),
00094 "svd(): two or more output objects are the same object"
00095 );
00096
00097
00098 const bool status = auxlib::svd(U, S, V, X);
00099
00100 if(status == false)
00101 {
00102 U.reset();
00103 S.reset();
00104 V.reset();
00105 arma_bad("svd(): failed to converge", false);
00106 }
00107
00108 return status;
00109 }
00110
00111
00112
00113 template<typename T1>
00114 inline
00115 bool
00116 svd_econ
00117 (
00118 Mat<typename T1::elem_type>& U,
00119 Col<typename T1::pod_type >& S,
00120 Mat<typename T1::elem_type>& V,
00121 const Base<typename T1::elem_type,T1>& X,
00122 const char mode = 'b',
00123 const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0
00124 )
00125 {
00126 arma_extra_debug_sigprint();
00127 arma_ignore(junk);
00128
00129 typedef typename T1::elem_type eT;
00130
00131 arma_debug_check
00132 (
00133 ( ((void*)(&U) == (void*)(&S)) || (&U == &V) || ((void*)(&S) == (void*)(&V)) ),
00134 "svd_econ(): two or more output objects are the same object"
00135 );
00136
00137 arma_debug_check
00138 (
00139 ( (mode != 'l') && (mode != 'r') && (mode != 'b') ),
00140 "svd_econ(): parameter 'mode' is incorrect"
00141 );
00142
00143
00144
00145 const bool status = auxlib::svd_econ(U, S, V, X, mode);
00146
00147 if(status == false)
00148 {
00149 U.reset();
00150 S.reset();
00151 V.reset();
00152 arma_bad("svd_econ(): failed to converge", false);
00153 }
00154
00155 return status;
00156 }
00157
00158
00159
00160 template<typename T1>
00161 arma_deprecated
00162 inline
00163 bool
00164 svd_thin
00165 (
00166 Mat<typename T1::elem_type>& U,
00167 Col<typename T1::pod_type >& S,
00168 Mat<typename T1::elem_type>& V,
00169 const Base<typename T1::elem_type,T1>& X,
00170 const char mode = 'b',
00171 const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0
00172 )
00173 {
00174 arma_ignore(junk);
00175
00176 return svd_econ(U,S,V,X,mode);
00177 }
00178
00179
00180