Skip to content

Commit

Permalink
Add partial pivoting
Browse files Browse the repository at this point in the history
Fixes `NaN` values in matrix inverse when zero on diagonal
  • Loading branch information
bhavjitChauhan committed Nov 27, 2023
1 parent db5bb58 commit d3f0a82
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/Chalkboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -1793,6 +1793,21 @@ var Chalkboard = {
}
for(var row = 0; row < Chalkboard.matr.rows(matr); row++) {
var diagonal = augmented[row][row];
if (diagonal === 0) {
// find row w/ maximum absolute value in this column
var max = row;
for (var i = row + 1; i < Chalkboard.matr.rows(matr); i++) {
if (Math.abs(augmented[i][row]) > Math.abs(augmented[max][row])) {
max = i;
}
}
// swap rows
var temp = augmented[row];
augmented[row] = augmented[max];
augmented[max] = temp;

diagonal = augmented[row][row];
}
for(var col = 0; col < 2 * Chalkboard.matr.cols(matr); col++) {
augmented[row][col] /= diagonal;
}
Expand Down

0 comments on commit d3f0a82

Please sign in to comment.