매우 광범위하게 말하면 고유 값 또는 특이 값 분해를 계산하는 두 가지 방법이 있습니다. 하나의 접근법은 행렬을 대각선 화하는 것이며, 이는 본질적으로 전체 고유 값 / 단수 값 분해 (전체 고유 값 스펙트럼)를 동시에 생성합니다. 여기에서 몇 가지 개요를보십시오 : 단일 값 분해 (SVD)를 계산하는 효율적인 알고리즘은 무엇입니까? 대안은 한 번에 하나 또는 여러 개의 고유 벡터를 생성하는 반복 알고리즘을 사용하는 것입니다. 원하는 수의 고유 벡터를 계산 한 후에 반복을 중지 할 수 있습니다.
SVD에 대해 반복적 인 알고리즘이 있다고 생각하지 않습니다. 이는 정사각형 대칭 ( n + m ) × ( n + m ) 행렬 A = ( 0 B B ⊤ 0 ) 의 고유 분해를 수행하여 행렬 B의 SVD를 계산할 수 있기 때문 입니다. 따라서 대신 알고리즘 계산 잘린 SVD, 당신은 무엇을 반복 알고리즘 계산 eigendecomposition 요구되어야 하는지를 묻는 : 잘린 SVD에 대한 알고리즘 ≈ eigendecomposition에 대한 반복적 인 알고리즘을 .n×mB(n+m)×(n+m)
A=(0B⊤B0).
algorithm for truncated SVD≈iterative algorithm for eigendecomposition.
가장 간단한 반복 알고리즘을 전원 반복 이라고 하며 실제로 매우 간단합니다.
- x
- x 업데이트 ←x←Ax
- 정규화 x←x/∥x∥
- 수렴하지 않으면 2 단계로 이동하십시오.
더 복잡한 알고리즘은 모두 전력 반복 아이디어를 기반으로하지만 상당히 정교 해집니다. 필요한 수학은 Krylov 하위 공간에 . 알고리즘은 Arnoldi 반복 (제곱 비대칭 매트릭스의 경우), Lanczos 반복 (제곱 대칭 매트릭스의 경우), 및 "암시 적으로 재시작 된 Lanczos 방법"등의 변형 및 그 밖의 것들이다.
예를 들어 다음 교과서에 설명되어 있습니다.
- Golub & Van Loan, 매트릭스 계산
- Trefethen & Bau, 수치 선형 대수
- 데멜, 응용 수치 선형 대수
- 큰 고유 값 문제에 대한 Saad, 숫자 방법
모든 합리적인 프로그래밍 언어와 통계 패키지 (Matlab, R, Python numpy, 사용자 이름)는 동일한 Fortran 라이브러리를 사용하여 고유 / 단일 값 분해를 수행합니다. 이들은 LAPACK 및 ARPACK . ARPACK은 ARnoldi PACKage의 약자이며 Arnoldi / Lanczos 반복에 관한 것입니다. 예를 들어 Matlab에는 SVD에 대한 두 가지 기능이 있습니다. svd
LAPACK을 통해 전체 분해를 수행하고 svds
ARPACK을 통해 주어진 수의 특이 벡터를 계산하며 실제로 eigs
는 "제곱 크기"매트릭스에 대한 호출 의 래퍼입니다 .
최신 정보
BAABA
이 메소드들에 대한 포트란 라이브러리도 있는데 PROPACK 이라고 합니다 :
소프트웨어 패키지 PROPACK에는 크고 희박하거나 구조화 된 행렬의 특이 값 분해를 계산하기위한 함수 세트가 포함되어 있습니다. SVD 루틴은 BPRO (partial reorthogonalization)를 사용하는 Lanczos bidiagonalization 알고리즘을 기반으로합니다.
그러나 PROPACK은 ARPACK보다 훨씬 덜 표준적인 것으로 보이며 표준 프로그래밍 언어에서는 기본적으로 지원되지 않습니다. 그것은 좋은 개요처럼 보이는 부분적인 직교 화와 함께 90 페이지 길이의 1998 년 논문 Lanczos bidiagonalization을 가진 Rasmus Larsen에 의해 작성되었습니다 . 이 Computational Science SE 스레드 를 통해 @MichaelGrant에게 감사합니다 .
가장 최근의 논문들 중에서 가장 인기있는 논문은 2005 년 Baglama & Reichel 인 것으로 보인다. Augmented는 암시 적으로 재시작 된 Lanczos bidiagonalization 방법 이다. 댓글에이 링크를 제공 한 @Dougal에게 감사합니다.
업데이트 2
실제로 자신이 인용 한 개요 논문에 자세히 설명 된 완전히 다른 접근법이 있습니다 : Halko et al. 2009, 무작위 구조 찾기 : 근사 행렬 분해 구성을위한 확률 알고리즘 . 나는 그것에 대해 언급하기에 충분하지 않습니다.