Con ngựa chính đằng sau sự tính toán của SVD là thuật toán QR . Có nói rằng có rất nhiều thuật toán khác nhau để tính toán sự phân hủy giá trị duy nhất của một generic -by- N ma trận A . Một sơ đồ tuyệt vời về vấn đề có sẵn ở đây (từ tài liệu của MKL của Intel ) là:MNMột
Như bạn thấy tùy thuộc vào trường hợp sử dụng của bạn, có các cách tiếp cận khác nhau (các quy ước đặt tên thông thường có thể được tìm thấy ở đây ). Đó là bởi vì, ví dụ, có các hình thức ma trận trong đó việc giảm Householder có thể tốn kém hơn so với xoay vòng Givens (để đặt tên cho hai cách nhận QR "rõ ràng"). Một tài liệu tham khảo tiêu chuẩn về vấn đề này là Tính toán ma trận của Golub và Van Loan (Tôi sẽ đề nghị sử dụng ít nhất là phiên bản thứ 3). Tôi cũng đã tìm thấy. Các phương pháp số của Bjorck cho các ô vuông nhỏ nhất Các vấn đề rất tốt về vấn đề đó; trong khi SVD không phải là trọng tâm chính của cuốn sách, nó giúp bối cảnh hóa việc sử dụng nó.
Nếu tôi phải cho bạn một lời khuyên chung về vấn đề này thì đừng cố gắng viết các thuật toán SVD của riêng bạn trừ khi bạn đã thực hiện thành công một vài lớp về Đại số tuyến tính số và bạn biết bạn đang làm gì. Tôi biết nó nghe có vẻ phản trực giác nhưng thực sự, có vô số thứ có thể sai và bạn kết thúc bằng (tốt nhất) các triển khai phụ tối ưu (nếu không sai). Có một số bộ miễn phí rất tốt về vấn đề này (ví dụ Eigen , Armadillo và Trilinos để kể tên một số.)