1function test6 2%TEST6 test for BTF 3% Requires UFget 4% Example: 5% test6 6% See also btf, maxtrans, strongcomp, dmperm, UFget, 7% test1, test2, test3, test4, test5. 8 9% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com 10 11quick2 = [ ... 12 1522 -272 1463 1521 460 1507 -838 1533 -1533 -1456 -1512 734 211 ... 13 -385 -735 394 -397 1109 -744 ... 14 -734 -375 -1200 -1536 -837 519 -519 520 -520 189 -189 454 385 ... 15 387 -387 384 -384 386 -386 388 -388 525 -525 526 -526 735 ... 16 1508 209 210 1243 -1243 1534 -840 1234 -1234 390 -390 392 -392 ... 17 -394 1472 1242 -1242 389 -389 391 -391 393 -393 1215 -1215 1216 ... 18-1216 736 -736 737 -737 455 -455 -224 -839 1426 -1426 -1473 396 ... 19 -396 398 -398 400 -400 402 -402 404 -404 -1531 395 -395 397 ... 20 399 -399 401 -401 403 -403 405 -405 -738 -739 1459 -1459 1111 ... 21 1110 376 -376 284 -284 -740 -742 -741 -743 1293 -1293 452 920 ... 22 -745 -446 1462 -1461 448 -448 283 -283 1502 -1502 1292 -1292 1503 ... 23-1503 1291 -1291 445 -445 -746 -747 1300 -1300 435 -435 -1343 -1345 ... 24-1344 1305 -1305 921 -1513 1307 -1307 1369 -1369 1374 -1374 1377 ... 25-1377 748 -748 -749 1510 922 -922 ] ; 26 27index = UFget ; 28nmat = length (quick2) ; 29dopause = 0 ; 30 31h = waitbar (0, 'BTF test 6 of 6') ; 32 33try 34 35 for k = 1:nmat 36 37 waitbar (k/nmat, h) ; 38 39 i = quick2 (k) ; 40 Prob = UFget (abs (i), index) ; 41 disp (Prob) ; 42 if (i < 0) 43 fprintf ('transposed\n') ; 44 A = Prob.A' ; 45 [m n] = size (A) ; 46 if (m == n) 47 if (nnz (spones (A) - spones (Prob.A)) == 0) 48 fprintf ('skip...\n') ; 49 continue ; 50 end 51 end 52 else 53 A = Prob.A ; 54 end 55 56 tic 57 [p1,q1,r1,work1] = btf (A) ; 58 t1 = toc ; 59 n1 = length (r1) - 1 ; 60 m1 = nnz (diag (A (p1, abs (q1)))) ; 61 62 limit = work1/nnz(A) ; 63 64 fprintf ('full search: %g * nnz(A)\n', limit) ; 65 66 works = linspace(0,limit,9) ; 67 works (1) = eps ; 68 nw = length (works) ; 69 70 T2 = zeros (nw, 1) ; 71 N2 = zeros (nw, 1) ; 72 M2 = zeros (nw, 1) ; 73 74 T2 (end) = t1 ; 75 N2 (end) = n1 ; 76 M2 (end) = m1 ; 77 78 fprintf ('full time %10.4f blocks %8d nnz(diag) %8d\n\n', t1, n1, m1) ; 79 80 subplot (3,4,4) ; 81 drawbtf (A, p1, abs (q1), r1) ; 82 title (Prob.name, 'Interpreter', 'none') ; 83 84 for j = 1:nw-1 85 86 maxwork = works (j) ; 87 88 tic 89 [p2,q2,r2,work2] = btf (A, maxwork) ; 90 t2 = toc ; 91 n2 = length (r2) - 1 ; 92 m2 = nnz (diag (A (p2, abs (q2)))) ; 93 T2 (j) = t2 ; 94 N2 (j) = n2 ; 95 M2 (j) = m2 ; 96 97 fprintf ('%9.1f %10.4f blocks %8d nnz(diag) %8d\n', ... 98 maxwork, t2, n2, m2) ; 99 100 subplot (3,4,4+j) ; 101 drawbtf (A, p2, abs (q2), r2) ; 102 title (sprintf ('%g', maxwork)) ; 103 104 ss = [1:j nw] ; 105 106 subplot (3,4,1) ; 107 plot (works(ss), T2(ss), 'o-') ; title ('time vs work') ; 108 axis ([0 limit 0 max(0.1,max(T2))]) ; 109 110 subplot (3,4,2) ; 111 plot (works(ss), N2(ss), 'o-') ; title ('blocks vs work') ; 112 axis ([0 limit 0 n1]) ; 113 114 subplot (3,4,3) ; 115 plot (works(ss), M2(ss), 'o-') ; title ('nnz(diag) vs work') ; 116 axis ([0 limit 0 m1]) ; 117 drawnow 118 119 end 120 fprintf ('full time %10.4f blocks %8d nnz(diag) %8d\n', t1, n1, m1) ; 121 122 if (dopause) 123 input ('hit enter: ') ; 124 end 125 126 end 127 128catch 129 % out-of-memory is OK, other errors are not 130 disp (lasterr) ; 131 if (isempty (strfind (lasterr, 'Out of memory'))) 132 error (lasterr) ; %#ok 133 else 134 fprintf ('test terminated early, but otherwise OK\n') ; 135 end 136end 137 138close (h) ; 139