diff --git a/lib/numbers/matrix.js b/lib/numbers/matrix.js index 8a6aa5e..6f54b10 100644 --- a/lib/numbers/matrix.js +++ b/lib/numbers/matrix.js @@ -274,20 +274,20 @@ matrix.determinant = function (m) { } else if (numRow === 2) { return m[0][0] * m[1][1] - m[0][1] * m[1][0]; } - - for (col = 0; col < numCol; col++) { - diagLeft = m[0][col]; - diagRight = m[0][col]; - - for (row = 1; row < numRow; row++) { - diagRight *= m[row][(((col + row) % numCol) + numCol) % numCol]; - diagLeft *= m[row][(((col - row) % numCol) + numCol) % numCol]; + var indexColumn = 0; + var result = 0; + var numberOfAddedRows = 0; + while(indexColumn < numCol){ + numberOfAddedRows = 0; + var newArray = new Array(); + while(numberOfAddedRows < numRow - 1){ + newArray.push(m[numberOfAddedRows + 1].slice(0, indexColumn).concat(m[numberOfAddedRows + 1].slice(indexColumn + 1))) + numberOfAddedRows++; } - - det += diagRight - diagLeft; + result += Math.pow(-1, indexColumn) * m[0][indexColumn] * matrix.determinant(newArray); + indexColumn++; } - - return det; + return result; }; /**