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)