zajer
zajer

Reputation: 803

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?

Upvotes: 2

Views: 49

Answers (1)

James Tursa
James Tursa

Reputation: 2636

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

Upvotes: 1

Related Questions