Issue: I have an EigenProblem for which i am trying to find the absolute minimum eigenvalue using the inverse iteration method.
Ke.x + λ.Kg.x = 0
Ke is symmetric positive definite. Kg is symmetric.
The inverse iteration method converges to the incorrect eigenvalue in certain situations when the two absolute minimum eigenvalues have the same value but a different sign (e.g. -50 and +50).
Possible Solution: One way i found to remedy this is to apply a shift. But this is not ideal because a small shift leads to inaccurate results and slow convergence, while a large shift could lead to missing the desired eigenvalue.
Question: I am looking for another way to deal with this issue.
Matlab Example:
ke=[84753.9 0 0 0 0 0 -175353 42377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 17.3548 0 0 0 0 0 0 -35.6831 8.51538 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1.13005E+06 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.89673E+06 282513 0 0 -3.89673E+06 282513 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 228.776 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 788.437 57.0969 0 0 -788.437 57.0969 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 84753.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 175353 42377 0 0
0 0 0 0 0 17.3548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35.6831 8.51538
-175353 0 0 0 0 0 967464 1.16415E-10 0 0 -483732 175353 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
42377 0 0 0 0 0 1.16415E-10 169508 0 0 -175353 42377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 -35.6831 0 0 0 0 0 0 203.038 2.13163E-14 0 0 -101.519 35.6831 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 8.51538 0 0 0 0 0 0 2.13163E-14 34.7097 0 0 -35.6831 8.51538 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 -483732 -175353 0 0 1.27141E+06 67350.1 0 0 -787677 242703 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 175353 42377 0 0 67350.1 184464 0 0 -242703 49855.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 -101.519 -35.6831 0 0 265.154 13.6194 0 0 -163.635 49.3025 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 35.6831 8.51538 0 0 13.6194 37.7018 0 0 -49.3025 10.0357 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 -787677 -242703 0 0 1.57535E+06 1.74623E-10 0 0 -787677 242703 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 242703 49855.2 0 0 1.74623E-10 199421 0 0 -242703 49855.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 -163.635 -49.3025 0 0 327.27 3.55271E-14 0 0 -163.635 49.3025 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 49.3025 10.0357 0 0 3.55271E-14 40.6939 0 0 -49.3025 10.0357 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 3.89673E+06 0 0 0 0 0 0 0 0 0 0 0 -787677 -242703 0 0 3.66197E+07 3.65403E+06 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 282513 0 0 0 0 0 0 0 0 0 0 0 242703 49855.2 0 0 3.65403E+06 664737 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 788.437 0 0 0 0 0 0 0 0 0 0 0 0 -163.635 -49.3025 0 0 7434.19 739.135 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 57.0969 0 0 0 0 0 0 0 0 0 0 0 0 49.3025 10.0357 0 0 739.135 134.735 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 -3.89673E+06 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.66197E+07 -3.65403E+06 0 0 -787677 242703 0 0 0 0 0 0 0 0 0 0
0 0 282513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3.65403E+06 664737 0 0 -242703 49855.2 0 0 0 0 0 0 0 0 0 0
0 0 0 -788.437 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7434.19 -739.135 0 0 -163.635 49.3025 0 0 0 0 0 0 0 0
0 0 0 57.0969 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -739.135 134.735 0 0 -49.3025 10.0357 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -787677 -242703 0 0 1.57535E+06 5.23869E-10 0 0 -787677 242703 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242703 49855.2 0 0 5.23869E-10 199421 0 0 -242703 49855.2 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -163.635 -49.3025 0 0 327.27 1.06581E-13 0 0 -163.635 49.3025 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49.3025 10.0357 0 0 1.06581E-13 40.6939 0 0 -49.3025 10.0357 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -787677 -242703 0 0 1.27141E+06 -67350.1 0 0 -483732 175353 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242703 49855.2 0 0 -67350.1 184464 0 0 -175353 42377 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -163.635 -49.3025 0 0 265.154 -13.6194 0 0 -101.519 35.6831
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49.3025 10.0357 0 0 -13.6194 37.7018 0 0 -35.6831 8.51538
0 0 0 0 175353 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -483732 -175353 0 0 967464 -1.16415E-10 0 0
0 0 0 0 42377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 175353 42377 0 0 -1.16415E-10 169508 0 0
0 0 0 0 0 35.6831 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -101.519 -35.6831 0 0 203.038 -2.13163E-14
0 0 0 0 0 8.51538 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35.6831 8.51538 0 0 -2.13163E-14 34.7097];
kg=[ 0 -0.225697 0 0 0 0 0 0 1.28963 0.024659 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0.225697 0 0 0 0 0 0.0510187 0.188709 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0.834963 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.542899 -0.113506 0 0 -0.542899 -0.113506 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0.834963 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.57109 -0.075769 0 0 -1.57109 -0.075769 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 -0.225697 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.28963 0.024659
0 0 0 0 -0.225697 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0510187 0.188709 0 0
0 0.0510187 0 0 0 0 0 0 -22.753 1.55431E-15 0 0 11.3315 -0.69441 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0.188709 0 0 0 0 0 0 -1.28678 -1.26308 0 0 0.539932 0.188709 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1.28963 0 0 0 0 0 -22.753 -1.28678 0 0 11.8202 -0.646237 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0.024659 0 0 0 0 0 1.55431E-15 -1.26308 0 0 0.729846 0.180145 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 11.8202 0.729846 0 0 -23.4381 0.0141577 0 0 2.50492 -0.0885442 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 -0.646237 0.180145 0 0 1.40058 -1.13712 0 0 -0.589173 0.147307 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 11.3315 0.539932 0 0 -23.4381 1.40058 0 0 12.1067 -1.18595 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 -0.69441 0.188709 0 0 0.0141577 -1.13712 0 0 0.680253 0.0257603 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 12.1067 0.680253 0 0 -2.25207 -3.92741E-15 0 0 -18.2287 1.01922 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 -1.18595 0.0257603 0 0 3.39894 -0.0546453 0 0 -2.21299 0.0257603 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 2.50492 -0.589173 0 0 -2.25207 3.39894 0 0 -0.252844 -1.1103 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 -0.0885442 0.147307 0 0 -3.92741E-15 -0.0546453 0 0 0.0885442 -0.201793 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1.57109 0 0 0 0 0 0 0 0 0 0 0 0 -0.252844 0.0885442 0 0 78.6609 0.0313662 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 -0.075769 0 0 0 0 0 0 0 0 0 0 0 0 -1.1103 -0.201793 0 0 3.58066 0.944341 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0.542899 0 0 0 0 0 0 0 0 0 0 0 -18.2287 -2.21299 0 0 78.6609 3.58066 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 -0.113506 0 0 0 0 0 0 0 0 0 0 0 1.01922 0.0257603 0 0 0.0313662 0.944341 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 -1.57109 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 78.6609 -0.0313662 0 0 -0.252844 -0.0885442 0 0 0 0 0 0 0 0
0 0 0 -0.075769 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3.58066 0.944341 0 0 1.1103 -0.201793 0 0 0 0 0 0 0 0
0 0 -0.542899 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 78.6609 -3.58066 0 0 -18.2287 2.21299 0 0 0 0 0 0 0 0 0 0
0 0 -0.113506 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0313662 0.944341 0 0 -1.01922 0.0257603 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -18.2287 -1.01922 0 0 -2.25207 -2.35922E-16 0 0 12.1067 -0.680253 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.21299 0.0257603 0 0 -3.39894 -0.0546453 0 0 1.18595 0.0257603 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.252844 1.1103 0 0 -2.25207 -3.39894 0 0 2.50492 0.589173 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0885442 -0.201793 0 0 -2.35922E-16 -0.0546453 0 0 0.0885442 0.147307 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.50492 0.0885442 0 0 -23.4381 -0.0141577 0 0 11.8202 -0.729846
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.589173 0.147307 0 0 -1.40058 -1.13712 0 0 0.646237 0.180145
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12.1067 1.18595 0 0 -23.4381 -1.40058 0 0 11.3315 -0.539932 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.680253 0.0257603 0 0 -0.0141577 -1.13712 0 0 0.69441 0.188709 0 0
0 0 0 0 0 -0.0510187 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11.3315 0.69441 0 0 -22.753 -1.11022E-16
0 0 0 0 0 0.188709 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.539932 0.188709 0 0 1.28678 -1.26308
0 0 0 0 -1.28963 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11.8202 0.646237 0 0 -22.753 1.28678 0 0
0 0 0 0 0.024659 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.729846 0.180145 0 0 -1.11022E-16 -1.26308 0 0];
clc;
Shift=0.0;%change the shift
NewKe= ke-Shift*kg;
Err=10;
TotalIterations=0;
EigenVector=ones(38,1);
CurrentEigenValue=10;
while Err > 10 ^ -6 && TotalIterations <= 10000
TotalIterations = TotalIterations + 1;
y1=kg* EigenVector;
EigenVector=NewKe\y1;
y2 = kg* EigenVector;
norm = EigenVector'* y2;
EigenVector = EigenVector.*(1.0 / sqrt(abs(norm)));
y2 = NewKe * EigenVector;
NewEigenValueEstimate =(y2' * EigenVector) * (norm / abs(norm));
Err = abs((NewEigenValueEstimate - CurrentEigenValue) / CurrentEigenValue);
CurrentEigenValue = NewEigenValueEstimate;
end
FinalEigenValue=CurrentEigenValue+Shift;
MatEigenValue=eigs(ke,kg,1,0);
fprintf('Calculated EigenValue = %g (%d iterations)\n',FinalEigenValue,TotalIterations)
fprintf('Matlab EigenValue = %g. \n',MatEigenValue)