@Override
  public String toString() {
    StringBuilder buf = new StringBuilder();
    buf.append("---------------------------------------------------------------------\n");
    buf.append("SingularValueDecomposition(A) --> cond(A), rank(A), norm2(A), U, S, V\n");
    buf.append("---------------------------------------------------------------------\n");
    
    buf.append("cond = ");
    String unknown = "Illegal operation or error: ";
    try {
      buf.append(String.valueOf(this.cond()));
    } catch (IllegalArgumentException exc) {
      buf.append(unknown).append(exc.getMessage());
    }
    
    buf.append("\nrank = ");
    try {
      buf.append(String.valueOf(this.rank()));
    } catch (IllegalArgumentException exc) {
      buf.append(unknown).append(exc.getMessage());
    }
    
    buf.append("\nnorm2 = ");
    try {
      buf.append(String.valueOf(this.norm2()));
    } catch (IllegalArgumentException exc) {
      buf.append(unknown).append(exc.getMessage());
    }
    
    buf.append("\n\nU = ");
    try {
      buf.append(String.valueOf(this.getU()));
    } catch (IllegalArgumentException exc) {
      buf.append(unknown).append(exc.getMessage());
    }
    
    buf.append("\n\nS = ");
    try {
      buf.append(String.valueOf(this.getS()));
    } catch (IllegalArgumentException exc) {
      buf.append(unknown).append(exc.getMessage());
    }
    
    buf.append("\n\nV = ");
    try {
      buf.append(String.valueOf(this.getV()));
    } catch (IllegalArgumentException exc) {
      buf.append(unknown).append(exc.getMessage());
    }
    
    return buf.toString();
  }