eigs function works slowly
28 ビュー (過去 30 日間)
古いコメントを表示
Hello!
I am having problem with eigs function, I want to find 36 eigenvaluses for a very large sparse matrix, it takes long and my laptop freezes, is these any possible way to make it faster?
The code is:
options = struct('isreal', true);
[V, D] = eigs(A, 36, 'largestreal', options);
4 件のコメント
回答 (2 件)
Sulaymon Eshkabilov
2023 年 12 月 30 日
Note that eigs() is NOT computationally efficient and thus, eig() can be employed instead, e.g.,
A = randi(250, 100);
options = struct('isreal', true);
tic;
[V, D1] = eigs(A, 100, 'largestreal',options);
Time_EIGS = toc
tic;
[V2, D2] = eig(A);
Time_EIG = toc
2 件のコメント
John D'Errico
2023 年 12 月 30 日
編集済み: John D'Errico
2023 年 12 月 30 日
NO. Eig cannot be used on a matrix of size 641601x641601. This is why eigs exists in the first place, BECAUSE, compared to eig, eigs IS more computationally efficient on large sparse arrays.
Christine Tobler
2024 年 1 月 5 日
EIG is likely to be more efficient than EIGS on small matrices, since EIGS is specifically meant to compute a few eigenvalues of a large, sparse matrix.
Christine Tobler
2024 年 1 月 5 日
編集済み: Christine Tobler
2024 年 1 月 5 日
A possible issue is that "largestreal" option works less towards the strengths of the EIGS algorithm than the default "largestabs".
Basically inside of EIGS, there is an iteration which tends to find the eigenvalues with largest absolute values. What "largestreal" does is to do some iterations of this, but constantly cut off anything that isn't the largest in terms of the real part of the eigenvalue. This can be useful, but also sometimes stagnates.
So as a first step, could you try to call
[V, D] = eigs(A, 36, 'largestabs');
and let us know what eigenvalues are found for your matrix, and how much time it takes? It can help in understanding the spectrum of the matrix A. Of course if you know any additional information about A (is it symmetric? is it positive definite? EDIT: I see the diagonal is negative, so the question would be if the matrix is know to be negative definite) that can also help with deciding how to call EIGS.
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!