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 は、固定小数点またはスケーリングされた double の fi データ型にすることができます。
データ型: fi
複素数のサポート: あり
特異値の出力形式。次の値のいずれかとして指定します。
"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
出力引数
ヒント
固定小数点型を完全に制御するには、関数 fixed.svd を使用します。
アルゴリズム
Golub-Kahan-Reinsch アルゴリズムは、シリアル コンピューターで良好に機能する逐次的な手法です。FPGA アプリケーションや ASIC アプリケーションでの並列計算には、関数 fixed.jacobiSVD を使用します。
拡張機能
svd は、純粋な整数の効率的な C コードを生成します。
バージョン履歴
R2022b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)