실제로 행렬의 SVD는 어떻게 계산됩니까?


11

예를 들어 MATLAB은 주어진 행렬의 SVD를 어떻게 계산합니까? 답은 아마도 고유 벡터와 고유 값 계산과 관련이 있다고 가정합니다 A*A'. 그 경우에는 어떻게 계산합니까?



4
실제로, A , A * A T 의 고유 벡터와 값을 계산 하지는 않습니다 . 결과의 정확도가 상당히 떨어집니다.
마이클 그랜트

답변:


11

보다

GH Golub 및 C. Reinsch. 특이 값 분해 및 최소 제곱 솔루션. Numerische Mathematik 14 : 403-420, 1970.

이 자료는 수치 선형 대수에 관한 많은 교과서에서 논의됩니다.


13

(현재 고전적인) Golub-Reinsch 논문 Brian은 그의 대답 (저는 안내서핸드북 버전에 링크했습니다 ) 과 Golub-Kahan의 ( 이전에는 고전적인) 이전 논문을 제외 하고는 여러 가지가있었습니다. 그 이후로 SVD를 계산하는 데 중요한 발전이있었습니다. 먼저 일반적인 방법이 어떻게 작동하는지 요약해야합니다.

행렬의 SVD를 계산하는 아이디어는 대칭 행렬의 고유 분해를 계산하는 데 사용되는 방법과 질적으로 유사합니다 (OP에 명시된 바와 같이 이들 사이에 밀접한 관계가 있습니다). 특히, 하나는 두 단계로 진행된다 : 두 개의 대각선 행렬로 의 변환과 두 개의 대각선 행렬 의 SVD를 찾는 것. 이것은 대칭 행렬을 먼저 3 각형으로 축소 한 다음 3 각형의 고유 분해를 계산하는 절차와 완전히 유사합니다.

bidiagonal 행렬의 SVD를 계산하기 위해, 하나 명의 특히 흥미로운 침투가 있었다 짐 Demmel 및 Velvel Kahan 의해 용지 하나 적절 초기에 제안 된 방법을 변형하여, 양호한 정밀도로 bidiagonal 매트릭스 심지어 작은 특이 값을 계산할 수 있음을 입증 Golub-Reinsch. 이는 다음으로 하였다 (재?) 발견 DQD의 알고리즘 Rutishauser 오래 몫 차분 알고리즘의 자손이다. (Beresford Parlett은 여기서 좋은 토론을 합니다..) 메모리가 제공되는 경우 이제 LAPACK에서 내부적으로 사용하는 기본 방법입니다. 이와는 별도로, 대칭 고유 문제 해결에서 SVD 버전의 개발을 도출하는 것이 항상 가능했습니다. 예를 들어, SVD 버전의 분할 및 정복과 이전 Jacobi 알고리즘의 SVD 버전이 있습니다 ( 일부 상황에서는 더 정확할 수 있음 ).

이분법 화에 대해서는 한 가지 개선 된 방법이 Barlow의 논문 에 요약되어 있는데,이 방법은 Golub and Reincsh의 원래 절차보다 약간 더 많은 작업이 필요하지만보다 정확한 이분법 행렬을 산출합니다.


1
@ 잭, 우연히 이것을 보았 습니까?
JM

놀랍게도, 나는하지 않았다!
잭 폴슨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.