code: private void rowOpTransform2(Matrix M, int low, int high, double x, int k, double y, boolean notlast, double z, double r, double q)
      {
          double p;
          for (int j = low; j <= high; j++)
          {
              p = M.get(k, j) + q * M.get(k + 1,j);
              if (notlast)
              {
                  p = p + r * M.get(k + 2,j);
                  M.set(k + 2,j,  M.get(k+2, j) - p * z);
              }
              M.increment(k,   j, -p*x);
              M.increment(k+1, j, -p*y);
          }
      }
docs: Alters the rows of the matrix M according to
  <code><br>
  for (int j = low; j <= high; j++)
  {<br>
  &nbsp;&nbsp; p = M[k][j] + q * M[k + 1][j];<br>
  &nbsp;&nbsp; if (notlast)<br>
  &nbsp;&nbsp; {<br>
  &nbsp;&nbsp;&nbsp;&nbsp; p = p + r * M[k + 2][j];<br>
  &nbsp;&nbsp;&nbsp;&nbsp; M[k + 2][j] = M[k + 2][j] - p * z;<br>
  &nbsp;&nbsp; }<br>
  &nbsp;&nbsp; M[k][j] = M[k][j] - p * x;<br>
  &nbsp;&nbsp; M[k + 1][j] = M[k + 1][j] - p * y;<br>
  }
  </code>
  @param M the matrix to alter
  @param low the starting column (inclusive)
  @param high the ending column (inclusive)
  @param x first constant
  @param k this row and the row after will be altered
  @param y second constant
  @param notlast <tt>true<tt> if the 2nd row after <tt>k</tt> should be updated
  @param z third constant
  @param r fourth constant
  @param q fifth constant