1function test28 2%TEST28 test cs_randperm, cs_dmperm 3% 4% Example: 5% test28 6% See also: testall 7 8% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com 9 10clear functions 11 12rand ('state', 0) ; 13for n = 1:100 14 for trials = 1:1000 15 p = cs_randperm (n, rand) ; 16 if (any (sort (p) ~= 1:n)) 17 n %#ok 18 p %#ok 19 error ('!') 20 end 21 end 22end 23 24index = ssget ; 25[ignore f] = sort (index.nnz) ; 26 27fprintf ('p=dmperm (std, rand, rev) [p,q,r,s]=dmperm (std, rand, rev)\n') ; 28 29nmat = length (f) ; 30nmat = min (100, nmat) ; 31T1 = zeros (nmat,1) ; 32T2 = zeros (nmat,1) ; 33T3 = zeros (nmat,1) ; 34D1 = zeros (nmat,1) ; 35D2 = zeros (nmat,1) ; 36D3 = zeros (nmat,1) ; 37 38 39for k = 1:nmat 40 41 i = f (k) ; 42 Prob = ssget (i,index) ; 43 A = Prob.A ; 44 [m n] = size (A) ; 45 fprintf ('%35s: ', Prob.name) ; 46 47 if (~ispc) 48 if (rand () > .5) 49 A = A + 1i * sprand (A) ; 50 end 51 end 52 53 tic 54 p = cs_dmperm (A) ; 55 t1 = toc ; 56 sprank1 = sum (p > 0) ; 57 fprintf (' %8.2f', t1) ; 58 T1 (k) = t1 ; 59 60 tic 61 p = cs_dmperm (A,1) ; 62 t2 = toc ; 63 sprank2 = sum (p > 0) ; 64 fprintf (' %8.2f', t2) ; 65 T2 (k) = t2 ; 66 67 tic 68 p = cs_dmperm (A,-1) ; 69 t3 = toc ; 70 sprank3 = sum (p > 0) ; 71 fprintf (' %8.2f', t3) ; 72 T3 (k) = t3 ; 73 74 if (sprank1 ~= sprank2 | sprank1 ~= sprank3) %#ok 75 error ('!') ; 76 end 77 78 tic 79 [p1,q1,r1,s1,cc1,rr1] = cs_dmperm (A) ; %#ok 80 d1 = toc ; 81 fprintf (' %8.2f', d1) ; 82 D1 (k) = d1 ; 83 84 tic 85 [p2,q2,r2,s2,cc2,rr2] = cs_dmperm (A,1) ; %#ok 86 d2 = toc ; 87 fprintf (' %8.2f', d2) ; 88 D2 (k) = d2 ; 89 90 tic 91 [p3,q3,r3,s3,cc3,rr3] = cs_dmperm (A,-1) ; %#ok 92 d3 = toc ; 93 fprintf (' %8.2f\n', d3) ; 94 D3 (k) = d3 ; 95 96 if (sprank1 == max (m,n)) 97 nz1 = nnz (diag (A (p1,q1))) ; 98 nz2 = nnz (diag (A (p2,q2))) ; 99 nz3 = nnz (diag (A (p3,q3))) ; 100 101 if (nz1 ~= sprank1 | nz2 ~= sprank2 | nz3 ~= sprank3) %#ok 102 error ('!') 103 end 104 end 105 106 subplot (1,2,1) 107 loglog (T1 (1:k), T2 (1:k), 'x', ... 108 T1 (1:k), T3 (1:k), 'go', ... 109 [1e-5 1e3], [1e-5 1e3], 'r-') ; 110 axis equal 111 112 subplot (1,2,2) 113 loglog (D1 (1:k), D2 (1:k), 'x', ... 114 D1 (1:k), D3 (1:k), 'go', ... 115 [1e-5 1e3], [1e-5 1e3], 'r-') ; 116 axis equal 117 118 drawnow 119end 120