code: private void similarTransform( int k) {
          double t[] = QT.data;
  
          // find the largest value in this column
          // this is used to normalize the column and mitigate overflow/underflow
          double max = 0;
  
          int rowU = (k-1)*N;
  
          for( int i = k; i < N; i++ ) {
              double val = Math.abs(t[rowU+i]);
              if( val > max )
                  max = val;
          }
  
          if( max > 0 ) {
              // -------- set up the reflector Q_k
  
              double tau = QrHelperFunctions_DDRM.computeTauAndDivide(k, N, t, rowU, max);
  
              // write the reflector into the lower left column of the matrix
              double nu = t[rowU+k] + tau;
              QrHelperFunctions_DDRM.divideElements(k + 1, N, t, rowU, nu);
              t[rowU+k] = 1.0;
  
              double gamma = nu/tau;
              gammas[k] = gamma;
  
              // ---------- Specialized householder that takes advantage of the symmetry
              householderSymmetric(k,gamma);
  
              // since the first element in the householder vector is known to be 1
              // store the full upper hessenberg
              t[rowU+k] = -tau*max;
          } else {
              gammas[k] = 0;
          }
      }
docs: Computes and performs the similar a transform for submatrix k.