Speed and Accuracy of Direct Methods for PageRank
In evaluating the quadrature formulas to solve for the expected value of the PageRank vector exactly, we need to solve about 3000 PageRank linear systems. We want to have each solution as accurate as possible. In this experiment, we evaluate the accuracy of our solutions as well as the time they take.
Contents
Experimental setup
This experiment should be run from the rapr/experiments/correctness directory. To reduce the computational load, we'll load the cs-stanford graph and just take the largest strong component.
cwd = pwd; dirtail = 'experiments/correctness'; if strcmp(cwd(end-length(dirtail)+1:end),dirtail) == 0 warning('%s should be executed from rapr/%s\n', mfilename, dirtail); end load ('../../data/wb-cs.stanford.mat'); % just use the largest strong component for this experiment; P = Pcc; A = Acc; %load ('../../data/example-small.mat'); n=size(P,1);
Add the path
addpath('../../matlab');
Generate a set of alphas
One of the goals is to see how long each method takes: Hessenberg update (theoretically faster) vs. Sparse LU factorization (exploits sparsity) for a range of values of alpha. The Hessenberg method should not be sensitive to this parameter, but the Sparse LU factorization may be due to the pivot tolerance.
To generate the alpha's, we'll use the Chebyshev points computed for the Fejer type 2 rule.
as=0.5*(fejer2_rule_compute(15)+1);m=max(as);as=[as;(1-m)*as+m];nas=length(as);
Hessenberg solution
We are going to compute the solutions for many values of alpha. The computationally efficient means of updating alpha is to use an upper hessenberg decomposition of the matrix P. This is real and always exists. Then the solution can be computed in O(n^2) time for any value a, with good numerical stability.
Factorize the matrix once.
[Q,H] = hess(full(P'));
Generate the appropriate right hand side.
v = ones(n,1)./n; w = Q'*v;
Solve all the systems
tic, for ai=1:nas, x=solve_pr_hess(n,Q,H,as(ai),w); end, dt=toc; fprintf('%40s : %7f sec\n', 'solving Hessenberg systems', dt);
solving Hessenberg systems : 8.826154 sec
One thing we need to check is if the function call itself is causing the overhead. This next call is the same thing, but with everything un-abstracted into the body.
tic; sopts=struct('UHESS',true); % tell Matlab our system is hessenberg for ai=1:nas a = as(ai); Ha = -a*H; Ha = H+eye(n); wa = (1-a)*w; x = linsolve(Ha,wa,sopts); x = Q*x; s = norm(x,1); x = x./s; end dt=toc; fprintf('%40s : %7f sec\n', '(inline) solving Hessenberg systems', dt);
(inline) solving Hessenberg systems : 10.020536 sec
Direct solution
Now, we'll try the direct solution using a sparse LU factorization of the matrix (I-a*P') directly. This function is implemented directly in Matlab as the "backslash" operation for sparse matrices. The key issue here is how best to form the matrix (I-a*P'). We will try a few varieties.
The first variety is the most obvious: construct everything in one line.
tic, for ai=1:nas, x=(speye(n)-as(ai)*P')\((1-as(ai))*v); x=x./norm(x,1); end, dt=toc; fprintf('%40s : %7f sec\n', 'simple SparseLU', dt);
simple SparseLU : 0.482570 sec
The second variety keeps the matrix transposed first
Pt = P'; tic, for ai=1:nas, x=(speye(n)-as(ai)*Pt)\((1-as(ai))*v); x=x./norm(x,1); end, dt=toc; fprintf('%40s : %7f sec\n', 'pre-stored transpose SparseLU', dt);
pre-stored transpose SparseLU : 0.480823 sec
The third variety keeps the matrix explicitly stores the rhs and matrix
Pt = P'; tic, for ai=1:nas, Pa=(speye(n)-as(ai)*Pt); va=v; va=(1-as(ai))*va; x=Pa\va; x=x./norm(x,1); end, dt=toc; fprintf('%40s : %7f sec\n', 'explicit matrix rhs SparseLU', dt);
explicit matrix rhs SparseLU : 0.483929 sec
The fourth variety keeps the matrix explicitly stores the rhs
Pt = P'; tic, for ai=1:nas, va=v; va=(1-as(ai))*va; x=(speye(n)-as(ai)*Pt)\va; x=x./norm(x,1); end, dt=toc; fprintf('%40s : %7f sec\n', 'explicit rhs SparseLU', dt);
explicit rhs SparseLU : 0.498586 sec
Speed conclusion
The fastest way of going is definitely the SparseLU approach. The simplest optimization is just storing the matrix transpose explicitly. This yields a tiny optimization.
Accuracy
One of the problems with the SparseLU approach is that the accuracy bounds may not be as good as for the Hessenberg case. We will test this idea by first, looking at the difference in the solution between the Hessenberg and SparseLU solutions and checking the residuals.
for ai=1:nas a=as(ai); xlu = (speye(n)-a*Pt)\((1-a)*v); xlu=xlu./norm(x,1); xh = solve_pr_hess(n,Q,H,a,w); rlu = Pt*xlu; rlu = xlu - a*(rlu + (sum(xlu)-sum(rlu)).*v) - (1-a).*v; rh = Pt*xh; rh = xh - a*(rh + (sum(xh)-sum(rh)).*v) - (1-a).*v; fprintf('a = %7.5f ||xlu-xh|| = %10e r(xlu) = %10e r(xh) = %10e\n', ... a, norm(xlu-xh,1), norm(rlu,1), norm(rh,1)); end
a = 0.00961 ||xlu-xh|| = 8.963858e-15 r(xlu) = 9.047667e-17 r(xh) = 8.843241e-15 a = 0.03806 ||xlu-xh|| = 5.481293e-15 r(xlu) = 2.731647e-16 r(xh) = 5.286245e-15 a = 0.08427 ||xlu-xh|| = 1.001727e-14 r(xlu) = 1.495332e-15 r(xh) = 1.028192e-14 a = 0.14645 ||xlu-xh|| = 5.610963e-15 r(xlu) = 2.942525e-16 r(xh) = 5.470342e-15 a = 0.22221 ||xlu-xh|| = 9.666096e-15 r(xlu) = 5.236696e-16 r(xh) = 7.504143e-15 a = 0.30866 ||xlu-xh|| = 5.581906e-15 r(xlu) = 2.924635e-16 r(xh) = 5.410982e-15 a = 0.40245 ||xlu-xh|| = 8.750027e-15 r(xlu) = 3.565480e-15 r(xh) = 6.173339e-15 a = 0.50000 ||xlu-xh|| = 7.764405e-15 r(xlu) = 1.622238e-16 r(xh) = 6.569669e-15 a = 0.59755 ||xlu-xh|| = 8.141410e-15 r(xlu) = 1.698294e-15 r(xh) = 6.624529e-15 a = 0.69134 ||xlu-xh|| = 1.034559e-14 r(xlu) = 1.922724e-15 r(xh) = 7.055324e-15 a = 0.77779 ||xlu-xh|| = 1.087132e-14 r(xlu) = 3.954140e-15 r(xh) = 8.486687e-15 a = 0.85355 ||xlu-xh|| = 1.267714e-14 r(xlu) = 2.708208e-15 r(xh) = 6.964454e-15 a = 0.91573 ||xlu-xh|| = 1.896496e-14 r(xlu) = 1.270285e-15 r(xh) = 7.000178e-15 a = 0.96194 ||xlu-xh|| = 2.218130e-14 r(xlu) = 6.362447e-15 r(xh) = 8.431383e-15 a = 0.99039 ||xlu-xh|| = 4.182585e-14 r(xlu) = 2.729979e-15 r(xh) = 6.124217e-15 a = 0.99048 ||xlu-xh|| = 4.899638e-14 r(xlu) = 2.924330e-15 r(xh) = 8.363144e-15 a = 0.99076 ||xlu-xh|| = 4.065856e-14 r(xlu) = 3.163213e-15 r(xh) = 6.325603e-15 a = 0.99120 ||xlu-xh|| = 4.160387e-14 r(xlu) = 6.992089e-15 r(xh) = 7.825636e-15 a = 0.99180 ||xlu-xh|| = 4.316260e-14 r(xlu) = 4.207479e-16 r(xh) = 1.127657e-14 a = 0.99253 ||xlu-xh|| = 4.715741e-14 r(xlu) = 1.114498e-15 r(xh) = 6.354627e-15 a = 0.99336 ||xlu-xh|| = 4.873753e-14 r(xlu) = 4.440537e-15 r(xh) = 6.659042e-15 a = 0.99426 ||xlu-xh|| = 6.349724e-14 r(xlu) = 7.902542e-16 r(xh) = 7.312426e-15 a = 0.99520 ||xlu-xh|| = 7.075295e-14 r(xlu) = 3.731582e-15 r(xh) = 6.304933e-15 a = 0.99613 ||xlu-xh|| = 8.445049e-14 r(xlu) = 5.291964e-15 r(xh) = 1.171013e-14 a = 0.99703 ||xlu-xh|| = 9.147885e-14 r(xlu) = 2.410645e-15 r(xh) = 9.560306e-15 a = 0.99787 ||xlu-xh|| = 1.350890e-13 r(xlu) = 1.412468e-15 r(xh) = 9.304670e-15 a = 0.99859 ||xlu-xh|| = 1.791253e-13 r(xlu) = 2.910392e-15 r(xh) = 7.009492e-15 a = 0.99919 ||xlu-xh|| = 1.730660e-13 r(xlu) = 4.327377e-15 r(xh) = 9.206886e-15 a = 0.99963 ||xlu-xh|| = 2.876400e-13 r(xlu) = 4.305627e-15 r(xh) = 9.053680e-15 a = 0.99991 ||xlu-xh|| = 1.571275e-12 r(xlu) = 5.216715e-15 r(xh) = 8.426092e-15
Unfortunately, these two solutions start to disagree as alpha -> 1. This fact is not surprising as the problem becomes very illconditioned at that point. Also, the residual doesn't tell the full tail. To fix the situation, we are going to explicitly compute some right hand sides from known values of the solution.
nrhs=5; for ai=1:nas a = as(ai); for rhsi=1:nrhs y = rand(n,1); y=y./norm(y,1); z = Pt*y; z = y - a*z; xlu = (speye(n)-a*Pt)\z; xh = solve_pr_hess(n,Q,H,a,Q'*(z./(1-a))); fprintf('a = %7.5f t=%i e(xlu) = %10e e(xh) = %10e\n',... a, rhsi, norm(xlu-y,1), norm(xh-y,1)); end end
a = 0.00961 t=1 e(xlu) = 3.887463e-17 e(xh) = 5.046902e-15 a = 0.00961 t=2 e(xlu) = 4.117057e-17 e(xh) = 5.064396e-15 a = 0.00961 t=3 e(xlu) = 4.256242e-17 e(xh) = 5.197635e-15 a = 0.00961 t=4 e(xlu) = 4.047409e-17 e(xh) = 5.359409e-15 a = 0.00961 t=5 e(xlu) = 4.226844e-17 e(xh) = 5.060008e-15 a = 0.03806 t=1 e(xlu) = 4.114332e-17 e(xh) = 5.146858e-15 a = 0.03806 t=2 e(xlu) = 4.402533e-17 e(xh) = 5.319322e-15 a = 0.03806 t=3 e(xlu) = 4.741190e-17 e(xh) = 5.262505e-15 a = 0.03806 t=4 e(xlu) = 4.234426e-17 e(xh) = 5.328592e-15 a = 0.03806 t=5 e(xlu) = 4.474859e-17 e(xh) = 5.175815e-15 a = 0.08427 t=1 e(xlu) = 5.200814e-17 e(xh) = 5.177015e-15 a = 0.08427 t=2 e(xlu) = 4.479502e-17 e(xh) = 5.121270e-15 a = 0.08427 t=3 e(xlu) = 4.620544e-17 e(xh) = 5.061650e-15 a = 0.08427 t=4 e(xlu) = 5.061358e-17 e(xh) = 4.997278e-15 a = 0.08427 t=5 e(xlu) = 4.380274e-17 e(xh) = 5.015379e-15 a = 0.14645 t=1 e(xlu) = 6.386705e-17 e(xh) = 5.150210e-15 a = 0.14645 t=2 e(xlu) = 5.822342e-17 e(xh) = 5.244626e-15 a = 0.14645 t=3 e(xlu) = 5.453447e-17 e(xh) = 5.230214e-15 a = 0.14645 t=4 e(xlu) = 5.707588e-17 e(xh) = 5.228726e-15 a = 0.14645 t=5 e(xlu) = 5.629201e-17 e(xh) = 5.236476e-15 a = 0.22221 t=1 e(xlu) = 6.475649e-17 e(xh) = 5.458023e-15 a = 0.22221 t=2 e(xlu) = 6.815015e-17 e(xh) = 5.477833e-15 a = 0.22221 t=3 e(xlu) = 6.403801e-17 e(xh) = 5.501928e-15 a = 0.22221 t=4 e(xlu) = 7.696581e-17 e(xh) = 5.178137e-15 a = 0.22221 t=5 e(xlu) = 7.598971e-17 e(xh) = 5.299894e-15 a = 0.30866 t=1 e(xlu) = 9.537456e-17 e(xh) = 5.666558e-15 a = 0.30866 t=2 e(xlu) = 1.000731e-16 e(xh) = 5.516578e-15 a = 0.30866 t=3 e(xlu) = 9.837639e-17 e(xh) = 5.755475e-15 a = 0.30866 t=4 e(xlu) = 8.305232e-17 e(xh) = 5.884702e-15 a = 0.30866 t=5 e(xlu) = 8.815061e-17 e(xh) = 5.585678e-15 a = 0.40245 t=1 e(xlu) = 1.287841e-16 e(xh) = 6.197990e-15 a = 0.40245 t=2 e(xlu) = 1.198425e-16 e(xh) = 6.176810e-15 a = 0.40245 t=3 e(xlu) = 1.485374e-16 e(xh) = 6.125893e-15 a = 0.40245 t=4 e(xlu) = 9.889348e-17 e(xh) = 6.282799e-15 a = 0.40245 t=5 e(xlu) = 1.347072e-16 e(xh) = 6.494946e-15 a = 0.50000 t=1 e(xlu) = 1.669542e-16 e(xh) = 7.154087e-15 a = 0.50000 t=2 e(xlu) = 1.436866e-16 e(xh) = 6.857298e-15 a = 0.50000 t=3 e(xlu) = 1.278784e-16 e(xh) = 6.478634e-15 a = 0.50000 t=4 e(xlu) = 1.191671e-16 e(xh) = 6.807803e-15 a = 0.50000 t=5 e(xlu) = 9.407143e-17 e(xh) = 6.853743e-15 a = 0.59755 t=1 e(xlu) = 3.479903e-16 e(xh) = 8.377404e-15 a = 0.59755 t=2 e(xlu) = 1.696020e-16 e(xh) = 7.406722e-15 a = 0.59755 t=3 e(xlu) = 2.291127e-16 e(xh) = 8.142468e-15 a = 0.59755 t=4 e(xlu) = 1.356913e-16 e(xh) = 7.816735e-15 a = 0.59755 t=5 e(xlu) = 2.268509e-16 e(xh) = 8.221971e-15 a = 0.69134 t=1 e(xlu) = 1.918207e-16 e(xh) = 9.488601e-15 a = 0.69134 t=2 e(xlu) = 2.183674e-16 e(xh) = 1.003005e-14 a = 0.69134 t=3 e(xlu) = 3.596051e-16 e(xh) = 8.965987e-15 a = 0.69134 t=4 e(xlu) = 3.303264e-16 e(xh) = 8.979789e-15 a = 0.69134 t=5 e(xlu) = 2.983068e-16 e(xh) = 9.570013e-15 a = 0.77779 t=1 e(xlu) = 4.793861e-16 e(xh) = 1.193443e-14 a = 0.77779 t=2 e(xlu) = 5.190624e-16 e(xh) = 1.200261e-14 a = 0.77779 t=3 e(xlu) = 2.936017e-16 e(xh) = 1.087412e-14 a = 0.77779 t=4 e(xlu) = 3.908875e-16 e(xh) = 1.087695e-14 a = 0.77779 t=5 e(xlu) = 4.448696e-16 e(xh) = 1.167150e-14 a = 0.85355 t=1 e(xlu) = 5.534169e-16 e(xh) = 1.286899e-14 a = 0.85355 t=2 e(xlu) = 3.621531e-16 e(xh) = 1.544105e-14 a = 0.85355 t=3 e(xlu) = 5.661698e-16 e(xh) = 1.621619e-14 a = 0.85355 t=4 e(xlu) = 5.036373e-16 e(xh) = 1.633098e-14 a = 0.85355 t=5 e(xlu) = 6.448715e-16 e(xh) = 1.839005e-14 a = 0.91573 t=1 e(xlu) = 8.706561e-16 e(xh) = 2.027904e-14 a = 0.91573 t=2 e(xlu) = 1.351748e-15 e(xh) = 2.226271e-14 a = 0.91573 t=3 e(xlu) = 4.262297e-16 e(xh) = 2.070634e-14 a = 0.91573 t=4 e(xlu) = 1.177286e-15 e(xh) = 2.495788e-14 a = 0.91573 t=5 e(xlu) = 1.190137e-15 e(xh) = 2.414875e-14 a = 0.96194 t=1 e(xlu) = 1.169876e-15 e(xh) = 3.986753e-14 a = 0.96194 t=2 e(xlu) = 2.935904e-15 e(xh) = 3.786366e-14 a = 0.96194 t=3 e(xlu) = 1.054236e-15 e(xh) = 2.890171e-14 a = 0.96194 t=4 e(xlu) = 1.366598e-15 e(xh) = 6.960393e-14 a = 0.96194 t=5 e(xlu) = 2.613678e-15 e(xh) = 4.986098e-14 a = 0.99039 t=1 e(xlu) = 6.377240e-15 e(xh) = 9.828599e-14 a = 0.99039 t=2 e(xlu) = 6.258703e-15 e(xh) = 8.990663e-14 a = 0.99039 t=3 e(xlu) = 4.555252e-15 e(xh) = 1.177574e-13 a = 0.99039 t=4 e(xlu) = 2.333741e-15 e(xh) = 1.791113e-13 a = 0.99039 t=5 e(xlu) = 5.848443e-15 e(xh) = 2.261245e-13 a = 0.99048 t=1 e(xlu) = 7.829195e-15 e(xh) = 1.591206e-13 a = 0.99048 t=2 e(xlu) = 2.715429e-15 e(xh) = 3.093821e-13 a = 0.99048 t=3 e(xlu) = 1.033630e-14 e(xh) = 2.269685e-13 a = 0.99048 t=4 e(xlu) = 4.340870e-15 e(xh) = 2.115548e-13 a = 0.99048 t=5 e(xlu) = 4.325077e-15 e(xh) = 1.602966e-13 a = 0.99076 t=1 e(xlu) = 6.354488e-15 e(xh) = 1.925008e-13 a = 0.99076 t=2 e(xlu) = 5.460212e-15 e(xh) = 1.593712e-13 a = 0.99076 t=3 e(xlu) = 1.155287e-14 e(xh) = 9.664854e-14 a = 0.99076 t=4 e(xlu) = 6.092786e-15 e(xh) = 1.141859e-13 a = 0.99076 t=5 e(xlu) = 2.845496e-15 e(xh) = 2.424948e-13 a = 0.99120 t=1 e(xlu) = 1.082160e-14 e(xh) = 1.425415e-13 a = 0.99120 t=2 e(xlu) = 7.182046e-15 e(xh) = 1.668784e-13 a = 0.99120 t=3 e(xlu) = 7.656403e-15 e(xh) = 1.823957e-13 a = 0.99120 t=4 e(xlu) = 4.733679e-15 e(xh) = 1.317201e-13 a = 0.99120 t=5 e(xlu) = 1.171435e-14 e(xh) = 2.773571e-13 a = 0.99180 t=1 e(xlu) = 1.102525e-14 e(xh) = 1.070634e-13 a = 0.99180 t=2 e(xlu) = 6.543937e-15 e(xh) = 2.005612e-13 a = 0.99180 t=3 e(xlu) = 3.536172e-15 e(xh) = 2.112617e-13 a = 0.99180 t=4 e(xlu) = 1.301778e-14 e(xh) = 1.193800e-13 a = 0.99180 t=5 e(xlu) = 7.657269e-15 e(xh) = 2.304289e-13 a = 0.99253 t=1 e(xlu) = 1.410294e-14 e(xh) = 2.247292e-13 a = 0.99253 t=2 e(xlu) = 5.059531e-15 e(xh) = 1.498995e-13 a = 0.99253 t=3 e(xlu) = 5.933601e-15 e(xh) = 1.069620e-13 a = 0.99253 t=4 e(xlu) = 1.012769e-14 e(xh) = 2.481107e-13 a = 0.99253 t=5 e(xlu) = 3.736935e-15 e(xh) = 2.358999e-13 a = 0.99336 t=1 e(xlu) = 1.084064e-14 e(xh) = 1.836207e-13 a = 0.99336 t=2 e(xlu) = 5.916080e-15 e(xh) = 1.040381e-13 a = 0.99336 t=3 e(xlu) = 1.634017e-15 e(xh) = 5.503147e-13 a = 0.99336 t=4 e(xlu) = 4.835756e-15 e(xh) = 2.253475e-13 a = 0.99336 t=5 e(xlu) = 1.198279e-14 e(xh) = 1.272646e-13 a = 0.99426 t=1 e(xlu) = 1.405241e-14 e(xh) = 5.150909e-13 a = 0.99426 t=2 e(xlu) = 5.020309e-15 e(xh) = 5.629680e-13 a = 0.99426 t=3 e(xlu) = 1.692573e-14 e(xh) = 2.660182e-13 a = 0.99426 t=4 e(xlu) = 1.404920e-14 e(xh) = 1.057671e-13 a = 0.99426 t=5 e(xlu) = 2.851127e-15 e(xh) = 3.430005e-13 a = 0.99520 t=1 e(xlu) = 8.546874e-15 e(xh) = 4.744631e-13 a = 0.99520 t=2 e(xlu) = 1.273970e-14 e(xh) = 1.931740e-13 a = 0.99520 t=3 e(xlu) = 1.588886e-14 e(xh) = 4.276518e-13 a = 0.99520 t=4 e(xlu) = 5.481078e-15 e(xh) = 1.052332e-13 a = 0.99520 t=5 e(xlu) = 3.207341e-15 e(xh) = 2.552714e-13 a = 0.99613 t=1 e(xlu) = 1.359039e-14 e(xh) = 5.406111e-13 a = 0.99613 t=2 e(xlu) = 2.060023e-14 e(xh) = 2.465309e-13 a = 0.99613 t=3 e(xlu) = 3.203939e-14 e(xh) = 2.970807e-13 a = 0.99613 t=4 e(xlu) = 3.529680e-14 e(xh) = 3.976254e-13 a = 0.99613 t=5 e(xlu) = 1.084738e-14 e(xh) = 2.954745e-13 a = 0.99703 t=1 e(xlu) = 3.484163e-14 e(xh) = 2.959908e-13 a = 0.99703 t=2 e(xlu) = 1.064145e-14 e(xh) = 5.979331e-13 a = 0.99703 t=3 e(xlu) = 1.590024e-14 e(xh) = 5.051998e-13 a = 0.99703 t=4 e(xlu) = 1.610886e-14 e(xh) = 7.308578e-13 a = 0.99703 t=5 e(xlu) = 1.640683e-14 e(xh) = 3.489657e-13 a = 0.99787 t=1 e(xlu) = 1.518662e-14 e(xh) = 4.245950e-13 a = 0.99787 t=2 e(xlu) = 5.046209e-14 e(xh) = 1.497630e-12 a = 0.99787 t=3 e(xlu) = 4.113923e-14 e(xh) = 7.684214e-13 a = 0.99787 t=4 e(xlu) = 3.576288e-14 e(xh) = 2.333451e-13 a = 0.99787 t=5 e(xlu) = 6.892103e-15 e(xh) = 7.788778e-13 a = 0.99859 t=1 e(xlu) = 1.680433e-14 e(xh) = 8.195123e-13 a = 0.99859 t=2 e(xlu) = 1.687716e-14 e(xh) = 3.862629e-13 a = 0.99859 t=3 e(xlu) = 5.093965e-14 e(xh) = 7.836930e-13 a = 0.99859 t=4 e(xlu) = 1.304861e-14 e(xh) = 1.065549e-12 a = 0.99859 t=5 e(xlu) = 3.585368e-14 e(xh) = 6.434158e-13 a = 0.99919 t=1 e(xlu) = 1.008850e-13 e(xh) = 9.231361e-13 a = 0.99919 t=2 e(xlu) = 6.420526e-14 e(xh) = 4.015397e-13 a = 0.99919 t=3 e(xlu) = 4.964249e-14 e(xh) = 1.562200e-12 a = 0.99919 t=4 e(xlu) = 6.216359e-14 e(xh) = 2.508802e-12 a = 0.99919 t=5 e(xlu) = 1.437955e-13 e(xh) = 5.461983e-13 a = 0.99963 t=1 e(xlu) = 2.411120e-13 e(xh) = 8.849245e-13 a = 0.99963 t=2 e(xlu) = 7.365057e-14 e(xh) = 2.651689e-12 a = 0.99963 t=3 e(xlu) = 7.792605e-14 e(xh) = 1.069276e-12 a = 0.99963 t=4 e(xlu) = 6.565472e-14 e(xh) = 5.211781e-13 a = 0.99963 t=5 e(xlu) = 1.100592e-13 e(xh) = 4.350507e-12 a = 0.99991 t=1 e(xlu) = 3.729519e-13 e(xh) = 7.861449e-12 a = 0.99991 t=2 e(xlu) = 9.154293e-13 e(xh) = 2.766905e-11 a = 0.99991 t=3 e(xlu) = 3.354954e-13 e(xh) = 1.733288e-11 a = 0.99991 t=4 e(xlu) = 1.289765e-12 e(xh) = 1.602315e-11 a = 0.99991 t=5 e(xlu) = 2.678596e-13 e(xh) = 3.226213e-11
SparseLU with iterative refinement
The previous experiment showed that SparseLU was generally more accurate than the Hessenberg solution. Because the answers are so much faster, we could afford a few steps of iterative refinement.
nrhs=5; for ai=1:nas a = as(ai); for rhsi=1:nrhs y = rand(n,1); y=y./norm(y,1); z = Pt*y; z = y - a*z; xlu = (speye(n)-a*Pt)\z; rlu = z-xlu+a*(Pt*xlu); z1 = (speye(n)-a*Pt)\rlu; xlu1 = xlu+z1; rlu2 = z-xlu1+a*(Pt*xlu1); z2 = (speye(n)-a*Pt)\rlu2; xlu2 = xlu1+z2; fprintf('a = %7.5f t=%i e(xlu) = %10e e(xlu1) = %10e e(xlu2) = %10e\n',... a, rhsi, norm(xlu-y,1), norm(xlu1-y,1), norm(xlu2-y,1)); end end
a = 0.00961 t=1 e(xlu) = 4.350709e-17 e(xlu1) = 7.969124e-19 e(xlu2) = 7.942390e-19 a = 0.00961 t=2 e(xlu) = 4.438114e-17 e(xlu1) = 7.579621e-19 e(xlu2) = 6.163753e-19 a = 0.00961 t=3 e(xlu) = 4.112991e-17 e(xlu1) = 4.919938e-19 e(xlu2) = 2.775356e-19 a = 0.00961 t=4 e(xlu) = 4.137800e-17 e(xlu1) = 7.863642e-19 e(xlu2) = 5.097616e-19 a = 0.00961 t=5 e(xlu) = 4.576305e-17 e(xlu1) = 8.609825e-19 e(xlu2) = 5.410423e-19 a = 0.03806 t=1 e(xlu) = 4.873838e-17 e(xlu1) = 2.160172e-18 e(xlu2) = 1.356735e-18 a = 0.03806 t=2 e(xlu) = 4.281700e-17 e(xlu1) = 2.840062e-18 e(xlu2) = 1.856948e-18 a = 0.03806 t=3 e(xlu) = 4.490303e-17 e(xlu1) = 1.872363e-18 e(xlu2) = 1.929630e-18 a = 0.03806 t=4 e(xlu) = 4.537264e-17 e(xlu1) = 2.857969e-18 e(xlu2) = 2.413012e-18 a = 0.03806 t=5 e(xlu) = 4.590283e-17 e(xlu1) = 2.480112e-18 e(xlu2) = 2.201227e-18 a = 0.08427 t=1 e(xlu) = 4.698375e-17 e(xlu1) = 5.860886e-18 e(xlu2) = 4.165814e-18 a = 0.08427 t=2 e(xlu) = 5.347531e-17 e(xlu1) = 6.385676e-18 e(xlu2) = 4.246388e-18 a = 0.08427 t=3 e(xlu) = 5.002535e-17 e(xlu1) = 5.130659e-18 e(xlu2) = 4.353471e-18 a = 0.08427 t=4 e(xlu) = 5.156866e-17 e(xlu1) = 4.828094e-18 e(xlu2) = 3.811542e-18 a = 0.08427 t=5 e(xlu) = 4.920245e-17 e(xlu1) = 6.121189e-18 e(xlu2) = 4.077722e-18 a = 0.14645 t=1 e(xlu) = 5.532701e-17 e(xlu1) = 8.417205e-18 e(xlu2) = 7.663398e-18 a = 0.14645 t=2 e(xlu) = 5.479367e-17 e(xlu1) = 8.136982e-18 e(xlu2) = 7.568306e-18 a = 0.14645 t=3 e(xlu) = 6.245330e-17 e(xlu1) = 1.161621e-17 e(xlu2) = 9.918676e-18 a = 0.14645 t=4 e(xlu) = 5.826554e-17 e(xlu1) = 1.019813e-17 e(xlu2) = 8.982281e-18 a = 0.14645 t=5 e(xlu) = 5.006121e-17 e(xlu1) = 9.071571e-18 e(xlu2) = 7.619776e-18 a = 0.22221 t=1 e(xlu) = 6.534939e-17 e(xlu1) = 1.666071e-17 e(xlu2) = 1.206228e-17 a = 0.22221 t=2 e(xlu) = 7.651988e-17 e(xlu1) = 1.596816e-17 e(xlu2) = 1.330632e-17 a = 0.22221 t=3 e(xlu) = 6.805153e-17 e(xlu1) = 1.790040e-17 e(xlu2) = 1.094488e-17 a = 0.22221 t=4 e(xlu) = 6.098796e-17 e(xlu1) = 1.292413e-17 e(xlu2) = 1.113022e-17 a = 0.22221 t=5 e(xlu) = 7.588939e-17 e(xlu1) = 1.594794e-17 e(xlu2) = 1.229648e-17 a = 0.30866 t=1 e(xlu) = 1.225182e-16 e(xlu1) = 2.017082e-17 e(xlu2) = 1.926703e-17 a = 0.30866 t=2 e(xlu) = 7.824135e-17 e(xlu1) = 2.658294e-17 e(xlu2) = 2.441635e-17 a = 0.30866 t=3 e(xlu) = 7.748615e-17 e(xlu1) = 2.413684e-17 e(xlu2) = 1.924120e-17 a = 0.30866 t=4 e(xlu) = 7.591682e-17 e(xlu1) = 2.590789e-17 e(xlu2) = 2.116467e-17 a = 0.30866 t=5 e(xlu) = 8.841700e-17 e(xlu1) = 2.082325e-17 e(xlu2) = 2.160463e-17 a = 0.40245 t=1 e(xlu) = 9.785729e-17 e(xlu1) = 3.506605e-17 e(xlu2) = 2.856468e-17 a = 0.40245 t=2 e(xlu) = 9.835834e-17 e(xlu1) = 3.895732e-17 e(xlu2) = 3.101624e-17 a = 0.40245 t=3 e(xlu) = 1.540545e-16 e(xlu1) = 3.344759e-17 e(xlu2) = 2.390441e-17 a = 0.40245 t=4 e(xlu) = 1.115333e-16 e(xlu1) = 3.273274e-17 e(xlu2) = 4.018261e-17 a = 0.40245 t=5 e(xlu) = 1.124645e-16 e(xlu1) = 3.807110e-17 e(xlu2) = 2.930648e-17 a = 0.50000 t=1 e(xlu) = 1.289296e-16 e(xlu1) = 4.323403e-17 e(xlu2) = 4.437576e-17 a = 0.50000 t=2 e(xlu) = 1.221920e-16 e(xlu1) = 4.416493e-17 e(xlu2) = 3.755310e-17 a = 0.50000 t=3 e(xlu) = 1.302747e-16 e(xlu1) = 4.508044e-17 e(xlu2) = 3.976555e-17 a = 0.50000 t=4 e(xlu) = 1.103151e-16 e(xlu1) = 4.411086e-17 e(xlu2) = 3.876591e-17 a = 0.50000 t=5 e(xlu) = 1.443555e-16 e(xlu1) = 5.613764e-17 e(xlu2) = 4.362950e-17 a = 0.59755 t=1 e(xlu) = 2.345219e-16 e(xlu1) = 1.036945e-16 e(xlu2) = 9.103726e-17 a = 0.59755 t=2 e(xlu) = 1.881788e-16 e(xlu1) = 7.653201e-17 e(xlu2) = 7.052563e-17 a = 0.59755 t=3 e(xlu) = 2.937298e-16 e(xlu1) = 1.149443e-16 e(xlu2) = 8.909129e-17 a = 0.59755 t=4 e(xlu) = 2.514226e-16 e(xlu1) = 7.695543e-17 e(xlu2) = 5.642065e-17 a = 0.59755 t=5 e(xlu) = 2.114929e-16 e(xlu1) = 8.059751e-17 e(xlu2) = 6.719311e-17 a = 0.69134 t=1 e(xlu) = 3.710944e-16 e(xlu1) = 1.593374e-16 e(xlu2) = 1.183239e-16 a = 0.69134 t=2 e(xlu) = 2.265479e-16 e(xlu1) = 1.278446e-16 e(xlu2) = 9.219287e-17 a = 0.69134 t=3 e(xlu) = 2.517728e-16 e(xlu1) = 1.060556e-16 e(xlu2) = 8.660160e-17 a = 0.69134 t=4 e(xlu) = 3.382890e-16 e(xlu1) = 1.116473e-16 e(xlu2) = 1.040127e-16 a = 0.69134 t=5 e(xlu) = 2.306458e-16 e(xlu1) = 1.028056e-16 e(xlu2) = 8.212440e-17 a = 0.77779 t=1 e(xlu) = 3.362612e-16 e(xlu1) = 1.775570e-16 e(xlu2) = 1.747907e-16 a = 0.77779 t=2 e(xlu) = 3.379333e-16 e(xlu1) = 1.523229e-16 e(xlu2) = 1.328655e-16 a = 0.77779 t=3 e(xlu) = 2.936459e-16 e(xlu1) = 2.057918e-16 e(xlu2) = 1.741727e-16 a = 0.77779 t=4 e(xlu) = 5.867052e-16 e(xlu1) = 1.930568e-16 e(xlu2) = 1.668945e-16 a = 0.77779 t=5 e(xlu) = 3.387796e-16 e(xlu1) = 1.502703e-16 e(xlu2) = 1.541924e-16 a = 0.85355 t=1 e(xlu) = 5.403966e-16 e(xlu1) = 2.517095e-16 e(xlu2) = 2.973332e-16 a = 0.85355 t=2 e(xlu) = 6.309152e-16 e(xlu1) = 2.879589e-16 e(xlu2) = 2.608290e-16 a = 0.85355 t=3 e(xlu) = 5.644566e-16 e(xlu1) = 2.256120e-16 e(xlu2) = 2.683807e-16 a = 0.85355 t=4 e(xlu) = 3.246421e-16 e(xlu1) = 4.612828e-16 e(xlu2) = 4.253625e-16 a = 0.85355 t=5 e(xlu) = 3.914232e-16 e(xlu1) = 2.707795e-16 e(xlu2) = 3.365101e-16 a = 0.91573 t=1 e(xlu) = 9.563649e-16 e(xlu1) = 3.934169e-16 e(xlu2) = 4.311759e-16 a = 0.91573 t=2 e(xlu) = 7.941922e-16 e(xlu1) = 8.120501e-16 e(xlu2) = 8.956847e-16 a = 0.91573 t=3 e(xlu) = 5.485422e-16 e(xlu1) = 3.778438e-16 e(xlu2) = 2.444246e-16 a = 0.91573 t=4 e(xlu) = 1.457349e-15 e(xlu1) = 6.230556e-16 e(xlu2) = 7.744574e-16 a = 0.91573 t=5 e(xlu) = 7.655116e-16 e(xlu1) = 6.852423e-16 e(xlu2) = 6.641641e-16 a = 0.96194 t=1 e(xlu) = 8.384689e-16 e(xlu1) = 1.017136e-15 e(xlu2) = 7.790933e-16 a = 0.96194 t=2 e(xlu) = 2.032596e-15 e(xlu1) = 1.897319e-15 e(xlu2) = 1.844241e-15 a = 0.96194 t=3 e(xlu) = 1.604642e-15 e(xlu1) = 7.083235e-16 e(xlu2) = 9.334335e-16 a = 0.96194 t=4 e(xlu) = 1.828417e-15 e(xlu1) = 1.933949e-15 e(xlu2) = 1.946861e-15 a = 0.96194 t=5 e(xlu) = 2.251078e-15 e(xlu1) = 8.208068e-16 e(xlu2) = 1.137903e-15 a = 0.99039 t=1 e(xlu) = 8.181002e-15 e(xlu1) = 1.977972e-15 e(xlu2) = 3.929462e-15 a = 0.99039 t=2 e(xlu) = 9.107957e-15 e(xlu1) = 1.961309e-15 e(xlu2) = 5.843187e-15 a = 0.99039 t=3 e(xlu) = 7.366166e-15 e(xlu1) = 4.276239e-15 e(xlu2) = 4.928417e-15 a = 0.99039 t=4 e(xlu) = 9.818908e-15 e(xlu1) = 1.817318e-15 e(xlu2) = 1.941059e-15 a = 0.99039 t=5 e(xlu) = 2.288872e-15 e(xlu1) = 5.331900e-15 e(xlu2) = 3.118854e-15 a = 0.99048 t=1 e(xlu) = 8.972472e-15 e(xlu1) = 7.582562e-15 e(xlu2) = 3.782537e-15 a = 0.99048 t=2 e(xlu) = 1.016970e-14 e(xlu1) = 6.488861e-15 e(xlu2) = 3.807037e-15 a = 0.99048 t=3 e(xlu) = 6.281378e-15 e(xlu1) = 6.691950e-15 e(xlu2) = 2.718171e-15 a = 0.99048 t=4 e(xlu) = 6.328666e-15 e(xlu1) = 6.101567e-15 e(xlu2) = 3.623312e-15 a = 0.99048 t=5 e(xlu) = 9.494382e-15 e(xlu1) = 6.836954e-15 e(xlu2) = 4.877432e-15 a = 0.99076 t=1 e(xlu) = 5.960841e-15 e(xlu1) = 3.876370e-15 e(xlu2) = 4.073692e-15 a = 0.99076 t=2 e(xlu) = 4.123168e-15 e(xlu1) = 2.034445e-15 e(xlu2) = 2.607703e-15 a = 0.99076 t=3 e(xlu) = 8.326575e-15 e(xlu1) = 1.125153e-14 e(xlu2) = 2.364081e-15 a = 0.99076 t=4 e(xlu) = 5.910588e-15 e(xlu1) = 5.451069e-15 e(xlu2) = 1.862159e-15 a = 0.99076 t=5 e(xlu) = 5.941522e-15 e(xlu1) = 5.851661e-15 e(xlu2) = 3.545920e-15 a = 0.99120 t=1 e(xlu) = 5.434496e-15 e(xlu1) = 3.298619e-15 e(xlu2) = 6.596097e-15 a = 0.99120 t=2 e(xlu) = 5.679206e-15 e(xlu1) = 3.185588e-15 e(xlu2) = 3.064046e-15 a = 0.99120 t=3 e(xlu) = 9.232071e-15 e(xlu1) = 6.127863e-15 e(xlu2) = 4.714735e-15 a = 0.99120 t=4 e(xlu) = 1.025134e-14 e(xlu1) = 1.041003e-14 e(xlu2) = 1.179281e-14 a = 0.99120 t=5 e(xlu) = 4.422367e-15 e(xlu1) = 5.515136e-15 e(xlu2) = 9.389411e-15 a = 0.99180 t=1 e(xlu) = 5.398633e-15 e(xlu1) = 4.026161e-15 e(xlu2) = 5.011814e-15 a = 0.99180 t=2 e(xlu) = 9.750331e-15 e(xlu1) = 7.276911e-15 e(xlu2) = 2.608920e-15 a = 0.99180 t=3 e(xlu) = 3.811902e-15 e(xlu1) = 7.028362e-15 e(xlu2) = 8.970459e-15 a = 0.99180 t=4 e(xlu) = 1.197685e-14 e(xlu1) = 4.332873e-15 e(xlu2) = 8.797655e-15 a = 0.99180 t=5 e(xlu) = 6.031933e-15 e(xlu1) = 1.809429e-14 e(xlu2) = 6.543821e-15 a = 0.99253 t=1 e(xlu) = 6.566390e-15 e(xlu1) = 8.487050e-15 e(xlu2) = 6.042657e-15 a = 0.99253 t=2 e(xlu) = 8.375099e-15 e(xlu1) = 3.022805e-15 e(xlu2) = 3.293952e-15 a = 0.99253 t=3 e(xlu) = 2.753572e-15 e(xlu1) = 4.815772e-15 e(xlu2) = 9.162251e-15 a = 0.99253 t=4 e(xlu) = 7.434566e-15 e(xlu1) = 5.729693e-15 e(xlu2) = 5.505612e-15 a = 0.99253 t=5 e(xlu) = 1.099824e-14 e(xlu1) = 5.855138e-15 e(xlu2) = 4.325274e-15 a = 0.99336 t=1 e(xlu) = 1.199061e-14 e(xlu1) = 3.503176e-15 e(xlu2) = 7.764545e-15 a = 0.99336 t=2 e(xlu) = 1.206417e-14 e(xlu1) = 3.469444e-15 e(xlu2) = 4.189825e-15 a = 0.99336 t=3 e(xlu) = 9.245554e-15 e(xlu1) = 8.338209e-15 e(xlu2) = 6.815850e-15 a = 0.99336 t=4 e(xlu) = 7.663895e-15 e(xlu1) = 8.392700e-15 e(xlu2) = 6.381386e-15 a = 0.99336 t=5 e(xlu) = 2.986895e-15 e(xlu1) = 6.599564e-15 e(xlu2) = 7.404548e-15 a = 0.99426 t=1 e(xlu) = 6.731476e-15 e(xlu1) = 8.828966e-15 e(xlu2) = 1.311383e-14 a = 0.99426 t=2 e(xlu) = 8.406850e-15 e(xlu1) = 1.161026e-14 e(xlu2) = 4.734212e-15 a = 0.99426 t=3 e(xlu) = 6.076550e-15 e(xlu1) = 6.785383e-15 e(xlu2) = 1.091843e-14 a = 0.99426 t=4 e(xlu) = 7.896903e-15 e(xlu1) = 4.973773e-15 e(xlu2) = 8.027024e-15 a = 0.99426 t=5 e(xlu) = 4.329545e-15 e(xlu1) = 8.383896e-15 e(xlu2) = 7.831181e-15 a = 0.99520 t=1 e(xlu) = 7.544240e-15 e(xlu1) = 8.732347e-15 e(xlu2) = 8.436931e-15 a = 0.99520 t=2 e(xlu) = 9.156429e-15 e(xlu1) = 2.456780e-15 e(xlu2) = 7.944947e-15 a = 0.99520 t=3 e(xlu) = 1.446345e-14 e(xlu1) = 1.437447e-14 e(xlu2) = 1.225700e-14 a = 0.99520 t=4 e(xlu) = 2.116654e-14 e(xlu1) = 3.319279e-15 e(xlu2) = 7.218606e-15 a = 0.99520 t=5 e(xlu) = 1.678110e-14 e(xlu1) = 1.138798e-14 e(xlu2) = 7.927886e-15 a = 0.99613 t=1 e(xlu) = 3.360404e-14 e(xlu1) = 5.094035e-15 e(xlu2) = 9.530794e-15 a = 0.99613 t=2 e(xlu) = 1.480075e-14 e(xlu1) = 2.368913e-14 e(xlu2) = 1.289500e-14 a = 0.99613 t=3 e(xlu) = 1.284652e-14 e(xlu1) = 8.619690e-15 e(xlu2) = 1.027236e-14 a = 0.99613 t=4 e(xlu) = 1.444306e-14 e(xlu1) = 1.716513e-14 e(xlu2) = 1.237807e-14 a = 0.99613 t=5 e(xlu) = 1.714838e-14 e(xlu1) = 1.804688e-14 e(xlu2) = 1.208832e-14 a = 0.99703 t=1 e(xlu) = 2.251931e-14 e(xlu1) = 2.283004e-14 e(xlu2) = 1.723162e-14 a = 0.99703 t=2 e(xlu) = 1.256143e-14 e(xlu1) = 1.228514e-14 e(xlu2) = 1.095589e-14 a = 0.99703 t=3 e(xlu) = 1.527148e-14 e(xlu1) = 7.431238e-15 e(xlu2) = 3.850739e-14 a = 0.99703 t=4 e(xlu) = 1.669169e-14 e(xlu1) = 1.294981e-14 e(xlu2) = 1.521584e-14 a = 0.99703 t=5 e(xlu) = 2.040241e-14 e(xlu1) = 2.103465e-14 e(xlu2) = 1.174347e-14 a = 0.99787 t=1 e(xlu) = 2.678060e-14 e(xlu1) = 2.802275e-14 e(xlu2) = 3.763166e-14 a = 0.99787 t=2 e(xlu) = 2.556869e-14 e(xlu1) = 2.705321e-14 e(xlu2) = 1.578681e-14 a = 0.99787 t=3 e(xlu) = 2.188863e-14 e(xlu1) = 2.501106e-14 e(xlu2) = 2.141014e-14 a = 0.99787 t=4 e(xlu) = 9.073518e-15 e(xlu1) = 1.561405e-14 e(xlu2) = 1.264478e-14 a = 0.99787 t=5 e(xlu) = 4.173853e-14 e(xlu1) = 1.625356e-14 e(xlu2) = 2.141139e-14 a = 0.99859 t=1 e(xlu) = 4.093733e-14 e(xlu1) = 3.623367e-14 e(xlu2) = 7.881382e-15 a = 0.99859 t=2 e(xlu) = 4.174908e-14 e(xlu1) = 2.066486e-14 e(xlu2) = 4.521499e-14 a = 0.99859 t=3 e(xlu) = 2.623626e-14 e(xlu1) = 1.917555e-14 e(xlu2) = 2.053473e-14 a = 0.99859 t=4 e(xlu) = 4.300177e-14 e(xlu1) = 2.884831e-14 e(xlu2) = 4.108588e-14 a = 0.99859 t=5 e(xlu) = 1.872317e-14 e(xlu1) = 4.487089e-14 e(xlu2) = 6.581127e-14 a = 0.99919 t=1 e(xlu) = 9.535090e-14 e(xlu1) = 1.054840e-13 e(xlu2) = 1.450379e-13 a = 0.99919 t=2 e(xlu) = 3.723757e-14 e(xlu1) = 1.028834e-13 e(xlu2) = 4.760231e-14 a = 0.99919 t=3 e(xlu) = 4.051219e-14 e(xlu1) = 7.129963e-14 e(xlu2) = 6.225203e-14 a = 0.99919 t=4 e(xlu) = 7.453855e-14 e(xlu1) = 2.050326e-14 e(xlu2) = 5.229245e-14 a = 0.99919 t=5 e(xlu) = 1.796265e-14 e(xlu1) = 4.371221e-14 e(xlu2) = 1.452875e-14 a = 0.99963 t=1 e(xlu) = 7.945984e-14 e(xlu1) = 7.272837e-15 e(xlu2) = 1.165559e-13 a = 0.99963 t=2 e(xlu) = 2.479302e-13 e(xlu1) = 3.325406e-13 e(xlu2) = 1.963665e-13 a = 0.99963 t=3 e(xlu) = 7.462981e-14 e(xlu1) = 7.458401e-14 e(xlu2) = 2.599646e-14 a = 0.99963 t=4 e(xlu) = 2.283331e-13 e(xlu1) = 9.421576e-14 e(xlu2) = 7.509877e-14 a = 0.99963 t=5 e(xlu) = 1.918194e-13 e(xlu1) = 8.485453e-14 e(xlu2) = 6.891602e-14 a = 0.99991 t=1 e(xlu) = 4.008496e-13 e(xlu1) = 1.535237e-13 e(xlu2) = 1.132539e-13 a = 0.99991 t=2 e(xlu) = 3.243177e-13 e(xlu1) = 5.070710e-13 e(xlu2) = 1.065362e-12 a = 0.99991 t=3 e(xlu) = 2.698736e-13 e(xlu1) = 4.503917e-13 e(xlu2) = 6.526841e-13 a = 0.99991 t=4 e(xlu) = 1.485534e-13 e(xlu1) = 3.394294e-13 e(xlu2) = 4.771368e-13 a = 0.99991 t=5 e(xlu) = 3.291290e-13 e(xlu1) = 3.965766e-13 e(xlu2) = 2.882358e-13
Iterative refinement didn't seem to help much. My conclusion from this experiment is that just using the standard backslash solver is best (R2007a/b) as long as the total quadrature weight on the nodes above 0.99 is less than 1e-4