# comm.prod: Matrix multiplication envolving the commutation matrix In fastmatrix: Fast Computation of some Matrices Useful in Statistics

## Description

Given the row and column dimension of a commutation and matrix `x`, performs one of the matrix-matrix operations:

• \bold{Y} = \bold{KX}, if `side = "left"` and `transposed = FALSE`, or

• \bold{Y} = \bold{K}^T\bold{X}, if `side = "left"` and `transposed = TRUE`, or

• \bold{Y} = \bold{XK}, if `side = "right"` and `transposed = FALSE`, or

• \bold{Y} = \bold{XK}^T, if `side = "right"` and `transposed = TRUE`,

where \bold{K} is the commutation matrix of order mn. The main aim of `comm.prod` is to do this matrix multiplication without forming the commutation matrix.

## Usage

 `1` ```comm.prod(m = 1, n = m, x = NULL, transposed = FALSE, side = "left") ```

## Arguments

 `m` a positive integer row dimension. `n` a positive integer column dimension. `x` numeric matrix (or vector). `transposed` logical. Commutation matrix should be transposed? `side` a string selecting if commutation matrix is pre-multiplying `x`, that is `side = "left"` or post-multiplying `x`, by using `side = "right"`.

## Details

Underlying `Fortran` code only uses information provided by `comm.info` to performs the matrix multiplication. The commutation matrix is never created.

`commutation`
 ```1 2 3 4 5 6``` ```K42 <- commutation(m = 4, n = 2, matrix = TRUE) x <- matrix(1:24, ncol = 3) y <- K42 %*% x z <- comm.prod(m = 4, n = 2, x) # K42 is not stored all(z == y) # matrices y and z are equal! ```