行列のSVDは実際にどのように計算されますか


11

たとえば、MATLABはどのようにして特定の行列のSVDを計算しますか?答えはおそらくの固有ベクトルと固有値の計算に関係していると思いA*A'ます。その場合は、それらをどのように計算するのか知りたいですか?



4
実際、いいえ、固有ベクトルとA A Tの値を計算することは含まれませ!その結果、結果の精度が大幅に低下します。AAT
マイケルグラント

回答:


11

AAT

見る

GHゴラブとC.ラインシュ。特異値分解と最小二乗ソリューション。Numerische Mathematik 14:403-420、1970

この資料は、数値線形代数に関する多くの教科書で議論されています。


13

別に(今古典)からゴラブ-Reinsch紙彼の答えでブライアン・ノート(私がリンクしているハンドブック紙のバージョン)と同様に、(今も古典)先行ゴラブ・カハンの紙、数がありましたその後のSVDの計算における重要な開発の まず、通常の方法がどのように機能するかを要約する必要があります。

行列のSVDを計算する考え方は、対称行列の固有分解を計算するために使用される方法と定性的に似ています(OPに記載されているように、それらの間には密接な関係があります)。特に、2つの段階に進みます。2 重対角行列への変換と、2重対角行列のSVDの検索です。これは、最初に対称行列を三重対角形に縮小してから、結果の三重対角の固有分解を計算する手順に完全に類似しています。

2重対角行列のSVDを計算するための特に興味深いブレークスルーは、Jim DemmelとVelvel Kahanによる論文でした。これは、最初に提案された方法ゴラブ・ラインシュ。次にdqdアルゴリズムの(再?)発見が続きました。これは、Rutishauserの古い商差アルゴリズムの子孫です。(ベレスフォード・パーレットはここで素晴らしい議論をします。)メモリが機能する場合、これはLAPACKが内部的に使用する推奨方法です。これとは別に、対称固有問題の解決策の開発のSVDバージョンを導出することは常に可能です。たとえば、分割統治のSVDバージョンと、古いJacobiアルゴリズムのSVDバージョンがあります(状況によってはより正確な場合があります)。

2重対角化に関しては、改良された方法の1つがBarlowの論文で概説されています。これは、GolubとReincshの元の手順よりも少し多くの作業が必要ですが、より正確な2重対角行列を生成します。


1
@ジャック、これを見たことがありますか?
JM

驚いたことに、私はしなかった!
ジャックポールソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.