type if x is a square matrix statement

35 vues (au cours des 30 derniers jours)
Zhuoying Lin
Zhuoying Lin le 26 Oct 2017
Commenté : michio le 27 Oct 2017
Hi, How do I write the script for "If x is a square matrix funcz will be the 0"?
Thanks!
  1 commentaire
Jan
Jan le 27 Oct 2017
A bullet-proof solution is not trivial. Therefore this question is more interesting than it looks like on first glance.

Connectez-vous pour commenter.

Réponses (3)

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

Connectez-vous pour commenter.


Jan
Jan le 26 Oct 2017
Modifié(e) : Jan le 26 Oct 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 le 26 Oct 2017
[nRow,nCol] = size(x);
if nRow == nCol
funcz = 0;
end
  3 commentaires
Jan
Jan le 26 Oct 2017
Modifié(e) : Jan le 26 Oct 2017
This fails for a [4,2,2] array:
[nR, nC] = size(rand(4, 2, 2))
nR = 4, nC = 4
michio
michio le 27 Oct 2017
Yes, it assumes that the array is 2D. Interesting thread :)

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by