class EigenDecomposition {

    public RealMatrix getSquareRoot() {
        if (!isSymmetric) {
            throw new MathUnsupportedOperationException();
        }

        final double[] sqrtEigenValues = new double[realEigenvalues.length];
        for (int i = 0; i < realEigenvalues.length; i++) {
            final double eigen = realEigenvalues[i];
            if (eigen <= 0) {
                throw new MathUnsupportedOperationException();
            }
            sqrtEigenValues[i] = FastMath.sqrt(eigen);
        }
        final RealMatrix sqrtEigen = MatrixUtils.createRealDiagonalMatrix(sqrtEigenValues);
        final RealMatrix v = getV();
        final RealMatrix vT = getVT();

        return v.multiply(sqrtEigen).multiply(vT);
    }

    public  EigenDecomposition(final RealMatrix matrix);
    @Deprecated public  EigenDecomposition(final RealMatrix matrix,
                              final double splitTolerance);
    public  EigenDecomposition(final double[] main, final double[] secondary);
    @Deprecated public  EigenDecomposition(final double[] main, final double[] secondary,
                              final double splitTolerance);

}