2

BLASまたはLAPACKを使用してSVDを計算するアルゴリズムを知っていますか?

対称行列 A があるとします。

 1            22           13         14  
22             1           45         24   
13            45            1         34   
14            24           34          1 

A から上三角行列 G を取得した後:

 1            22           13         14  
 0             1           45         24   
 0             0            1         34   
 0             0            0          1
  • A の SVD を計算するにはどうすればよいですか? ただし、G の値を使用しますか?
  • マトリックス A のすべてをパスする必要がありますか、それとも G (中央のマトリックス) をパスするのに十分ですか?

実際には、G 行列を処理した後に取得しますが、その対称として、G のみを持つ (つまり、A の上三角行列のみを持つ) 対称 A の SVD を計算するにはどうすればよいですか?

4

1 に答える 1

2

マトリックス内のすべての値にアクセスせずに、マトリックスの SVD を計算することはできません (つまり、上三角だけに基づいて計算することはできません)。

これを確認するには、行列の SVD を見てください。

A =  0  0     and G =  0  0
     1  0              0  0

または、より一般的には、行列の SVD を取得します。

B =  0  0
     x  0

x のさまざまな値に対して。それらが異なることを観察し、上三角形だけに基づいて SVD を計算することはできないと結論付けてください。

編集: Alberto は、質問者が対称 (またはエルミート) 行列を使用している可能性があることを正しく観察しています。これについては、上三角のみに基づいて SVD を計算することが絶対に可能です。

最後に、これに戻る機会がありました。SVD は一般的すぎるため、通常、対称行列に対して SVD を実行しません。対称行列のすべての固有値は実数であり、固有ベクトルは直交基底を形成するため、「SVD」は実際には通常の固有分解です。使用したい正確な LAPACK ルーチンは、マトリックス ストレージの仕様によって多少異なります。Intel は、LAPACK ルーチンに関する適切なリファレンスを維持しています。対称固有値問題の LAPACK ルーチンの決定木が役立つ場合があります。

于 2011-02-19T18:47:06.750 に答える