ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

svds

特異値およびベクトルの算出

構文

s = svds(A)
s = svds(A,k)
s = svds(A,k,sigma)
s = svds(A,k,'L')
s = svds(A,k,sigma,options)
[U,S,V] = svds(A,...)
[U,S,V,flag] = svds(A,...)

説明

s = svds(A) は、行列 A の 6 個の最大特異値とそれに関連した特異ベクトルを計算します。Amn 列の場合、関数 svds(A)A の少数の固有値とベクトルを算出するために eigs(B) で返される固有値とベクトルを操作します。ここで、B = [sparse(m,m) A; A' sparse(n,n)] です。対称行列 B の正の固有値は、A の特異値と同じです。

s = svds(A,k) は、行列 Ak 個の最大特異値とそれに関連した特異ベクトルを計算します。

s = svds(A,k,sigma) は、スカラー シフト sigma に最も近い k 個の特異値を計算します。たとえば、s = svds(A,k,0) は、k 個の最小特異値と関連する特異ベクトルを計算します。

s = svds(A,k,'L') は、k 個の最大特異値を計算します。

s = svds(A,k,sigma,options) は、いくつかのパラメーターを設定します (関数 eigs を参照)。

オプション構造体フィールドと詳細

フィールド名

パラメーター

既定の設定

options.tol

収束の許容誤差。 norm(AV-US,1)<=tol*norm(A,1)

1e-10

options.maxit

反復の最大数。

300

options.disp

各反復で表示される値の数。

0

svds は計算された特異ベクトルの精度をチェックします。ベクトルの精度が十分でない場合、svds によって返される特異値はリクエストされた特異値よりも少なくなります。リクエストされた特異値の数を取得するには、options 構造体の許容誤差を減らしてください。

[U,S,V] = svds(A,...) は、Amn 列の場合、3 つの出力引数を返します。

  • U は、直交する列をもつ mk 列です。

  • S は、kk 列の対角行列です。

  • V は、直交する列をもつ nk 列です。

  • U*S*V' は、A のランク k に最も近い近似です。

[U,S,V,flag] = svds(A,...) は、収束フラグを返します。関数 eigs が収束した場合は、norm(A*V-U*S,1) <= tol*norm(A,1) かつ flag0 になります。関数 eigs が収束しない場合、flag1 になります。

    メモ:   関数 svds は、大規模なスパース行列の少数の特異値を算出するのに、最もよく使用されます。そのような行列のすべての特異値を算出する際、svd(full(A)) は通常 svds(A,min(size(A))) より良い実行結果を得ることができます。

すべて展開する

スパース行列の特異値

west0479 は、実数の 479 行 479 列スパース行列です。関数 svd は、479 個のすべての特異値を計算します。関数 svds は、最大と最小の特異値のみ選択します。

load west0479
s = svd(full(west0479));
sl = svds(west0479,4);
ss = svds(west0479,6,0);
Warning: NORMEST did not converge for 100 iterations with tolerance 1e-06 

以下のプロットは、関数 svdsvds で計算した west0479 の特異値を示します。

subplot(2,1,1)
plot(s(1:4),'ks'), hold on
plot(sl,'k+'), hold off
title('4 largest singular values of west0479')
legend('svd(A)','svds(A,4)')
set(gca,'XLim',[0.5 4.5])

subplot(2,1,2)
plot(s(end-5:end),'ks'), hold on
plot(ss,'k+'), hold off
title('6 smallest singular values of west0479')
legend('svd(A)','svds(A,6,0)')
set(gca,'XLim',[0.5 6.5])

west0479 の最大特異値は、やや異なる方法で計算されます。

svds(west0479,1)
max(svd(full(west0479)))
norm(full(west0479))
ans =

   3.1895e+05


ans =

   3.1895e+05


ans =

   3.1895e+05

または、次のようにして最大の特異値を推定します。

normest(west0479)
Warning: NORMEST did not converge for 100 iterations with tolerance 1e-06 

ans =

   3.1854e+05

詳細

すべて展開する

アルゴリズム

svds(A,k) は、B = [0 A; A' 0]k 個の最大固有値と対応する固有ベクトルを求めるために、eigs を使用します。

svds(A,k,0) は、B = [0 A; A' 0]2k 個の最小固有値と固有ベクトルを求めるために、eigs を使用し、k 個の正の固有値と固有ベクトルを選択します。

参考

|

この情報は役に立ちましたか?