Advertisement
phosphoer

Javascript row reduce

Jul 26th, 2013
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function RowAdd(matrix, toRow, fromRow, fromRowScale)
  2. {
  3.   for (var i in matrix[toRow])
  4.     matrix[toRow][i] += matrix[fromRow][i] * fromRowScale;
  5. }
  6.  
  7. function RowMultiply(matrix, row, scalar)
  8. {
  9.   for (var i in matrix[row])
  10.     matrix[row][i] *= scalar;
  11. }
  12.  
  13. // Pseudo code from http://rosettacode.org/wiki/Reduced_row_echelon_form
  14. // matrix should be a 2D array of values
  15. function RowReduce(matrix)
  16. {
  17.   var lead = 0;
  18.   var rowCount = matrix.length;
  19.   var colCount = matrix[0].length;
  20.  
  21.   for (var r = 0; r < rowCount; ++r)
  22.   {
  23.     if (colCount <= lead)
  24.       return;
  25.  
  26.     var i = r;
  27.     while (matrix[i][lead] == 0)
  28.     {
  29.       ++i;
  30.       if (i == rowCount)
  31.       {
  32.         i = r;
  33.         ++lead;
  34.         if (colCount == lead)
  35.           return;
  36.       }
  37.     }
  38.  
  39.     // Swap rows
  40.     var tmp = matrix[i];
  41.     matrix[i] = matrix[r];
  42.     matrix[r] = tmp;
  43.  
  44.     if (matrix[r, lead] != 0)
  45.       RowMultiply(matrix, r, 1 / matrix[r][lead]);
  46.  
  47.     for (var i = 0; i < rowCount; ++i)
  48.     {
  49.       if (i != r)
  50.         RowAdd(matrix, i, r, -matrix[i][lead]);
  51.     }
  52.  
  53.     ++lead;
  54.   }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement