I'm no expert on the different types of algorithms to compute eigenvalues and vectors for a real, symmetric matrix (coming from linear mass and stiffness matrices for a frame FEA model). I am looking for a good blend of computational efficiency and ease of coding for a system of ~300 DoFs where I only need the first N (N between 1 and 10) eigenvalues and vectors. I will be programming it in VBA, so the less bundled algorithms (e.g. decompositions and things) that I need to program are a factor, too. I was figuring on inverse power iterations with shifting, but am concerned about stability or skipping an eigenvalue if I shift too much or too little. Is this a realistic concern?
Appropriate algorithm for smallest several eigen(values|vectors) of a ~300 DoF system?
eigenvalues;iterative method
A couple of options:A matrix of size 300 is very small, and computing this many eigenvalues and vectors shouldn't take more than a couple seconds on any modern computer. Usually the QR algorithm is used when computing all eigenvalues. It is advisable to use LAPACK routines for this, they have great documentation and are widely used. Implementing this should be very easy and quick.If (1.) doesn't cut it, you can indeed find just the smallest eigenvalues and vectors you need (which should be quicker if you can provide the inverse operator). There are many options; power iteration and the Arnoldi method are often used. The Arnoldi method can be implemented using ARPACK and a whole suite of other methods are included in SLEPc (which gives you some flexibility).