comparison armadillo-2.4.4/include/armadillo_bits/fn_kron.hpp @ 0:8b6102e2a9b0

Armadillo Library
author maxzanoni76 <max.zanoni@eecs.qmul.ac.uk>
date Wed, 11 Apr 2012 09:27:06 +0100
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:8b6102e2a9b0
1 // Copyright (C) 2009-2010 NICTA (www.nicta.com.au)
2 // Copyright (C) 2009-2010 Conrad Sanderson
3 // Copyright (C) 2009-2010 Dimitrios Bouzas
4 //
5 // This file is part of the Armadillo C++ library.
6 // It is provided without any warranty of fitness
7 // for any purpose. You can redistribute this file
8 // and/or modify it under the terms of the GNU
9 // Lesser General Public License (LGPL) as published
10 // by the Free Software Foundation, either version 3
11 // of the License or (at your option) any later version.
12 // (see http://www.opensource.org/licenses for more info)
13
14
15 //! \addtogroup fn_kron
16 //! @{
17
18
19
20 //! \brief
21 //! kronecker product of two matrices,
22 //! with the matrices having the same element type
23 template<typename T1, typename T2>
24 arma_inline
25 const Glue<T1,T2,glue_kron>
26 kron(const Base<typename T1::elem_type,T1>& A, const Base<typename T1::elem_type,T2>& B)
27 {
28 arma_extra_debug_sigprint();
29
30 return Glue<T1, T2, glue_kron>(A.get_ref(), B.get_ref());
31 }
32
33
34
35 //! \brief
36 //! kronecker product of two matrices,
37 //! with the matrices having different element types
38 template<typename T, typename T1, typename T2>
39 inline
40 Mat<typename eT_promoter<T1,T2>::eT>
41 kron(const Base<std::complex<T>,T1>& X, const Base<T,T2>& Y)
42 {
43 arma_extra_debug_sigprint();
44
45 typedef typename std::complex<T> eT1;
46
47 promote_type<eT1,T>::check();
48
49 const unwrap<T1> tmp1(X.get_ref());
50 const unwrap<T2> tmp2(Y.get_ref());
51
52 const Mat<eT1>& A = tmp1.M;
53 const Mat<T >& B = tmp2.M;
54
55 Mat<eT1> out;
56
57 glue_kron::direct_kron(out, A, B);
58
59 return out;
60 }
61
62
63
64 //! \brief
65 //! kronecker product of two matrices,
66 //! with the matrices having different element types
67 template<typename T, typename T1, typename T2>
68 inline
69 Mat<typename eT_promoter<T1,T2>::eT>
70 kron(const Base<T,T1>& X, const Base<std::complex<T>,T2>& Y)
71 {
72 arma_extra_debug_sigprint();
73
74 typedef typename std::complex<T> eT2;
75
76 promote_type<T,eT2>::check();
77
78 const unwrap<T1> tmp1(X.get_ref());
79 const unwrap<T2> tmp2(Y.get_ref());
80
81 const Mat<T >& A = tmp1.M;
82 const Mat<eT2>& B = tmp2.M;
83
84 Mat<eT2> out;
85
86 glue_kron::direct_kron(out, A, B);
87
88 return out;
89 }
90
91
92
93 //! @}