svd 特異値分解

## 呼び出し手順

    s=svd(X)

                [U,S,V]=svd(X)

                [U,S,V]=svd(X,0) (obsolete)

                [U,S,V]=svd(X,"e")

                [U,S,V,rk]=svd(X [,tol])

## 引数

X

  実数または複素行列

s

  実数ベクトル (特異値)

S

  実数対角行列 (特異値)

U,V

  直交またはユニタリ正方行列(特異値).

tol

  実数

## 説明

`[U,S,V] = svd(X)` は `X` と同次元で 降順に非負の対角要素を有する 対角行列 `S`および `X = U*S*V'`となる ユニタリ行列 `U` と `V` を出力します.

`[U,S,V] = svd(X,0)` は "エコノミーサイズ"分解を出力します. `X` がm行n列 (m > n)の場合, `U` の最初のn列のみが計算され, `S`は n行n列となります.

`s= svd(X)` は 特異値を含むベクトル`s`を返します.

`[U,S,V,rk]=svd(X,tol)` は `rk`に加えて, `X` の数値ランク,すなわち `tol`より大きな特異値の数を出力します.

`tol`のデフォルト値は `rank`と同じです.

## 例

    X=rand(4,2)*rand(2,4)
    svd(X)
    sqrt(spec(X*X'))

## 参考

- rank
- qr
- colcomp
- rowcomp
- sva
- spec

## 使用される関数

svd 分解はLapackのルーチン DGESVD (実数行列の場合)および ZGESVD (複素数の場合)に基づいている.