whole_func_string: function (A) {
      var z = numeric.svd(A), foo = z.S[0];
      var U = z.U, S = z.S, V = z.V;
      var m = A.length, n = A[0].length, tol = Math.max(m,n)*numeric.epsilon*foo,M = S.length;
      var Sinv = new Array(M);
      for(var i=M-1;i!==-1;i--) { if(S[i]>tol) Sinv[i] = 1/S[i]; else Sinv[i] = 0; }
      return numeric.dot(numeric.dot(V,numeric.diag(Sinv)),numeric.transpose(U))
  }
func_code_string: function (A) {
      var z = numeric.svd(A), foo = z.S[0];
      var U = z.U, S = z.S, V = z.V;
      var m = A.length, n = A[0].length, tol = Math.max(m,n)*numeric.epsilon*foo,M = S.length;
      var Sinv = new Array(M);
      for(var i=M-1;i!==-1;i--) { if(S[i]>tol) Sinv[i] = 1/S[i]; else Sinv[i] = 0; }
      return numeric.dot(numeric.dot(V,numeric.diag(Sinv)),numeric.transpose(U))
  }
func_documentation_string: pinv_svd computes the pseudo-inverse using SVD