DIAG (matrix);
The DIAG function creates a diagonal matrix. The matrix argument can be either a numeric square matrix or a vector.
If matrix is a square matrix, the DIAG function creates a matrix with diagonal elements equal to the corresponding diagonal elements. All off-diagonal elements in the new matrix are zeros.
If matrix is a vector, the DIAG function creates a matrix with diagonal elements that are the values in the vector. All off-diagonal elements are zeros.
For example, the following statements produce a diagonal matrix by extracting the diagonal elements of a square matrix:
a = {4 3,
2 1};
c = diag(a);
print c;
The following statements produce a diagonal matrix by using the elements of a vector:
b = {1 2 3};
d = diag(b);
print d;
The DIAG function is useful, but is not always necessary. Most multiplication operations with diagonal matrices can be accomplished by using the elementwise multiplication operator . To add or subtract from the diagonal of a matrix, you can directly reference the matrix elements, as shown in the following example:
A = j(5,5,1);
v = T(1:5);
D = diag(v);
/* overwrite A with A + diag(v) */
/* method 1: less efficient */
A = j(5,5,1);
A = A + diag(v); /* explicitly form 5x5 diagonal matrix */
/* method 2: more efficient */
A = j(5,5,1);
j = do(1, ncol(A)*nrow(A), ncol(A)+1); /* {1 7 13 19 25} */
A[j] = vecdiag(A) + v; /* access diagonal elements directly */