Cholesky vs Eigs speed comparison?
7 views (last 30 days)
Show older comments
I have many large (8000 x 8000) sparse PSD matrices for which I would like to verify that their largest eigenvalue is at most some constant C. If A denotes such a matrix, there are two ways to check this.
- eigs(A,1) <= C
- chol(C*speye(size(A,1)) - A) (and inspect the output flag)
Somehow, method 1 is much faster than 2 (this difference is not due to the computation time of C*speye(size(A,1)) - A) . Why is that? The general consensus is that cholesky decomposition is the fastest way of determining PSD-ness of matrices. Is chol not as fast for sparse matrices as eigs?
0 Comments
Answers (1)
Bruno Luong
on 25 Oct 2024
Edited: Bruno Luong
on 28 Oct 2024
Your test of PSD is not right. You should do:
eigs(A,1, 'smallestreal') > smallpositivenumber % 'sr', 'sa' for older MATLAB
EIGS compute one eigen value by iterative method. It converges rapidly for
eigs(A,1)
6 Comments
Bruno Luong
on 28 Oct 2024
Edited: Bruno Luong
on 28 Oct 2024
An example with sparse matrix based on Haar basis. The ratio of two matrix norms increases like sqrt(N)
N = 2^14
A = haar(N);
% eigs(A,1) must be 1
norm(A,inf) / eigs(A,1)
function S=haar(N)
if (N<2 || (log2(N)-floor(log2(N)))~=0)
error('The input argument should be of form 2^k');
end
p=[0 0];
q=[0 1];
n=nextpow2(N);
for i=1:n-1
p=[p i*ones(1,2^i)];
t=1:(2^i);
q=[q t];
end
j = 1:N;
I = 1+0*j;
J = j;
V = 1+0*j;
for i=2:N
P=p(1,i); Q=q(1,i);
j = 1+N*(Q-1)/(2^P):N*(Q-0.5)/(2^P);
I = [I, i+0*j];
J = [J, j];
V = [V, 2^(P/2)+0*j];
j = 1+(N*((Q-0.5)/(2^P))):N*(Q/(2^P));
I = [I, i+0*j];
J = [J, j];
V = [V, -(2^(P/2))+0*j];
end
S = sparse(I,J,V,N,N);
S=S/sqrt(N);
end
Bruno Luong
on 29 Oct 2024
Edited: Bruno Luong
on 29 Oct 2024
Here is an example where the ratio is huge (= N), discovered by codinng mistake .;)
N = 2^16
j = 1:N;
I = 1+0*j;
J = j;
V = 1+0*j;
A = sparse(I,J,V,N,N);
norm(A,inf) / eigs(A,1)
See Also
Categories
Find more on Linear Algebra in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!