Why does RREF give significantly different answers than \ for solutions of some systems in MATLAB?
2 views (last 30 days)
Show older comments
The documentation for MATLAB does not specify that the RREF function is intended for educational use and not recommended for practical applications. Consider the following code:
A = [87 54 71 34 51;26 33 49 31 23;57 9 107 28 7;30 21 89 27 44;55 5 6 7 8];
b = [29;41;91;0;38];
B = [A b];
C = rref(B);
which yields:
C(:,end) =
0.659722222222222
-0.461818181818182
-0.034894398530762
2.632286995515695
-1.774086378737542
whereas, using \ the solution is
A\b =
0.659729931133364
-0.461822077848193
-0.034894614961433
2.632290333420119
-1.774087558408285
Accepted Answer
MathWorks Support Team
on 1 Dec 2011
The discrepancy occurs because RREF attempts to produce rational solutions, with fairly small integers for the numerators and denominators, to systems which have coefficients that are "close to rational" as determined by approximating them via the function RAT. This behavior allows "nice" systems to have "nice" solutions when verifying hand calculations, thereby supporting the academic nature of RREF.
After performing Gauss-Jordan Elimination on the system, if the original coefficients were approximately rational as described above, then RREF calls RAT to find a simple rational approximation to the system's solution.
The attached MATLAB file, "rrefNoRational.m" is a copy of "rref.m" without the code that performs the rational conversion. Using this algorithm, the code:
A = [87 54 71 34 51;26 33 49 31 23;57 9 107 28 7;30 21 89 27 44;55 5 6 7 8];
b = [29;41;91;0;38];
B = [A b];
C = rrefNoRat(B);
returns
C(:,end) =
0.659729931133364
-0.461822077848194
-0.034894614961433
2.632290333420119
-1.774087558408284
0 Comments
More Answers (0)
See Also
Categories
Find more on Linear Algebra in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!