matrix-multiplication
implements row by column multiplication   Last updated 3 years ago by fibo .
MIT · Repository · Bugs · Original npm · Tarball · package.json
`\$ cnpm install matrix-multiplication `
SYNC missed versions from official npm registry.

# matrix-multiplication

implements row by column multiplication

## Installation

With npm do

``````npm install matrix-multiplication
``````

## API

Optional custom operators are supported.

### `var operator = matrixMultiplication([customOperator])`

• @param `{Object}` [customOperator]
• @param `{Function}` [customOperator.addition] defaults to common `+`
• @param `{Function}` [customOperator.multiplication] defaults to common `*`
• @returns `{Function}` operator

### `var mul = operator(middle, leftMatrix, rightMatrix)`

The only requirement needed to multiply row by column an a x b matrix by an c x d matrix is that `b = c`, i.e. the middle indexes are equal. Actually two compatible matrices are n x m and m x l, let's call m the middle.

• @param `{Number}` middle
• @returns `{Function}` mul

### `var matrix = mul(leftMatrix, rightMatrix)`

Finally we have the matrix multiplication function. Remember that is not a commutative operator.

• @param `{Array}` leftMatrix
• @param `{Array}` rightMatrix
• @returns `{Array}` matrix

### `matrixMultiplication.error`

An object exposing the following error messages:

## Examples

All code in the examples below is intended to be contained into a single file.

Square matrices 2x2

``````var matrixMultiplication = require('matrix-multiplication')

var mul = matrixMultiplication()(2)

var leftMatrix = [2, 3,
1, 1]

var rightMatrix = [0, 1,
-1, 0]

mul(leftMatrix, rightMatrix) // [-3, 2,
//  -1, 1]
``````

Actually, any pair of matrices with middle = 2 can be multiplied with the same `mul` function, try with a 3x2 by 2x4

``````var matrix3x2 = [2, 3,
1, 1,
1, 1]

var matrix2x4 = [0, 1, 1, 1,
-1, 0, 2, 3]

mul(matrix3x2, matrix2x4) // [-3, 2, 8, 11,
//  -1, 1, 3, 4,
//  -1, 1, 3, 4])
``````

Matrices are checked for compatibility, for instances the following snippets will throw.

### leftMatrixNotCompatible

Since mul was defined as a multiplication with middle index 2, left matrix is not compatible cause it has 3 columns.

``````mul([1, 2, 3,
4, 5, 6,
7, 8, 9], [1, 2,
3, 4])
``````

### rightMatrixNotCompatible

Since mul was defined as a multiplication with middle index 2, right matrix is not compatible cause it has 3 rows.

``````mul([1, 2,
3, 4], [1, 2, 3,
4, 5, 6,
7, 8, 9])
``````

You can also multiply over a custom field, just provide a customOperator object with an addition and a multiplication function. The following example shows multiplication of two square matrices of booleans.

Matrices of strings are left as an excercise to the reader.

``````function booleanAdd (a, b) { return a || b }
function booleanMul (a, b) { return a && b }

var customOperators = {
multiplication: booleanMul
}

var mulB = matrixMultiplication(customOperators)(3)

var y = true
var n = false

var matrix = [n, y, n,
y, n, y,
n, y, n]

var identity = [y, n, n
n, y, n,
n, n, y]

mulB(matrix, identity) // [n, y, n,
//  y, n, y,
//  n, y, n]
``````

MIT

## Current Tags

• 0.5.2                                ...           latest (3 years ago)

## 7 Versions

• 0.5.2                                ...           3 years ago
• 0.5.1                                ...           3 years ago
• 0.5.0                                ...           4 years ago
• 0.4.0                                ...           5 years ago
• 0.3.0                                ...           5 years ago
• 0.2.0                                ...           5 years ago
• 0.1.0                                ...           5 years ago