svd
説明
[___] = svd(
は、A
,"econ")A
のエコノミーサイズの分解を生成します。A
が m 行 n 列の行列である場合、次のようになります。
m > n —
U
の最初の n 列のみが計算され、S
は n 行 n 列になります。m = n —
svd(A,"econ")
はsvd(A)
と等価です。m < n —
V
の最初の m 列のみが計算され、S
は m 行 m 列になります。
[___] = svd(
は、A
,0)A
についての異なるエコノミーサイズの分解を生成します。A
が m 行 n 列の行列である場合、次のようになります。
m > n —
svd(A,0)
はsvd(A,"econ")
と等価です。m <= n —
svd(A,0)
はsvd(A)
と等価です。
この構文は推奨されません。代わりに "econ"
オプションを使用してください。
例
固定小数点行列の特異値
フル ランク固定小数点行列の特異値を計算します。
A = fi([1 0 1; -1 -2 0; 0 1 -1])
A = 1 0 1 -1 -2 0 0 1 -1 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 14
特異値を計算します。
s = svd(A)
s = 2.4605 1.6996 0.2392 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 16
特異値が列ベクトルで降順で返されます。
固定小数点の特異値分解
方形固定小数点行列 A
の特異値分解を求めます。
方形行列 A
を定義します。
m = 4;
n = 2;
rng('default');
A = fi(10*randn(m,n))
A = 5.3770 3.1875 18.3389 -13.0771 -22.5889 -4.3359 8.6221 3.4258 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 10
固定小数点行列 A
の特異値分解を求めます。
[U,S,V] = svd(A)
U = 0.1591 0.2717 -0.9387 -0.1403 0.6397 -0.7548 -0.1219 0.0790 -0.7049 -0.5057 -0.3224 0.3786 0.2619 0.3174 0 0.9114 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 30
S = 31.0148 0 0 14.1290 0 0 0 0 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 16
V = 0.9920 0.1259 -0.1259 0.9920 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 30
関係 A = U*S*V'
が成り立つことを確認します。
U*S*V'
ans = 5.3770 3.1873 18.3390 -13.0773 -22.5890 -4.3360 8.6221 3.4257 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 99 FractionLength: 76
エコノミーサイズの分解
方形固定小数点行列の完全な分解とエコノミーサイズの分解を計算します。
固定小数点行列 A
を定義します。
m = 5;
n = 3;
rng('default');
A = fi(10*randn(m,n))
A = 5.3770 -13.0762 -13.4980 18.3379 -4.3359 30.3496 -22.5879 3.4258 7.2539 8.6211 35.7832 -0.6309 3.1875 27.6953 7.1465 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 9
完全な分解を計算します。
[U,S,V] = svd(A)
U = 0.3081 -0.0950 0.4507 0.7929 0.2534 -0.1437 0.9533 -0.0877 0.2415 -0.0675 -0.0224 -0.2106 -0.8423 0.4887 -0.0831 -0.7299 -0.1909 0.2773 0.2722 -0.5290 -0.5926 -0.0375 -0.0541 0 0.8028 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 30
S = 48.4483 0 0 0 36.6720 0 0 0 26.9112 0 0 0 0 0 0 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 16
V = -0.1786 0.5444 0.8196 -0.9497 -0.3131 0.0009 -0.2571 0.7783 -0.5729 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 30
エコノミーサイズの分解を計算します。
[U,S,V] = svd(A,"econ")
U = 0.3081 -0.0950 0.4507 -0.1437 0.9533 -0.0878 -0.0224 -0.2106 -0.8423 -0.7299 -0.1909 0.2773 -0.5926 -0.0374 -0.0541 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 30
S = 48.4485 0 0 0 36.6720 0 0 0 26.9112 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 16
V = -0.1786 0.5444 0.8196 -0.9497 -0.3131 0.0010 -0.2571 0.7783 -0.5729 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 30
想定される結果 A = U*S*V'
を使用して、計算の相対誤差を求めます。
relativeError = norm(double(U*S*V'-A))/norm(double(A))
relativeError = 1.0359e-05
特異値の出力形式の制御
3 行 3 列の魔方陣行列を作成し、特異値分解を計算します。既定では、出力を複数指定した場合、関数 svd
は特異値を対角行列で返します。
行列 A
を定義します。
m = 3; n = m; A = fi(magic(m))
A = 8 1 6 3 5 7 4 9 2 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 11
特異値分解を計算します。
[U,S,V] = svd(A)
U = 0.5774 -0.7071 -0.4083 0.5773 -0.0000 0.8165 0.5773 0.7071 -0.4082 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 30
S = 15.0000 0 0 0 6.9283 0 0 0 3.4642 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 16
V = 0.5774 -0.4082 -0.7071 0.5773 0.8165 0.0000 0.5773 -0.4082 0.7071 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 30
"vector"
オプションを指定して、特異値を列ベクトルで返します。
[U,S,V] = svd(A,"vector")
U = 0.5774 -0.7071 -0.4083 0.5773 -0.0000 0.8165 0.5773 0.7071 -0.4082 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 30
S = 15.0000 6.9283 3.4642 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 16
V = 0.5774 -0.4082 -0.7071 0.5773 0.8165 0.0000 0.5773 -0.4082 0.7071 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 32 FractionLength: 30
S = svd(A)
のように出力引数を 1 つ指定した場合、svd
の動作が切り替わり、既定では列ベクトルで特異値が返されます。その場合は、"matrix"
オプションを指定すると、特異値を対角行列として返すことができます。
入力引数
A
— 入力行列
行列
入力行列。行列として指定します。A
は、固定小数点またはスケーリングされた double の fi
データ型にすることができます。
データ型: fi
複素数のサポート: あり
sigmaForm
— 特異値の出力形式
"vector"
| "matrix"
特異値の出力形式。次の値のいずれかとして指定します。
"vector"
—S
は列ベクトルになります。これは、S = svd(A)
のように出力を 1 つ指定する場合の既定の動作です。"matrix"
—S
は対角行列になります。これは、[U,S,V] = svd(A)
のように出力を複数指定する場合の既定の動作です。
例: [U,S,V] = svd(X,"vector")
は、S
を対角行列ではなく列ベクトルとして返します。
例: S = svd(X,"matrix")
は、S
を列ベクトルではなく対角行列として返します。
データ型: char
| string
出力引数
U
— 左特異ベクトル
行列
左特異ベクトル。行列の列として返されます。
固定小数点データ型は、オーバーフローの回避と精度の向上のために調整されます。詳細については、アルゴリズムを参照してください。
S
— 特異値
対角行列 | 列ベクトル
特異値。対角行列または列ベクトルとして返されます。特異値は非負であり、降順で返されます。
固定小数点データ型は、オーバーフローの回避と精度の向上のために調整されます。詳細については、アルゴリズムを参照してください。
V
— 右特異ベクトル
行列
右特異ベクトル。行列の列として返されます。
固定小数点データ型は、オーバーフローの回避と精度の向上のために調整されます。詳細については、アルゴリズムを参照してください。
ヒント
固定小数点型を完全に制御するには、関数 fixed.svd
を使用します。
アルゴリズム
データ型の伝播
Golub-Kahan-Reinsch
Golub-Kahan-Reinsch アルゴリズムは、シリアル コンピューターで良好に機能する逐次的な手法です。FPGA アプリケーションや ASIC アプリケーションでの並列計算には、関数 fixed.jacobiSVD
を使用します。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
svd
は、純粋な整数の効率的な C コードを生成します。
バージョン履歴
R2022b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)