code: private static void columnOpTransform(Matrix M, int low, int high, int n, double q, double p, int shift)
      {
          double z;
          for (int i = low; i <= high; i++)
          {
              z = M.get(i, n+shift);
              M.set(i, n+shift,  q * z + p * M.get(i, n));
              M.set(i, n,        q * M.get(i, n) - p * z);
          }
      }
docs: Updates the columns of the matrix M such that <br><br>
  <code><br>
  for (int i = low; i <= high; i++)<br>
  {<br>
  &nbsp;&nbsp; z = M[i][n+shift];<br>
  &nbsp;&nbsp; M[i][n+shift] = q * z + p * M[i][n];<br>
  &nbsp;&nbsp; M[i][n] = q * M[i][n] - p * z;<br>
  }<br>
  </code>
  
  @param M the matrix to alter
  @param low the starting column (inclusive)
  @param high the ending column (inclusive)
  @param n the column to alter, and the preceding column will be altered as
  well
  @param q first constant
  @param p second constant
  @param shift the direction to perform the computation. Either 1 for after
  the current column, or -1 for before the current column.