# Matrix Operations
`ad_trait` is designed to handle linear algebra efficiently. The `AD` trait includes requirements for matrix-scalar multiplication, which is the foundation for differentiating through linear systems.
## Scalar-Matrix Multiplication
Types implementing `AD` must provide:
- `mul_by_nalgebra_matrix`: Multiplies an AD scalar by a `nalgebra` matrix.
- `mul_by_ndarray_matrix_ref`: Multiplies an AD scalar by an `ndarray` array.
## Why this is necessary
By providing these specialized methods at the trait level, `ad_trait` can ensure that matrix operations are handled correctly for each AD mode. For example, in `ForwardAD`, the matrix multiplication also propagates the tangent through every element of the matrix.
## Performance Considerations
When performing large matrix multiplications, it is often more efficient to use a differentiation mode that minimizes the number of passes (like `ReverseAD` or `ForwardADMulti`).