Determinant of a matrix in JS
I’m currently reading Deep Learning, from Ian Goodfellow, Yoshua Bengio and Aaron Courville. While reading I got interested in calculating the determinant of a square matrix, I know there are many existing libraries to do that but the algorithm looked simply enough to give it a try.
Here’s my solution:
function det(m) {
var size = Math.sqrt(m.length);
if (size % 1 !== 0) {
return null;
}
if (size === 2) {
return m[0] * m[3] - m[1] * m[2];
}
return m.slice(0, size).reduce(function(t, v, i) {
var sub = [];
for (var r = size; r < m.length; r += size) {
sub = sub.concat(
m.slice(r, r + i),
m.slice(r + i + 1, r + size)
);
}
return t + (i % 2 === 0 ? -1 : 1) * v * det(sub);
}, 0);
}
The idea is to use a single array to define a matrix and the extract the length from using Math.sqrt, eg:
var matrix = [ 1, 2, 3, 4, 5, 6, 6, 7, 8 ]; var d = det(matrix); // 0
A running example can be found on JSFiddle.
Tags: determinant, matrix