Borrar filtros
Borrar filtros

mat2str() on complex values with 0 inaginary part

5 visualizaciones (últimos 30 días)
Firan Lucian
Firan Lucian el 26 de En. de 2021
Editada: Jan el 26 de En. de 2021
Hi,
Tried mat2str(complex(5,6)) witch seems ok:
ans =
'5+6i'
But other complex values with imaginary part 0 or 0+0i are printed as real values:
mat2str(complex(5,0))
ans =
'5'
mat2str(0+0i)
Seems incorect to me, is this a bug ?

Respuesta aceptada

Jan
Jan el 26 de En. de 2021
Editada: Jan el 26 de En. de 2021
Mathematically 5 is the same as 5+0i, so the output is correct.
So omitting the imaginary part is a question of taste.
If you want to display it, do this expliticitly:
x = 1 + 2i;
sprintf('%g %gi', real(x), imag(x))
Alternatively you can copy the code of mat2str to e.g. mat2stri anywhere in your user-defined folders in the path and remove the line:
imagStr(imagVal == 0) = "";

Más respuestas (2)

Firan Lucian
Firan Lucian el 26 de En. de 2021
~isreal(complex(5,0))
ans =
logical
1
~isreal(5)
ans =
logical
0

Steven Lord
Steven Lord el 26 de En. de 2021
Not a bug. Many operations in MATLAB, if the result has an all zero imaginary part, will remove that imaginary part. complex is one of the few operations that does not by design.
x = complex(5, 0)
x = 5.0000 + 0.0000i
y = x(1)
y = 5
z = x + 0
z = 5
  1 comentario
Firan Lucian
Firan Lucian el 26 de En. de 2021
I don't like this output inconsistency, as this functions may provide some human readable string; that should contain, not hide, the complex storage, but this is my opinion…
(maybe some extra options could help ...,'complex', true)

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Productos


Versión

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by