数値行列 m の特異値分解を行列のリスト{u,σ,v}として与える.ただし,σ は対角行列であり m はu.σ.ConjugateTranspose[v]と書くことができる.
SingularValueDecomposition[{m,a}]
a に対する m の一般化された特異値分解を与える.
SingularValueDecomposition[m,spec]
spec で指定される最大特異値に関連する特異値分解を与える.
SingularValueDecomposition
数値行列 m の特異値分解を行列のリスト{u,σ,v}として与える.ただし,σ は対角行列であり m はu.σ.ConjugateTranspose[v]と書くことができる.
SingularValueDecomposition[{m,a}]
a に対する m の一般化された特異値分解を与える.
SingularValueDecomposition[m,spec]
spec で指定される最大特異値に関連する特異値分解を与える.
詳細とオプション
- 行列 m は矩形行列でもよい.
- σ の対角成分は,m の特異値である.
- SingularValueDecompositionはSingularValueListによって除去される特異値をゼロとする.
- オプションToleranceは,SingularValueListにおけるようにどの特異値をゼロとみなすのかの決定に使用される. »
- u と v は列正規直交行列で,その転置は正規直交ベクトルのリストと考えられる.
- SingularValueDecomposition[{m,a}]は,m が u.w.ConjugateTranspose[v]として,また a が ua.wa.ConjugateTranspose[v]として書けるような行列{{u,ua},{w,wa},v}のリストを与える. »
- 第2引数 spec は以下の設定でよい.
-
k k 個の最大特異値に対応する分解を返す UpTo[k] 使用可能な最初の k 個の最大特異値の分解を返す "Thin" 最も大きいMin[Dimensions[m]]個の特異値を用いた薄い特異値分解を返す - TargetStructure->"Structured"の設定のとき,SingularValueDecomposition[m]は行列{u,σ,v}を構造化行列として返す.
例題
すべて開く すべて閉じる例 (3)
{u, σ, v} = SingularValueDecomposition[(| | |
| - | - |
| 1 | 2 |
| 1 | 2 |)]u.σ.Transpose[v]//MatrixForm{u, σ, v} = SingularValueDecomposition[(| | |
| --- | --- |
| 0.5 | 1 |
| 2 | 2.5 |)]σ//MatrixFormu.σ.Transpose[v]{u, σ, v} = SingularValueDecomposition[(| | |
| --- | --- |
| 1.2 | 3.4 |
| 5.6 | 7.8 |
| 9.0 | 1.2 |)]MatrixForm /@ {u, σ, v}u.σ.Transpose[v]//MatrixFormスコープ (18)
基本的な用法 (7)
SingularValueDecomposition[(| | | |
| --- | --- | --- |
| 1.1 | 1.3 | 2.1 |
| 2.2 | 2.2 | 3.3 |
| 3.3 | -3 | 4.7 |)]MatrixForm /@ %MatrixForm /@ SingularValueDecomposition[(| | |
| ----------- | ----------- |
| 0.5 + 0.5 I | 1.1 |
| -I | 3.2 - 4.5 I |)]SingularValueDecomposition[{{2, 3}, {0, 2}}]MatrixForm /@ SingularValueDecomposition[MatrixExp[RandomReal[1, {2, 2}, WorkingPrecision -> 12]]]Simplify[SingularValueDecomposition[(| | |
| --------- | - |
| Sqrt[2] x | 1 |
| 0 | 1 |)], x∈ℝ]mat = RandomReal[{0, 9}, {1000, 1000}];AbsoluteTiming[SingularValueDecomposition[mat];]MatrixForm /@ SingularValueDecomposition[(| | | |
| --- | --- | --- |
| 1.1 | 2 | 5 |
| 3 | -11 | 4.2 |)]特異値の部分集合 (5)
行列の大きい方から3つの特異値に関連付けられた特異値分解を求める:
m = (| | | | | |
| --- | --- | ---- | ----- | ------ |
| 0.5 | 0.5 | 0.5 | 0 | 0 |
| 1. | 2. | 4. | 8. | 0 |
| 1.5 | 4.5 | 13.5 | 40.5 | 121.5 |
| 0 | 8. | 32. | 128. | 512. |
| 0 | 0 | 62.5 | 312.5 | 1562.5 |);{u, σ, v} = SingularValueDecomposition[m, 3];
Map[MatrixForm, {u, σ, v}]//Chopこれらの行列は,完全分解とは異なって行列のどの部分も厳密には再生しない:
m - u.σ.ConjugateTranspose[v]//MatrixForm小さい方から3つの特異値に関連付けられた特異値分解を求める:
MatrixForm /@ SingularValueDecomposition[m, -3]m = {{0.5, 1., 1.5}, {2., 2.5, 3.}, {3.5, 4., 4.5}};{ut, σt, vt} = SingularValueDecomposition[m, MatrixRank[m]]m == ut.σt.Transpose[vt]MatrixForm /@ SingularValueDecomposition[m]m = {{1.2, 3.4}, {5.6, 7.8}, {9.0, 1.2}};MatrixForm /@ ({ut, σt, vt} = SingularValueDecomposition[m, "Thin"])SquareMatrixQ[σt]Length[σt] == Min[Dimensions[m]]この分解は,行列を再構築するために十分な情報をまだ持っている:
m == ut.σt.Transpose[vt]MatrixForm /@ SingularValueDecomposition[m]大きい方から3つ(それより少なければできるだけたくさん)の特異値に関連付けられた分解を求める:
MatrixForm /@ SingularValueDecomposition[(| | | | | |
| --- | --- | --- | --- | --- |
| 0.5 | 1. | 1.5 | 2. | 2.5 |
| 2. | 2.5 | 3. | 3.5 | 4. |
| 3.5 | 4. | 4.5 | 5. | 5.5 |
| 4. | 4.5 | 5. | 5.5 | 6. |), UpTo[3]]mat = {{(7/2), 0, (1/2), 0}, {0, 3, 0, 1}, {(1/2), 0, (7/2), 0}, {0, 1, 0, 3}};SingularValueList[mat]繰り返される特異値は,部分分解を行う場合は別々に数えられる:
MatrixForm /@ SingularValueDecomposition[mat, 3]MatrixForm /@ SingularValueDecomposition[mat, -3]一般化された特異値分解 (2)
m = {{1.5, 1.3}, {3.1, 2.2}};a = {{1.1, 5.1}, {4.2, 3.4}};{{u, ua}, {σ, σa}, v} = SingularValueDecomposition[{m, a}];
MatrixForm /@ {u, ua, σ, σa, v}{m == u.σ.ConjugateTranspose[v], a == ua.σa.ConjugateTranspose[v]}m = (| | |
| ---------------------------------------- | ---------------------------------------- |
| 4.641175490606916 + 7.207263282382337 I | 2.522671922520866 + 8.989217121399136 I |
| 4.114478069008367 + 7.010706036954508 I | 8.95961276370625 + 3.569738897382109 I |
| 4.405169936758572 + 4.4509297530197465 I | 9.145107926643146 + 6.3767022076415465 I |);a = (| | |
| --------------------------------------- | ---------------------------------------- |
| 7.341517476299638 + 9.810565178638917 I | 8.24181899398409 + 3.4570598473462972 I |
| 7.775955216608212 + 1.68269060515731 I | 3.944961113408187 + 1.4889990223210265 I |
| 6.431377195364613 + 6.245150387114993 I | 7.026661544586792 + 1.0790173484547747 I |);{{u, ua}, {σ, σa}, v} = SingularValueDecomposition[{m, a}];
MatrixForm /@ {u, ua, σ, σa, v}//Chop{m == u.σ.ConjugateTranspose[v], a == ua.σa.ConjugateTranspose[v]}特殊行列 (4)
SparseArray[{{1, 3} -> 2, {2, 2} -> 3, {3, 1} -> 1, {4, 2} -> 5}, {4, 4}]MatrixForm /@ SingularValueDecomposition[%]Block[{n = 200}, SparseArray[{{i_, i_} -> -2.,
{i_, j_} /; Abs[i - j] == 1 -> 1.}, n]]{u, σ, v} = SingularValueDecomposition[%, 3, Method -> {"Arnoldi", MaxIterations -> 3000}];ListPlot[Transpose[v]]SymmetrizedArray[{{1, 1} -> 2, {1, 2} -> 1}, {2, 2}, Symmetric[All]]SingularValueDecomposition[%]QuantityArray[{{1, 2}, {3, 4}}, {"Meters", "Meters"}]MatrixForm /@ SingularValueDecomposition[%]//N{u, σ, v} = SingularValueDecomposition[IdentityMatrix[3]];
Map[MatrixForm, {u, σ, v}]u.σ.Transpose[v] == IdentityMatrix[3]
と
が恒等行列になるように選ばれた.この分解は一意ではない:
ui = vi = IdentityMatrix[3];
ui.σ.Transpose[vi] == IdentityMatrix[3]HilbertMatrixの特異値分解:
svd = SingularValueDecomposition[HilbertMatrix[3]];
MatrixForm /@ N[svd]オプション (3)
TargetStructure (2)
ma = RandomReal[1, {6, 4}]TargetStructure->"Dense"のとき,SingularValueDecompositionの結果は3つの密な行列のリストである:
SingularValueDecomposition[ma, TargetStructure -> "Dense"]TargetStructure->"Structured"のとき,SingularValueDecompositionの結果はOrthogonalMatrixオブジェクトとDiagonalMatrixを含むリストである:
SingularValueDecomposition[ma, TargetStructure -> "Structured"]ma = RandomComplex[1 + I, {6, 4}]TargetStructure->"Dense"のとき,SingularValueDecompositionの結果は3つの密な行列のリストである:
SingularValueDecomposition[ma, TargetStructure -> "Dense"]TargetStructure->"Structured"のとき,SingularValueDecompositionの結果は2つのUnitaryMatrixオブジェクトとDiagonalMatrixを含むリストである:
SingularValueDecomposition[ma, TargetStructure -> "Structured"]アプリケーション (11)
特異値分解の幾何学 (5)
m = (| | |
| ---- | ----- |
| 0.76 | -0.32 |
| 0.26 | -0.75 |);
MatrixForm /@ ({u, σ, v} = SingularValueDecomposition[m])
の動作は回転で,この場合の
軸で発生するように,反射の可能性がある:
ParametricPlot[{Transpose[v].{Cos[θ], Sin[θ]}, {Cos[θ], Sin[θ]}}, {θ, 0, 2π}, IconizedObject[«Plot Options»]]
の動作は各軸に沿った(膨張または収縮の)スケーリングである:
ParametricPlot[{σ.Transpose[v].{Cos[θ], Sin[θ]}, Transpose[v].{Cos[θ], Sin[θ]}}, {θ, 0, 2π}, IconizedObject[«Plot Options»]]
の動作は回転で,この場合には見られないが,ターゲットの空間での反射の可能性がある:
ParametricPlot[{u.σ.Transpose[v].{Cos[θ], Sin[θ]}, σ.Transpose[v].{Cos[θ], Sin[θ]}}, {θ, 0, 2π}, IconizedObject[«Plot Options»]]m = (| | |
| ---- | ---- |
| 0.96 | 0.49 |
| 0.3 | 0.83 |
| 0.72 | 0.39 |);
MatrixForm /@ ({u, σ, v} = SingularValueDecomposition[m])
行列は,
行列による平面での回転の後で,単位円を楕円として3Dのに埋め込む:
addArrows[inMat_, outMat_] := Graphics3D[...]
Show[ParametricPlot3D[{σ.Transpose[v].{Cos[θ], Sin[θ]}, Append[Transpose[v].{Cos[θ], Sin[θ]}, 0]}, {θ, 0, 2π}, IconizedObject[«Plot Options»]], addArrows[σ.Transpose[v], Append[Transpose[v], {0, 0}]]]Show[ParametricPlot3D[{u.σ.Transpose[v].{Cos[θ], Sin[θ]}, σ.Transpose[v].{Cos[θ], Sin[θ]}}, {θ, 0, 2π}, IconizedObject[«Plot Options»]], addArrows[u.σ.Transpose[v], σ.Transpose[v]]]m = {{1.1, -1.3}, {1.2, 2.5}};
MatrixForm /@ ({u, σ, v} = SingularValueDecomposition[m]){{u1, u2}, {v1, v2}} = {Transpose[u], Transpose[v]};Maximize[Norm[m.x], x∈Circle[]]Minimize[Norm[m.x], x∈Circle[]]ParametricPlot[m.{Cos[t], Sin[t]}, {t, 0, 2Pi}, Epilog -> {Thick, {RGBColor[0.880722, 0.611041, 0.142051], Line[{{0, 0}, m.v1}], Dashed, Line[{{0, 0}, v1}]}, {RGBColor[0.560181, 0.691569, 0.194885], Line[{{0, 0}, m.v2}], Dashed, Line[{{0, 0}, v2}]}, {RGBColor[0.368417, 0.506779, 0.709798], Dashed, Circle[]}}, Ticks -> {{-1.5, 1.5}, Automatic}]Maximize[Norm[x.m], x∈Circle[]]Minimize[Norm[x.m], x∈Circle[]]ParametricPlot[{Cos[t], Sin[t]}.m, {t, 0, 2Pi}, Epilog -> {Thick, {RGBColor[0.880722, 0.611041, 0.142051], Line[{{0, 0}, u1.m}], Dashed, Line[{{0, 0}, u1}]}, {RGBColor[0.560181, 0.691569, 0.194885], Line[{{0, 0}, u2.m}], Dashed, Line[{{0, 0}, u2}]}, {RGBColor[0.368417, 0.506779, 0.709798], Dashed, Circle[]}}, Ticks -> {{-1.5, 1.5}, Automatic}]m = (| | |
| --------- | --------- |
| 3 | 3 |
| 4 | -4 |
| 3 Sqrt[3] | 3 Sqrt[3] |);
MatrixForm /@ ({u, σ, v} = SingularValueDecomposition[m]){{u1, u2, u3}, {v1, v2}} = {Transpose[u], Transpose[v]};Maximize[Norm[m.x], x∈Circle[]]Minimize[Norm[m.x], x∈Circle[]]Show[ParametricPlot3D[m.{Cos[t], Sin[t]}, {t, 0, 2Pi}], Graphics3D[{RGBColor[0.880722, 0.611041, 0.142051], Tube[{{0, 0, 0}, m.v1}], RGBColor[0.560181, 0.691569, 0.194885], Tube[{{0, 0, 0}, m.v2}]}]]Maximize[Norm[x.m], x∈Sphere[]]
は
を最小化する.球は平面では圧縮されて楕円になるので,最小値は0である:
Minimize[Norm[x.m], x∈Sphere[]]Maximize[{Norm[x.m], u1.x == 0}, x∈Sphere[]]
,
,
および平面上の単位球の画像を,右側は
を掛けて可視化する:
ParametricPlot[{Cos[p]Sin[t], Sin[p]Sin[t], Cos[t]}.m, {p, 0, 2Pi}, {t, 0, π}, Epilog -> {Thick, {RGBColor[0.880722, 0.611041, 0.142051], Arrow[{{0, 0}, u1.m}]}, {RGBColor[0.560181, 0.691569, 0.194885], Arrow[{{0, 0}, u2.m}]}, {RGBColor[0.922526, 0.385626, 0.209179], AbsolutePointSize[5], Point[u3.m]}}]m = (| | | |
| ------ | ------ | ---- |
| -0.069 | 0.35 | 0.98 |
| 0.50 | -0.072 | 0.64 |
| 0.92 | 0.93 | 0.15 |);
MatrixForm /@ ({u, σ, v} = SingularValueDecomposition[m]){{u1, u2, u3}, {v1, v2, v3}} = {Transpose[u], Transpose[v]};Maximize[Norm[m.x], x∈Sphere[]]Maximize[{Norm[m.x], x.v1 == 0}, x∈Sphere[]]Minimize[Norm[m.x], x∈Sphere[]]{Show[ParametricPlot3D[{Cos[p] Sin[t], Sin[p] Sin[t], Cos[t]}, {p, 0, 2 Pi}, {t, 0, π}, IconizedObject[«Plot Options»]], Graphics3D[Riffle[{RGBColor[0.5, 0, 0.5], RGBColor[0.560181, 0.691569, 0.194885], RGBColor[0.922526, 0.385626, 0.209179]}, Arrow[Tube[{{0, 0, 0}, #}]]& /@ Transpose[v]]], ImageSize -> 250], Show[ParametricPlot3D[m.{Cos[p] Sin[t], Sin[p] Sin[t], Cos[t]}, {p, 0, 2 Pi}, {t, 0, π}, IconizedObject[«Plot Options»]], Graphics3D[Riffle[{RGBColor[0.5, 0, 0.5], RGBColor[0.560181, 0.691569, 0.194885], RGBColor[0.922526, 0.385626, 0.209179]}, Arrow[Tube[{{0, 0, 0}, m.#}]]& /@ Transpose[v]]], ImageSize -> 250]}Maximize[Norm[x.m], x∈Sphere[]]Maximize[{Norm[x.m], x.u1 == 0}, x∈Sphere[]]Minimize[Norm[x.m], x∈Sphere[]]{Show[ParametricPlot3D[{Cos[p] Sin[t], Sin[p] Sin[t], Cos[t]}, {p, 0, 2 Pi}, {t, 0, π}, IconizedObject[«Plot Options»]], Graphics3D[Riffle[{RGBColor[0.5, 0, 0.5], RGBColor[0.560181, 0.691569, 0.194885], RGBColor[0.922526, 0.385626, 0.209179]}, Arrow[Tube[{{0, 0, 0}, #}]]& /@ Transpose[u]]], ImageSize -> 250], Show[ParametricPlot3D[{Cos[p] Sin[t], Sin[p] Sin[t], Cos[t]}.m, {p, 0, 2 Pi}, {t, 0, π}, IconizedObject[«Plot Options»]], Graphics3D[Riffle[{RGBColor[0.5, 0, 0.5], RGBColor[0.560181, 0.691569, 0.194885], RGBColor[0.922526, 0.385626, 0.209179]}, Arrow[Tube[{{0, 0, 0}, #.m}]]& /@ Transpose[u]]], ImageSize -> 250]}最小二乗と曲線のフィット (6)
線形系
に解がないなら,最適な近似解は最小二乗解である.それは
の解である.ただし,
は
の列空間への
の正射影で,特異分解を使って計算できる.次の
と
について考える:
m = (| | |
| - | -- |
| 1 | 2 |
| 3 | -4 |
| 1 | -1 |);
b = {0, -2, 1};LinearSolve[m, b]
のコンパクトな特異値分解の
行列を求める.その列は正規直交で
をスパンする:
u = First[SingularValueDecomposition[m, MatrixRank[m]]];
u//N//MatrixFormbPerp = u.Transpose[u].b//FullSimplify{b1, b2} = Transpose[u](Transpose[u].b);
Graphics3D[...]LinearSolve[m, bPerp]LeastSquaresを使って結果を確認する:
LeastSquares[m, b]次の
と
について特異値分解だけを使って最小二乗問題を解く:
m = (| | | |
| ------------ | ----------- | ------------ |
| 4. + 0.5 I | 3. + 0.5 I | 4.5 + 0.5 I |
| 3.5 + 0.5 I | 4. + 0.5 I | 3.5 + 0.5 I |
| -3. - 0.5 I | -5. - 0.5 I | -2.5 - 0.5 I |);
b = {0, -2, 1 + I};非零の特異値だけが保持されるコンパクトな特異値分解を計算する:
MatrixForm /@ ({u, σ, v} = SingularValueDecomposition[m, MatrixRank[m]])x = v.Inverse[σ].ConjugateTranspose[u].bm.x == u.ConjugateTranspose[u].bしたがって,LeastSquaresで確認されるように,
が最小二乗問題の解である:
x == LeastSquares[m, b]次の
と
についての最小二乗問題を,特異値分解の
行列だけを使った
の列空間への射影と完全分解を使って直接解を求めるという2つの異なる方法で解く.結果を比較し,説明する:
m = (| | | |
| - | - | - |
| 1 | 5 | 4 |
| 2 | 6 | 4 |
| 3 | 7 | 4 |
| 4 | 8 | 4 |);
b = {0, -2, 1, 2};{u, σ, v} = SingularValueDecomposition[m, MatrixRank[m]]//FullSimplify;bPerp = u.Transpose[u].b//FullSimplifyxPerp = LinearSolve[m, bPerp]
と
の両方が実数値なので,直接解は
を使って求めることができる:
x = v.Inverse[σ].Transpose[u].b//FullSimplifyxとxPerpは異なるが,m.x==m.xPerpなのでどちらも最小二乗問題を解く:
m.xPerp == m.x2つの解はNullSpace[m]の要素分だけ異なる:
x - xPerpNullSpace[m]LeastSquares[m,b]は直接法を使って解を与える点に注意のこと:
x == LeastSquares[m, b]m = {{1, 1}, {1, 2}, {1, 3}};
b = {{7, 1}, {7, 2}, {8, 3}};{u, σ, v} = SingularValueDecomposition[m, MatrixRank[m]];
v.Inverse[σ].Transpose[u].b//FullSimplifyこの結果はLeastSquares[m,b]を使っても得ることができる:
LeastSquares[m, b]Minimizeを使って答を確認する:
Minimize[Norm[m.{{w, x}, {y, z}} - b, "Frobenius"], {w, x, y, z}]SingularValueDecompositionを使ってデータに最もフィットする曲線が求められる.次のデータについて考える:
data = IconizedObject[«Data»];
ListPlot[data]{x, y} = Extract[data, {{All, 1}, {All, 2}}];直線
にフィットするために,列が
と
の計画行列を構築する:
m = Map[x |-> {1, x}, x];線形最小二乗フィットのために薄い特異値分解を使って係数
と
を得る:
{u, σ, v} = SingularValueDecomposition[m, 2];
{a, b} = v.Inverse[σ].Transpose[u].yFitを使って係数を確認する:
Fit[data, {1, s}, s]Show[Plot[a + b x, {x, 0, 1}], ListPlot[data]]data = IconizedObject[«Data»];
ListPlot[data]{x, y} = Extract[data, {{All, 1}, {All, 2}}];曲線
にフィットするために,列が
,
,
の計画行列を構築する:
m = DesignMatrix[data, {1, , ^ 2}, ];{u, σ, v} = SingularValueDecomposition[m, 3];
{a, b, c} = v.Inverse[σ].Transpose[u].yFitを使って係数を確認する:
Fit[data, {1, s, s ^ 2}, s]Show[Plot[a + b x + c x ^ 2, {x, 0, 3}], ListPlot[data, IconizedObject[«plot options»]]]特性と関係 (13)
m の特異値分解{u,σ,v}は m を u.σ.ConjugateTranspose[v]として分解する:
m = RandomComplex[1 + I, {3, 4}];
{u, σ, v} = SingularValueDecomposition[m];
Chop[m - u.σ.ConjugateTranspose[v]]a が分解が{u,σ,v}の n×m 行列なら,u は n×n 行列である:
n = 5;m = 3;a = RandomReal[1, {n, m}];
{u, σ, v} = SingularValueDecomposition[a];
Dimensions[u] == {n, n}Dimensions[v] == {m, m}Dimensions[σ] == {n, m}SingularValueDecomposition[m]は
と
の固有値分解から構築される:
m = (| | | |
| ---- | --- | ---- |
| -5.2 | 0 | -5 |
| 1.7 | 5.4 | -4.3 |);{u, Σ, v} = SingularValueDecomposition[m];EigenvalueDecomposition[m.ConjugateTranspose[m]]を計算する:
{Subscript[t, L], Subscript[d, L]} = EigenvalueDecomposition[m . ConjugateTranspose[m]];{u//MatrixForm, Subscript[t, L]//MatrixForm}{Subscript[t, R], Subscript[d, R]} = EigenvalueDecomposition[ConjugateTranspose[m].m];{v//MatrixForm, Subscript[t, R]//MatrixForm}
は列よりも行が少ないため,
は
(
の場合とは対照的である)となる:
MatrixForm /@ {Σ, Sqrt[Subscript[d, L]]}最初の右特異ベクトルは,すべての単位ベクトル上で
を最大化することで求めるられる:
m = {{0.74, 0.43, 0.28}, {0.63, 0.74, 0.4}, {0.47000000000000003, 0.9400000000000001, 0.55}};v1 = ArgMax[Norm[m.x], x∈Sphere[{0, 0, 0}]]続く各ベクトルはその前のすべてのベクトルに対して垂直であるという制約条件を持つマキシマイザである:
v2 = ArgMax[{Norm[m.x], v1.x == 0}, x∈Sphere[{0, 0, 0}]]v3 = ArgMax[{Norm[m.x], v1.x == 0 && v2.x == 0}, x∈Sphere[{0, 0, 0}]]
をSingularValueDecompositionで求まった
と比較する.両者は符号まで等しい:
{u, σ, v} = SingularValueDecomposition[m];
MatrixForm /@ {Transpose[{v1, v2, v3}], v}u1 = ArgMax[Norm[x.m], x∈Sphere[{0, 0, 0}]];
u2 = ArgMax[{Norm[x.m], u1.x == 0}, x∈Sphere[{0, 0, 0}]];
u3 = ArgMax[{Norm[x.m], u1.x == 0 && u2.x == 0}, x∈Sphere[{0, 0, 0}]];
MatrixForm /@ {Transpose[{u1, u2, u3}], u}{Diagonal[σ], Norm /@ {m.v1, m.v2, m.v3}, Norm /@ {u1.m, u2.m, u3.m}}//MatrixForm
が
の次元よりも小さいなら,
と
の最初の
列は
で関連付けられている:
m = RandomInteger[1, {3, 4}];
{u, σ, v} = SingularValueDecomposition[m];
Table[σ[[i, i]]u[[All, i]] == m.v[[All, i]], {i, 3}]//FullSimplifyTable[σ[[i, i]]v[[All, i]] == u[[All, i]].m, {i, 3}]//FullSimplifym が正方行列なら,
の対角成分の積はAbs[Det[m]]に等しい:
m = RandomReal[1, {5, 5}];
Times@@Diagonal[SingularValueDecomposition[m][[2]]] == Abs[Det[m]]m = (| | | |
| ------------------- | ------------------- | -------------------- |
| 0 | -0.2785693493596917 | -0.12624545596692704 |
| 0.2785693493596917 | 0 | -0.08798023011262301 |
| 0.12624545596692704 | 0.08798023011262301 | 0 |);
NormalMatrixQ[m]
が半正定値エルミート行列でなければ,ベクトルは異なる順序で出現する:
{u, σ, v} = SingularValueDecomposition[m]//Chop;
{u//MatrixForm, v//MatrixForm}
の対角項はAbs[Eigenvalues[m]]に等しい:
Diagonal[σ] == Chop[Abs[Eigenvalues[m]]]正定値エルミート行列
については,SingularValueDecompositionとEigenvalueDecompositionは一致する:
m = (| | | |
| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- |
| 3.830367325120047 + 0. I | 0.07350793635153963 - 0.12698026356721126 I | -0.7939695217640885 - 0.002520762074857519 I |
| 0.07350793635153963 + 0.12698026356721126 I | 2.4790235245220367 + 0. I | -0.046544276125373374 - 0.5373197314346221 I |
| -0.7939695217640885 + 0.002520762074857519 I | -0.046544276125373374 + 0.5373197314346221 I | 1.042188083119043 + 0. I |);
{u, σ, v} = SingularValueDecomposition[m];
{t, d} = EigenvalueDecomposition[m];
PositiveDefiniteMatrixQ[m] && HermitianMatrixQ[m]u - v//Chopその列は
の単位固有ベクトルなので,位相の違いを除いて
と同じである:
Abs[t / u]σ == dMatrixRank[m]は非零の特異値の数に等しい:
m = RandomInteger[1, {3, 3}];
{u, σ, v} = SingularValueDecomposition[m];
MatrixRank[m] == Length[Select[Diagonal[σ], x |-> x > 0]]非零の固有値のみを保持するコンパクトな分解はPseudoInverse[m]を計算することができる:
m = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};{u, σ, v} = SingularValueDecomposition[m, MatrixRank[m]];PseudoInverse[m] == v.Inverse[σ].ConjugateTranspose[u]//FullSimplify2つのベクトルの外積である行列 m はMatrixRank[m]==1である:
x1 = {1, 2, 3};x2 = {4, 5};
m = Outer[Times, x1, x2]MatrixRank[m]{u, σ, v} = SingularValueDecomposition[m, 1]σ[[1, 1]] == Norm[x1]Norm[x2]対応する右と左の特異ベクトルは正規化された入力ベクトルである:
{u[[All, 1]] == (x1/Norm[x1]), v[[All, 1]] == (x2/Norm[x2])}SingularValueDecomposition[{m,a}]は m を u.w.ConjugateTranspose[v]として分解する:
m = RandomComplex[1 + I, {3, 4}];
a = RandomComplex[1 + I, {2, 4}];
{{u, ua}, {w, wa}, v} = SingularValueDecomposition[{m, a}];
Chop[m - u.w.ConjugateTranspose[v]]そして a を ua.wa.ConjugateTranspose[v]として分解する:
Chop[a - ua.wa.ConjugateTranspose[v]]SingularValueDecomposition[{m,a}]はEigensystem[{m.m,a.a}]と関連があるかもしれない:
m = (| | | |
| ------------------------------------------ | ------------------------------------------- | ------------------------------------------ |
| 0.9753346860069796 + 0.32225791006850857 I | 0.8493715230848708 + 0.39224803196754077 I | 0.5839367017062629 + 0.11364379814173331 I |
| 0.8359555932254314 + 0.7712743289239168 I | 0.48928975439484756 + 0.48056805668910774 I | 0.3042001847125009 + 0.11991764017567741 I |
| 0.4727880193915137 + 0.9358524506075876 I | 0.9540225347992926 + 0.545522455352986 I | 0.1542301183700603 + 0.02063002461235164 I |);
a = (| | | |
| --------------------------------------------- | ------------------------------------------ | ------------------------------------------- |
| 0.0002671678119234855 + 0.17886262704796918 I | 0.23822746561953023 + 0.6255181037100543 I | 0.8983010971084864 + 0.06465535916883036 I |
| 0.4125835170325072 + 0.6294871356437639 I | 0.17227933769920623 + 0.5053818767600351 I | 0.20608708391474617 + 0.7815903406108518 I |
| 0.19927550189059895 + 0.16958348510576626 I | 0.6395479165043441 + 0.7231362087260429 I | 0.030839103381344435 + 0.5213431075486419 I |);
{{u, ua}, {w, wa}, v} = SingularValueDecomposition[{m, a}];
{λ, vλ} = Eigensystem[{m.m, a.a}];{Diagonal[w], (Sqrt[λ]/Sqrt[1 + λ])}{Diagonal[wa], (1/Sqrt[1 + λ])}v の列はConjugate[Inverse[vλ]]の列のスケールされた倍数である:
r = (v/Conjugate[Inverse[vλ]])スケーリングの大きさは w と vλ.m.m.vλの対応する対角成分の比である:
Abs[First[r] / (Diagonal[Sqrt[vλ.m.m.vλ]]/Diagonal[w])]同様に,wa と vλ.ma.ma.vλの対応する対角成分の比でもある:
Abs[First[r] / (Diagonal[Sqrt[vλ.a.a.vλ]]/Diagonal[wa])]考えられる問題 (1)
m = RandomReal[1, {2, 1000}];完全な特異値分解は,u が1000×1000行列なので非常に大きくなる:
Map[Dimensions, SingularValueDecomposition[m]]{u, σ, v} = SingularValueDecomposition[m, Min[Dimensions[m]]];
Map[Dimensions, {u, σ, v}]Max[Abs[m - u.σ.ConjugateTranspose[v]]]テクニカルノート
履歴
2003 で導入 (5.0) | 2014 で更新 (10.0) ▪ 2015 (10.3) ▪ 2024 (14.0) ▪ 2025 (14.3)
テキスト
Wolfram Research (2003), SingularValueDecomposition, Wolfram言語関数, https://reference.wolfram.com/language/ref/SingularValueDecomposition.html (2025年に更新).
CMS
Wolfram Language. 2003. "SingularValueDecomposition." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2025. https://reference.wolfram.com/language/ref/SingularValueDecomposition.html.
APA
Wolfram Language. (2003). SingularValueDecomposition. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/SingularValueDecomposition.html
BibTeX
@misc{reference.wolfram_2026_singularvaluedecomposition, author="Wolfram Research", title="{SingularValueDecomposition}", year="2025", howpublished="\url{https://reference.wolfram.com/language/ref/SingularValueDecomposition.html}", note=[Accessed: 13-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_singularvaluedecomposition, organization={Wolfram Research}, title={SingularValueDecomposition}, year={2025}, url={https://reference.wolfram.com/language/ref/SingularValueDecomposition.html}, note=[Accessed: 13-November-2026]}