docs: private void orthes()
      {
          final double[] ort = new double[n];
  
          //  This is derived from the Algol procedures orthes and ortran,
          //  by Martin and Wilkinson, Handbook for Auto. Comp.,
          //  Vol.ii-Linear Algebra, and the corresponding
          //  Fortran subroutines in EISPACK.
  
          int low = 0;
          int high = n - 1;
  
          for (int m = low + 1; m <= high - 1; m++)
          {
  
              // Scale column.
  
              double scale = 0.0;
              for (int i = m; i <= high; i++)
                  scale = scale + abs(H.get(i, m-1));
  
              if (scale != 0.0)
              {
  
                  // Compute Householder transformation.
  
                  double h = 0.0;
                  double tmp;
                  for (int i = high; i >= m; i--)
                  {
                      ort[i] = tmp = H.get(i, m-1) / scale;
                      h += tmp*tmp;
                  }
                  double g = sqrt(h);
                  if ((tmp = ort[m]) > 0)
                      g = -g;
                  
                  h = h - tmp * g;
                  ort[m] = tmp - g;
                  orthesApplyHouseholder(m, high, ort, h);
                  ort[m] *= scale;
                  H.set(m, m-1, scale*g);
              }
          }
  
          // Accumulate transformations (Algol's ortran).
  
          for (int j = 0; j < n; j++)
          {
              for (int i = 0; i < n; i++)
              {
                  V.set(i, j, (i == j ? 1.0 : 0.0));
              }
          }
          
          orthesAccumulateTransforamtions(high, low, ort);
      }