雑学1473627 views
世界の国564562 views
教育149515 views
中学数学623778 views
LaTeX962207 views
高校日本史190578 views
高校生物551780 views
小学社会310495 views
小学理科719898 views
いろは3011036 views
Help
Tools
NewsSpreadsheetCalendarBookkeepingMarkdown TablesLanguage Model NewsSlidesTier ListPen ToolIllustrationCrayonWatercolorPixel ArtASCII ArtPerspectiveEndless StairsGraphMind MapER DiagramFamily TreeMemeCurved TextImage EditorMosaicRetro FilterPencil SketchSwirl EffectLine ArtOCR/HighlighterMakeup EditorFaviconVideo TrimmerScrolling VideoVideo TitleColor PickerColor ExtractorBonfireFireworksCherry BlossomWater RippleWater SplashBreaking GlassGlass TextureFabric TextureWood GrainMarble TextureBrick Wall TextureMetal TextureWashi Paper TextureCardboard TextureCSS ButtonIcon MakerBar ChartGrouped Bar ChartStacked Bar ChartPie ChartLine ChartArea ChartStacked Area ChartScatter Plot3D Bar Chart3D Pie ChartBar Chart RaceBubble ChartPopulation PyramidPictogramEarningsCandlestick ChartInvestment RiskMortgage SimulatorCalculatorMatrix CalculatorFunction GraphPolynomial ExpansionVenn DiagramField VisualizerRubik's Cube Group TheoryTraveling SalesmanVoronoi and DelaunayFractalColumn ArithmeticDraw Math FiguresArithmetic AnimationArithmetic Word ProblemsCounting with Tree DiagramsCube NetsRolling DiceCross SectionsMotion PathMechanicsWavesElectromagnetic WavesCapacitorsLight and LensesThermodynamicsHow Semiconductors WorkMolecular StructuresAtomic OrbitalsElectrochemical CellsChemical EquilibriumCrystal LatticesBuffer pHOrganic Reaction MapPeriodic TableComplex IonsDNA Double HelixCell DivisionMembrane ChannelsNerve ImpulseMuscle ContractionHormones and HomeostasisRock ClassificationWeatherConstellationsSolar and Lunar Eclipses3D ModelingFloor PlanSeismic StructuresIntersection TurnMaglevCooking AnimationOrigamiLive Viewer CountGeoJSON MapRailway MapPopulation MapCrime MapLand Price MapSchool MapShrine and Castle MapHouse of Representatives MapWord MapSolitaireReversiHakoiri MusumeChessHamburgerRippleSlide Puzzle MakerNeon PinballNovel MakerJapanese Typing PracticePiano Score EditorMusic TheoryShogi StrategyPiano Rhythm Game

English

QR 分解とは|グラム・シュミットとハウスホルダー変換

行列を直交行列 と上三角行列 の積に書き直すのが QR 分解です。

の列は正規直交系なので、長さも角度も変えません。 は上三角なので、方程式は後退代入だけで解けます。

作り方は 2 通りあります。列を順に正規直交化していくグラム・シュミット法と、鏡映を重ねて成分を消していくハウスホルダー法です。

HTML
CSS
JavaScript
<svg viewBox="0 0 460 220" width="100%" style="max-width:460px;display:block;margin:0 auto">
	<text x="230" y="20" font-size="11" fill="#9a9a9a" text-anchor="middle">列を順に正規直交化すると、そのまま Q と R が出ます</text>
	<line x1="140" y1="175" x2="280" y2="105" stroke="#9a9a9a" stroke-width="1"></line>
	<polygon points="284,103 274,101 277,109" fill="#9a9a9a"></polygon>
	<line x1="140" y1="175" x2="215" y2="45" stroke="#9a9a9a" stroke-width="1"></line>
	<polygon points="217,41 210,49 219,51" fill="#9a9a9a"></polygon>
	<line x1="140" y1="175" x2="210" y2="140" stroke="#1b81e0" stroke-width="2"></line>
	<polygon points="214,138 204,136 207,144" fill="#1b81e0"></polygon>
	<line x1="140" y1="175" x2="118" y2="130" stroke="#1b81e0" stroke-width="2"></line>
	<polygon points="116,126 113,136 122,133" fill="#1b81e0"></polygon>
	<line x1="215" y1="45" x2="252" y2="119" stroke="#c8c8c8" stroke-width="1" stroke-dasharray="3 3"></line>
	<circle cx="140" cy="175" r="2.5" fill="#1f1f1f"></circle>
	<text x="292" y="102" font-size="12" fill="#9a9a9a">a1</text>
	<text x="219" y="38" font-size="12" fill="#9a9a9a">a2</text>
	<text x="214" y="158" font-size="12" fill="#1b81e0">q1</text>
	<text x="96" y="124" font-size="12" fill="#1b81e0">q2</text>
	<text x="262" y="128" font-size="11" fill="#9a9a9a">a1 方向の成分を引く</text>
	<text x="230" y="208" font-size="11" fill="#9a9a9a" text-anchor="middle">引いた量が R の成分、残った向きが Q の列になります</text>
</svg>

QR 分解とは

の実行列 に対して、列が正規直交系である と、上三角行列 を見つけて と書くことを QR 分解といいます。

正方行列なら は直交行列で、 を満たします。転置がそのまま逆行列になる、扱いやすい行列です。

LU 分解が消去の記録だったのに対して、QR 分解は正規直交化の記録です。同じ「三角行列に落とす」でも、途中で使う変換の種類が違います。

縦長の行列では縮小版を使う

の縦長の行列では、 の取り方に 2 通りあります。

完全版では の直交行列にします。このとき で、下の 行はすべて です。

縮小版では に取ります。余分な零行を持たないぶん、計算にも記憶にも無駄がありません。

縮小版の を満たしますが、 は単位行列になりません。こちらは列空間への射影行列です。

グラム・シュミットで作る

の列を とします。第 1 列は正規化するだけです。

列からは、すでに作った の方向の成分を引き、残りを正規化します。

このとき だけで書けます。係数を集めた行列が上三角になるのは、そのためです。

の成分は内積そのもので、、対角は です。新しい量を計算しているわけではありません。

例:2 次の行列をグラム・シュミットで分解する

次の行列を分解します。

第 1 列は で長さが です。 になります。

第 2 列 との内積は です。この分を引きます。

なので です。並べると分解ができあがります。

この は行列式が で、回転を表します。

分解が一通りに決まる条件

の列が一次独立なら、 の対角成分を正に取るという約束のもとで分解は一意です。

約束がなければ自由が残ります。 の符号を反転し、同時に の第 行の符号も反転すれば、別の分解ができるからです。

列が一次従属だと が起き、 の対角に が現れます。このときは一意性も崩れます。

ハウスホルダー変換は鏡映である

でないベクトル に対して、次の行列をハウスホルダー行列といいます。

これは に垂直な超平面に関する鏡映です。 方向の成分だけが符号を変え、垂直な成分はそのまま残ります。

に写したいなら、 と取ります。 と行き先の差が、そのまま鏡の向きになります。

HTML
CSS
JavaScript
<svg viewBox="0 0 460 220" width="100%" style="max-width:460px;display:block;margin:0 auto">
	<text x="230" y="20" font-size="11" fill="#9a9a9a" text-anchor="middle">鏡で折り返すと、第 1 成分だけが残ります</text>
	<line x1="69" y1="190" x2="266" y2="92" stroke="#9a9a9a" stroke-width="1" stroke-dasharray="4 3"></line>
	<line x1="150" y1="150" x2="290" y2="150" stroke="#e5e5e5" stroke-width="1"></line>
	<line x1="150" y1="150" x2="222" y2="54" stroke="#1b81e0" stroke-width="2"></line>
	<polygon points="225,50 216,54 223,60" fill="#1b81e0"></polygon>
	<line x1="150" y1="150" x2="264" y2="150" stroke="#1b81e0" stroke-width="2"></line>
	<polygon points="270,150 260,146 260,154" fill="#1b81e0"></polygon>
	<line x1="270" y1="150" x2="226" y2="62" stroke="#1f1f1f" stroke-width="1"></line>
	<polygon points="223,56 223,66 231,61" fill="#1f1f1f"></polygon>
	<circle cx="150" cy="150" r="2.5" fill="#1f1f1f"></circle>
	<text x="232" y="48" font-size="12" fill="#1b81e0">x</text>
	<text x="276" y="166" font-size="12" fill="#1b81e0">Hx</text>
	<text x="256" y="102" font-size="12" fill="#1f1f1f">v</text>
	<text x="80" y="182" font-size="11" fill="#9a9a9a">鏡(v に垂直)</text>
	<text x="230" y="210" font-size="11" fill="#9a9a9a" text-anchor="middle">長さは変わらないので、行き先は必ず x と同じ長さになります</text>
</svg>

ハウスホルダー行列の性質

定義から直ちに が分かります。 が対称だからです。

直交性も計算すれば出ます。 となり、2 回かければもとに戻ります。鏡映を 2 回するのだから当然です。

固有値は 個と が 1 個で、行列式は です。向きを裏返す変換であることが、この符号に表れています。

例:同じ行列をハウスホルダー変換で分解する

さきほどの の第 1 列 に写します。 です。

を使って を組み立てます。

に掛けると、第 1 列の下が消えて上三角になります。

は 2 回かけると単位行列に戻るので、 です。つまり が分解になります。

2 つの答が食い違って見える理由

グラム・シュミットでは の対角が 、ハウスホルダーでは になりました。

食い違いは符号だけです。 の第 2 列と の第 2 行の符号を同時に変えれば、一方から他方へ移ります。積は変わりません。

行列式を見ると違いがはっきりします。グラム・シュミットの の回転、ハウスホルダーの の鏡映です。

どちらも正しい分解です。対角を正にそろえたければ、符号を調整すれば済みます。

符号の選び方と桁落ち

は、 がもともと に近い向きだと引き算で桁が落ちます。差がほとんど になるからです。

そこで実際の計算では、 の第 1 成分と同じ符号を使って と取ります。

行き先が に変わるだけで、鏡映であることは変わりません。数値計算では、こちらが標準です。

大きな行列では鏡映を繰り返す

1 回目の鏡映で第 1 列の 2 行目以下が消えます。2 回目は右下の小さい行列に対して同じことをします。

第 1 行と第 1 列に触らない形で鏡映を組めば、消した成分が復活することはありません。 回(縦長なら 回)で上三角になります。

は使った鏡映の積です。方程式を解くだけなら を陽に組み立てず、鏡映を順に作用させれば足ります。

1 成分ずつ消すギブンス回転という方法もあります。手数は増えますが、消したい成分が少ない疎な行列や、並列計算では有利です。

グラム・シュミットは数値的に弱い

古典的なグラム・シュミット法は、丸め誤差で直交性が崩れていきます。後ろの列ほど誤差が積もり、 の列が直交から外れます。

引く順序を変えた修正グラム・シュミット法を使うと、誤差の出方がずっとおとなしくなります。厳密な計算では同じ式ですが、有限桁では違います。

ハウスホルダー法はどの段階も直交変換なので、誤差が拡大しません。数値計算で QR 分解といえば、ふつうこちらを指します。

グラム・シュミット

手で計算するときや、正規直交基底を作る過程を見せたいときに向きます。誤差には弱く、直交性が崩れます

ハウスホルダー

数値計算の標準です。各段階が鏡映なので誤差が増えず、手数もグラム・シュミットより少なくて済みます

連立方程式を解く

を入れると です。両辺に を掛けます。

の逆行列は転置なので、逆行列を求める手間がありません。あとは後退代入だけで解けます。

例:QR 分解で連立方程式を解く

さきほどの に対して、右辺を とします。グラム・シュミットで求めた を使います。

を計算すると です。

後退代入に移ります。第 2 式は なので です。

第 1 式は となり、 が出ます。 を計算すると に戻ります。

最小二乗法とのつながり

行が列より多い過剰決定系では、 をぴったり満たす はふつう存在しません。かわりに を最小にする を探します。

直交行列は長さを変えないので、 が成り立ちます。この右辺を書き下すと、上の 行だけが に依存します。

したがって を解けば最小になります。正規方程式を作る方法より、数値の面で有利です。詳しい議論は直交補空間と直交分解定理の記事にあります。

行列式は R の対角の積

なので、行列式は の対角から求まります。

さきほどの例で確かめます。グラム・シュミットでは 、対角の積が です。

ハウスホルダーでは 、対角の積が なので、掛け合わせるとやはり になります。符号の付き方が違うだけで、結果は一致します。

計算量と LU 分解の比較

ハウスホルダー法による QR 分解は 回程度の演算で終わります。LU 分解の に対して、およそ 2 倍です。

倍のコストを払う理由は安定性です。直交変換は長さを変えないので、途中で値が暴れず、誤差も拡大しません。

正方の連立方程式を素早く解きたいなら LU 分解が有利です。最小二乗法や固有値計算のように、精度が問われる場面では QR 分解を選びます。

他の話題とのつながり

固有値を求める QR 法は、この分解を繰り返し使います。 と分解して を作る操作は と同じで、相似変換を重ねながら上三角に近づけていきます。

グラム・シュミット法そのものは、正規直交基底を作る手続きです。QR 分解は、その過程を行列の積として書き留めたものにあたります。

の性質はユニタリ行列と直交行列の記事に、正規直交基底の意味は正規直交基底の記事にあります。特異値分解でも、前処理として QR 分解が使われます。

よくある誤り

が直交行列でも、行列式が とは限りません。鏡映を含むと になります
グラム・シュミットとハウスホルダーで結果が違っても、どちらかが誤りというわけではありません。符号の取り方が違うだけです
を掛けることと を掛けることは同じです。逆行列をあらためて計算する必要はありません
縦長の行列の縮小版では が正方でないので、 は成り立ちません。成り立つのは のほうです
の対角に が出るのは、列が一次従属のときです。この場合は分解も一通りには決まりません
QR 分解は LU 分解より速い方法ではありません。倍の手数を払って安定性を買っています
修正グラム・シュミットは、厳密な計算では古典版と同じ式です。違うのは丸め誤差の積もり方だけです
をそのまま使うと、 に近いときに桁落ちします。符号をそろえた取り方が要ります

参考文献

QR decomposition - Wikipedia
Householder transformation - Wikipedia
Gram–Schmidt process - Wikipedia
QR-Zerlegung - Wikipedia(ドイツ語)
Décomposition QR - Wikipédia(フランス語)
QR分解 - 维基百科(中国語)
直交行列は長さも角度も変えず、転置がそのまま逆行列になります。この性質を使って行列を上三角に落とすのが QR 分解です。グラム・シュミット法とハウスホルダー変換による作り方、分解が一通りに決まる条件、桁落ちを避ける符号の選び方、後退代入による解法、LU 分解より手数がかかっても選ばれる理由を、計算例をつけて示します。