code: public Matrix[] svd() {
  		GMatrix m = (GMatrix) matrix.clone();
  		int nrows = (int) getRowCount();
  		int ncols = (int) getColumnCount();
  		GMatrix u = new GMatrix(nrows, nrows);
  		GMatrix s = new GMatrix(nrows, ncols);
  		GMatrix v = new GMatrix(ncols, ncols);
  		m.SVD(u, s, v);
  		Matrix U = new VecMathDenseDoubleMatrix2D(u);
  		Matrix S = new VecMathDenseDoubleMatrix2D(s);
  		Matrix V = new VecMathDenseDoubleMatrix2D(v);
  		return new Matrix[] { U, S, V };
  	}
docs: in S all entries on the diagonal are 1