Main Content

bdschur

Block-diagonal Schur factorization

Description

[T,B,BLKS] = bdschur(A,CONDMAX) computes a transformation matrix T such that B = T–1 AT is block diagonal and each diagonal block is a quasi upper-triangular Schur matrix.

[T,B] = bdschur(A,[],BLKS) pre-specifies the desired block sizes. The input matrix A should already be in Schur form when you use this syntax.

Input Arguments

collapse all

Matrix for block-diagonal Schur factorization, specified as a real-valued or complex-valued square matrix.

Upper bound on the condition number of T, specified as a real scalar greater than 1. Use CONDMAX to control the tradeoff between block size and conditioning of T with respect to inversion. When CONDMAX is a larger value, the blocks are smaller and T becomes more ill-conditioned.

Output Arguments

collapse all

Block-diagonalizing transformation, returned as a matrix.

Block diagonal matrix such that B = T–1 AT.

Block sizes in the block-diagonal decomposition, returned as a vector.

Algorithms

bdschur(A,CONDMAX) first reduces A to Schur form (see schur), then tries to zero out off-diagonal blocks to separate eigenvalues. For repeated eigenvalues or clusters of nearby eigenvalues, separation may require an ill-conditioned transformation whose condition number exceeds CONDMAX. Such eigenvalues are then kept together in diagonal blocks of size greater than 1 or 2. bdschur can be seen as a version of eig with a constraint on the condition number of the transformation V. While eig can return a numerically singular V for matrices with nontrivial Jordan blocks, bdschur keeps such blocks together and only separates then from the rest of the spectrum. For safely diagonalizable matrices, eig and bdschur produce equivalent results.

Version History

Introduced in R2008a

expand all

See Also

|