spec 行列とペンシルの固有値

## 呼び出し手順

                evals          = spec(A)
                [R, diagevals] = spec(A)

                evals               = spec(A, B)
                [alpha, beta]       = spec(A, B)
                [alpha, beta, Z]    = spec(A, B)
                [alpha, beta, Q, Z] = spec(A, B)

## 引数

A, B
  AとBは、同じサイズの実数または複素数の正方行列です.

evals
  実数または複素ベクトル, 固有値.

diagevals
  実数または(対角項に固有値を有する)複素対角行列.

R
  可逆な実数または複素正方行列, 行列右固有ベクトル.

alpha, beta
  同じサイズのベクトル：行列束の一般化された固有値 `A - s.B`（sは変数です）. alpha./betaは通常の固有値を与えます. `alpha`は実数値または複素数値です. `beta`は実数値です.

Q
  可逆な実数または複素正方行列 :　ペンシル左固有ベクトル.

Z
  可逆な実数または複素正方行列 :　ペンシル右固有ベクトル.

## 説明

evals = spec(A) ベクトル`evals` に固有値を返します.

[R, diagevals] = spec(A) 対角行列r `diagevals` に固有値, `R`に固有ベクトルを返します. See also `bdiag(…)`.

When using a `spec(A)` syntax with a single matrix, the realness of results is as it follows:

A行列 | 実数 | 複素数
| 対称 | 非対称 | 対称 | 非対称
固有値 | 実数 | 複素数 | エルミート | 複素数
固有ベクトル | 実数 | 複素数 | 複素数 | 複素数

. エルミート行列はその共役転置に等しい。

### Matrix Pencil A - s.B

evals = spec(A, B) 行列ペンシル A - s B のスペクトル,すなわち, 多項式行列 s B - Aの根,を返します.

[alpha, beta] = spec(A, B) 行列ペンシル`A- s B`のスペクトル, すなわち,多項式行列 `A - s B`の根を返します. 一般化固有値 alpha と beta は行列 `A - alpha./beta × B` が特異行列となる値です. 固有値は `alpha./beta` により指定され, `beta(i) = 0`の場合,i番目の固有値は無限大となります.

`B = eye(A)`の場合, `alpha./beta`は `spec(A)`となります. 通常,beta=0や両方がゼロの場合に関して都合が良い解釈が存在するため, (alpha,beta)の組み合わせで表されます.

[alpha, beta, Z] = spec(A, B) 一般化右固有ベクトルである行列 `Z` を返します.

[alpha, beta, Q, Z] = spec(A, B) 一般化右および左固有ベクトルである行列 `Q` および `Z`を返します.

大きな密行列または疎行列の場合、eigs関数を使用できます.

## 参照

行列の固有値計算は Lapack ルーチンに基づいています

- 行列が対称でない場合, DGEEV および ZGEEV.

- 行列が対称の場合, DSYEV および ZHEEV.

ペンシル固有値計算は Lapack ルーチン DGGEV および ZGGEVに基づいています.

## 例

    // MATRIX EIGENVALUES
    A = diag([1,2,3]);
    X = rand(3,3);
    A = inv(X)*A*X;
    spec(A)

    x = poly(0,'x');
    pol = det(x*eye(3,3)-A)
    roots(pol)

    [S,X] = bdiag(A);
    clean(inv(X)*A*X)

    // PENCIL EIGENVALUES
    A = rand(3,3);
    [al, be, R] = spec(A, eye(A));
    al ./ be
    clean(inv(R)*A*R)    // displaying the eigenvalues (generic matrix)
    A = A + %i*rand(A);
    E = rand(A);
    roots(det(A-%s*E))   // complex case

## 参照

- eigs
- bdiag
- schur
- colcomp
- det
- poly