1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
function test_sep
%TEST_SEP test cs_sep, and compare with Gilbert's meshpart vtxsep
% (requires MESHPART).
%
% Example:
% test_sep
%
% See also: testall
% CXSparse, Copyright (c) 2006-2022, Timothy A. Davis. All Rights Reserved.
% SPDX-License-Identifier: LGPL-2.1+
clear functions
index = ssget ;
[ignore f] = sort (max (index.nrows, index.ncols)) ;
clf
for k = 1:length(f)
i = f (k) ;
Prob = ssget (i) ;
disp (Prob) ;
A = spones (Prob.A) ;
[m n] = size (A) ;
if (m ~= n)
A = A'*A ;
end
A = A|A' ;
p = symrcm (A) ;
n = size (A,1) ;
n2 = fix (n/2) ;
a = p (1:n2) ;
b = p ((n2+1):n) ;
clf
subplot (2,3,1) ; spy (A) ;
subplot (2,3,2) ; spy (A (p,p)) ;
hold on
plot ([.5 n2+.5 n2+.5 .5 .5], [.5 .5 n2+.5 n2+.5 .5], 'r', 'LineWidth', 2) ;
hold off
subplot (2,3,3) ; spy (A (a,b)) ; title ('edge sep') ;
subplot (2,3,6) ; cs_dmspy (A (a,b)) ; title ('node sep') ;
[s as bs] = vtxsep (A,a,b) ; %#ok
[s2 a2 b2] = cs_sep (A,a,b) ;
p2 = [a2 b2 s2] ;
B = A (p2,p2) ;
subplot (2,3,5) ; spy (B) ;
hold on
px = [s2 a2 b2] ;
if (any (sort (px) ~= 1:n))
px %#ok
n %#ok
error ('!') ;
end
na = length (a2) ;
nb = length (b2) ;
ns = length (s2) ; %#ok
nab = na + nb ;
plot ([.5 na+.5 na+.5 .5 .5], [.5 .5 na+.5 na+.5 .5], 'r', 'LineWidth', 2) ;
plot ([na nab nab na na]+0.5, [na na nab nab na]+0.5, 'r', 'LineWidth', 2) ;
plot ([.5 nab+.5 nab+.5 .5 .5], [.5 .5 nab+.5 nab+.5 .5], 'g', 'LineWidth', 1) ;
hold off
nz1 = nnz (A (a2,b2)) ;
if (nz1 ~= 0)
nz1 %#ok
error ('!') ;
end
nz2 = nnz (A (a2,b2)) ;
if (nz2 ~= 0)
nz2 %#ok
error ('!') ;
end
if (length (s) ~= length (s2))
fprintf ('lengths differ: %d %d\n', length (s), length (s2)) ;
end
drawnow
% pause
end
|