type if x is a square matrix statement

31 Ansichten (letzte 30 Tage)
Zhuoying Lin
Zhuoying Lin am 26 Okt. 2017
Kommentiert: michio am 27 Okt. 2017
Hi, How do I write the script for "If x is a square matrix funcz will be the 0"?
Thanks!
  1 Kommentar
Jan
Jan am 27 Okt. 2017
A bullet-proof solution is not trivial. Therefore this question is more interesting than it looks like on first glance.

Melden Sie sich an, um zu kommentieren.

Antworten (3)

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

Melden Sie sich an, um zu kommentieren.


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

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by