Duplication and elimination matrices

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 is the unique n^2 \times \frac{n(n+1)}{2} matrix which, for any n \times n symmetric matrix A , transforms \mathrm{vech}(A) into \mathrm{vec}(A):

: D_n \mathrm{vech}(A) = \mathrm{vec}(A).

For the 2 \times 2 symmetric matrix A=\left[\begin{smallmatrix} a & b \\ b & d \end{smallmatrix}\right], this transformation reads

: 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 \times n matrix is:

D^T_n = \sum \limits_{i \ge j} u_{ij} (\mathrm{vec}T_{ij})^T

Where:

  • u_{ij} is a unit vector of order \frac{1}{2} n (n+1) having the value 1 in the position (j-1)n+i - \frac{1}{2}j(j-1) and 0 elsewhere;
  • T_{ij} is a n \times n matrix with 1 in position (i,j) and (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 is a \frac{n(n+1)}{2} \times n^2 matrix which, for any n \times n matrix A, transforms \mathrm{vec}(A) into \mathrm{vech}(A):

:L_n \mathrm{vec}(A) = \mathrm{vech}(A){{harvtxt|Magnus|Neudecker|1980}}, Definition 3.1

By the explicit (constructive) definition given by {{harvtxt|Magnus|Neudecker|1980}}, the \frac{1}{2}n(n+1) by n^2 elimination matrix L_n is given by

: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 is a unit vector whose i-th element is one and zeros elsewhere, and E_{ij} = e_ie_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 \times 2 matrix A = \left[\begin{smallmatrix} a & b \\ c & d \end{smallmatrix}\right], one choice for this transformation is given by

: 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

References

  • {{Citation | last1=Magnus | first1=Jan R. | last2=Neudecker | first2=Heinz | title=The elimination matrix: some lemmas and applications | doi=10.1137/0601049 | year=1980 | journal= SIAM Journal on Algebraic and Discrete Methods| issn=0196-5212 | volume=1 | issue=4 | pages=422–449| url=http://repository.uvt.nl/id/ir-uvt-nl:oai:wo.uvt.nl:153210 }}.
  • 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}}

Category:Matrices (mathematics)

de:Eliminationsmatrix