Làm thế nào là SVD của một ma trận được tính toán trong thực tế


11

Làm thế nào để MATLAB, ví dụ, tính toán SVD của một ma trận đã cho? Tôi giả sử câu trả lời có lẽ liên quan đến việc tính toán các hàm riêng và giá trị riêng của A*A'. Nếu đó là trường hợp, tôi cũng muốn biết làm thế nào để tính toán những người đó?



4
Trên thực tế, không, nó không liên quan đến việc tính toán các vector riêng và giá trị của ! Điều đó sẽ làm giảm độ chính xác của kết quả đáng kể. AAT
Michael Grant

Câu trả lời:


11

AAT

Xem

GH Golub và C. Reinsch. Giải pháp giá trị đơn lẻ và giải pháp bình phương tối thiểu. Numerische Mathematik 14: 403-420, 1970.

Tài liệu này được thảo luận trong nhiều sách giáo khoa về đại số tuyến tính số.


13

Ngoài bài viết Golub-Reinsch (bây giờ là cổ điển) mà Brian ghi chú trong câu trả lời của anh ấy (tôi đã liên kết với phiên bản Sổ tay của bài báo), cũng như bài báo tiền thân (cũng là cổ điển) của Golub-Kahan , đã có một số kể từ những phát triển quan trọng trong việc tính toán SVD kể từ đó. Đầu tiên, tôi phải tóm tắt cách thức hoạt động của phương pháp thông thường.

Ý tưởng trong việc tính toán SVD của ma trận tương tự về mặt chất lượng với phương pháp được sử dụng để tính toán sự xuất tinh của ma trận đối xứng (và, như đã lưu ý trong OP, có một mối quan hệ mật thiết giữa chúng). Cụ thể, một tiến hành trong hai giai đoạn: chuyển đổi thành ma trận hai chiều , sau đó tìm SVD của ma trận hai chiều. Điều này hoàn toàn tương tự như quy trình đầu tiên giảm ma trận đối xứng thành dạng tam giác, và sau đó tính toán sự xuất tinh của kết quả tam giác.

Để tính toán SVD của ma trận hai chiều, một bước đột phá đặc biệt thú vị là bài báo của Jim Demmel và Velvel Kahan , đã chứng minh rằng người ta có thể tính toán ngay cả các giá trị số ít của ma trận hai chiều với độ chính xác tốt, bằng cách sửa đổi phù hợp phương pháp ban đầu được đề xuất trong Golub-Reinsch. Điều này sau đó đã được tiếp theo là (lại?) Phát hiện ra các DQD thuật toán , mà là một hậu duệ của thuật toán thương-chênh lệch cũ của Rutishauser. (Beresford Parlett đưa ra một cuộc thảo luận tốt đẹp ở đây.) Nếu bộ nhớ phục vụ, đây hiện là phương thức ưa thích được sử dụng bởi LAPACK. Ngoài ra, người ta luôn có thể rút ra các phiên bản SVD của sự phát triển trong giải pháp các biểu tượng bản địa đối xứng; chẳng hạn, có một phiên bản phân chia và chinh phục SVD, cũng như một phiên bản SVD của thuật toán Jacobi cũ (có thể chính xác hơn trong một số trường hợp).

Đối với phương pháp hai chiều, một phương pháp cải tiến đã được phác thảo trong bài báo của Barlow , đòi hỏi nhiều công sức hơn so với quy trình ban đầu của Golub và Reincsh, nhưng mang lại ma trận hai chiều chính xác hơn.


1
@Jack, bạn đã thấy điều này bằng cơ hội nào chưa?
JM

Đáng ngạc nhiên, tôi đã không!
Jack Poulson
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.