function test6 %TEST6 test cs_reach, cs_reachr, cs_lsolve, cs_usolve % % Example: % test6 % See also: testall % Copyright 2006, Timothy A. Davis. % http://www.cise.ufl.edu/research/sparse rand ('state', 0) maxerr = 0 ; clf for trial = 1:201 n = fix (100 * rand (1)) ; d = 0.1 * rand (1) ; L = tril (sprandn (n,n,d),-1) + sprand (speye (n)) ; b = sprandn (n,1,d) ; for uplo = 0:1 if (uplo == 1) % solve Ux=b instead ; L = L' ; end x = L\b ; sr = 1 + cs_reachr (L,b) ; sz = 1 + cs_reachr (L,b) ; check_if_same (sr,sz) ; s2 = 1 + cs_reach (L,b) ; if (uplo == 0) x3 = cs_lsolve (L,b) ; else x3 = cs_usolve (L,b) ; end spy ([L b x x3]) drawnow s = sort (sr) ; [i j xx] = find (x) ; %#ok [i3 j3 xx3] = find (x3) ; %#ok if (isempty (i)) if (~isempty (s)) i %#ok s %#ok error ('!') ; end elseif (any (s ~= i)) i %#ok s %#ok error ('!') ; end if (isempty (i3)) if (~isempty (s)) i3 %#ok s %#ok error ('!') ; end elseif (any (s ~= sort (i3))) s %#ok i3 %#ok error ('!') ; end if (any (s2 ~= sr)) s2 %#ok sr %#ok error ('!') ; end err = norm (x-x3,1) ; if (err > 1e-12) x %#ok x3 %#ok uplo %#ok err %#ok error ('!') end maxerr = max (maxerr, err) ; end drawnow end fprintf ('maxerr = %g\n', maxerr) ;