In mathematics, especially in linear algebra and matrix theory, the duplication matrix and the elimination matrix are linear transformations used for transforming half-vectorizations of matrices into vectorizations or (respectively) vice versa.
Duplication matrix
The duplication matrix D n {\displaystyle D_{n}} is the unique n 2 × n ( n + 1 ) 2 {\displaystyle n^{2}\times {\frac {n(n+1)}{2}}} matrix which, for any n × n {\displaystyle n\times n} symmetric matrix A {\displaystyle A} , transforms v e c h ( A ) {\displaystyle \mathrm {vech} (A)} into v e c ( A ) {\displaystyle \mathrm {vec} (A)} :
D n v e c h ( A ) = v e c ( A ) {\displaystyle D_{n}\mathrm {vech} (A)=\mathrm {vec} (A)} .For the 2 × 2 {\displaystyle 2\times 2} symmetric matrix A = [ a b b d ] {\displaystyle A=\left[{\begin{smallmatrix}a&b\\b&d\end{smallmatrix}}\right]} , this transformation reads
D n v e c h ( A ) = v e c ( A ) ⟹ [ 1 0 0 0 1 0 0 1 0 0 0 1 ] [ a b d ] = [ a b b d ] {\displaystyle D_{n}\mathrm {vech} (A)=\mathrm {vec} (A)\implies {\begin{bmatrix}1&0&0\\0&1&0\\0&1&0\\0&0&1\end{bmatrix}}{\begin{bmatrix}a\\b\\d\end{bmatrix}}={\begin{bmatrix}a\\b\\b\\d\end{bmatrix}}}The explicit formula for calculating the duplication matrix for a n × n {\displaystyle n\times n} matrix is:
D n T = ∑ i ≥ j u i j ( v e c T i j ) T {\displaystyle D_{n}^{T}=\sum \limits _{i\geq j}u_{ij}(\mathrm {vec} T_{ij})^{T}}
Where:
- u i j {\displaystyle u_{ij}} is a unit vector of order 1 2 n ( n + 1 ) {\displaystyle {\frac {1}{2}}n(n+1)} having the value 1 {\displaystyle 1} in the position ( j − 1 ) n + i − 1 2 j ( j − 1 ) {\displaystyle (j-1)n+i-{\frac {1}{2}}j(j-1)} and 0 elsewhere;
- T i j {\displaystyle T_{ij}} is a n × n {\displaystyle n\times n} matrix with 1 in position ( i , j ) {\displaystyle (i,j)} and ( j , i ) {\displaystyle (j,i)} and zero elsewhere
Here is a C++ function using Armadillo (C++ library):
arma::mat duplication_matrix(const int &n) { arma::mat out((n*(n+1))/2, n*n, arma::fill::zeros); for (int j = 0; j < n; ++j) { for (int i = j; i < n; ++i) { arma::vec u((n*(n+1))/2, arma::fill::zeros); u(j*n+i-((j+1)*j)/2) = 1.0; arma::mat T(n,n, arma::fill::zeros); T(i,j) = 1.0; T(j,i) = 1.0; out += u * arma::trans(arma::vectorise(T)); } } return out.t(); }Elimination matrix
An elimination matrix L n {\displaystyle L_{n}} is a n ( n + 1 ) 2 × n 2 {\displaystyle {\frac {n(n+1)}{2}}\times n^{2}} matrix which, for any n × n {\displaystyle n\times n} matrix A {\displaystyle A} , transforms v e c ( A ) {\displaystyle \mathrm {vec} (A)} into v e c h ( A ) {\displaystyle \mathrm {vech} (A)} :
L n v e c ( A ) = v e c h ( A ) {\displaystyle L_{n}\mathrm {vec} (A)=\mathrm {vech} (A)} . 1By the explicit (constructive) definition given by Magnus & Neudecker (1980), the 1 2 n ( n + 1 ) {\displaystyle {\frac {1}{2}}n(n+1)} by n 2 {\displaystyle n^{2}} elimination matrix L n {\displaystyle L_{n}} is given by
L n = ∑ i ≥ j u i j v e c ( E i j ) T = ∑ i ≥ j ( u i j ⊗ e j T ⊗ e i T ) , {\displaystyle L_{n}=\sum _{i\geq j}u_{ij}\mathrm {vec} (E_{ij})^{T}=\sum _{i\geq j}(u_{ij}\otimes e_{j}^{T}\otimes e_{i}^{T}),}where e i {\displaystyle e_{i}} is a unit vector whose i {\displaystyle i} -th element is one and zeros elsewhere, and E i j = e i e j T {\displaystyle E_{ij}=e_{i}e_{j}^{T}} .
Here is a C++ function using Armadillo (C++ library):
arma::mat elimination_matrix(const int &n) { arma::mat out((n*(n+1))/2, n*n, arma::fill::zeros); for (int j = 0; j < n; ++j) { arma::rowvec e_j(n, arma::fill::zeros); e_j(j) = 1.0; for (int i = j; i < n; ++i) { arma::vec u((n*(n+1))/2, arma::fill::zeros); u(j*n+i-((j+1)*j)/2) = 1.0; arma::rowvec e_i(n, arma::fill::zeros); e_i(i) = 1.0; out += arma::kron(u, arma::kron(e_j, e_i)); } } return out; }For the 2 × 2 {\displaystyle 2\times 2} matrix A = [ a b c d ] {\displaystyle A=\left[{\begin{smallmatrix}a&b\\c&d\end{smallmatrix}}\right]} , one choice for this transformation is given by
L n v e c ( A ) = v e c h ( A ) ⟹ [ 1 0 0 0 0 1 0 0 0 0 0 1 ] [ a c b d ] = [ a c d ] {\displaystyle L_{n}\mathrm {vec} (A)=\mathrm {vech} (A)\implies {\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&0&1\end{bmatrix}}{\begin{bmatrix}a\\c\\b\\d\end{bmatrix}}={\begin{bmatrix}a\\c\\d\end{bmatrix}}} .Notes
- Magnus, Jan R.; Neudecker, Heinz (1980), "The elimination matrix: some lemmas and applications", SIAM Journal on Algebraic and Discrete Methods, 1 (4): 422–449, doi:10.1137/0601049, ISSN 0196-5212.
- Jan R. Magnus and Heinz Neudecker (1988), Matrix Differential Calculus with Applications in Statistics and Econometrics, Wiley. ISBN 0-471-98633-X.
- Jan R. Magnus (1988), Linear Structures, Oxford University Press. ISBN 0-19-520655-X
References
Magnus & Neudecker (1980), Definition 3.1 - Magnus, Jan R.; Neudecker, Heinz (1980), "The elimination matrix: some lemmas and applications", SIAM Journal on Algebraic and Discrete Methods, 1 (4): 422–449, doi:10.1137/0601049, ISSN 0196-5212 http://repository.uvt.nl/id/ir-uvt-nl:oai:wo.uvt.nl:153210 ↩