I am trying to calculate the eigenvalues λ ( lambda ) of a damped structure using the following equations of motion:
(λ² M + λ C + K ) x = 0 0,
where M , C, and K are sparse matrices. Using the MATLAB polyeig function works, but I would like to move to larger systems and take advantage of the sparseness of my matrices. I used the linearization of the state space to obtain a generalized eigenvalue problem as follows:
( A - λ B ) z = 0 0,
from
A = [ K , 0 0; 0 0, - M ],
B = [- C , - M ; - M , 0 0],
z = [ x ; λ x ]
We solve this using the MATLAB eigs function:
lambda = eigs(A,B,10,'sm')
Generates 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 that the last two eigenvalues could not converge. Increasing the number of Lanczos basis vectors does not seem to solve the problem.
Oddly enough, an increase in the number of calculated eigenvalues ( k ) allows an increasing number of eigenvalues to converge:
k = 10 : The number of lambdas converges = 8k = 20 : the number of lambdas converges = 8k = 50 : the number of lambdas converges = 8k = 100 : the number of lambdas converges = 20k = 120 : number of lambdas converging = 80k = 150 : number of lambdas converging = 150
It is also worth mentioning that many of the eigenvalues that do not converge with lower k values appear to be degenerate or at least very closely spaced.
I was wondering if anyone could come up with an explanation for this behavior? If so, is there a way to make all eigenvalues converge without making k very large? Thanks!
math matlab eigenvalue
Dimitri k
source share