also do eigendecomposition for u if necessary
wrote tests to ensure svd works on perfect checkerboard