matlabnanlinear-equation

Matlab mldivide returns NaN when there are multiple solutions


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?


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