rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
fast_eigs.m
1 function [v,d] = fast_eigs( A,K,options )
2 
3 %fast eigenvector computation:
4 % A*v = K*v
5 % opt: 'sm' = smalles EV
6 % 'lm' = largest EV
7 [L, U, P, Q] = lu(A);
8 if strcmp(options, 'sm')
9  func = @(X) Q * (U \ (L \ (P * X)));
10 else
11  func = @(X) P' * (L * (U * (Q' * X)));
12 end
13 [msgstr, msgid] = lastwarn;
14 lastwarn('');
15 [v,d] = eigs(func, size(A, 1), K, 1, options);
16 [~, warnid] = lastwarn;
17 if strcmp(warnid,'MATLAB:eigs:NotAllEigsConverged')
18  warning('Eigenvalues did not converged -> using the eig function (more expensive)');
19  [v,d]= eig(full(A),K);
20 end
21 
22 lastwarn(msgstr, msgid);
23 
24 end
25