# bdschur

Block-diagonal Schur factorization

## Syntax

``[T,B,BLKS] = bdschur(A,CONDMAX)``
``[T,B] = bdschur(A,[],BLKS)``

## 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