compute the strongly connected blocks of a square Matrix
n x n square matrix with some sparsity
options controlling the output
The StronglyConnectedBlocks(M) function computes and returns a list containing the nonzero strongly connected blocks contained in the input Matrix M, i.e. [M_1, ..., M_r]. The strongly connected blocks are square sub-matrices of the input Matrix after a sequence of row and column exchanges have been performed to minimize the size of the blocks. Note that these sub-matrices do not contain all the entries present in the input Matrix, but rather only those needed to compute the determinant, characteristic polynomial, or eigenvalues of the Matrix. In addition, any zero blocks are not output.
In order for StronglyConnectedBlocks to provide a benefit, the input Matrix should have some sparsity. If the input Matrix is fully dense, the command will output a list containing only the input Matrix (without sparsity no break-down into blocks is possible).
For an input n x n Matrix M, if we let m = sum( Row/ColumnDimension(M_i), i=1..r ) for the output Matrix list [M_1, ..., M_r], then m <= n, where the inequality is needed for any zero blocks contained in the matrix.
The output blocks satisfy the following:
Determinant(M) is zero if m < n and product(Determinant(M_i), i=1..r) otherwise.
CharacteristicPolynomial(M,x) = x^(n-m) * product( CharacteristicPolynomial(M_i,x), i=1..r)
The option returnsingular is true by default, but when set to false, the block matrices will not be formed when the input Matrix is singular (i.e. has zero blocks). This is useful for efficient computation of a determinant (as a zero block means the determinant is zero, so there is no sense in forming the block matrices).
The option outputform is matrixlist by default, which returns a list of the strongly connected blocks in Matrix form as described above. If outputform is set to rowlist instead, it provides a list of the rows (columns) of the Matrix for each block.
Download Help Document
What kind of issue would you like to report? (Optional)