I have two matrices: A = [ -1 0 0; 1 1 -1; 0 -1 1 ]; B = [-1; 0; 1]; and I want to solve the following equation: Ax=B when I use mldivide function I get a matrix of NaNs X = mldivide(A,B) X = NaN NaN NaN Knowing there are multiple solutions to this problem I manually tested if one of them, namely [1;0;1] returns B: A*[1; 0; 1] and, as expected, I reassured myself that it is one of multiple solutions. So here is my question: why does mldivide return incorret solution?
John Williams answered .
2025-11-20
Your matrix A is singular. The MATLAB doc states that in these cases, mldivide is unreliable ("... When working with ill-conditioned matrices, an unreliable solution can result ...") and suggests to use lsqminnorm( ) or pinv( ) instead (see "Tips"). E.g.,
>> A = [ -1 0 0;
1 1 -1;
0 -1 1 ];
>> B = [-1; 0; 1];
>> A\B
Warning: Matrix is singular to working precision.
ans =
NaN
NaN
NaN
>> A*ans-B
ans =
NaN
NaN
NaN
>> lsqminnorm(A,B)
ans =
1.0000
-0.5000
0.5000
>> A*ans-B
ans =
1.0e-15 *
0.4441
-0.3331
-0.1110
>> pinv(A)*B
ans =
1.0000
-0.5000
0.5000
>> A*ans-B
ans =
1.0e-15 *
0.2220
-0.4441
0.2220