Impossible Ax=b is solved by linesolve(A,b) and mldivide(A,B)

A=[-1 2 3;0 1 -1;2 0 5;1 3 2]
B=[1 1 1 1]'
x=linsolve(A,B)
x =
0.1111
0.3333
0.1111
x=mldivide(A,B)
x =
0.1111
0.3333
0.1111
HOwever A*x
ans =
0.8889
0.2222
0.7778
1.3333
and b= [1 1 1 1]'
If I solve the system in paper, the system is impossible but matlab says it´s possible. When I test matlab answer, it is wrong. If I do A=sym([-1 2 3;0 1 -1;2 0 5;1 3 2])
colspace(A) A =
[ -1, 2, 3] [ 0, 1, -1] [ 2, 0, 5] [ 1, 3, 2]
ans =
[ 1, 0, 0] [ 0, 1, 0] [ 0, 0, 1] [ 1/3, 7/3, 2/3]
The system seems possible but I think it isn't. Can someone tell me what's going on? How do I know if the system is possible?

 Accepted Answer

Matt Fig
Matt Fig on 14 Aug 2012
Edited: Matt Fig on 14 Aug 2012
From the documentation:
" If A is an m-by-n matrix with m ~= n and B is a column vector with m components, or a matrix with several such columns, then X = A\B is the solution in the least squares sense to the under- or overdetermined system of equations AX = B. In other words, X minimizes norm(A*X - B), the length of the vector AX - B. The rank k of A is determined from the QR decomposition with column pivoting. The computed solution X has at most k nonzero elements per column. If k < n, this is usually not the same solution as x = pinv(A)*B, which returns a least squares solution. "
You have 4 equations and 3 unknowns. This is an overdetermined system, so MATLAB is following the documentation.

5 Comments

Comment by Pedro:
"Thanks for the answer but what i really wanted was to ask matlab if the system is possible or impossible, instead of doing all those aproximations. How do I ask that?"
Your question is a little vague. By "impossible" do you mean not exact? Have a look at the RANK and COND functions. If a matrix is non-square you are most likely into least-squares territory where a fit will be made.
yes by impossible I mean not exact. Seems like you just have to check the answer like I did, multipling A*x and see if it is equal to b... right?
Sure, just make a little function.
isexact = @(A,x,B) max((A*x-B))<1e-13; % Choose your tol.
Now,
A=[-1 2 3;0 1 -1;2 0 5;1 3 2];
B=[1 1 1 1]';
x = A\B;
isexact(A,x,B) % Returns 0 == not exact.
But, let's try with:
A=[-1 2 3;0 1 -1;2 0 5];
B=[2 3 4]';
x = A\B;
isexact(A,x,B) % Returns 1 == yes exact
wow.. didn't know matlab was that easy to program. Thanks!

Sign in to comment.

More Answers (0)

Categories

Find more on Mathematics in Help Center and File Exchange

Tags

No tags entered yet.

Asked:

on 14 Aug 2012

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!