| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 
 | function dmperm_test
%DMPERM_TEST test cs_dmperm
%
% Example:
%   dmperm_test
% See also: testall
% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
index = ssget ;
f = find (index.nrows ~= index.ncols) ;
[ignore i] = sort (index.nrows(f) ./ index.ncols(f)) ;
f = [209:211 f(i)] ;
nmat = length(f) ;
tt1 = zeros (1,nmat) ;
tt2 = zeros (1,nmat) ;
tt3 = zeros (1,nmat) ;
tt4 = zeros (1,nmat) ;
mm = zeros (1,nmat) ;
nn = zeros (1,nmat) ;
ss = zeros (1,nmat) ;
me = zeros (1,nmat) ;
ne = zeros (1,nmat) ;
p = cs_dmperm (sparse (1)) ;
for k = 1:length(f)
    
    i = f(k) ;
    Prob = ssget (i)                                                        %#ok
    A = Prob.A ;
    [m n] = size (A) ;
    if (m > n)
        % make sure A is short and fat
        A = A' ;
    end
    % C is tall and thin
    C = A' ;
    [m n] = size (A) ;
    k1 = 0 ;
    t1 = 0 ;
    while (t1 < 1)
        tic
        p = cs_dmperm (A) ;
        t = toc ;
        t1 = t1 + t ;
        k1 = k1 + 1 ;
    end
    t1 = t1 / k1 ;
    s1 = sum (p > 0) ;
    k2 = 0 ;
    t2 = 0 ;
    while (t2 < 1)
        tic
        p = cs_dmperm (C) ;
        t = toc ;
        t2 = t2 + t ;
        k2 = k2 + 1 ;
    end
    t2 = t2 / k2 ;
    s2 = sum (p > 0) ;
    k3 = 0 ;
    t3 = 0 ;
    while (t3 < 1)
        tic
        p = cs_dmperm_orig (A) ;
        t = toc ;
        t3 = t3 + t ;
        k3 = k3 + 1 ;
    end
    t3 = t3 / k3 ;
    k4 = 0 ;
    t4 = 0 ;
    while (t4 < 1)
        tic
        p = cs_dmperm_orig (A') ;
        t = toc ;
        t4 = t4 + t ;
        k4 = k4 + 1 ;
    end
    t4 = t4 / k4 ;
    sprnk = sum (p > 0) ;
    nempty = full (sum (sum (spones (A)) == 0)) ;
    mempty = full (sum (sum (spones (C)) == 0)) ;
    fprintf ('[m %d:%d n %d:%d (%d)]:\n', m, mempty, n, nempty, sprnk) ;
    fprintf ('    A: t1 %10.6f (%6d)   C: t2 %10.6f (%6d) new\n', ...
        t1, k1, t2, k2) ;
    fprintf ('    A: t3 %10.6f (%6d)   C: t4 %10.6f (%6d) orig\n', ...
        t3, k3, t4, k4) ;
    if (s1 ~= sprnk | s2 ~= sprnk)                                          %#ok
        s1                                                                  %#ok
        s2                                                                  %#ok
        sprnk                                                               %#ok
        error ('!') ;
    end
    tt1 (k) = t1 ;
    tt2 (k) = t2 ;
    tt3 (k) = t3 ;
    tt4 (k) = t4 ;
    mm (k) = m ;
    nn (k) = n ;
    ss (k) = sprnk ;
    me (k) = mempty ;
    ne (k) = nempty ;
    clear A C
    semilogy (ss(1:k) ./ nn(1:k), tt1(1:k) ./ tt3(1:k), 'o', ...
        [0 1], [1 1], 'r-') ;
    drawnow
end
 |