高校国語788355 views
中学数学623778 views
小学算数1200472 views
MathPython497416 views
世界の国564562 views
高校物理160216 views
高校化学2924523 views
高校倫理1440172 views
高校生物551780 views
りんご209693 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

コレスキー分解|正定値行列の平方根と正定値性の判定

対称で正定値な行列は、下三角行列とその転置の積に分かれます。

これをコレスキー分解といいます。 は対角成分がすべて正の下三角行列で、 の平方根にあたるものです。

LU 分解では の 2 つを求めますが、対称性のおかげで片方だけで済みます。計算量も記憶する量も半分になります。

HTML
CSS
JavaScript
<svg viewBox="0 0 460 200" width="100%" style="max-width:460px;display:block;margin:0 auto">
	<rect x="30" y="40" width="100" height="100" fill="#1b81e0" fill-opacity="0.12" stroke="#c8c8c8" stroke-width="1"></rect>
	<text x="80" y="95" font-size="15" fill="#1f1f1f" text-anchor="middle">A</text>
	<text x="80" y="30" font-size="11" fill="#9a9a9a" text-anchor="middle">対称・正定値</text>
	<text x="150" y="97" font-size="15" fill="#9a9a9a" text-anchor="middle">=</text>
	<polygon points="175,40 175,140 275,140" fill="#1b81e0" fill-opacity="0.12"></polygon>
	<rect x="175" y="40" width="100" height="100" fill="none" stroke="#c8c8c8" stroke-width="1"></rect>
	<line x1="175" y1="40" x2="275" y2="140" stroke="#9a9a9a" stroke-width="1" stroke-dasharray="3 3"></line>
	<text x="205" y="123" font-size="15" fill="#1b81e0" text-anchor="middle">L</text>
	<text x="225" y="30" font-size="11" fill="#9a9a9a" text-anchor="middle">下三角(対角は正)</text>
	<text x="295" y="97" font-size="15" fill="#9a9a9a" text-anchor="middle">×</text>
	<polygon points="320,40 420,40 420,140" fill="#1b81e0" fill-opacity="0.12"></polygon>
	<rect x="320" y="40" width="100" height="100" fill="none" stroke="#c8c8c8" stroke-width="1"></rect>
	<line x1="320" y1="40" x2="420" y2="140" stroke="#9a9a9a" stroke-width="1" stroke-dasharray="3 3"></line>
	<text x="390" y="65" font-size="15" fill="#1b81e0" text-anchor="middle">L</text>
	<text x="400" y="58" font-size="10" fill="#1b81e0">T</text>
	<text x="370" y="30" font-size="11" fill="#9a9a9a" text-anchor="middle">その転置</text>
	<text x="230" y="180" font-size="11" fill="#9a9a9a" text-anchor="middle">求めるのは L だけで、もう一方は転置するだけです</text>
</svg>

コレスキー分解とは

対称行列 に対して、対角成分が正である下三角行列 を見つけて と書くことをコレスキー分解といいます。

複素数まで広げるなら、エルミート行列に対して と書きます。転置のかわりに共役転置を使うだけで、話の筋は変わりません。

数の世界の平方根と同じ位置にあります。正の数 と書けるように、正定値行列は と書けます。

正定値であることが前提

が正定値であるとは、 でないすべてのベクトル について が成り立つことをいいます。

この仮定は外せません。 と書けたとすると、二次形式は となり、必ず 以上になるからです。

が正則なら となるのは のときだけで、値は正になります。逆に正定値なら分解が存在することも示せます。

成分は順に決まる

を成分ごとに書き下すと、左上から順に が決まっていきます。対角成分は次の式です。

対角より下の成分は、すでに求めた値を使って割り算で出ます。

未知数が 1 つずつ増える形なので、連立方程式を解く必要はありません。左上から順に埋めるだけです。

HTML
CSS
JavaScript
<svg viewBox="0 0 460 210" width="100%" style="max-width:460px;display:block;margin:0 auto">
	<text x="230" y="22" font-size="11" fill="#9a9a9a" text-anchor="middle">左上から順に、下三角の成分が 1 つずつ決まります</text>
	<rect x="150" y="40" width="160" height="140" fill="none" stroke="#c8c8c8" stroke-width="1"></rect>
	<rect x="150" y="40" width="53" height="47" fill="#1b81e0" fill-opacity="0.18"></rect>
	<rect x="150" y="87" width="53" height="46" fill="#1b81e0" fill-opacity="0.14"></rect>
	<rect x="203" y="87" width="53" height="46" fill="#1b81e0" fill-opacity="0.14"></rect>
	<rect x="150" y="133" width="53" height="47" fill="#1b81e0" fill-opacity="0.1"></rect>
	<rect x="203" y="133" width="53" height="47" fill="#1b81e0" fill-opacity="0.1"></rect>
	<rect x="256" y="133" width="54" height="47" fill="#1b81e0" fill-opacity="0.1"></rect>
	<text x="176" y="70" font-size="13" fill="#1f1f1f" text-anchor="middle">1</text>
	<text x="176" y="116" font-size="13" fill="#1f1f1f" text-anchor="middle">2</text>
	<text x="229" y="116" font-size="13" fill="#1f1f1f" text-anchor="middle">3</text>
	<text x="176" y="162" font-size="13" fill="#1f1f1f" text-anchor="middle">4</text>
	<text x="229" y="162" font-size="13" fill="#1f1f1f" text-anchor="middle">5</text>
	<text x="283" y="162" font-size="13" fill="#1f1f1f" text-anchor="middle">6</text>
	<text x="229" y="70" font-size="13" fill="#9a9a9a" text-anchor="middle">0</text>
	<text x="283" y="70" font-size="13" fill="#9a9a9a" text-anchor="middle">0</text>
	<text x="283" y="116" font-size="13" fill="#9a9a9a" text-anchor="middle">0</text>
	<text x="230" y="200" font-size="11" fill="#9a9a9a" text-anchor="middle">対角に来るたびに平方根を 1 回とります</text>
</svg>

例:2 次の行列で手順をなぞる

小さい行列で流れを見ます。

まず です。第 1 列の残りは、対角で割って になります。

対角に戻ると、その行ですでに求めた成分の 2 乗を引いてから平方根を取ります。 です。

成分は で、もとの行列に戻ります。

例:3 次の行列を分解する

次の対称行列を分解します。

第 1 列から始めます。 です。

第 2 列に移ります。 になります。

最後に です。

を計算すると、もとの に戻ります。平方根の中身が とすべて正だったことにも注目してください。

対角を正に取れば一通りに決まる

対角成分を正に取るという約束をすれば、分解は一通りに決まります。上の手順で選択の余地がなかったことが、そのまま証明になっています。

約束を外せば自由が残ります。 の第 列全体の符号を反転しても は変わらないからです。

正定値なら平方根の中身が必ず正になり、途中で止まることもありません。この事実の証明には、部分行列も正定値であることを使います。

二次形式が平方和になる

分解ができると、二次形式が平方の和として書けます。

これは平方完成そのものです。 の成分が、平方完成で出てくる係数に対応します。

正定値性が目に見える形になるのが利点です。二次形式が平方の和である以上、値は 以上で、 になるのは のときだけです。

例:二次形式を平方完成する

さきほどの 3 次の で書き下します。二次形式を成分で展開すると、次の式になります。

の列を係数として読むと、3 つの平方の和にまとまります。

括弧の中に並ぶ数は、 の第 1 列、第 2 列、第 3 列そのものです。 を入れると、どちらの式も になります。

手で平方完成を進めても、同じ式に行き着きます。コレスキー分解は、その手順を行列の形で書き留めたものにほかなりません。

平方根を使わない LDL 分解

平方根を避けたいときは、対角を別に取り出します。

ここで は対角がすべて の下三角行列、 は対角行列です。成分は次の式で決まります。

平方根が出てこないので、有理数の範囲で計算が閉じます。 の成分が正なら、平方根を に配ってコレスキー分解に戻せます。

例:同じ行列を LDL 分解で書く

さきほどの の各列を、対角成分で割ります。

の対角は、コレスキー分解の対角を 2 乗したものです。 と対応しています。

整数だけで書けている点に注目してください。もとの行列が整数でも、コレスキー分解には平方根が現れることがあります。LDL 分解ならそれを避けられます。

例:平方根が残る行列で 2 つの分解を比べる

次の行列は、差分方程式や格子の問題でよく現れる形です。

コレスキー分解を進めると、最初の段階から平方根が出てきます。 です。

続けると になります。手で扱うには重い形です。

同じ行列を LDL 分解で書くと、有理数だけで収まります。

の対角はすべて正なので、この行列は正定値です。行列式は になります。

LU 分解の対称版として見る

が対称なら、LDU 分解の の転置になります。つまり は LDU 分解の対称版です。

消去の手順もまったく同じです。違うのは、対称性のおかげで下半分だけ計算すれば足りることです。

コレスキー分解は、そこからさらに の平方根を に吸収させた形にあたります。3 つの書き方は同じ計算の言い換えです。

LU 分解

どんな正則行列にも使えます。ピボット選択が要り、 の両方を求めます

コレスキー分解

対称正定値のときだけ使えます。ピボット選択が要らず、 だけで済むので手数は半分です

ピボット選択が要らず、計算量も半分

正定値性から、平方根の中身が必ず正になります。 で割る心配も、 に近い値で割る心配もありません。

だから行の入れ替えが要りません。LU 分解では安定性のために毎回ピボットを選びますが、こちらでは順番どおりに進めるだけです。

演算量は 程度で、LU 分解のおよそ半分です。記憶する量も、下三角だけなので半分で済みます。

連立方程式を解く

を入れると、三角の方程式が 2 つ並びます。

まず を上から解き、次に を下から解きます。LU 分解と同じ形ですが、使う行列が 1 つだけです。

例:連立方程式を解く

さきほどの に対して、右辺を とします。

を上から解きます。 から から です。

第 3 式は なので、 から になります。

を下から解きます。 から から から です。

解は で、 を計算すると に戻ります。

行列式は対角の 2 乗の積

です。三角行列の行列式は対角の積なので、次の形になります。

さきほどの例なら です。LDL 分解の の対角を掛けても で一致します。

正定値行列の行列式が正になることも、この式から出ます。平方になっているので負にはなりません。

正定値かどうかの判定に使える

分解の手順そのものが判定になります。平方根の中身が負になった時点で、その行列は正定値ではありません。

首座小行列式をすべて計算する方法や、固有値を求める方法より手軽です。分解を試みて、最後まで進めるかどうかを見るだけで済みます。

数値計算のライブラリが正定値性を確かめるときも、たいていこの方法を使います。判定と分解が同時に終わるので無駄がありません。

例:正定値でない行列では途中で止まる

次の対称行列で試します。

までは進みます。ところが次の段階で行き詰まります。

平方根が実数の範囲で取れません。実際この行列の固有値は で、正定値ではありません。

を入れると二次形式が になります。負の値を取るので、平方の和には書けないわけです。

半正定値のときは一意でなくなる

どまりの半正定値行列でも、分解自体は存在します。ただし対角に が現れ、一意性が崩れます。

になるので、 を決める割り算ができません。 をどう選んでも は満たされます。

と置けば、 のどれでも になります。分解が無数にあるわけです。

実際の計算では、対角の大きい成分を先に持ってくる置換を入れて対処します。階数のぶんだけ正の対角が並ぶ形に整えられます。

応用

統計では、共分散行列から相関のある乱数を作るのに使います。互いに独立な標準正規乱数 を掛けると、 の共分散行列が になります。

最小二乗法の正規方程式にも現れます。係数行列 は対称で、列が一次独立なら正定値なので、この分解で解けます。

大きな疎行列の反復解法では、途中を切り捨てた不完全コレスキー分解を前処理に使います。厳密な分解でなくても、収束を速める効果があります。

例:共分散行列から相関のある乱数を作る

相関係数が の 2 変数を作ります。目標とする共分散行列は次の形です。

分解すると です。

独立な標準正規乱数 を掛けると、 が得られます。

の分散は との共分散は です。狙いどおりの相関を持つ組ができました。

他の話題とのつながり

ブロックに区切って同じ消去を進めると、右下にシューア補元が現れます。正定値行列のシューア補元もまた正定値になるので、分解が最後まで進むことの説明になります。

スペクトル分解を使えば、対称行列の別の平方根も作れます。固有値の平方根を使う は対称ですが、コレスキー分解の は三角です。同じ「平方根」でも形が違います。

正定値性そのものの判定法は正定値行列と半正定値行列の記事に、二次形式の標準形は二次形式と標準形の記事にあります。

よくある誤り

対称というだけでは分解できません。正定値であることまで要ります
平方根の中身が負になったら、計算を間違えたのではなく、その行列が正定値でないということです
の平方根と呼ばれますが、 という意味ではありません。 です
スペクトル分解から作る とコレスキー分解の は別物です。前者は対称、後者は三角になります
の対角はコレスキー分解の対角そのものではありません。2 乗したものが対応します
半正定値のときは分解が一通りに決まりません。一意性は正定値の場合の話です
ピボット選択が要らないのは正定値だからです。対称でも正定値でなければ、この保証はありません
行列式が正であることは正定値の必要条件にすぎません。 が 2 つ並ぶ行列でも行列式は正になります

参考文献

Cholesky decomposition - Wikipedia
Cholesky-Zerlegung - Wikipedia(ドイツ語)
Factorisation de Cholesky - Wikipédia(フランス語)
科列斯基分解 - 维基百科(中国語)
対称で正定値な行列は、下三角行列とその転置の積に分かれます。これがコレスキー分解です。成分が左上から順に決まる仕組み、平方根を避ける LDL 分解、ピボット選択が要らず手数が LU 分解の半分で済む理由、二次形式が平方の和になること、平方根の中身が負になれば正定値でないと分かることを、計算例をつけて解説します。