นี่เป็นอีกวิธีในการแยกแยะสเปกตรัม
Avk=λkvkA
S(ω)=∑kπ−1σσ2+(λk−ω)2=σπTr[σ2+(ω−A)2]−1
S(ω)=σπ⟨zT[σ2+(ω−A)2]−1z⟩
z+1−1σω[σ2+(ω−A)2]−1z can be computed for example with
the conjugate gradient method, or sparse LU on
[ω+iσ−A]−1[ω−iσ−A]−1 to minimize fill-in. This allows estimation of
S(ω) also for large matrices. In practice, it seems the CG solution doesn't need to be very
accurate, and neither are many vectors necessary in computing the average. This
may depend on the problem.
The above appears to weigh parts of the spectrum more evenly than a similarly
smeared Krylov spectral density --- try diag(linspace(0, 1, 150000)) --- although maybe there is a way to correct for this?. This is somewhat
similar to the pseudospectral approach, but the result indicates the (smeared) number of eigenvalues in the vicinity to point ω, rather than
the inverse distance to the nearest eigenvalue.
EDIT: A better performing alternative for computing the above quantity is to compute Chebyshev moments (via similar stochastic evaluation as above) and then reconstruct the spectral density from them. This requires neither matrix inversions nor separate computations for each ω. See http://theorie2.physik.uni-greifswald.de/downloads/publications/LNP_chapter19.pdf and references therein.