行列 m のコレスキー(Cholesky)分解を与える.
CholeskyDecomposition
行列 m のコレスキー(Cholesky)分解を与える.
詳細とオプション
- 行列 m は数値的でも記号的でもよいが,エルミート(Hermite)の正定でなければならない.
- CholeskyDecomposition[m]はConjugateTranspose[u].u==mとなるような上三角行列 u を与える.
- TargetStructure->"Structured"の設定のとき,CholeskyDecomposition[m] は u をUpperTriangularMatrixとして返す.
例題
すべて開く すべて閉じる例 (2)
CholeskyDecomposition[(| | |
| - | - |
| 2 | 1 |
| 1 | 2 |)]ConjugateTranspose[%].%//MatrixFormPositiveDefiniteMatrixQ[(| | |
| - | - |
| 2 | 1 |
| 1 | 2 |)]CholeskyDecomposition[(| | | |
| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- |
| 2.4138543944035415 + 0. I | -2.4654688123131883 - 1.922250972681738 I | 1.1102409170396648 + 2.2005827949357206 I |
| -2.4654688123131883 + 1.922250972681738 I | 6.25162395665795 + 0. I | -4.11767176535921 - 1.3474244699923004 I |
| 1.1102409170396648 - 2.2005827949357206 I | -4.11767176535921 + 1.3474244699923004 I | 3.433935295685307 + 0. I |)]//MatrixFormUpperTriangularMatrixQ[%]スコープ (11)
基本的な用法 (7)
m = {{0.5, 0.3, 0.4}, {0.3, 1.1, -0.2}, {0.4, -0.2, 0.7}};u = CholeskyDecomposition[m]m == Transpose[u].uCholeskyDecomposition[{{2, I}, {-I, 3}}]CholeskyDecompositionは入力がエルミート行列または正定値行列ではない場合はそれを検出する:
m = {{2, I}, {I, 3}};
CholeskyDecomposition[m]{HermitianMatrixQ[m], PositiveDefiniteMatrixQ[m]}CholeskyDecompositionを厳密行列に使う:
u = CholeskyDecomposition[(| | | |
| ---- | --------- | --- |
| 5E^2 | 14 | 15 |
| 14 | Sqrt[863] | 8 |
| 15 | 8 | 18π |)]u^.u//MatrixFormRandomVariate[WishartMatrixDistribution[7, {{1, 1 / 2, 0}, {1 / 2, 2, -1 / 2}, {0, -1 / 2, 1}}], WorkingPrecision -> 15]CholeskyDecomposition[%]//MatrixFormCholeskyDecompositionを記号行列に使う:
CholeskyDecomposition[(| | |
| - | - |
| a | b |
| b | a |)]結果を確かめるときは,行列が正定値行列であるという条件が満たされていなければならない:
FullSimplify[ConjugateTranspose[%].%, a > b && a > -b]Eigenvalues[(| | |
| - | - |
| a | b |
| b | a |)]A = RandomReal[1, {1000, 1000}];
mat = A.A^;AbsoluteTiming[CholeskyDecomposition[mat];]実対称正定値CenteredInterval行列のコレスキー分解:
rm = Map[CenteredInterval, RandomReal[{-10, 10}, {3, 3}, WorkingPrecision -> 10], {2}];
(m = rm.Transpose[rm])//MatrixForm(q = CholeskyDecomposition[m])//MatrixFormMapThread[IntervalMemberQ, {Transpose[q].q, m}, 2]//MatrixForm特殊行列 (4)
CholeskyDecomposition[SparseArray[Automatic, {5, 5}, 0,
{1, {{0, 5, 10, 15, 20, 25}, {{1}, {2}, {3}, {4}, {5}, {1}, {2}, {3}, {4}, {5}, {1}, {2}, {3},
{4}, {5}, {1}, {2}, {3}, {4}, {5}, {2}, {3}, {4}, {5}, {1}}},
{3, 3, 3, 2, 1, 3, 4, 4, 3, 2, 3, 4, 5, 4, 3, 2, 3, 4, 4, 3, 2, 3, 3, 3, 1}}]]//MatrixForm%.% == SparseArray[Automatic, {5, 5}, 0,
{1, {{0, 5, 10, 15, 20, 25}, {{1}, {2}, {3}, {4}, {5}, {1}, {2}, {3}, {4}, {5}, {1}, {2}, {3},
{4}, {5}, {1}, {2}, {3}, {4}, {5}, {2}, {3}, {4}, {5}, {1}}},
{3, 3, 3, 2, 1, 3, 4, 4, 3, 2, 3, 4, 5, 4, 3, 2, 3, 4, 4, 3, 2, 3, 3, 3, 1}}]SymmetrizedArray[{{1, 1} -> 5, {2, 2} -> 3, {3, 1} -> 2, {3, 3} -> 1}, {3, 3}, Symmetric[All]]CholeskyDecomposition[%]QuantityArrayを構造化行列に使う:
QuantityArray[{{1, 2}, {2, 5}}, "Meters"]CholeskyDecomposition[%]CholeskyDecomposition[IdentityMatrix[3]]HilbertMatrixのコレスキー分解:
m = HilbertMatrix[5];CholeskyDecomposition[m]//MatrixFormオプション (1)
TargetStructure (1)
TargetStructure->"Dense"のとき,結果は密な行列として返される:
CholeskyDecomposition[(| | | | |
| - | - | - | - |
| 1 | 1 | 1 | 1 |
| 1 | 2 | 2 | 2 |
| 1 | 2 | 3 | 3 |
| 1 | 2 | 3 | 4 |), TargetStructure -> "Dense"]TargetStructure->"Structured"のとき,結果はUpperTriangularMatrixとして返される:
CholeskyDecomposition[(| | | | |
| - | - | - | - |
| 1 | 1 | 1 | 1 |
| 1 | 2 | 2 | 2 |
| 1 | 2 | 3 | 3 |
| 1 | 2 | 3 | 4 |), TargetStructure -> "Structured"]アプリケーション (2)
三角線形系は,最初の方程式には一つの変数があり,続く方程式で変数が一つづつ追加される線形方程式の系である.変数が3つの次の系を変数が6つの2つの三角線形系に書き直す:
system = {3 x - y + z == 3, -x + 3 y == 5, x + 3 z == 7};v = {x, y, z};
m = {{3, -1, 1}, {-1, 3, 0}, {1, 0, 3}};
b = {3, 5, 7};
u = CholeskyDecomposition[m]system == Thread[u.u.v == b]新たな変数
を導入し,
と設定する.結果は
の三角線形系である:
ν = {ξ, ψ, ζ};
tri1 = Reverse[Thread[u.v == ν]];
Column[tri1]tri2 = Thread[u.ν == b];
Column[tri2]6つの三角方程式を一緒にすると
についてもとの方程式系と同じ結果が与えられる:
v /. Solve[Join[tri1, tri2], Join[v, ν]]SolveValues[system, v]コレスキー分解を使うと,例えばモンテカルロシミュレーションにおけるように,多くの独立したランダムな値からの共分散が指定されたランダムなサンプルを作ることができる.希望する共分散行列から始めて下三角行列
を計算する.ここで,
はコレスキー分解である:
cov = (| | | |
| ------------------- | ------------------- | ------------------- |
| 0.5679913970339641 | 0.13175676534111222 | 0.22467465390992986 |
| 0.13175676534111222 | 0.7257156525584264 | 0.685100031070936 |
| 0.22467465390992986 | 0.685100031070936 | 2.64673926689887 |);
l = CholeskyDecomposition[cov]rand = l.#& /@ RandomVariate[NormalDistribution[], {10 ^ 6, 3}];サンプルの共分散は希望する共分散とおよそ3桁目まで一致する:
Covariance[rand]//MatrixForm//NumberForm[#, 3]&特性と関係 (7)
コレスキー分解の入力行列はエルミート行列かつ正定値行列でなければならない:
m = {{4, 3, 2, 1}, {3, 4, 3, 2}, {2, 3, 4, 3}, {1, 2, 3, 4}};
HermitianMatrixQ[m] && PositiveDefiniteMatrixQ[m]u = CholeskyDecomposition[m]ConjugateTranspose[u].u == m を確認する:
ConjugateTranspose[u].u == mCholeskyDecomposition[m]は上三角行列かつ正定値行列である:
CholeskyDecomposition[{{3, 2, 1}, {2, 3, 2}, {1, 2, 3}}]UpperTriangularMatrixQ[%] && PositiveDefiniteMatrixQ[%]c = CholeskyDecomposition[{{3, 2, 1}, {2, 3, 2}, {1, 2, 3}}]s = MatrixFunction[Sqrt, {{3, 2, 1}, {2, 3, 2}, {1, 2, 3}}]//FullSimplifyコレスキー分解は上三角行列であるが,平方根はエルミート行列である:
HermitianMatrixQ[s]{FullSimplify[Det[c] == Det[s]], PositiveDefiniteMatrixQ[s], PositiveDefiniteMatrixQ[c]}実行列
について,
のコレスキー分解は
のQR分解と符号まで一致する:
m = RandomReal[1, {6, 3}];Transpose[m].m のコレスキー分解を求める:
u = CholeskyDecomposition[Transpose[m].m];QRDecomposition[m]を計算する:
{q, r} = QRDecomposition[m];Chop[r Sign[Tr[r, List]] - u]任意の行列
について,
のコレスキー分解は
のQR分解と位相まで一致する:
m = RandomComplex[1 + I, {6, 3}];ConjugateTranspose[m].m のコレスキー分解を求める:
u = CholeskyDecomposition[ConjugateTranspose[m].m];Compute QRDecomposition[m]を計算する:
{q, r} = QRDecomposition[m];Chop[r Sign[Tr[r, List]] - u]エルミート行列のLDLDecompositionは,l が下三角行列,d が対角行列で行列が
となるようなペア
を与える:
m0 = RandomComplex[1 + I, {6, 3}];
m = ConjugateTranspose[m0].m0;
{l, d} = LDLDecomposition[m]コレスキー分解は,正定値行列については,LDLDecompositionから
.
として復元できる:
c1 = Sqrt[d].ConjugateTranspose[l];
c1 == CholeskyDecomposition[m]CholeskyDecompositionは一種のLU分解である:
h = {{2, 1}, {1, 2}};
MatrixForm[u = CholeskyDecomposition[h]]MatrixForm[l = ConjugateTranspose[u]]l.u == hこれは,一般に,LUDecompositionが与えるものとは別の分解である:
MatrixForm /@ Take[LUDecomposition[h], 2]考えられる問題 (2)
数値的な丸めを乗り越えるためには行列は十分に正定でなければならない:
Head[CholeskyDecomposition[N[HilbertMatrix[16]]]]N[Eigenvalues[HilbertMatrix[16]]]分解は,その分解が解けるだけ精度が十分に高ければ,計算することができる:
Head[CholeskyDecomposition[N[HilbertMatrix[16], 24]]]s = Block[{n = 500}, SparseArray[{{i_, i_} -> 2.n ^ 2 - 1., {i_, j_} /; Abs[i - j] == 1 -> -1.n ^ 2}, {n, n}]]たとえ結果が疎であっても,コレスキー分解は密行列として計算される:
u = CholeskyDecomposition[s];
ArrayPlot[u]LinearSolveを使うと,疎なコレスキー因子分解を持つLinearSolveFunctionが返される:
f = LinearSolve[s, Method -> "Cholesky"]N[ByteCount[u] / ByteCount[f]]テクニカルノート
-
▪
- 行列の高度な操作
履歴
2003 で導入 (5.0) | 2023 で更新 (13.3) ▪ 2024 (14.0)
テキスト
Wolfram Research (2003), CholeskyDecomposition, Wolfram言語関数, https://reference.wolfram.com/language/ref/CholeskyDecomposition.html (2024年に更新).
CMS
Wolfram Language. 2003. "CholeskyDecomposition." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2024. https://reference.wolfram.com/language/ref/CholeskyDecomposition.html.
APA
Wolfram Language. (2003). CholeskyDecomposition. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/CholeskyDecomposition.html
BibTeX
@misc{reference.wolfram_2026_choleskydecomposition, author="Wolfram Research", title="{CholeskyDecomposition}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/CholeskyDecomposition.html}", note=[Accessed: 15-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_choleskydecomposition, organization={Wolfram Research}, title={CholeskyDecomposition}, year={2024}, url={https://reference.wolfram.com/language/ref/CholeskyDecomposition.html}, note=[Accessed: 15-September-2026]}