QR 분해를 이용한 고유값 분석 알고리듬.
그람-슈미트 방법을 행렬로 표현한 것이다. 예컨대 크기 n×n인 실수 대칭행렬 A를 생각해보자: A=(⋮⋮⋮⋮→a0→a1→a2⋮⋮⋮⋮⋮) A가 가지고 있는 열 벡터 →a0,→a1,→a2,…로부터 서로 직교하는 정규화된 벡터 →q0,→q1,→q2,…를 만들어내고자 한다. 즉 →qi⋅→qj=δij이며 이 때에 δij는 크로네커 델타이다.
그람-슈미트 방법에 따르면 아래의 방식으로 그러한 {→qi}를 찾을 수 있다: →u0=→a0→q0=→u0/|→u0|→u1=→a1−(→q0⋅→a1)→q0→q1=→u1/|→u1|→u2=→a2−(→q0⋅→a2)→q0−(→q1⋅→a2)→q1→q2=→u2/|→u2|
식을 다시 정리하면 →a0=|→u0|→q0→a1=|→u1|→q1+(→q0⋅→a1)→q0→a2=|→u0|→q0+(→q0⋅→a2)→q0+(→q1⋅→a2)→q1 이다. 이를 행렬로 정리해보면 A=(⋮⋮⋮⋮→a0→a1→a2⋮⋮⋮⋮⋮)=(⋮⋮⋮⋮→q0→q1→q2⋮⋮⋮⋮⋮)(|→u0|→q0⋅→a1→q0⋅→a2⋯0|→u1|→q1⋅→a2⋯00|→u2|⋯)=Q R. 이 때 →qi⋅→qj=δij이므로 Q는 직교행렬이고 (QTQ=I), R은 대각선 아래 원소가 모두 0인 상삼각행렬임에 유의.
주어진 행렬 A를 QR 분해한다: A=Q1R1. 즉, R1=QT1A.
이제 순서를 뒤집어서 새로운 행렬 A1=R1Q1을 만든다. 위에서 구한 R1을 대입하면, A1=QT1AQ1이다.
이를 다시 QR 분해한다: A1=Q2R2. 즉, R2=QT2A1.
다시 순서를 뒤집어서 새로운 행렬 A2=R2Q2를 만든다. 풀어서 적으면 A2=R2Q2=QT2A1Q2=QT2QT1AQ1Q2.
이를 k번 반복하면, Ak=(QTk…QT1)A(Q1…Qk).
ˆQ=(Q1…Qk)가 직교행렬임은 쉽게 확인할 수 있다: ˆQTˆQ=(QTk…QT1)(Q1…Qk)=I.
직교 행렬에 의한 변환은 고유치를 바꾸지 않아서 Ak=ˆQTAˆQ의 고유치는 원래 행렬과 동일하고, 이 고유치들은 k가 무한대로 가는 극한에서 Ak의 대각선상에 위치한다. 수식으로 적어보면: A=ˆQA∞ˆQT=(⋮⋮⋮→v0→v1⋮⋮⋮⋮)(λ0λ1⋱)(⋯→v0⋯⋯→v1⋯⋯⋯⋯). 위에서의 표기법처럼 λi는 i 번째 고유값, →vi는 그에 해당하는 고유 벡터이다. 곱해진 세 개의 행렬 중 첫 번째는 →vi들을 열 벡터로, 마지막 행렬은 행 벡터로 가지고 있다.
A의 i 번째 고유치가 λi, 그에 해당하는 고유 벡터가 →vi라고 하자: A→vi=λi→vi. 편의상 |λ0|>|λ1|>…로 정렬되어 있다고 하자.
A=Q1R1일 때에 이로부터 유도되는 또다른 행렬이 A1=R1Q1=Q2R2라고 했으므로 A2=Q1R1Q1R1=Q1Q2R2R1 임을 알 수 있다. 일반적으로 An=(Q1…Qn)(Rn…R1)=ˆQˆR 이 성립한다.
멱 방법에 의하면, 임의의 벡터 →u가 있을 때 An→u는 A의 가장 큰 고유치 λ0에 해당하는 고유 벡터 →v0 방향으로 수렴한다. →u=a0→v0+a1→v1+…An→u=a0λn0→v0+a1λn1→v1+…
임의의 →u에 대해 이 성질이 성립한다는 것은 An의 열들이 이미 →v0와 유사한 방향임을 의미한다.
An=ˆQˆR로 분해했을 때, 그람-슈미트 방법에 따라 ˆQ의 첫 번째 벡터 →q0는 An의 첫 번째 열 벡터와 같은 방향이다. 즉 →q0는 →v0에 해당한다.
그람-슈미트 방법을 따라 An의 열들로부터 이미 찾은 벡터들과 직교하는 공간을 생각하면 →q1,→q2,…를 얻는다. 이는 An→u=a0λn0→v0+a1λn1→v1+a2λn2→v2+… 에서 0=a0=a1=…에 해당하고 따라서 그 때마다 →v1,→v2,…들을 근사적으로 얻게 된다.