code: protected void updateA( final int w )
      {
  //        int rowW = w*numRows;
  //        int rowJ = rowW + numRows;
  //
  //        for( int j = w+1; j < numCols; j++ , rowJ += numRows) {
  //            double val = QR.data[rowJ + w];
  //
  //            // val = gamma*u^T * A
  //            for( int k = w+1; k < numRows; k++ ) {
  //                val += QR.data[rowW + k]*QR.data[rowJ + k];
  //            }
  //            val *= gamma;
  //
  //            // A - val*u
  //            QR.data[rowJ + w] -= val;
  //            for( int i = w+1; i < numRows; i++ ) {
  //                QR.data[rowJ + i] -= QR.data[rowW + i]*val;
  //            }
  //        }
  
          final double data[] = QR.data;
          final int rowW = w*numRows + w + 1;
          int rowJ = rowW + numRows;
          final int rowJEnd = rowJ + (numCols-w-1)*numRows;
          final int indexWEnd = rowW + numRows - w - 1;
  
          for( ; rowJEnd != rowJ; rowJ += numRows) {
              // assume the first element in u is 1
              double val = data[rowJ - 1];
  
              int indexW = rowW;
              int indexJ = rowJ;
  
              while( indexW != indexWEnd ) {
                  val += data[indexW++]*data[indexJ++];
              }
              val *= gamma;
  
              data[rowJ - 1] -= val;
              indexW = rowW;
              indexJ = rowJ;
              while( indexW != indexWEnd ) {
                  data[indexJ++] -= data[indexW++]*val;
              }
          }
      }
docs: <p>
  Takes the results from the householder computation and updates the 'A' matrix.<br>
  <br>
  A = (I - &gamma;*u*u<sup>T</sup>)A
  </p>
  
  @param w The submatrix.