1function test11 (nmat) 2%TEST11 compare CHOLMOD and MATLAB, save results in Results.mat 3% also tests analyze 4% Example: 5% test11(nmat) 6% See also cholmod_test 7 8% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com 9 10fprintf ('=================================================================\n'); 11fprintf ('test11 : compare CHOLMOD and MATLAB, save results in Results.mat\n'); 12 13rand ('state',0) ; 14randn ('state',0) ; 15 16index = ssget ; 17f = find (index.posdef) ; 18[ignore i] = sort (index.nrows (f)) ; 19f = f (i) ; 20clear ignore 21 22% start after nd6k 23% f = f ((find (f == 937) + 1):end) ; 24 25skip = [937:939 1202:1211] ; 26 27if (nargin > 0) 28 nmat = max (0,nmat) ; 29 nmat = min (nmat, length (f)) ; 30 f = f (1:nmat) ; 31end 32 33fprintf ('test matrices sorted by dimension:\n') ; 34for i = f 35 if (any (i == skip)) 36 continue 37 end 38 fprintf ('%4d: %-20s %-20s %12d %d\n', i, ... 39 index.Group {i}, index.Name {i}, index.nrows (i), index.posdef (i)) ; 40end 41 42kk = 0 ; 43nmat = length (f) ; 44T1 = zeros (1,nmat) ; % matlab time 45T2 = zeros (1,nmat) ; % cholmod2 time 46E1 = zeros (1,nmat) ; % matlab residual 47E2 = zeros (1,nmat) ; % cholmod2 residual 48FL = zeros (1,nmat) ; % cholmod2 flop count 49LNZ = zeros (1,nmat) ; % cholmod2 lnz 50 51for kkk = 1:length(f) 52 53 nn = f (kkk) ; 54 55 if (any (nn == skip)) 56 continue 57 end 58 59 % try 60 61 fprintf ('\n%3d: %s/%s\n', nn, index.Group {nn}, index.Name {nn}) ; 62 Prob = ssget (nn) ; 63 A = Prob.A ; 64 clear Prob 65 n = size (A,1) ; 66 b = rand (n,1) ; 67 68 % analyze 69 [p count] = analyze (A) ; 70 % LDL' flop count 71 % fl = sum ((count-1).*(count-1) + 2*(count-1)) ; 72 % LL' flop count 73 fl = sum (count.^2) ; 74 lnz = sum (count) ; 75 fprintf ('n %d lnz %g fl %g\n', n, lnz, fl) ; 76 clear p count 77 78 % try 79 k2 = 0 ; 80 t2 = 0 ; 81 while (t2 < 1) 82 tic 83 x = cholmod2 (A,b) ; 84 t = toc ; 85 t2 = t2 + t ; 86 k2 = k2 + 1 ; 87 end 88 t2 = t2 / k2 ; 89 e2 = norm (A*x-b,1) ; 90 % catch 91 % e2 = Inf ; 92 % k2 = Inf ; 93 % t2 = Inf ; 94 % end 95 fprintf ('cholmod2: t: %10.5f e: %6.1e mflop %6.0f\n', ... 96 t2, e2, 1e-6 * fl / t2) ; 97 98 % try 99 k1 = 0 ; 100 t1 = 0 ; 101 while (t1 < 1) 102 tic 103 x = A\b ; 104 t = toc ; 105 t1 = t1 + t ; 106 k1 = k1 + 1 ; 107 end 108 t1 = t1 / k1 ; 109 e1 = norm (A*x-b,1) ; 110 % catch 111 % e1 = Inf ; 112 % k1 = Inf ; 113 % t1 = Inf ; 114 % end 115 fprintf ('matlab: t: %10.5f e: %6.1e mflop %6.0f', ... 116 t1, e1, 1e-6 * fl / t1) ; 117 118 fprintf (' cholmod2 speedup: %5.1f\n', t1/t2) ; 119 120 kk = kk + 1 ; 121 T1 (kk) = t1 ; 122 T2 (kk) = t2 ; 123 E1 (kk) = e1 ; 124 E2 (kk) = e2 ; 125 FL (kk) = fl ; 126 LNZ (kk) = lnz ; 127 %%% save Results T1 T2 E1 E2 FL LNZ f kkk 128 129 % catch 130 % fprintf (' failed\n') ; 131 % end 132 133 clear A x b 134 135end 136 137% test11results 138fprintf ('test11 passed\n') ; 139