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?
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