65 views (last 30 days)

Show older comments

The following gives a correct answer:

A=[-2/5,1/5;2/5,-1/5;1,1]

B=[0;0;1]

linsolve(A,B)

ans =0.3333 0.6667

The following, however, gives an incorrect answer:

C=[-0.2,0.3;0.25,-0.3;1,1]

D=[0;0;1]

C\D

ans = 0.5699 0.4297

The correct answer, found by substitution, is 0.6000 0.4000

How can I get a correct answer by linsolve?

Walter Roberson
on 14 Oct 2016

x = sym('x',[2 1]);

C*x

ans =

(3*x2)/10 - x1/5

x1/4 - (3*x2)/10

x1 + x2

You have a system of 3 equations in 2 unknowns. It is overdetermined, and might not have any exact solution. The \ operation will do a least-squared fit to find an answer that is least bad in some sense.

Solving (3*x2)/10 - x1/5 = 0 for x1 gives x1 = (3*x2)/2. Substituting that back into C*x gives

0

(3*x2)/40

(5*x2)/2

solving (3*x2)/40 = 0 for x2 gives x2 = 0. Substituting that back gives (5*0)/2 = 1 which is 0 = 1 which has no solution.

>> C*[0.6;0.4]

ans =

0

0.03

1

So 0.6 0.4 is not a solution after-all.

>> sum((D-C*(C\D)).^2)

ans =

0.000407074042245239

>> sum((D-C*[0.6;0.4]).^2)

ans =

0.0009

so the solution found by C\D gives less of an error than [0.6 0.4] does.

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

Start Hunting!