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