1function test16 2%TEST16 test cs_amd 3% 4% Example: 5% test16 6% See also: testall 7 8% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com 9 10rand ('state', 0) ; 11randn ('state', 0) ; 12clf 13 14index = ssget ; 15[ignore f] = sort (max (index.nrows, index.ncols)) ; 16f = f (1:200) ; 17skip = 811 ; 18 19% f = 719 20 21for i = f 22 if (any (i == skip)) 23 continue 24 end 25 Prob = ssget (i) ; 26 A = spones (Prob.A) ; 27 Aorig = A ; 28 [m n] = size (A) ; 29 if (m < n) 30 A = A' ; 31 end 32 [m n] = size (A) ; 33 if (m ~= n) 34 A = A'*A ; 35 end 36 37 if (~ispc) 38 if (rand ( ) > .5) 39 A = A + 1i * sprand (A) ; 40 end 41 end 42 43 fprintf ('n %4d nz %d\n', n, nnz (A)) ; 44 45 try 46 p0 = amd (A) ; 47 catch 48 p0 = symamd (A) ; 49 end 50 fprintf ('symmetric case:\n') ; 51 p1 = cs_amd (A) ; 52 53 if (any (sort (p1) ~= 1:n)) 54 error ('not perm!') ; 55 end 56 57 C = A+A' + speye (n) ; 58 lnz0 = sum (symbfact (C (p0,p0))) ; 59 lnz1 = sum (symbfact (C (p1,p1))) ; 60 subplot (2,3,1) ; spy (C) 61 subplot (2,3,2) ; spy (C (p0,p0)) ; title ('amd') ; 62 subplot (2,3,3) ; spy (C (p1,p1)) ; title ('csamd') ; 63 drawnow 64 65 if (lnz0 ~= lnz1) 66 fprintf ('----------------- lnz %d %d %9.4f\n', ... 67 lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ; 68 end 69 70 if (1) 71 72 p0 = colamd (Aorig) ; 73 [m n] = size (Aorig) ; 74 fprintf ('m %d n %d\n', m, n) ; 75 76 fprintf ('A''A case, no dense rows (for QR):\n') ; 77 p1 = cs_amd (Aorig, 3) ; 78 if (any (sort (p1) ~= 1:n)) 79 error ('not perm!') ; 80 end 81 82 subplot (2,3,4) ; spy (Aorig) 83 subplot (2,3,5) ; spy (Aorig (:,p0)) ; title ('colamd') ; 84 subplot (2,3,6) ; spy (Aorig (:,p1)) ; title ('cs amd(A''A)') ; 85 lnz0 = sum (symbfact (Aorig (:,p0), 'col')) ; 86 lnz1 = sum (symbfact (Aorig (:,p1), 'col')) ; 87 fprintf (' A''A: %7d %7d %9.4f\n', ... 88 lnz0, lnz1, 100*(lnz0-lnz1)/max([1 lnz0])) ; 89 drawnow 90 91 % pause 92 93 end 94end 95 96