Hi,
This is related with the condition number, the max/min ratio of the singular values of the matrix (
here).
The singular values of N(mat) are
SingularValueList[N[mat], Tolerance -> 0]
{16.8481, 1.06837, 5.54311*10^-16}
while those of the transpose are
SingularValueList[N[Transpose[mat]], Tolerance -> 0]
{16.8481, 1.06837, 3.92749*10^-16}
The transpose has a slightly larger condition number. The difference is due to the nature of the floating point arithmetic. The smallest singular value of the exact matrix is of course zero.
Now for another singular matrix mat1,
mat1 = {{1, 1, 1}, {1, 2, 4}, {1, 4, 10}};
LinearSolve[N[mat1], {15, 15, 15}]
{10.7143, 6.42857, -2.14286}
LinearSolve[N[Transpose[mat1]], {15, 15, 15}]
{10.7143, 6.42857, -2.14286}
and no warning is given. The singular values are
SingularValueList[N[mat1], Tolerance -> 0]
{11.8151, 1.18493, 1.86425*10^-16}
SingularValueList[N[Transpose[mat1]], Tolerance -> 0]
{11.8151, 1.18493, 1.86425*10^-16}
Hence both have the same condition number, which is even larger than that of Transpose(mat). Mathematica is silent for exactly singular matrices, too,
This means that LinearSolve gives the "badly conditioned matrix" warning for matrices with the condition number in some range but gives no warning for exactly or nearly singular matrix. If higher precision is used, the conditition number will become larger and the warning message may disappear.
Youngjoo Chung