specfact スペクトル分解

## 呼出し手順

    [W0,L]=specfact(A,B,C,D)

## 説明

スペクトル密度行列 `phi(s)`を指定すると:

                -1                   -1
    R + C*(s*I-A) * B  +  B'*(-s*I-A') * C'  with R=D+D' > 0

`specfact` は, `W(s)=W0+L*(s*I-A)^-1*B` が `PHI(s)` のスペクトル分解,すなわち,

`phi(s)=W'(-s)*W(s)`

となるような `W0` および `L` を計算します.

## 例

    A=diag([-1,-2]);B=[1;1];C=[1,1];D=1;s=poly(0,'s');
    W1=syslin('c',A,B,C,D);
    phi=gtild(W1,'c')+W1;
    phis=clean(ss2tf(phi))
    clean(phis-horner(phis,-s)');   //check this is 0...
    [A,B,C,D]=abcd(W1);
    [W0,L]=specfact(A,B,C,D);
    W=syslin('c',A,B,L,W0)
    Ws=ss2tf(W);
    horner(Ws,-s)*Ws

## 参照

- gtild
- sfact
- fspecg