Why does the code output something that's clearly false?
Ältere Kommentare anzeigen
It's supposed to check if A is orthogonal. Here's the code:
A= [2/3 2/3 1/3; -2/3 1/3 2/3; 1/3 -2/3 2/3];
Id= [1 0 0; 0 1 0; 0 0 1];
AT= transpose(A);
Ai= inv(A);
B=AT*A;
if Ai==AT
disp("A is orthogonal");
elseif B==Id
disp("A is orthogonal B");
else
disp('A is not orthogonal');
end
I checked myself and both of the first two tests should output True. But they don't. I wasn't even supposed to use both of the first two at once since they both are true but the even when I use only one, it still says that A is not orthogonal when it is?
Why is this happening?
1 Kommentar
Stephen23
am 25 Nov. 2017
"Why does the code output something that's clearly false?"
It is not "clearly false" to me. My assumptions are that numeric mathematics contains numeric error which accumulates through numeric calculations, and that this error must be taken into account by anyone writing code that uses numeric calculations. What are your assumptions? Did you assume that numeric calculations are the same as symbolic mathematics? Or that your computer has infinite memory and stores all numeric data with infinite precision?
In any case, you will find plenty of information on why this happens: because you compare floating-point values, which inherently have floating point error. Small differences in the floating-point values means that you should not expect an output equivalent to some mathematical operation/s. Floating-point numbers have been explained a thousand times on this forum:
etc, etc, etc
If you want a more detailed explanation, then read this:
Akzeptierte Antwort
Weitere Antworten (1)
Walter Roberson
am 24 Nov. 2017
1 Stimme
Floating point roundoff.
Kategorien
Mehr zu Symbolic Math Toolbox finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!