docs: private double[][] generateOrthonormalBasis(List<double[]> vectors) {
      double[] first = normalizeEquals(vectors.get(0));
      double[][] ret = new double[first.length][vectors.size()];
      setCol(ret, 0, first);
      for(int i = 1; i < vectors.size(); i++) {
        // System.out.println("Matrix:" + ret);
        double[] v_i = vectors.get(i);
        double[] u_i = v_i.clone();
        // System.out.println("Vector " + i + ":" + partialSol);
        for(int j = 0; j < i; j++) {
          double[] v_j = getCol(ret, j); // Must have length 1!
          double f = transposeTimes(v_i, v_j); // / transposeTimes(v_j, v_j);
          if(Double.isNaN(f)) {
            if(LOG.isDebuggingFine()) {
              LOG.debugFine("Zero vector encountered? " + FormatUtil.format(v_j));
            }
            return null;
          }
          minusTimesEquals(u_i, v_j, f);
        }
        // check if the vectors weren't independent
        final double len_u_i = euclideanLength(u_i);
        if(len_u_i < Double.MIN_NORMAL) {
          if(LOG.isDebuggingFine()) {
            LOG.debugFine("Points not independent - no orthonormalization.");
          }
          return null;
        }
        timesEquals(u_i, 1 / len_u_i);
        setCol(ret, i, u_i);
      }
      return ret;
    }