Trạng thái hiện tại của nghệ thuật liên quan đến thuật toán phân rã giá trị số ít là gì?


12

Tôi đang làm việc trên một thư viện ma trận chỉ có tiêu đề để cung cấp một mức độ hợp lý về khả năng đại số tuyến tính trong một gói đơn giản nhất có thể và tôi đang cố gắng khảo sát xem trạng thái hiện tại của nghệ thuật là gì: tính toán SVD của một ma trận phức.

Tôi đang thực hiện phân rã hai pha, hai chiều theo sau là tính toán giá trị số ít. Ngay bây giờ tôi đang sử dụng phương thức giữ nhà cho phương pháp đặt giá thầu (tôi tin rằng LAPACK cũng sử dụng phương pháp này) và tôi nghĩ rằng nó cũng tốt như hiện tại (trừ khi có ai đó biết về thuật toán cho nó ..) . O(N2)

Tính toán giá trị số ít tiếp theo trong danh sách của tôi và tôi phần nào không biết các thuật toán phổ biến để làm điều này là gì. Tôi đọc ở đây rằng nghiên cứu đang hướng tới một phương pháp lặp ngược đảm bảo tính trực giao với độ phức tạp . Tôi muốn nghe về điều đó hoặc những tiến bộ khác.O(N)


Có tài liệu cho lib ma trận chỉ tiêu đề của bạn (ngoài .h) không? Ngoài ra, vui lòng thêm thẻ "svd".
chối

Câu trả lời:


7

"Thuật toán ngẫu nhiên" gần đây đã trở nên khá phổ biến đối với các svd một phần. Có thể tải xuống một triển khai tiêu đề tại đây: http://code.google.com.vn/p/redsvd/

Một đánh giá về các phương pháp hiện tại có thể được tìm thấy ở đây: http://arxiv.org/abs/0909.4061

Đối với các svd đầy đủ, tôi không chắc liệu bạn có thể làm tốt hơn Householder không.


Nghe có vẻ rất thú vị, tôi sẽ phải xem qua bài khảo sát đó, cảm ơn!
gct

OP quan tâm đến các thuật toán cho ma trận dày đặc. Tôi không nghĩ các thuật toán ngẫu nhiên có khả năng cạnh tranh trong cài đặt đó, nếu chúng hoạt động hoàn toàn.
Federico Poloni

Bài đăng này chỉ ra rằng các phương pháp ngẫu nhiên chỉ hoạt động tốt trên các ma trận dày đặc nghiên
cứu.facebook.com/blog/294071574113354/fast

@dranxo Không có sự so sánh chính xác nào trên bài đăng đó, và kết quả thời gian trông không được tỉ mỉ lắm. Ngoài ra, các thuật toán ngẫu nhiên dựa trên phép chiếu + giải pháp chính xác của một vấn đề quy mô nhỏ. Điều này có nghĩa là OP sẽ cần triển khai "phương pháp chuẩn" cho vấn đề quy mô nhỏ.
Federico Poloni

Đủ công bằng. Mặc dù tôi hơi bối rối tại sao chúng ta nên nghĩ rằng các phương pháp này chỉ hoạt động trên ma trận thưa thớt. Tóm tắt bài viết của Joel Tropp: "Đối với ma trận đầu vào dày đặc, các thuật toán ngẫu nhiên yêu cầu các phép toán dấu phẩy động (mn log (k)) trái ngược với O (mnk) cho các thuật toán cổ điển." arxiv.org/pdf/0909.4061v2.pdf
dranxo

4

Ôi(N)

(Tôi muốn chỉ đưa ra một vài bình luận vì tôi không có thời gian để viết chi tiết, nhưng nó khá lớn cho hộp bình luận.)

LDLBạnDBạn

Mặt khác, phần "giá trị số ít" của thuật toán xuất phát từ thuật toán chênh lệch thương số (dqd (s)) khác biệt , là đỉnh cao của công việc trước đây của Fernando, Parlett , Demmel và Kahan (với cảm hứng từ Heinz Rutishauser).

Như bạn có thể biết các phương thức SVD thường tiến hành phân tách hai chiều trước khi các giá trị số ít được lấy từ ma trận hai chiều. Thật không may, tôi không cập nhật quá nhiều về phương pháp tốt nhất hiện tại cho phân tách hai chiều phía trước; cuối cùng tôi đã kiểm tra, phương pháp thông thường là bắt đầu phân tách QR bằng cách xoay cột và sau đó áp dụng các phép biến đổi trực giao một cách thích hợp cho hệ số tam giác để cuối cùng thu được phân tách hai chiều.

Tôi hiểu rằng tôi đã sơ sài với các chi tiết; Tôi sẽ cố gắng đưa ra câu trả lời này hơn nữa khi tôi có quyền truy cập vào thư viện của mình ...


Ma trận thành dạng đường chéo, làm một cột sau đó một hàng, lặp lại xuống đường chéo: sử dụng givens hoặc householder để zero cột lên đến đường chéo, sau đó làm tương tự cho hàng thành siêu chéo.
adam W

UAVUU=IVV=Tôi

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.