bdiag блоковая диагонализация, обобщённые собственные векторы

## Синтаксис

                [Ab, X, bs] = bdiag(A)
                [Ab, X, bs] = bdiag(A, rmax)

## Аргументы

A

  вещественная или комплексная квадратная матрица

rmax

  вещественное число

Ab

  вещественная или комплексная квадратная матрица

X

  вещественная или комплексная невырожденная матрица

bs

  вектор целых чисел

## Описание

[Ab, X, bs] = bdiag(A, rmax) выполняет блоковую диагонализацию матрицы `A`. `bs` даёт структуру блоков (соответствующие размеры блоков). `X` - это изменение базиса, то есть `Ab = inv(X)*A*X` является блоковой диагональю.

`rmax` управляет обусловленностью `X`. Значение по умолчанию - это L1-норма матрицы `A`.

Чтобы получить диагональную форму (если она существует), выберите большое значение для`rmax` (например `rmax=1/%eps`). В общем случае (для вещественной случайной `A`), блоки равны (1x1) и (2x2), а `X` является матрицей собственных векторов.

## Примеры

    // случай вещественных чисел: блоки 1x1 и 2x2
    a = rand(5,5);
    [ab, x, bs] = bdiag(a);ab

    --> [ab, x, bs] = bdiag(a);ab
     ab  =
       2.4777836   0.          0.          0.         0.
       0.          0.0757087   0.4869251   0.         0.
       0.         -0.5777956  -0.1248605   0.         0.
       0.          0.          0.          0.069654   0.
       0.          0.          0.          0.         0.5341598

    // случай комплексных чисел: комплексные блоки 1x1
    [ab, x, bs] = bdiag(a+%i*0); ab

## Смотрите также

- schur
- sylv
- spec
- blockdiag
- lcmdiag