给出厄米特矩阵或对称矩阵 m 的 Bunch-Kaufman 分解,结果为三元组 {l,b,p}.
BunchKaufmanDecomposition
给出厄米特矩阵或对称矩阵 m 的 Bunch-Kaufman 分解,结果为三元组 {l,b,p}.
更多信息和选项
- Bunch-Kaufman 分解用作厄米特或对称线性系统的求解器,通常比其他分解方法更快且数值更稳定.
- Bunch–Kaufman 分解也被称为 LBLT 分解. 有时也被称为 LDLT 分解,不过这个名称更常用于指 LDLDecomposition.
- 在三元组
中,
是对角线上为
的下三角矩阵,
是由
和
块组成的块对角矩阵,而
是一个置换矩阵.
的对称性(以及因此其对角块的对称性)与输入矩阵的对称性一致. » - 原始矩阵与其分解之间的关系取决于原始矩阵是厄米特矩阵还是对称矩阵. 对于厄米特输入矩阵
,它们满足
;而对于对称矩阵的
,满足
. 对于实对称矩阵,这两个等式是一致的,但对于复对称矩阵则不同. » - BunchKaufmanDecomposition 接受以下选项:
-
TargetStructure Automatic 返回矩阵的结构 - TargetStructure 可取的设置包括:
-
Automatic,"Structured" 将 l 作为一个 LowerTriangularMatrix 对象、b 作为一个 BlockDiagonalMatrix 对象,以及 p 作为一个 PermutationMatrix 对象返回 "Dense" 将所有矩阵以列表的列表形式返回 "Sparse" 将所有矩阵以 SparseArray 对象形式返回 - BunchKaufmanDecomposition 将 LDLDecomposition 推广至所有厄米特矩阵以及复对称矩阵,代价是在对角矩阵中引入
块并增加置换矩阵(“选主元”). » - 当一个厄米特矩阵
是正定或负定时,其 LDL 分解可以保证存在;但当
是不定矩阵时,则不一定存在. 若 Bunch–Kaufman 分解返回的置换矩阵为单位矩阵且没有
的块时,LDL 分解也存在,并且与 Bunch–Kaufman 分解完全相同. 然而,也可能存在 LDL 分解与 Bunch‑Kaufman 分解不同但两者均存在的情况. » - 对于厄米特正定输入,Bunch–Kaufman 分解通常与 LDL 分解一致. 由于 LDL 分解
可用于构造 Cholesky 分解
,其形式为
,因此,BunchKaufmanDecomposition 可以被视为将 CholeskyDecomposition 扩展到所有厄米矩阵的一种方法. »
范例
打开所有单元 关闭所有单元基本范例 (2)
m = (| | | |
| - | - | - |
| 2 | 5 | 4 |
| 5 | 2 | 6 |
| 4 | 6 | 8 |);
{l, b, p} = BunchKaufmanDecomposition[m]MatrixForm /@ %p.m.p == l.b.lm = (| | | | |
| ------------ | ------------ | ------------ | ------------ |
| -3.4 | 3.1 + 3.1 I | -2.6 + 2. I | 6. + 3.6 I |
| 3.1 - 3.1 I | -6.3 | -3.1 + 4.5 I | 1.2 + 9.5 I |
| -2.6 - 2. I | -3.1 - 4.5 I | 6.7 | -7.6 - 3.9 I |
| 6. - 3.6 I | 1.2 - 9.5 I | -7.6 + 3.9 I | -8.3 |);
{l, b, p} = BunchKaufmanDecomposition[m]MatrixForm /@ Chop[%]p.m.Transpose[p] - l.b.ConjugateTranspose[l]//Chop范围 (7)
基本用法 (7)
BunchKaufmanDecomposition[Symmetrize[RandomReal[{-10, 10}, {6, 6}], Symmetric[{1, 2}]]]MatrixForm /@ %SeedRandom[RandomGeneratorState[{"ExtendedCA", {80, 4, 0}},
{{RawArray["UnsignedInteger64", {16407178953997097818, 7368930915502246791, 5756465,
6293977506877026824, 12672308152834613335, 13417613018795460498, 17080942302500744723,
5459500870563 ... 44002455289743, 10936982829512251664, 14835928000192034811,
13752836467989677721, 1054251394126103111, 17310067405974001226, 14978545882044570653,
8934845044304615339}], 4, 0}}, RawArray["UnsignedInteger64", {12505010300297324358, 0}]]];
h = Symmetrize[RandomComplex[{-10 - 10 * I, 10 + 10 * I}, {6, 6}], Hermitian[{1, 2}]];{l, b, p} = BunchKaufmanDecomposition[h]
中的
和
块均是厄米的;特别地,
的主对角线上的元素是实数:
MatrixForm /@ b["Blocks"]//ChopMinMax[Chop[p.Normal[h].Transpose[p] - l.b.ConjugateTranspose[l]]]s = Symmetrize[RandomComplex[{-10 - 10 * I, 10 + 10 * I}, {20, 20}], Symmetric[{1, 2}]];
{l, b, p} = BunchKaufmanDecomposition[s]
中的
和
块均是对称的;特别地,
的对角线上可能出现复数元素:
MatrixForm /@ b["Blocks"]MinMax[Chop[p.s.Transpose[p] - l.b.Transpose[l]]]对一个精确矩阵使用 BunchKaufmanDecomposition:
MatrixForm /@ BunchKaufmanDecomposition[(| | | |
| ----------- | ----------- | ----- |
| 1 | 2 + Sqrt[2] | 3 + π |
| 2 + Sqrt[2] | E | I |
| 3 + π | -I | 0 |)]MatrixForm /@ BunchKaufmanDecomposition[RandomVariate[GaussianOrthogonalMatrixDistribution[3], WorkingPrecision -> 30]]Precision[%]MatrixForm /@ BunchKaufmanDecomposition[(| | |
| ------------ | - |
| 1 | a |
| Conjugate[a] | 5 |)]大型数值矩阵的 Bunch‑Kaufman 分解可高效计算:
m = RandomVariate[GaussianOrthogonalMatrixDistribution[1000]];
AbsoluteTiming[BunchKaufmanDecomposition[m];]Dimensions[m]选项 (2)
TargetStructure (2)
mat = Symmetrize[RandomComplex[{-1 - I, 1 + I}, {4, 4}], Hermitian[{1, 2}]];
{l, b, p} = BunchKaufmanDecomposition[mat]此设置等同于 TargetStructure "Structured":
% === BunchKaufmanDecomposition[mat, TargetStructure -> "Structured"]{l2, b2, p2} = BunchKaufmanDecomposition[mat, TargetStructure -> "Dense"]尽管这些是不同的对象,但它们表示相同的结果,且与原始输出相等:
{l2 == l, b2 == b, p2 == p}BunchKaufmanDecomposition[Symmetrize[RandomReal[{-10, 10}, {6, 6}], Symmetric[{1, 2}]], TargetStructure -> "Sparse"]属性和关系 (6)
h = Symmetrize[RandomComplex[1 + I, {3, 3}], Hermitian[{1, 2}]];
{lh, bh, ph} = BunchKaufmanDecomposition[h];
ph.h.ph == lh.bh.lhs = Symmetrize[RandomComplex[1 + I, {3, 3}], Symmetric[{1, 2}]];
{ls, bs, ps} = BunchKaufmanDecomposition[s];
ps.s.ps == ls.bs.ls{ph.h.ph == lh.bh.lh, ps.s.ps == ls.bs.ls}然而,由于实对称矩阵与实埃尔米特矩阵是一样的,因此对于实数输入,两种公式均可使用:
r = Symmetrize[RandomReal[1, {3, 3}], Symmetric[{1, 2}]];
{lr, br, pr} = BunchKaufmanDecomposition[r];
HermitianMatrixQ[r] && pr.r.pr == lr.br.lr && pr.r.pr == lr.br.lr由于置换矩阵是实正交矩阵,对于埃尔米特矩阵,可用
恢复输入矩阵
:
h = Symmetrize[RandomComplex[1 + I, {3, 3}], Hermitian[{1, 2}]];
{lh, bh, ph} = BunchKaufmanDecomposition[h];
h == ph.lh.bh.lh.phs = Symmetrize[RandomComplex[1 + I, {3, 3}], Symmetric[{1, 2}]];
{ls, bs, ps} = BunchKaufmanDecomposition[s];
s == ps.ls.bs.ls.psh = Symmetrize[RandomComplex[1 + I, {20, 20}], Hermitian[{1, 2}]];
{lh, bh, ph} = BunchKaufmanDecomposition[h];
TensorSymmetry[bh]h = Symmetrize[RandomComplex[1 + I, {20, 20}], Symmetric[{1, 2}]];
{lh, bh, ph} = BunchKaufmanDecomposition[h];
TensorSymmetry[bh]BunchKaufmanDecomposition 适用于埃尔米特矩阵:
m = (| | | |
| - | - | - |
| 0 | 2 | 1 |
| 2 | 2 | 3 |
| 1 | 3 | 4 |);
HermitianMatrixQ[m]BunchKaufmanDecomposition[mat]LDLDecomposition 对于某些埃尔米特矩阵会失败,如下面的例子,需要进行主元选取:
LDLDecomposition[m]PositiveDefiniteMatrixQ[m] || NegativeDefiniteMatrixQ[m]对于以下矩阵,BunchKaufmanDecomposition 不使用主元选取,并且其块对角矩阵不包含任何
的块:
noPivotDiagonal = SymmetrizedArray[StructuredArray`StructuredData[{4, 4},
{{{1, 1} -> 0.9522358578605561, {1, 2} -> 0.6623050421076754, {1, 3} -> 0.17625258657137377,
{1, 4} -> 0.4947848612877843, {2, 2} -> 0.28112053171866624, {2, 3} -> 0.14335614166718358,
{2, 4} -> 0.39283020246124734, {3, 3} -> 0.6313091437316813, {3, 4} -> 0.5768535073588343,
{4, 4} -> 0.9640275388436799}, Hermitian[{1, 2}]}]];
{l, b, p} = BunchKaufmanDecomposition[noPivotDiagonal];
{p == IdentityMatrix[Length[noPivotDiagonal]], DiagonalMatrixQ[b]}因此,Bunch–Kaufman 分解与 LDL 分解一致:
{ℓ, d} = LDLDecomposition[noPivotDiagonal];
l == ℓ && d == b对于以下矩阵,BunchKaufmanDecomposition 不使用主元选取,但存在
的块:
noPivotBlocks = SymmetrizedArray[StructuredArray`StructuredData[{4, 4},
{{{1, 1} -> 0.31409114975717345, {1, 2} -> 0.9296201158260893, {1, 3} -> 0.4380740997319761,
{1, 4} -> 0.3863400364059515, {2, 2} -> 0.4120399083786235, {2, 3} -> 0.7411387665471949,
{2, 4} -> 0.46915083394191914, {3, 3} -> 0.38601806205067835, {3, 4} -> 0.7551830977005005,
{4, 4} -> 0.23956653728429456}, Hermitian[{1, 2}]}]];
{l, b, p} = BunchKaufmanDecomposition[noPivotBlocks];
{p == IdentityMatrix[Length[noPivotBlocks]], DiagonalMatrixQ[b]}因此,Bunch–Kaufman 分解与 LDL 分解有所不同:
{ℓ, d} = LDLDecomposition[noPivotBlocks];
l == ℓ || d == b对于以下矩阵,BunchKaufmanDecomposition 使用主元选取:
pivotDiagonal = SymmetrizedArray[StructuredArray`StructuredData[{4, 4},
{{{1, 1} -> 0.47619054005221373, {1, 2} -> 0.41489787499498676, {1, 3} -> 0.826113894123858,
{1, 4} -> 0.2787158070316167, {2, 2} -> 0.7485827836683288, {2, 3} -> 0.20876586927526475,
{2, 4} -> 0.37069120649409415, {3, 3} -> 0.5480360624388212, {3, 4} -> 0.5333605049010796,
{4, 4} -> 0.19683262635198728}, Hermitian[{1, 2}]}]];
{l, b, p} = BunchKaufmanDecomposition[pivotDiagonal];
{p == IdentityMatrix[Length[pivotDiagonal]], DiagonalMatrixQ[b]}尽管矩阵
是对角矩阵,但它不能与 LDLDecomposition 返回的矩阵
相同:
{ℓ, d} = LDLDecomposition[pivotDiagonal];
l == ℓ || d == b对于一个随机生成的正定埃尔米特矩阵,其 LDL 分解与 Bunch–Kaufman 分解相同的概率大约为
:
mList = #.#& /@ RandomComplex[1 + I, {1000, 4, 4}];
ldlCoincides[m_] := Module[{l, b, p}, {l, b, p} = BunchKaufmanDecomposition[m];DiagonalMatrixQ[b] && p == IdentityMatrix[Length[m]]]
good = Select[mList, ldlCoincides];
N[Length[good] / Length[mList]]分解结果相同时, Cholesky decomposition can be recovered可通过
恢复 Cholesky 分解:
m = First[good];
c = CholeskyDecomposition[m];
{l, b, p} = BunchKaufmanDecomposition[m];
c == Sqrt[b].l反之,可通过对
和
的对角线进行平方来构建
,而通过将
关于对角线进行归一化可得到
:
b == DiagonalMatrix[Diagonal[c]^2] && l == ConjugateTranspose[c / Diagonal[c]]mList === Select[mList, DiagonalMatrixQ[BunchKaufmanDecomposition[#][[2]]]&]因此,当无法从 Bunch–Kaufman 分解中恢复 Cholesky 分解时,其原因在于非平凡的主元选取:
Last[BunchKaufmanDecomposition[First[Complement[mList, good]]]]相关指南
-
▪
- 矩阵分解
文本
Wolfram Research (2026),BunchKaufmanDecomposition,Wolfram 语言函数,https://reference.wolfram.com/language/ref/BunchKaufmanDecomposition.html.
CMS
Wolfram 语言. 2026. "BunchKaufmanDecomposition." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/BunchKaufmanDecomposition.html.
APA
Wolfram 语言. (2026). BunchKaufmanDecomposition. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/BunchKaufmanDecomposition.html 年
BibTeX
@misc{reference.wolfram_2026_bunchkaufmandecomposition, author="Wolfram Research", title="{BunchKaufmanDecomposition}", year="2026", howpublished="\url{https://reference.wolfram.com/language/ref/BunchKaufmanDecomposition.html}", note=[Accessed: 24-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_bunchkaufmandecomposition, organization={Wolfram Research}, title={BunchKaufmanDecomposition}, year={2026}, url={https://reference.wolfram.com/language/ref/BunchKaufmanDecomposition.html}, note=[Accessed: 24-August-2026]}