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
00024
00025 template<typename eT>
00026 inline
00027 void
00028 glue_kron::direct_kron(Mat<eT>& out, const Mat<eT>& A, const Mat<eT>& B)
00029 {
00030 arma_extra_debug_sigprint();
00031
00032 const u32 A_rows = A.n_rows;
00033 const u32 A_cols = A.n_cols;
00034 const u32 B_rows = B.n_rows;
00035 const u32 B_cols = B.n_cols;
00036
00037 out.set_size(A_rows*B_rows, A_cols*B_cols);
00038
00039 for(u32 i = 0; i < A_rows; i++)
00040 {
00041 for(u32 j = 0; j < A_cols; j++)
00042 {
00043 out.submat(i*B_rows, j*B_cols, (i+1)*B_rows-1, (j+1)*B_cols-1) = A(i,j) * B;
00044 }
00045 }
00046 }
00047
00048
00049
00050
00051
00052
00053 template<typename T>
00054 inline
00055 void
00056 glue_kron::direct_kron(Mat< std::complex<T> >& out, const Mat< std::complex<T> >& A, const Mat<T>& B)
00057 {
00058 arma_extra_debug_sigprint();
00059
00060 typedef typename std::complex<T> eT;
00061
00062 const u32 A_rows = A.n_rows;
00063 const u32 A_cols = A.n_cols;
00064 const u32 B_rows = B.n_rows;
00065 const u32 B_cols = B.n_cols;
00066
00067 out.set_size(A_rows*B_rows, A_cols*B_cols);
00068
00069 Mat<eT> tmp_B = conv_to< Mat<eT> >::from(B);
00070
00071 for(u32 i = 0; i < A_rows; i++)
00072 {
00073 for(u32 j = 0; j < A_cols; j++)
00074 {
00075 out.submat(i*B_rows, j*B_cols, (i+1)*B_rows-1, (j+1)*B_cols-1) = A(i,j) * tmp_B;
00076 }
00077 }
00078 }
00079
00080
00081
00082
00083
00084
00085 template<typename T>
00086 inline
00087 void
00088 glue_kron::direct_kron(Mat< std::complex<T> >& out, const Mat<T>& A, const Mat< std::complex<T> >& B)
00089 {
00090 arma_extra_debug_sigprint();
00091
00092 const u32 A_rows = A.n_rows;
00093 const u32 A_cols = A.n_cols;
00094 const u32 B_rows = B.n_rows;
00095 const u32 B_cols = B.n_cols;
00096
00097 out.set_size(A_rows*B_rows, A_cols*B_cols);
00098
00099 for(u32 i = 0; i < A_rows; i++)
00100 {
00101 for(u32 j = 0; j < A_cols; j++)
00102 {
00103 out.submat(i*B_rows, j*B_cols, (i+1)*B_rows-1, (j+1)*B_cols-1) = A(i,j) * B;
00104 }
00105 }
00106 }
00107
00108
00109
00110
00111
00112 template<typename T1, typename T2>
00113 inline
00114 void
00115 glue_kron::apply(Mat<typename T1::elem_type>& out, const Glue<T1,T2,glue_kron>& X)
00116 {
00117 arma_extra_debug_sigprint();
00118
00119 typedef typename T1::elem_type eT;
00120
00121 const unwrap_check<T1> A_tmp(X.A, out);
00122 const unwrap_check<T2> B_tmp(X.B, out);
00123
00124 const Mat<eT>& A = A_tmp.M;
00125 const Mat<eT>& B = B_tmp.M;
00126
00127 glue_kron::direct_kron(out, A, B);
00128 }
00129
00130
00131
00132