Why does the code output something that's clearly false?

1 visualizzazione (ultimi 30 giorni)
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 Commento
Stephen23
Stephen23 il 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:

Accedi per commentare.

Risposta accettata

Christoph F.
Christoph F. il 24 Nov 2017
> Why is this happening?
Look at the value of
Ai-AT
MatLAB uses numeric methods to invert matrices with inv(), and numeric methods are subject to numeric errors. This starts with finite machine precision (MatLAB has no way to represent a value like 2/3 accurately with a double precision floating point number).

Più risposte (1)

Walter Roberson
Walter Roberson il 24 Nov 2017

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by