LinearAlgebra[SingularValues] - 行列の特異値の計算
使い方
SingularValues(A, out, c, outopts, ...)
パラメータ
A - 行列、リスト; 特異値を求める行列
out - (オプション) output = obj の形をした等式で obj は 'U', 'S', 'Vt', 'list' のうちのいずれか 1 つ、またはこれら名前を 1 個以上を含んでいるリスト; 計算する結果オブジェクトを選択
c - (オプション) BooleanOpt(conjugate); 浮動小数点でないデータの場合にエルミート転置を使うかどうかを指定
outopts - (オプション) outputoptions[o] = list の形をした等式で o は 'U', 'S', 'Vt' のうちのいずれか 1 つであり、 list は結果コンストラクタへ渡すべきオプションを含む; 結果として得られるオブジェクトのコンストラクタオプション
... - (オプション) outputoptions[o] = list の追加例
|
説明
|
|
•
|
SingularValues(A) 関数は行列 A の特異値を列ベクトルとして返します。
|
|
特異値は A . Transpose(A) (conjugate=false) または A . HermitianTranspose(A) (conjugate=true のとき、デフォルト) の(実)固有値の平方根です。この積は実対称かまたはエルミート行列で、半正値なので、固有値はすべて実数かつ非負であり、それらの平方根もまた実数になります。
|
•
|
(行列の列としての)左特異ベクトルと右特異ベクトルの計算は、すべての成分が浮動小数点の値で評価した行列 A に対してのみ要求することができます。
|
|
特異値 S は、行列 U の列として左特異ベクトルと行列 Vt の列として右特異ベクトルとともに U . SS . Vt = A を満たします。ただし A は n x p、 U は n x n、 Vt は p x p であり、SS は対角成分に S の零でない値を含む n x p です。
|
|
浮動小数点でない行列に対して、左右の特異ベクトルが要求されない場合に、特異値は(明示的な根とは対照的に)沿字付きの RootOf の形で返されます。
|
•
|
A がリストならば、リストの要素はあるプレ分解による行列 A の Matrix 因子としてとることができます。これらの因子は次のように一意的に解釈されます。
|
|
* Matrix, Vector[column],いくつかの Vector[column] 項目, [B,tauq,taup] のリストは output='NAG' オプションにより BidiagonalForm を呼び出した結果と解釈されます。
|
•
|
output オプション (out) は返される式列の中身を決定します。
|
|
output オプションに何が含まれているかによって、U (左特異ベクトル), S (特異値), Vt (右特異ベクトル) の 1 つ以上のいくつかを含む式列を返すことができます。 output がリストならば、オブジェクトは list で指定したのと同じ順序で返されます。list 出力オブジェクトが指定されていると、特異値はリストとして返されます。この出力オブジェクトは他のどの出力オブジェクトによっても指定することができません。
|
•
|
outputoptions[o] オプション (outopts) は結果を作成するコンストラクタに付加情報 (readonly, shape, storage, order, datatype, attributes) を与えます。
|
|
以下のリストは outputoptions のインデックス [o] として許される値とそれらに対応する意味を表しています。
|
U 左特異ベクトル
S 特異値
Vt 右特異ベクトル
•
|
この関数は LinearAlgebra パッケージの一部ですから、コマンド with(LinearAlgebra) を実行した後にのみ SingularValues(..) の形で使うことができます。ただし、長い形の名前 LinearAlgebra[SingularValues](..) を使えばいつでもアクセスすることができます。
|
|
|
例
|
|
>
|
with(LinearAlgebra):
A := RandomMatrix(5,3,outputoptions=[datatype=float]);
|
| (2.1) |
>
|
SingularValues(A, output='list');
|
| (2.2) |
>
|
B, tauq, taup := BidiagonalForm(A,output='NAG');
|
| (2.3) |
>
|
S := SingularValues([B,tauq,taup],outputoptions['S']=[readonly]);
|
| (2.4) |
>
|
U, Vt := SingularValues(A, output=['U', 'Vt']):
U . DiagonalMatrix( S[1..3], 5, 3 ) . Vt;
|
| (2.5) |
|
|