From 578741110ff906a74bb8d969a23f5b65c8c39c83 Mon Sep 17 00:00:00 2001 From: youngbizman <63377152+youngbizman@users.noreply.github.com> Date: Fri, 4 Feb 2022 18:38:13 +0330 Subject: [PATCH] new algorithm for matrix determinant --- lib/numbers/matrix.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) 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; }; /**