double[] rwork = new double[5*min(m,n)];
int info = NativeBlas.zgesvd('S', 'S', m, n, A.dup().data, 0, m, S.data, 0, U.data, 0, m, V.data, 0, min(m, n), rwork, 0);
if (info > 0) {
throw new LapackConvergenceException("GESVD", info + " superdiagonals of an intermediate bidiagonal form failed to converge.");
}
return new ComplexDoubleMatrix[]{U, new ComplexDoubleMatrix(S), V.hermitian()};
}