This is an old version, view current version.

## 5.8 Diagonal matrix functions

matrix add_diag(matrix m, row_vector d)
Add row_vector d to the diagonal of matrix m.

matrix add_diag(matrix m, vector d)
Add vector d to the diagonal of matrix m.

matrix add_diag(matrix m, real d)
Add scalar d to every diagonal element of matrix m.

vector diagonal(matrix x)
The diagonal of the matrix x

matrix diag_matrix(vector x)
The diagonal matrix with diagonal x

Although the diag_matrix function is available, it is unlikely to ever show up in an efficient Stan program. For example, rather than converting a diagonal to a full matrix for use as a covariance matrix,

 y ~ multi_normal(mu, diag_matrix(square(sigma)));

it is much more efficient to just use a univariate normal, which produces the same density,

 y ~ normal(mu, sigma);

Rather than writing m * diag_matrix(v) where m is a matrix and v is a vector, it is much more efficient to write diag_post_multiply(m, v) (and similarly for pre-multiplication). By the same token, it is better to use quad_form_diag(m, v) rather than quad_form(m, diag_matrix(v)).

matrix identity_matrix(int k)
Create an identity matrix of size $$k \times k$$