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