eigs with big sparse matrix has Internal error

I am using 9m by 9m K_matrix_sys and M_matrix_sys to calculate the frequence with eigs.
fre = eigs(K_matrix_sys,M_matrix_sys,3,0);
The error is showing below. I don't know how set up eigs other value to make this work.
Error using matlab.internal.decomposition.builtin.UMFPACKWrapper
Decomposition built-in error: Algorithm did not succeed.
Internal error in library UMFPACK.
Error in eigs>AminusSigmaBSolve (line 1220)
umf = matlab.internal.decomposition.builtin.UMFPACKWrapper(AminusSigmaB, 0.1, 0.001, true, 0);
Error in eigs>getOps (line 1122)
applyOP = AminusSigmaBSolve(A, B, innerOpts.sigma, Amatrix, n, ...
Error in eigs (line 122)
[applyOP, applyM] = getOps(A, B, n, spdB, shiftAndInvert, R, cholB, permB,...

댓글 수: 6

The error is happening while computing a factorization of K_matrix_sys so that we can then solve linear systems K_matrix_sys \ x.
Could you try to solve a linear system? That is, calling
K_matrix_sys \ rand(size(K_matrix_sys, 1), 1);
Does this also error, and if yes, what error message is given?
Benyang Hu
Benyang Hu 2022년 3월 26일
편집: Benyang Hu 2022년 3월 28일
I just finished the running. There is no error for the line you give to me. Do you mean the error is from M_matrix_sys?
Update: The error is saying
Error using \
Out of memory. Type "help memory" for your options.
So is there no enought memory for this calculation?
How much memory do you have?
May be you can try to save K and M the load them again in clean matlab enviroment and calling eigs.
I have 128GB memory. There is no difference after I "clear" in matlab. I tried before.
"So is there no enought memory for this calculation?"
Obviously no, as I have suspected.
eigs should have given the out-of-memory error directly, instead of the "internal error" message you had originally received. This has been addressed for R2019b, so in that and later releases the error message should be less confusing.
Unfortunately there isn't much to be done for the case of an out-of-memory error. For some sparse matrices, their factorization contains a lot of "fill-in", meaning the factors of this matrix contain many more nonzeros than the original matrix and therefore need much more memory.
If you happen to know that all eigenvalues are positive, you could try to instead use the "smallestreal" option, which doesn't compute a factorization of the first input matrix. That can be a bit of a mixed bag, as convergence of the iteration inside eigs can be much slower (or not happen in practical time at all), but in some cases it works very well.
% If you know all eigenvalues are >= 0:
fre = eigs(K_matrix_sys,M_matrix_sys,3,'smallestreal')

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Linear Algebra에 대해 자세히 알아보기

제품

릴리스

R2019a

질문:

2022년 3월 25일

답변:

2022년 5월 30일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by