code: private void updateRemoveQ( int rowIndex ) {
          Qm.set(Q);
          Q.reshape(m_m,m_m, false);
  
          for( int i = 0; i < rowIndex; i++ ) {
              for( int j = 1; j < m; j++ ) {
                  double sum = 0;
                  for( int k = 0; k < m; k++ ) {
                      sum += Qm.data[i*m+k]* U_tran.data[j*m+k];
                  }
                  Q.data[i*m_m+j-1] = sum;
              }
          }
  
          for( int i = rowIndex+1; i < m; i++ ) {
              for( int j = 1; j < m; j++ ) {
                  double sum = 0;
                  for( int k = 0; k < m; k++ ) {
                      sum += Qm.data[i*m+k]* U_tran.data[j*m+k];
                  }
                  Q.data[(i-1)*m_m+j-1] = sum;
              }
          }
      }
docs: Updates the Q matrix to take inaccount the row that was removed by only multiplying e
  lements that need to be.  There is still some room for improvement here...
  @param rowIndex