2009-04-03 33 views
27

Giá đắt như thế nào để tính giá trị riêng của ma trận?Giá đắt như thế nào để tính giá trị riêng của ma trận?

Độ phức tạp của thuật toán tốt nhất là gì?

Mất bao lâu để thực hành nếu tôi có ma trận 1000 x 1.000? Tôi giả sử nó sẽ giúp nếu ma trận là thưa thớt?

Có trường hợp nào mà tính toán giá trị riêng sẽ không chấm dứt?

Trong R, tôi có thể tính toán giá trị riêng như trong ví dụ đồ chơi sau:

m<-matrix(c(13,2, 5,4), ncol=2, nrow=2) 
eigen(m, only.values=1) 
$values 
[1] 14 3 

Có ai biết những gì thuật toán nó sử dụng?

Có gói nào khác (mã nguồn mở) tính toán giá trị riêng không?

+0

Nếu tôi không nhầm lẫn sự kỳ diệu trong Google PageRank là (ít nhất là phần nhỏ) một phép tính riêng biệt khổng lồ. Nó sẽ được tốt đẹp để xem cách họ làm điều đó. Chúng tôi đã sử dụng lặp lại điện hoặc phân tách QR khi thực hiện nó trong MATLAB trong một khóa học về phân tích số. – sris

+2

Tính toán của Google Pagerank tương ứng với một vấn đề riêng biệt về giá trị riêng: tính toán bộ riêng biệt liên kết với tỷ lệ riêng của đơn vị chi phối của ma trận ngẫu nhiên. Trong trường hợp đó, một thuật toán chuyên biệt được sử dụng (có thể dựa trên một số biến thể của phương pháp năng lượng). – Fanfan

Trả lời

5

Tôi sẽ xem Eigenvalue algorithms, liên kết với một số phương pháp khác nhau. Tất cả chúng đều có những đặc tính khác nhau, và hy vọng rằng nó sẽ phù hợp với mục đích của bạn.

11

Tôi cho rằng nó giúp nếu ma trận là thưa thớt?

Có, có các thuật toán hoạt động tốt trên các ma trận thưa thớt.

Xem ví dụ: http://www.cise.ufl.edu/research/sparse/

+0

Có thuật toán nào để tìm giá trị riêng? Tôi tìm kiếm một lúc và không nhận được gì ... – Marek

+0

@Marak: xem Lanczos, Jacobi-Davidson và các phương pháp lặp lại khác, hoạt động đặc biệt tốt nếu bạn chỉ quan tâm đến một tập con của các giá trị riêng. –

19

Hầu hết các thuật toán để tính toán giá trị eigen mở rộng để lớn-Oh (n^3), trong đó n là kích thước hàng/col của ma trận (đối xứng và vuông).

Để biết thời gian phức tạp của thuật toán tốt nhất cho đến ngày bạn sẽ phải tham khảo các tài liệu nghiên cứu mới nhất trong khoa học máy tính/phương pháp số.

Nhưng ngay cả khi bạn giả định trường hợp xấu hơn, bạn vẫn sẽ cần ít nhất 1000^3 hoạt động cho ma trận 1000x1000.

R sử dụng triển khai thường trình LAPACK (DSYEVR, DGEEV, ZHEEV và ZGEEV) theo mặc định. Tuy nhiên, bạn có thể chỉ định EISPACK = TRUE làm tham số để sử dụng các chương trình RS, RG, CH và CG của EISPACK.

Các gói nguồn mở phổ biến và tốt nhất cho tính toán eigenvalue là LAPACK và EISPACK.

+2

'EISPACK' hiện không còn tồn tại và bị bỏ qua. Xem http://stat.ethz.ch/R-manual/R-devel/library/base/html/eigen.html – Randel

7

Mất bao lâu để thực hành nếu Tôi có ma trận 1000x1000?

MATLAB (dựa trên LAPACK) tính trên máy nhân bản lõi kép 1,83 GHz tất cả các giá trị riêng của ngẫu nhiên 1000x1000 trong khoảng 5 giây. Khi ma trận là đối xứng, việc tính toán có thể được thực hiện nhanh hơn đáng kể và chỉ cần khoảng 1 giây.

18

Với ma trận lớn, bạn thường không muốn tất cả các giá trị riêng. Bạn chỉ muốn vài người đầu làm (nói) giảm kích thước.

Thuật toán kinh điển là Arnoldi-Lanczos thuật toán lặp thực hiện trong ARPACK:

www.caam.rice.edu/software/ARPACK/

Có một giao diện matlab trong eigs:

http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/ref/eigs.html

eigs(A,k) and eigs(A,B,k) return the k largest magnitude eigenvalues. 

Và hiện nay là một giao diện R cũng như:

http://igraph.sourceforge.net/doc-0.5/R/arpack.html

2

Apache Mahout là một framework mã nguồn mở xây dựng trên bản đồ giảm (ví dụ: nó hoạt động cho các ma trận thực sự lớn). Lưu ý rằng đối với rất nhiều công cụ ma trận, câu hỏi không phải là "thời gian chạy lớn nhất" là gì "mà đúng hơn là" nó có thể song song như thế nào? " Mahout says họ sử dụng Lanczos, về cơ bản có thể chạy song song với nhiều bộ xử lý như bạn quan tâm.

0

Sử dụng bản đồ QR. Xem Wilkinson, J. H. (1965) Vấn đề đại số Eigenvalue. Clarendon Press, Oxford. Nó không khai thác sự thưa thớt.