# mtimes, *

Matrix multiplication

## Syntax

## Description

is the matrix product of `C`

= `A`

*`B`

`A`

and `B`

. If
`A`

is an m-by-p and `B`

is a p-by-n
matrix, then `C`

is an m-by-n matrix defined by

$$C(i,j)={\displaystyle \sum _{k=1}^{p}A}(i,k)B(k,j).$$

This definition says that `C(i,j)`

is the inner product of
the `i`

th row of `A`

with the
`j`

th column of `B`

. You can write this
definition using the MATLAB^{®} colon operator as

C(i,j) = A(i,:)*B(:,j)

`A`

and `B`

, the number of columns
of `A`

must equal the number of rows of `B`

.
Matrix multiplication is *not*universally commutative for nonscalar inputs. That is,

`A*B`

is typically not equal to
`B*A`

. If at least one input is scalar, then
`A*B`

is equivalent to `A.*B`

and is
commutative.## Examples

## Input Arguments

## Output Arguments

## Tips

With chained matrix multiplications such as

`A*B*C`

, you might be able to improve execution time by using parentheses to dictate the order of the operations. Consider the case of multiplying three matrices with`A*B*C`

, where`A`

is 500-by-2,`B`

is 2-by-500, and`C`

is 500-by-2.With no parentheses, the order of operations is left to right so

`A*B`

is calculated first, which forms a 500-by-500 matrix. This matrix is then multiplied with`C`

to arrive at the 500-by-2 result.If you instead specify

`A*(B*C)`

, then`B*C`

is multiplied first, producing a 2-by-2 matrix. The small matrix then multiplies`A`

to arrive at the same 500-by-2 result, but with fewer operations and less intermediate memory usage.

## References

[1] “BLAS (Basic Linear Algebra Subprograms).” Accessed July 18, 2022. https://netlib.org/blas/.

[2] Davis, Timothy A. “Algorithm
1000: SuiteSparse:GraphBLAS: Graph Algorithms in the Language of Sparse Linear Algebra.”
*ACM Transactions on Mathematical Software* 45, no. 4 (December
31, 2019): 1–25. https://doi.org/10.1145/3322125.

## Extended Capabilities

## Version History

**Introduced before R2006a**