type if x is a square matrix statement

35 visualizaciones (últimos 30 días)
Zhuoying Lin
Zhuoying Lin el 26 de Oct. de 2017
Comentada: michio el 27 de Oct. de 2017
Hi, How do I write the script for "If x is a square matrix funcz will be the 0"?
Thanks!
  1 comentario
Jan
Jan el 27 de Oct. de 2017
A bullet-proof solution is not trivial. Therefore this question is more interesting than it looks like on first glance.

Iniciar sesión para comentar.

Respuestas (3)

Stephen23
Stephen23 el 26 de Oct. de 2017
Editada: Stephen23 el 26 de Oct. de 2017
funcz = ~diff(size(x))
  5 comentarios
Stephen23
Stephen23 el 26 de Oct. de 2017
@Jan Simon: thank you, that is a tidy solution for ND arrays.
Zhuoying Lin
Zhuoying Lin el 26 de Oct. de 2017
Never thought about this question can be such complex. I just start learning Matlab and THANK YOU all for your answers!

Iniciar sesión para comentar.


Jan
Jan el 26 de Oct. de 2017
Editada: Jan el 26 de Oct. de 2017
funcz = ~ismatrix(x) || (size(x, 1) ~= size(x, 2));
or with Matlab versions before R2010b:
funcz = (ndims(x) ~= 2) || (size(x, 1) ~= size(x, 2));
This rejects [0 x 1] matrices, but is is questionable, if an empty matrix can be non-square.
To reply funcz=0 for vectors:
funcz = (ndims(x) ~= 2) || all(size(x) ~= 1);
or with modern Matlab versions:
funcz = ~isvector(x)

michio
michio el 26 de Oct. de 2017
[nRow,nCol] = size(x);
if nRow == nCol
funcz = 0;
end
  3 comentarios
Jan
Jan el 26 de Oct. de 2017
Editada: Jan el 26 de Oct. de 2017
This fails for a [4,2,2] array:
[nR, nC] = size(rand(4, 2, 2))
nR = 4, nC = 4
michio
michio el 27 de Oct. de 2017
Yes, it assumes that the array is 2D. Interesting thread :)

Iniciar sesión para comentar.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by