MATLAB: Does the code output something that’s clearly false

if statementmatrix

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?

Best Answer

> 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).