中学数学623977 views
雑学1473717 views
中学理科1631220 views
英語614322 views
ヒストリア291310 views
高校倫理1440914 views
高校日本史190639 views
MathPython498072 views
数学講師2890703 views
高校化学2925825 views
Help
Tools
NewsSpreadsheetCalendarBookkeepingMarkdown TablesLanguage Model NewsLinux CommandsSlidesTier 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 DelaunayFractalUniversity Entrance Exam MathColumn ArithmeticDraw Math FiguresArithmetic AnimationArithmetic Word ProblemsCounting with Tree DiagramsCube NetsRolling DiceCross SectionsMotion PathMechanicsWavesUniversity Entrance Exam Physics解析力学Quantum MechanicsStatistical MechanicsRelativityCelestial MechanicsAstrophysicsCosmologyElectromagnetic 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

スペクトル分解とは|対称行列の対角化から行列の関数まで

対称行列は、固有値を重みにした射影の足し算に開ける。

これがスペクトル分解である。行列を「どの向きにどれだけ伸ばすか」という情報だけに分けた形で、累乗も平方根も逆行列も、この形からそのまま作れる。

対角化からスペクトル分解へ

実対称行列は直交行列で対角化できる。固有ベクトルを正規直交に取り、それを列に並べた行列を とすればよい。

は固有値を並べた対角行列である。 が直交行列なので、逆行列を求めずに転置で書ける点がこの形の利点になる。

同じ内容を、行列の積を使わずに書き直したい。そこで右辺を成分の並びとして展開する。

射影の和に開く

を列ごとに分けると、固有値を重みとする和になる。

は列ベクトルと行ベクトルの積なので、 次の正方行列である。階数は 1 で、 の向きだけを取り出す射影行列になっている。

行列を階数 1 の部品に分け、それぞれに固有値の重みを付けた形だと読める。 の対角成分が重み、 の列が向きを担当している。

例:2 次の対称行列を分解する

固有値は 4 と 2 で、正規化した固有ベクトルは である。それぞれから射影を作る。

を計算すると の和になり、 に戻る。

射影行列の性質

分解に現れる は、次の 3 つを満たす。どれも が正規直交であることから出る。

さらに全部を足すと単位行列になる。 だからである。

2 乗しても変わらないのは、射影を 2 度かけても結果が動かないことを表す。異なる射影の積が 0 になるのは、向きがたがいに直交しているためである。

例:射影の性質を確かめる

先ほどの を 2 乗する。成分はすべて なので、積の各成分は になる。

を計算すると、各成分で が打ち消し合って零行列になる。 のほうは、非対角成分が消えて単位行列である。

ベクトルへの作用として読む

を分解の形で書くと、 を固有方向に分けてから伸縮する手順が見えてくる。

方向の成分である。それを 倍して足し直したものが になる。

行列を掛ける操作が、向きごとの独立な伸び縮みに分かれている。固有値が大きい向きほど強く引き伸ばされる。

HTML
CSS
JavaScript
<svg viewBox="0 0 460 230" width="100%" style="max-width:460px;display:block;margin:0 auto">
	<text x="230" y="22" font-size="11" fill="#9a9a9a" text-anchor="middle">固有方向に分けてから、別々に伸ばして足し直す</text>
	<line x1="60" y1="170" x2="420" y2="170" stroke="#c8c8c8" stroke-width="1"></line>
	<line x1="110" y1="200" x2="110" y2="50" stroke="#c8c8c8" stroke-width="1"></line>
	<line x1="110" y1="170" x2="180" y2="100" stroke="#c8c8c8" stroke-width="1" stroke-dasharray="4 3"></line>
	<line x1="110" y1="170" x2="180" y2="240" stroke="#c8c8c8" stroke-width="1" stroke-dasharray="4 3"></line>
	<line x1="110" y1="170" x2="166" y2="142" stroke="#1f1f1f" stroke-width="1.5"></line>
	<polygon points="172,139 162,139 165,146" fill="#1f1f1f"></polygon>
	<text x="176" y="136" font-size="12" fill="#1f1f1f">x</text>
	<line x1="110" y1="170" x2="152" y2="128" stroke="#1b81e0" stroke-width="1.5"></line>
	<polygon points="156,124 146,126 152,132" fill="#1b81e0"></polygon>
	<text x="120" y="120" font-size="11" fill="#1b81e0">q1 方向</text>
	<line x1="110" y1="170" x2="138" y2="184" stroke="#d0562a" stroke-width="1.5"></line>
	<polygon points="143,186 133,186 137,180" fill="#d0562a"></polygon>
	<text x="146" y="198" font-size="11" fill="#d0562a">q2 方向</text>
	<line x1="250" y1="170" x2="330" y2="90" stroke="#1b81e0" stroke-width="1.5"></line>
	<polygon points="334,86 324,88 330,94" fill="#1b81e0"></polygon>
	<text x="286" y="104" font-size="11" fill="#1b81e0">4 倍</text>
	<line x1="250" y1="170" x2="292" y2="191" stroke="#d0562a" stroke-width="1.5"></line>
	<polygon points="297,193 287,193 291,187" fill="#d0562a"></polygon>
	<text x="300" y="206" font-size="11" fill="#d0562a">2 倍</text>
	<text x="250" y="66" font-size="11" fill="#9a9a9a">伸ばしてから足すと Ax</text>
</svg>

例:ベクトルを分解して伸縮を見る

を先ほどの で送る。まず 方向と 方向の成分を取る。

である。これらを 4 倍と 2 倍してから足し直す。

答えは である。 を直接掛けても で同じ値になる。

固有値が重なるときは固有空間ごとにまとめる

固有値が重なると、固有ベクトルの取り方に自由が生まれる。重なった分だけ固有空間が広がり、その中でどの正規直交基底を選んでもよい。

そこで、同じ固有値に属する項をまとめてしまう。まとめた は、その固有空間への直交射影になる。

和を取る範囲は、相異なる固有値だけである。この形にすると、基底の選び方に左右されない書き方になる。

例:重複した固有値の射影

固有値 2 の固有空間は、はじめの 2 つの座標が張る平面である。ここへの射影は、対角成分が の行列になる。

固有値 5 の射影は である。 を計算すれば に戻る。

平面の中で基底をどう回しても、射影そのものは変わらない。個々の固有ベクトルは一意でなくても、分解は動かない。

例:3 次の行列を対角でない形で分解する

成分がすべて 1 の行列を と書けば である。 の固有値は 3 と 0(重複度 2)なので、 の固有値は 4 と 1 になる。

固有値 4 の向きは で、射影は である。固有値 1 の固有空間は の平面で、射影は になる。

平面のほうは 2 次元なので、その中の固有ベクトルは何通りにも取れる。それでも射影は の 1 つに決まっている。

分解は一通りに決まる

相異なる固有値ごとにまとめた形で書けば、スペクトル分解は一意である。固有値も射影も、行列 から決まってしまう。

理由は が固有空間への直交射影として特徴づけられることにある。固有空間は だけで決まり、そこへの直交射影も 1 つしかない。

一方、 のほうは一意ではない。列の順序を入れ替えたり、符号を反転したりできる。分解の一意性は、射影の言葉で述べたときにだけ成り立つ。

行列の関数を作る

の多項式を作ると、 のおかげで交差項が消える。 を展開すれば、 の和が残る。

同じことが何乗でも起きるので、多項式は固有値だけに作用する。この観察を、多項式でない関数にも広げる。

これを行列の関数の定義に採用する。固有値のところで を評価し、射影で組み直すだけである。

例:n 乗を求める

となる。 で確かめてみる。

を 2 回掛けても同じ行列が出る。指数が大きくなっても、計算するのは固有値の累乗だけで済む。

例:平方根を求める

固有値が正なので、平方根を取っても実行列にとどまる。重みを に取り替える。

成分で書くと、対角が 、非対角が の対称行列になる。2 乗すると、対角は和が 3、非対角は積の 2 倍が 1 となり、 に戻る。

固有値に負のものがあれば、実の範囲では平方根が取れない。正定値であることが、ここで効いてくる。

例:逆行列を求める

重みを逆数に取り替えれば逆行列になる。固有値が 0 でなければ、いつでもこの形が使える。

行列式が 8 なので、2 次の逆行列の公式と突き合わせても一致する。固有値のどれかが 0 なら逆数が作れず、逆行列も存在しない。

トレースと行列式の読み替え

分解の形からは、トレースと行列式も読める。トレースは固有値の和、行列式は積である。

例に当てはめると、トレースは で、対角成分の和 に一致する。行列式は である。

射影のトレースが固有空間の次元になることも使える。重複した固有値では、次元の分だけ重みが数えられる。

二次形式の主軸として見る

二次形式に代入すると、交差項のない形になる。 を分解で書けば、平方の重み付き和である。

固有ベクトルの向きに座標軸を取り直した、と読める。楕円や双曲線の主軸が固有ベクトルの向きになるのは、この式のためである。

符号を決めるのが固有値なので、正定値かどうかもここから判断できる。

低ランク近似

固有値の大きい項ほど、行列への寄与が大きい。そこで小さい項を切り捨てると、階数の低い近似が得られる。

HTML
CSS
JavaScript
<svg viewBox="0 0 460 190" width="100%" style="max-width:460px;display:block;margin:0 auto">
	<text x="230" y="24" font-size="11" fill="#9a9a9a" text-anchor="middle">重みの大きい項だけを残す</text>
	<rect x="60" y="60" width="90" height="70" fill="#1b81e0" fill-opacity="0.22" stroke="#1b81e0" stroke-width="1"></rect>
	<text x="105" y="100" font-size="12" fill="#1b81e0" text-anchor="middle">λ1 P1</text>
	<text x="163" y="100" font-size="13" fill="#9a9a9a">+</text>
	<rect x="180" y="75" width="90" height="40" fill="#1b81e0" fill-opacity="0.10" stroke="#c8c8c8" stroke-width="1"></rect>
	<text x="225" y="100" font-size="12" fill="#9a9a9a" text-anchor="middle">λ2 P2</text>
	<text x="283" y="100" font-size="13" fill="#9a9a9a">+</text>
	<rect x="300" y="85" width="90" height="20" fill="#1b81e0" fill-opacity="0.05" stroke="#c8c8c8" stroke-width="1"></rect>
	<text x="345" y="100" font-size="12" fill="#9a9a9a" text-anchor="middle">λ3 P3</text>
	<line x1="180" y1="140" x2="390" y2="140" stroke="#d0562a" stroke-width="1" stroke-dasharray="4 3"></line>
	<text x="285" y="158" font-size="11" fill="#d0562a" text-anchor="middle">ここから先を落とすと階数 1 の近似になる</text>
	<text x="105" y="52" font-size="11" fill="#1b81e0" text-anchor="middle">重みが最大</text>
</svg>

どこまで残すかは、落とした固有値の大きさで測れる。誤差はそのまま切り捨てた項の重みになる。

例:項を 1 つ落とす

例の で、重みの小さい第 2 項を落とす。残るのは階数 1 の行列である。

もとの との差は で、成分の絶対値は 1 である。対角成分は 3 から 2 へ、非対角成分は 1 から 2 へずれた。

主成分分析はこの考え方を使う。共分散行列を分解し、重みの大きい向きだけを残して次元を落とす。

正規行列・エルミート行列への一般化

複素数まで広げると、対称行列の代わりにエルミート行列が同じ性質を持つ。直交行列はユニタリ行列に、転置は共役転置に置き換わる。

固有値が実数になるので、係数は実のままである。さらに広げると、正規行列であればこの形の分解ができる。ただし固有値は複素数になりうる。

どこまでこの形が使えるかを決めるのが正規性である。証明や条件は正規行列の記事で扱う。

他の話題とのつながり

特異値分解は、正方でない行列に同じ考え方を持ち込んだものである。左右で別々の正規直交基底を使う点が違う。

正定値行列の平方根や、指数関数を使った微分方程式の解も、この分解から作れる。関数を固有値に作用させるだけで済むからである。

対称行列でない行列には、この形はそのまま使えない。対角化できたとしても、射影は直交射影にならず、性質がいくつか失われる。

よくある誤り

どんな行列でもスペクトル分解できると考える。対称行列や正規行列に限った話である
を取り違える。前者は行列、後者は 1 になるスカラーである
固有ベクトルを正規化せずに射影を作る。長さが 1 でなければ が成り立たない
固有値が重なったとき、固有ベクトルが一意に決まると思ってしまう。決まるのは固有空間とその射影のほうである
を成分ごとに を当てたものと混同する。作用させる相手は固有値であって、成分ではない
低ランク近似で切り捨てた誤差を 0 と見なす。落とした項の重みがそのまま残差になる
分解に現れる射影が交換しないと考える。異なる射影の積は零行列で、同じものの積はそれ自身である

参考文献

Spectral theorem - Wikipedia
Eigendecomposition of a matrix - Wikipedia
Spektralsatz - Wikipedia(ドイツ語)
Théorème spectral - Wikipédia(フランス語)
対称行列は、固有値を重みにした射影の足し算に開けます。対角化から分解を導く手順、射影が満たす性質、固有空間ごとにまとめると分解が一通りに決まること、固有値に関数を当てるだけで行列の関数が作れること、主成分分析につながる低ランク近似までを、計算例をつけて示します。