Tolerance for pseudoinverse In calculating the pseudoinverse of a matrix $A$, of size (m,n), I need to choose a tolerance threshold for the eigenvalues. I'm trying to understand how I should pick this. Matlab default is to use the $norm(A)*max(m,n)*eps$, where the norm is norm-2 and the eps is the machine epsilon. Any ideas as to why this is the default value?
Moreover, there are cases in which $ A $ is only interesting in comparison to other values. For example, I'd like to calculate the eigenvalues of $C + BB^TA^{-0.5}$ where A,B,C are matrices, but B can have a very large second dimension. In this example, how should we choose the tolerance? 
 A: I suspect that MATLAB does that because the machine epsilon is either the smallest value it can represent accurately or because it's the smallest value the it considers useful or worth bothering with. 
In theory the pseudoinverse of A is a matrix of size (n,m) and that's that. If some of the eigen values are zero, that's fine but the psuedoinverse has to be multiplicable by A to fit its definition. In practice if some of the eigenvalues of it are 0, then whatever practical use you have for the psuedo-inverse can be accomplished with a smaller matrix, which is ideal computationally. And in many applications one of the goals is to reduce dimension, so specifically chopping off as many low eigenvals as possible is ideal. As to what the cutoff should be, that depends on what you consider significant. As a rule of thumb though, anything that's less than 0.01% of your largest eigenvalue is probably worth thinking about discarding (that's not hard and fast, but off the top of my head it's a reasonable place to start). Usually you can look at the dropoff in eigenvalues and figure a cutoff subjectively for when they start becoming insignificant.
