~ubuntu-branches/ubuntu/hardy/suitesparse/hardy

« back to all changes in this revision

Viewing changes to BTF/MATLAB/Test/test2.m

  • Committer: Bazaar Package Importer
  • Author(s): Rafael Laboissiere, Rafael Laboissiere, Ondrej Certik
  • Date: 2008-02-21 14:46:50 UTC
  • mfrom: (1.1.2 upstream) (5.1.1 hardy)
  • Revision ID: james.westby@ubuntu.com-20080221144650-tgeppgj0t7s759i8
Tags: 3.1.0-3
[ Rafael Laboissiere ]
* Upload to unstable

[ Ondrej Certik ]
* XS-DM-Upload-Allowed: yes field added
* Ondrej Certik added to uploaders

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
%TEST2 test script for BTF
 
1
function test2 (nmat)
 
2
%TEST2 test for BTF
2
3
% Requires CSparse and UFget
3
4
% Example:
4
5
%   test2
11
12
f = find (index.nrows == index.ncols) ;
12
13
 
13
14
% too much time:
14
 
skip = 1514 ;
 
15
skip = [1514 1297 1876 1301] ;
15
16
f = setdiff (f, skip) ;
16
17
 
17
18
[ignore i] = sort (index.nnz (f)) ;
18
19
f = f (i) ;
19
 
nmat = length (f) ;
 
20
 
 
21
if (nargin < 1)
 
22
    nmat = 1000 ;
 
23
end
 
24
nmat = min (nmat, length (f)) ;
 
25
f = f (1:nmat) ;
20
26
 
21
27
T0 = zeros (nmat,1) ;
22
28
T1 = zeros (nmat,1) ;
32
38
p = cs_dmperm (sparse (1)) ;            %#ok
33
39
a = cs_transpose (sparse (1)) ;         %#ok
34
40
 
35
 
for k = 1:nmat
36
 
 
37
 
    Prob = UFget (f (k)) ;
38
 
    A = Prob.A ;
39
 
 
40
 
    Nzdiag (k) = nnz (diag (A)) ;
41
 
 
42
 
    [m n] = size (A) ;
43
 
    Anz (k) = nnz (A) ;
44
 
    MN (k,:) = [m n] ;
45
 
 
46
 
    tic
47
 
    [p,q,r] = btf (A) ;
48
 
    t0 = toc ;
49
 
    s0 = sum (q > 0) ;
50
 
    T0 (k) = max (1e-9, t0) ;
51
 
 
52
 
    tic
53
 
    [p2,q2,r2] = cs_dmperm (A) ;
54
 
    t1 = toc ;
55
 
    s1 = sum (dmperm (A) > 0) ;
56
 
    T1 (k) = max (1e-9, t1) ;
57
 
 
58
 
    fprintf (...
59
 
    '%4d btf %10.6f cs_dmperm %10.6f rel: %8.4f\n', ...
60
 
        f(k), t0, t1, t0 / t1) ;
61
 
 
62
 
    if (s0 ~= s1)
63
 
        error ('!') ;
64
 
    end
65
 
 
66
 
    C = A (p, abs (q)) ;
67
 
    subplot (1,2,1) ;
68
 
    cspy (C) ;
69
 
    z = find (q < 0) ;
70
 
    zd = nnz (diag (C (z,z))) ;
71
 
    if (zd > 0)
72
 
        error ('?') ;
73
 
    end
74
 
 
75
 
    minnz = Anz (1) ;
76
 
    maxnz = nnz (A) ;
77
 
 
78
 
    subplot (1,2,2) ;
79
 
    loglog (Anz (1:k), T0 (1:k) ./ T1 (1:k), ...
80
 
        'o', [minnz maxnz], [1 1], 'r-') ;
81
 
    drawnow
82
 
 
83
 
    clear C A Prob
 
41
h = waitbar (0, 'BTF test 2 of 6') ;
 
42
 
 
43
try
 
44
    for k = 1:nmat
 
45
 
 
46
        Prob = UFget (f (k), index) ;
 
47
        A = Prob.A ;
 
48
 
 
49
        waitbar (k/nmat, h) ;
 
50
 
 
51
        Nzdiag (k) = nnz (diag (A)) ;
 
52
 
 
53
        [m n] = size (A) ;
 
54
        Anz (k) = nnz (A) ;
 
55
        MN (k,:) = [m n] ;
 
56
 
 
57
        tic
 
58
        [p,q,r] = btf (A) ;
 
59
        t0 = toc ;
 
60
        s0 = sum (q > 0) ;
 
61
        T0 (k) = max (1e-9, t0) ;
 
62
 
 
63
        tic
 
64
        [p2,q2,r2] = cs_dmperm (A) ;
 
65
        t1 = toc ;
 
66
        s1 = sum (dmperm (A) > 0) ;
 
67
        T1 (k) = max (1e-9, t1) ;
 
68
 
 
69
        fprintf ('%4d btf %10.6f cs_dmperm %10.6f', f(k), t0, t1) ;
 
70
        if (t1 ~= 0)
 
71
            fprintf (' rel: %8.4f', t0 / t1) ;
 
72
        end
 
73
        fprintf ('\n') ;
 
74
 
 
75
        if (s0 ~= s1)
 
76
            error ('!') ;
 
77
        end
 
78
 
 
79
        C = A (p, abs (q)) ;
 
80
        subplot (1,2,1) ;
 
81
        cspy (C) ;
 
82
        z = find (q < 0) ;
 
83
        zd = nnz (diag (C (z,z))) ;
 
84
        if (zd > 0)
 
85
            error ('?') ;
 
86
        end
 
87
 
 
88
        minnz = Anz (1) ;
 
89
        maxnz = nnz (A) ;
 
90
 
 
91
        subplot (1,2,2) ;
 
92
        loglog (Anz (1:k), T0 (1:k) ./ T1 (1:k), ...
 
93
            'o', [minnz maxnz], [1 1], 'r-') ;
 
94
        drawnow
 
95
 
 
96
        clear C A Prob
 
97
    end
 
98
 
 
99
catch
 
100
    % out-of-memory is OK, other errors are not
 
101
    disp (lasterr) ;
 
102
    if (isempty (strfind (lasterr, 'Out of memory')))
 
103
        error (lasterr) ;                                                   %#ok
 
104
    else
 
105
        fprintf ('test terminated early, but otherwise OK\n') ;
 
106
    end
84
107
end
85
108
 
86
 
 
 
109
close (h) ;