The above choice of numerical rank uses a tolerance max(m,n) * eps(norm(A)). This is the default tolerance in using Matlab's rank(A) and is often a good choice when the errors in the matrix are due to computer arithmetic.
To calculate the numerical rank using other tolerances one can try spnrank, SJrank or Matlab's rank command. The routine spnrank calculates the numerical rank of a sparse matrix, SJrank calculates the numerical rank using precomputed singular values for problems in this database and Matlab's rank command calculates the numerical rank of a dense matrix.
For all the matrices in this database we include pictures illustrating some or all of the singular value spectrum. Pictures of the singular value spectrum are useful to identify how the numerical rank may change for different choices of tolerance and also to identify whether the calculated numerical rank is "well defined" (see this link). The routine SJplot is also of use to picture the singular value spectrums for matrices in this database.
The difference between numerical rank and the rank used in theoretical mathematics is briefly discussed here .
The "structural rank" and its relation to the numerical rank and the rank used in theoretical mathematics is briefly discussed here .
The calculated numerical rank depends, potentially, on the accuracy of the calculate singular values which is briefly discussed here .
A brief discussion of the selection of the tolerance in calculating numerical rank is here .