1 |
function theResult = identical(varargin) |
---|
2 |
|
---|
3 |
% identical -- Nan-safe "isequal". |
---|
4 |
% identical(x, y, ...) returns TRUE if all the |
---|
5 |
% arguments are identical in shape and value, |
---|
6 |
% even with respect to NaNs. No distinction |
---|
7 |
% is made between the number-like classes. |
---|
8 |
|
---|
9 |
% Copyright (C) 2001 Dr. Charles R. Denham, ZYDECO. |
---|
10 |
% All Rights Reserved. |
---|
11 |
% Disclosure without explicit written consent from the |
---|
12 |
% copyright owner does not constitute publication. |
---|
13 |
|
---|
14 |
% Version of 05-Sep-2001 01:48:57. |
---|
15 |
% Updated 05-Sep-2001 02:32:14. |
---|
16 |
|
---|
17 |
if nargout > 0, theResult = []; end |
---|
18 |
if nargin < 2, help(mfilename), return, end |
---|
19 |
|
---|
20 |
% Check "isequal" first. |
---|
21 |
|
---|
22 |
yes = isequal(varargin{:}); |
---|
23 |
if yes |
---|
24 |
if nargout > 0 |
---|
25 |
theResult = yes; |
---|
26 |
else |
---|
27 |
disp(yes) |
---|
28 |
end |
---|
29 |
return |
---|
30 |
end |
---|
31 |
|
---|
32 |
% Not exactly equal. Decompose the arguments, |
---|
33 |
% checking for equality of the pieces. |
---|
34 |
|
---|
35 |
x = varargin{1}; |
---|
36 |
|
---|
37 |
for k = 2:length(varargin) |
---|
38 |
y = varargin{k}; |
---|
39 |
yes = isequal(x, y); |
---|
40 |
if ~yes |
---|
41 |
switch class(x) |
---|
42 |
case 'cell' |
---|
43 |
if isequal(class(y), 'cell') |
---|
44 |
if isequal(size(x), size(y)) |
---|
45 |
for i = 1:prod(size(x)) |
---|
46 |
yes = feval(mfilename, x{i}, y{i}); |
---|
47 |
if ~yes, break, end |
---|
48 |
end |
---|
49 |
end |
---|
50 |
end |
---|
51 |
case 'struct' |
---|
52 |
if isequal(class(y), 'struct') |
---|
53 |
fx = fieldnames(x); |
---|
54 |
if isequal(fx, fieldnames(y)) |
---|
55 |
for i = 1:length(fx) |
---|
56 |
gx = getfield(x, fx{i}); |
---|
57 |
gy = getfield(y, fx{i}); |
---|
58 |
yes = feval(mfilename, gx, gy); |
---|
59 |
if yes, break, end |
---|
60 |
end |
---|
61 |
end |
---|
62 |
end |
---|
63 |
case {'char', 'double', 'sparse', 'uint8', 'uint32'} |
---|
64 |
nx = isnan(x); |
---|
65 |
if isequal(size(x), size(y)) & any(nx(:)) |
---|
66 |
ny = isnan(y); |
---|
67 |
if isequal(nx, ny) |
---|
68 |
yes = isequal(x(~nx), y(~ny)); |
---|
69 |
end |
---|
70 |
end |
---|
71 |
otherwise |
---|
72 |
end |
---|
73 |
end |
---|
74 |
if ~yes, break, end |
---|
75 |
end |
---|
76 |
|
---|
77 |
if nargout > 0 |
---|
78 |
theResult = yes; |
---|
79 |
else |
---|
80 |
disp(yes) |
---|
81 |
end |
---|