# 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 (複素数の場合)に基づいている.