Tính toán tất cả các giá trị riêng của một ma trận kề kề rất lớn và rất thưa thớt


13

Tôi có hai biểu đồ với gần n ~ 100000 nút mỗi. Trong cả hai biểu đồ, mỗi nút được kết nối với chính xác 3 nút khác nên ma trận kề là đối xứng và rất thưa thớt.

Cái khó là tôi cần tất cả giá trị riêng của ma trận kề nhưng không phải là hàm riêng. Nói chính xác, điều này sẽ xảy ra một lần trong đời (ít nhất là tôi có thể thấy, ít nhất là vậy!) Vì vậy tôi muốn có được tất cả các giá trị bản địa và đừng bận tâm chờ đợi một vài ngày để có được chúng.

Tôi đã thử đóng scipygói xung quanh ARPACK, nhưng nó mất quá nhiều thời gian. Tôi đã tìm thấy nhiều thư viện nhưng chúng hoạt động tốt nhất để có được một tập hợp con có giá trị riêng lớn nhất / nhỏ nhất. Có thư viện nào hoạt động cho ma trận thưa đối xứng với việc thực hiện song song để có được tất cả các giá trị riêng không?


6
Vì tò mò, tại sao chính xác bạn cần tất cả giá trị bản địa? Hầu hết các vấn đề có kích thước này là xấp xỉ các vấn đề thậm chí lớn hơn (hoặc thậm chí vô hạn), và do đó, giá trị riêng của các vấn đề nhỏ chỉ gần đúng với vấn đề mà người ta thực sự muốn giải quyết. Thông thường, chất lượng của xấp xỉ chỉ tốt cho các giá trị riêng nhỏ nhất hoặc lớn nhất, và tất cả các giá trị khác chỉ xấp xỉ kém và do đó không được quan tâm nhiều.
Wolfgang Bangerth


@WolfgangBangerth: (Hãy tha thứ cho tôi nếu những điều này rõ ràng với bạn) Vấn đề đến từ vật lý của vật liệu. Nó liên quan đến sự gần đúng ràng buộc chặt chẽ của vật liệu để có được cấu trúc dải, tính chất rung và điện. Để có được những điều này, tôi cần toàn bộ giá trị bản địa. BTW, điều này không có gì mới và nó quay trở lại những năm 70 và 80 nhưng vì hệ thống của tôi là vô định hình, tôi cần phải có một hệ thống rất lớn để có kết quả tốt. Mặc dù hầu hết mọi người chỉ quan tâm đến tinh thể, điều này cực kỳ dễ dàng so với trường hợp của tôi.
Mahdi

2
@Mahdi: Vâng, điều tôi muốn nói là các tính chất vật lý được xác định bởi phổ của một số toán tử vi phân từng phần. Tôi nghi ngờ (nhưng tất nhiên là không biết, vì bạn không mô tả vấn đề xuất phát từ đâu) rằng vấn đề eigenvalue ma trận lớn mà bạn gặp phải chỉ là sự gần đúng của vấn đề PDE. Do đó, giá trị riêng của bạn cũng sẽ chỉ là xấp xỉ.
Wolfgang Bangerth

Câu trả lời:


8

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ớtLLthệ 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 đó σMộtx= =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/


Cảm ơn Bruno! Chúng trông rất hứa hẹn, tôi sẽ xem xét chúng!
Mahdi

1

Một lựa chọn khác sẽ là sử dụng phép quay Jacobi. Vì ma trận của bạn đã gần như chéo, nên không cần nhiều thời gian để hội tụ. Nói chung, nó hội tụ ở tốc độ tuyến tính, nhưng sau khi lặp đủ, tốc độ hội tụ sẽ trở thành bậc hai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.