行列のQR分解
📂行列代数行列のQR分解
概要
効率的な行列分解にはいくつかの条件が必要だが、効率性よりも前に、分解自体が可能かどうかが重要になる場合がある。QR分解は正方行列という条件が必要ない行列分解法である。
定義
係数がnの行列A:=[a1⋯an]∈Cnm×nに対し、i番目までの列ベクトルで生成された部分空間
Si(A):=sp{a1,⋯,ai}
を定義しよう。ベクトル空間を生成するときは、iが大きいほど多くの列ベクトルを使用できるので、
S1(A)⊂S2(A)⊂⋯Sn(A)
が成立するだろう。
もちろん、正規直交ベクトルで構成される行列
Q:=[q1⋯qn]∈Cnm×n
に対してもS1(Q)⊂S2(Q)⊂⋯Sn(Q)は成立する。
もしSi(A)=Si(Q)を満たす関係式などを見つけることができれば、Qが扱いやすいので、行列Aも扱いやすくなるだろう。
a1=a2=an=r11q1r12q1+r22q2⋮r1nq1+⋯+rnnqn
私たちが見つけたい関係式は、上記のような形で現れ、行列の積は下のように整理される。
A=[a1⋯an]=[q1⋯qn]r110⋮0r12r22⋮0⋯⋯⋱⋯r1nr2n⋮rnn:=QR
そして、このような行列の積を満たす
Q:=[q1⋯qn]R:=r110⋮0r12r22⋮0⋯⋯⋱⋯r1nr2n⋮rnn
を見つけることが、まさにQR分解である。
アルゴリズム
[a1⋯an]∈Cnm×nとする。
**ステップ1. j=1
a1=r11q1と∣q1∣=1を満たすr11を計算する。
**ステップ2. j=2,3,⋯,n
- ステップ2-1. i=1,2,⋯,j−1に対してrij=qi∗ajを計算する。
- ステップ2-2.
次のように一時的なベクトルを計算する。
vj=aj−i=1∑j−1rijqi=aj−i=1∑j−1(qi∗aj)qi
- ステップ2-3. rjj=∣vj∣を計算する。
- ステップ2-4. 次を計算する。
qj=rjjvj
- ここでRは上三角行列として与えられ、rjj=∣vj∣によって計算されるため、常にrjj>0であることが保証され、したがってR−1の存在がわかる。
- 一方で、QとRの記述を見て気がついたかもしれないが、詳しく言うと、上記の分解は縮小QR分解、つまりrQR分解と呼ばれる。
- 全体のQR分解、つまりfQR分解は、特異値分解で行ったのと同様に、正規直交ベクトルで構成されたQ=[Qqn+1⋯qm]∈Cm×mと下に0を埋め込んだR=[RO]∈Cm×nを構成することにより実現される。
存在性
行列A∈Cm×nは必ずQR分解を持つ。
一意性
可逆行列A∈Rm×mはただ一つのrQR分解を持つ。
説明
存在性と一意性が保証されているのはいいが、実際の証明はほとんどない。特に一意性に関しては、一意であることを証明しても、符号が反転するなどに対して許容するなど、詳しく掘り下げれば掘り下げるほど汚い事実であるため、ざっくりと理解しておくことをおすすめする。