# factors

実数因数分解

## 呼び出し手順

    [lnum,g]=factors(pol [,'flag'])
                [lnum,lden,g]=factors(rat [,'flag'])
                rat=factors(rat,'flag')

## パラメータ

pol

  実数多項式

rat

  実数有理多項式 (`rat=pol1/pol2`)

lnum

  (1 または 2次の)多項式のリスト

lden

  (1 または 2次の)多項式のリスト

g

  実数

flag

  文字列 `'c'`または `'d'`

## 説明

多項式`pol`の因数を リスト`lnum`および"ゲイン" gに返します.

(`flag`が指定されない場合,) pol= g にリスト`lnum`のエントリの積を乗じることになります. `flag='c'`が指定された暴い, `|pol(i omega)|` = `|g*prod(lnum_j(i omega)|` となります. `flag='d'`が指定された場合, `|pol(exp(i omega))|` = `|g*prod(lnum_i(exp(i omega))|` となります. `factors`の引数が 1x1 有理数 `rat=pol1/pol2`の場合, 分子`pol1` および分母 the denominator `pol2`の因数 がそれぞれリスト`lnum` および `lden`に返されます.

"gain" は `g`に返されます. すなわち: rat= g times (lnumのエントリの積) / (ldenのエントリの積).

`flag` が`'c'` (または`'d'`)の場合, `pol`の根は虚軸(または単位円)に関して折り返されます. すなわち,`lnum`の因数は安定な多項式となります.

有理数の引数を指定して`factors`がコールされた場合: `lnum`および `lden`のエントリは, `flag`が指定された場合に 安定な多項式となります. 有理関数`R1`またはSISOリスト`syslin`を指定する `R2=factors(R1,'c')` または `R2=factors(R1,'d')` の場合, 出力`R2`は,安定な分子および分母を有し, 虚軸(`'c'`)または単位円(`'d'`)に沿った `R1`と同じ大きさの伝達関数となります.

## 例

    n=poly([0.2,2,5],'z');
    d=poly([0.1,0.3,7],'z');
    R=syslin('d',n,d);
    R1=factors(R,'d')
    roots(R1('num'))
    roots(R1('den'))
    w=exp(2*%i*%pi*[0:0.1:1]);
    norm(abs(horner(R1,w))-abs(horner(R,w)))

## 参照

- simp