code: public void householderSymmetric( int row , double gamma )
      {
          int startU = (row-1)*N;
  
          // compute v = -gamma*A*u
          for( int i = row; i < N; i++ ) {
              double total = 0;
              for( int j = row; j < N; j++ ) {
                  total += QT.data[i*N+j]*QT.data[startU+j];
              }
              w[i] = -gamma*total;
  //            System.out.println("y["+i+"] = "+w[i]);
          }
          // alpha = -0.5*gamma*u^T*v
          double alpha = 0;
  
          for( int i = row; i < N; i++ ) {
              alpha += QT.data[startU+i]*w[i];
          }
          alpha *= -0.5*gamma;
  
          // w = v + alpha*u
          for( int i = row; i < N; i++ ) {
              w[i] += alpha*QT.data[startU+i];
  //            System.out.println("w["+i+"] = "+w[i]);
          }
          // A = A + w*u^T + u*w^T
          for( int i = row; i < N; i++ ) {
  
              double ww = w[i];
              double uu = QT.data[startU+i];
  //            System.out.println("u["+i+"] = "+uu);
  
              for( int j = i; j < N; j++ ) {
                  QT.data[j*N+i] = QT.data[i*N+j] += ww*QT.data[startU+j] + w[j]*uu;
              }
          }
  
      }
docs: Performs the householder operations on left and right and side of the matrix.  Q<sup>T</sup>AQ
  @param row Specifies the submatrix.
  
  @param gamma The gamma for the householder operation