I am trying to compute the eigenvalues, λ (lambda
), of a damped structure with the following equations of motion:
(λ²M + λC + K) x = 0,
where M, C, and K are sparse matrices. Using MATLAB's polyeig
function works, but I would like to go to larger systems and take advantage of the sparsity of my matrices. I have used a state space linearization to obtain a generalized eigenvalue problem as follows:
(A - λB) z = 0,
with
A = [K , 0 ; 0, -M],
B = [-C , -M ; -M, 0],
z = [x ; λx]
Solving this with MATLAB's eigs
function:
lambda = eigs(A,B,10,'sm')
Produces the following output:
lambda =
1.0e+03 *
-0.2518 - 1.3138i
-0.2518 + 1.3138i
-0.4690 - 1.7360i
-0.4690 + 1.7360i
-0.4690 - 1.7360i
-0.4690 + 1.7360i
-0.5387 - 1.8352i
-0.5387 + 1.8352i
NaN + NaNi
NaN + NaNi
The first eight eigenvalues are correct, but it seems as though the last two eigenvalues were not able to converge. Increasing the number of Lanczos basis vectors does not seem to improve the problem.
Strangely however, increasing the number of eigenvalues computed (k
) allows more and more eigenvalues to converge:
k = 10
: Number of lambdas converged = 8k = 20
: Number of lambdas converged = 8k = 50
: Number of lambdas converged = 8k = 100
: Number of lambdas converged = 20k = 120
: Number of lambdas converged = 80k = 150
: Number of lambdas converged = 150
It may also be worth mentioning that many of the eigenvalues that do not converge with lower values of k
appear to be degenerate or at least very closely spaced.
I was wondering if anybody can think of an explanation for this behavior? If so, is there any way to make all of the eigenvalues converge without making k
very large? Thank you!