Bạn có thể sử dụng biến đổi phổ đảo ngược [1] và tính toán dải phổ theo băng tần.
Kỹ thuật này cũng được giải thích trong bài viết của tôi [2]. Bên cạnh việc triển khai trong [1], một triển khai có sẵn trong C ++ trong phần mềm Graphite của tôi [3] ( cập nhật ngày 17 tháng 1 : bây giờ mọi thứ được chuyển sang biểu đồ địa lý / than chì phiên bản 3 ), mà tôi đã sử dụng để tính toán các hàm riêng của toán tử Laplace cho các mắt lưới có tới 1 triệu đỉnh (một vấn đề tương tự như của bạn).
Làm thế nào nó hoạt động:
Ý tưởng là nếu là khả nghịch, sau đó nếu ( V , λ ) là một eigenpair của A , ( V , 1 / λ ) là một eigenpair của A - 1 . Phương pháp lặp trong ARPACK rất hiệu quả để tính toán các giá trị riêng lớn (tần số cao), nhưng kém hiệu quả hơn nhiều đối với các tần số nhỏ (tần số nhỏ). Vì vậy, khi người ta cần tính toán các tần số nhỏ, nên thay thế A bằng A - 1 . Bây giờ, vì ARPACK chỉ cần tính toán các sản phẩm vector ma trận, nên không cần thiết phải đảo ngược AMột( V, λ )Một( V, 1 / λ )Một- 1MộtMột- 1Một : người ta có thể thay thế nó (ví dụ sử dụng LU thưa thớt hoặc L L t thưa thớtL Lthệ số hóa), sau đó giải bất cứ khi nào ARPACK yêu cầu sản phẩm vectơ ma trận. Đây là biến đổi "đảo ngược". Bây giờ khi số lượng giá trị riêng trở nên lớn, ARPACK trở nên chậm, nhưng có một mẹo / biến đổi khác có thể được sử dụng và người ta tính toán giá trị riêng của A - σ I d trong đó σA x = bMột - σTôidσ là "dịch chuyển" xác định phần nào của quang phổ được khám phá (đây là biến đổi "shift"). Kết hợp cả hai biến đổi, một tính một số lượng nhất định các giá trị riêng của , và sau đó khám phá toàn bộ phạm band-by-band, bằng cách tăng σ . Các chi tiết nằm trong [1], [2].( Một - σTôid)- 1σ
[1] http://www.mcs.anl.gov/uploads/cels/ con / P1263.pdf
[2] http://alice.loria.fr/index.php/publications.html?redirect=0&Paper=ManifoldHarmonics@2008
[3] http://alice.loria.fr/software/graphite/doc/html/