For a square matrix A, vech(A) returns the vector formed
by the lower triangular portion of the matrix, including the diagonal;
usually, this only makes sense for a symmetric matrix of numeric values.
If v=vech(M) where M is a symmetric numeric matrix,
vech2mat(v) performs the inverse operation and returns the original
matrix M; this explain the requirement on length(v).
For a positive integer n, D=duplicationMatrix(n) is a matrix
of dimension (n^2, n*(n+1)/2) such that D %*% vech(M) returns
the vec-form of a symmetric matrix M of
order n, that is, the vector which stacks the columns of M;
for more information, see Section 3.8 of Magnus and Neudecker (1988).
For a square numeric matrix x, tr(x) returns its trace.
blockDiag(...) creates a block-diagonal matrix from a set of matrices
or objects coercible into matrices. Generally, this is useful only for
numeric objects.