eigenvalue and eigenvector of free vibration while stiffness matrix is not invertable

107 views (last 30 days)
Hi everybody,
I have K (stiffness matrix) and M (mass matrix) and I want to find eigenvalues and eigenvectors of (K-w^2*M)*fi=0 problem where
w^2 are eigenvalues, and fi are eigenvectors.
In general I solve this problem as [eig1,eig2]=eig(K^-1*M) in matlab. but now, I have a not invertable K matrix. So, I want to use eigs but I do not know how I should do.
Anybody knows how to do it?
Thanks in advance

Accepted Answer

Christine Tobler
Christine Tobler on 5 May 2022
If eig has been working well for the size of your problem you could consider using
[U, D] = eig(K, M); %this solves K*U = M*U*D and would match eig(M\K) if M is invertible.
instead of computing the inverse of M. This will work safely also for singular matrix M. You can of course flip the order of passing in K and M, this only affects if the eigenvalues computed need to be inverted (is it K*x = lambda*M*x or M*x = lambda*K*x).
By convention, usually people will use the mass matrix as the second matrix if it makes sense to call one of the input a mass matrix.
For eigs, you can use the same syntax eigs(K, M) but here it's much more relevant than with EIG which eigenvalues you want (eigs computes only a subset, typically closest to zero or furthest away from zero). Depending on this, either K or M still need to be inverted inside of eigs.
eigs has quite a lot of special-case treatment for the case when the second matrix is symmetric positive definite, so if one of your matrices is that, it may be a good idea to pass it in as the second argument.

More Answers (0)


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!

Translated by