yields the core-nilpotent decomposition of a square matrix m.
CoreNilpotentDecomposition[m,format]
returns the core-nilpotent decomposition according to the specified format.
CoreNilpotentDecomposition
yields the core-nilpotent decomposition of a square matrix m.
CoreNilpotentDecomposition[m,format]
returns the core-nilpotent decomposition according to the specified format.
Details and Options
- CoreNilpotentDecomposition[m] returns a list of matrices {t,c,n} where the core matrix c is nonsingular and the matrix n is nilpotent. »
- The matrix m is related to its core-nilpotent decomposition by
. - For the nilpotent matrix n, there exists a non-negative integer
(the index of the matrix m) such that MatrixPower[n,p] is the zero matrix. - The core-nilpotent decomposition of a matrix can be used for solving systems of linear differential-algebraic (or difference-algebraic) equations with constant coefficients.
- If either the core or nilpotent parts are trivial, an empty list {} is returned for the trivial part. »
- CoreNilpotentDecomposition[m] is equivalent to CoreNilpotentDecomposition[m,"SplitBlocks"].
- CoreNilpotentDecomposition[m,"BlockDiagonal"] returns a list of matrices {t,d} where
. - With the setting TargetStructure->"Dense", CoreNilpotentDecomposition[m,"BlockDiagonal"] returns a list of matrices {t,d} where
. - With the setting TargetStructure->"Structured", the matrix
in the list {t,d} is represented as a BlockDiagonalMatrix. - CoreNilpotentDecomposition takes the following options:
-
Method Automatic method to use TargetStructure Automatic the structure of the returned matrix Tolerance Automatic tolerance that should be allowed in computations
Examples
open all close allBasic Examples (2)
Compute the core-nilpotent decomposition of a square matrix:
CoreNilpotentDecomposition[(| | | |
| - | - | - |
| 1 | 2 | 0 |
| 5 | 1 | 3 |
| 0 | 0 | 0 |)]MatrixForm /@ %Core-nilpotent decomposition of a 4×4 matrix:
(m = {{-1, 0, 3, 2}, {2, 3, 3, -1}, {0, 0, -2, -1}, {0, 0, 4, 2}})//MatrixForm{t, c, n} = CoreNilpotentDecomposition[m];m == t.BlockDiagonalMatrix[{c, n}].Inverse[t]Scope (12)
Basic Uses (7)
Core-nilpotent decomposition of a machine-precision matrix:
CoreNilpotentDecomposition[{{0.2, -0.32}, {0.1, -0.16}}]Core-nilpotent decomposition of a complex matrix:
CoreNilpotentDecomposition[{{-4 + 6 I, 8 - 10 I, 2}, {-2 + 3 I, 4 - 5 I, 1}, {1, -1, 1}}]Core-nilpotent decomposition of an exact matrix:
CoreNilpotentDecomposition[{{14, -22, 2}, {7, -11, 1}, {0, 0, 0}}]Core-nilpotent decomposition of an arbitrary-precision matrix:
CoreNilpotentDecomposition[RandomReal[4, {2, 2}, WorkingPrecision -> 9]]Core-nilpotent decomposition of a symbolic matrix:
CoreNilpotentDecomposition[{{a, a, 1}, {0, 0, 0}, {2, 3, -1}}]//SimplifyThe decomposition of large machine-precision matrices is efficient:
r = RandomReal[{0, 1}, {500, 500}];AbsoluteTiming[CoreNilpotentDecomposition[r];]CoreNilpotentDecomposition[m] is equivalent to CoreNilpotentDecomposition[m,"SplitBlocks"], where the core and nilpotent parts are kept separate:
CoreNilpotentDecomposition[{{-6, -3, -4, 2}, {0, -1, 0, 1}, {9, 6, 6, -2}, {0, 4, 0, 1}}, "SplitBlocks"]CoreNilpotentDecomposition[m,"BlockDiagonal"] brings the core and nilpotent parts together in a block diagonal matrix:
CoreNilpotentDecomposition[{{-6, -3, -4, 2}, {0, -1, 0, 1}, {9, 6, 6, -2}, {0, 4, 0, 1}}, "BlockDiagonal"]Special Matrices (5)
Core-nilpotent decomposition of a sparse matrix:
SparseArray[{{1, 3} -> 1, {2, 2} -> 2, {3, 1} -> 3}, {4, 4}]CoreNilpotentDecomposition[%]Core-nilpotent decomposition of a structured matrix:
SymmetrizedArray[{{1, 1} -> 3, {2, 2} -> 0, {3, 1} -> -5}, {3, 3}, Symmetric[All]]CoreNilpotentDecomposition[%]The identity matrix has a trivial core-nilpotent decomposition:
CoreNilpotentDecomposition[IdentityMatrix[3]]Core-nilpotent decomposition of a Hilbert matrix:
CoreNilpotentDecomposition[HilbertMatrix[3]]Core-nilpotent decomposition of a strictly upper triangular matrix:
CoreNilpotentDecomposition[(| | | |
| - | - | - |
| 0 | a | b |
| 0 | 0 | c |
| 0 | 0 | 0 |)]Options (1)
TargetStructure (1)
With TargetStructure->"Dense", CoreNilpotentDecomposition[m,"BlockDiagonal"] returns a list of two matrices:
{t, b} = CoreNilpotentDecomposition[(| | | | |
| -- | -- | -- | -- |
| -6 | -3 | -4 | 2 |
| 0 | -1 | 0 | 1 |
| 9 | 6 | 6 | -2 |
| 0 | 4 | 0 | 1 |), "BlockDiagonal", TargetStructure -> "Dense"]The second matrix is a block diagonal matrix consisting of the core and nilpotent parts:
MatrixForm[b]With TargetStructure->"Structured", the second matrix is represented as a BlockDiagonalMatrix:
CoreNilpotentDecomposition[(| | | | |
| -- | -- | -- | -- |
| -6 | -3 | -4 | 2 |
| 0 | -1 | 0 | 1 |
| 9 | 6 | 6 | -2 |
| 0 | 4 | 0 | 1 |), "BlockDiagonal", TargetStructure -> "Structured"]Applications (2)
Solve the matrix differential equation
,
with singular coefficients:
a = (| | | |
| -- | - | -- |
| 1 | 0 | -2 |
| -1 | 0 | 2 |
| 2 | 3 | 2 |);b = (| | | |
| --- | --- | --- |
| 0 | 1 | 2 |
| -27 | -22 | -17 |
| 18 | 14 | 10 |);v = {-1, -8, 13};Both
and
are singular, so the equation cannot be put in the standard form
:
{Det[a], Det[b]}Compute the core-nilpotent decomposition of the solution to
:
{s, c, n} = CoreNilpotentDecomposition[LinearSolve[a + b, a]]d = s.PadRight[Inverse[c], Dimensions[a]].Inverse[s]The solution is then
, where
is the solution to
:
MatrixExp[-d.LinearSolve[a + b, b]t].v//FullSimplifyCompare with the result given by DSolveValue:
DSolveValue[{a.y'[t] + b.y[t] == 0, y[0] == v}, y[t]∈Vectors[3], t]Find the general solution of the matrix difference equation
with singular coefficient matrix
:
m = (| | | |
| -- | -- | -- |
| 4 | 2 | -2 |
| -8 | -3 | 1 |
| -6 | -2 | 0 |);Det[m]Using the core-nilpotent decomposition
, let
:
{t, c, n} = CoreNilpotentDecomposition[m];
d = t.PadRight[Inverse[c], Dimensions[m]].Inverse[t]The solution is
, where
is an arbitrary vector:
x[k_] = Simplify[MatrixPower[d, k + 1].m.{C[1], C[2], C[3]}, k > 0]m.x[k + 1] == x[k]//SimplifyProperties & Relations (4)
CoreNilpotentDecomposition returns a triple {t,c,n}:
(m = {{-6, -3, -4, 2}, {0, -1, 0, 1}, {9, 6, 6, -2}, {0, 4, 0, 1}})//MatrixForm{t, c, n} = CoreNilpotentDecomposition[m];c//MatrixFormDet[c] != 0nMatrixPower[n, 2]The original matrix m can be expressed in terms of its core-nilpotent decomposition:
m == t.BlockDiagonalMatrix[{c, n}].Inverse[t]The core part of the decomposition for an invertible matrix is equal to the matrix:
m = {{3, 4}, {5, 7}};{t, c, n} = CoreNilpotentDecomposition[m];c == mThe nilpotent part of the decomposition is an empty list:
nThe similarity matrix t is taken to be the identity matrix:
t//MatrixFormThe identity expressed using BlockDiagonalMatrix holds nonetheless:
m == t.BlockDiagonalMatrix[{c, n}].Inverse[t]The nilpotent part of the decomposition for a nilpotent matrix is equal to the matrix:
m = {{2, 2, -2}, {5, 1, -3}, {1, 5, -3}};{t, c, n} = CoreNilpotentDecomposition[m];n == mThe core part of the decomposition is an empty list:
cThe similarity matrix t is taken to be the identity matrix:
t//MatrixFormThe identity expressed using BlockDiagonalMatrix holds nonetheless:
m == t.BlockDiagonalMatrix[{c, n}].Inverse[t]DrazinInverse can be computed with CoreNilpotentDecomposition:
m = {{-6, -3, -4, 2}, {0, -1, 0, 1}, {9, 6, 6, -2}, {0, 4, 0, 1}};{t, c, n} = CoreNilpotentDecomposition[m];d = DrazinInverse[m];d === t.PadRight[Inverse[c], Dimensions[m]].Inverse[t]Possible Issues (2)
The core-nilpotent decomposition is not unique:
bd = (| | | | | |
| - | - | - | -- | - |
| 2 | 1 | 0 | 0 | 0 |
| 1 | 2 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | -1 | 0 |);
tm = (| | | | | |
| -- | -- | -- | -- | -- |
| 1 | -1 | 1 | 0 | 0 |
| -1 | 0 | 0 | 1 | 1 |
| 0 | 0 | -1 | 0 | -1 |
| 0 | 0 | -1 | -1 | 1 |
| 0 | 0 | 0 | 0 | -1 |);MatrixForm /@ CoreNilpotentDecomposition[tm.bd.Inverse[tm], "BlockDiagonal", TargetStructure -> "Dense"]Either
or
, but not both, can be equal to {}:
m = {{3, 4}, {5, 7}};{t, c, n} = CoreNilpotentDecomposition[m];n === {}MatrixQ[{}]Use BlockDiagonalMatrix to reconstruct the original matrix, since it interprets {} as a 0×0 matrix:
BlockDiagonalMatrix[{c, n}]//NormalRelated Guides
Text
Wolfram Research (2021), CoreNilpotentDecomposition, Wolfram Language function, https://reference.wolfram.com/language/ref/CoreNilpotentDecomposition.html (updated 2023).
CMS
Wolfram Language. 2021. "CoreNilpotentDecomposition." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2023. https://reference.wolfram.com/language/ref/CoreNilpotentDecomposition.html.
APA
Wolfram Language. (2021). CoreNilpotentDecomposition. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/CoreNilpotentDecomposition.html
BibTeX
@misc{reference.wolfram_2026_corenilpotentdecomposition, author="Wolfram Research", title="{CoreNilpotentDecomposition}", year="2023", howpublished="\url{https://reference.wolfram.com/language/ref/CoreNilpotentDecomposition.html}", note=[Accessed: 13-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_corenilpotentdecomposition, organization={Wolfram Research}, title={CoreNilpotentDecomposition}, year={2023}, url={https://reference.wolfram.com/language/ref/CoreNilpotentDecomposition.html}, note=[Accessed: 13-June-2026]}