Borrar filtros
Borrar filtros

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

2 visualizaciones (últimos 30 días)
B
B el 24 de Nov. de 2017
Comentada: Stephen23 el 25 de Nov. de 2017
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 comentario
Stephen23
Stephen23 el 25 de Nov. de 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:

Iniciar sesión para comentar.

Respuesta aceptada

Christoph F.
Christoph F. el 24 de Nov. de 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).

Más respuestas (1)

Walter Roberson
Walter Roberson el 24 de Nov. de 2017

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by