pfss partial fraction decomposition

## Syntax

                elts = pfss(Sl)
                elts = pfss(Sl,rmax)
                elts = pfss(Sl,cord)
                elts = pfss(Sl,rmax,cord)

## Arguments

Sl

  A linear dynamical system in state-space, or a transfer function representation (see syslin), or any rational fraction.

rmax

  A real number controlling the conditioning of block diagonalization (see bdiag).

cord

  A character string with possible values `'c'` or `'d'`.

elts

  List of linear systems, or list of rationals: the components of the decomposition.

  If `Sl` is a transfer function or any other rational and has an integer part (degree(Sl.num)>=degree(Sl.den)), `elts(1:$-1)` are rational components and `elts($)` is the integer part (polynomial).

## Description

Partial fraction decomposition of the linear system `Sl`.

`elts` is the list of linear systems which add up to `Sl` i.e. `elts=list(S1,S2,S3,...,Sn)` with:

`Sl = S1 + S2 +... +Sn`.

Each `Si` contains some poles of `` S according to the block-diagonalization of the `A` matrix of `S`.

For non proper systems, the polynomial part of `Sl` is returned in `elts($)`.

If `Sl` is given in transfer form, it is first converted into state-space by tf2ss and each subsystem `Si` is then converted in transfer form by ss2tf.

The A matrix is of the state-space is put into block diagonal form by function bdiag. The optional parameter `rmax` is sent to `bdiag`, `rmax` should be set to a large number to enforce block-diagonalization.

If the optional flag `cord='c'` is given the elements in `elts` are sorted according to the real part (resp. magnitude if `cord='d'`) of the eigenvalues of A matrices.

## Examples

        // With a linear system (state-space):
        W = ssrand(1,1,6);
        elts = pfss(W);
        W1 = 0;
        for k = 1:size(elts)
            W1 = W1 + ss2tf(elts(k));
        end
        clean(ss2tf(W) - W1)

        // With a rational (transfer function or any other one), without integer part:
        num = 22801+4406.18*%s + 382.37*%s^2 + 21.02*%s^3;
        den = 22952.25 + 4117.77*%s + 490.63*%s^2 + 33.06*%s^3 + %s^4; // degree(den)>degree(num)
        h2 = syslin('c',num/den)
        d = pfss(h2)

        // With a rational with an integer part: degree(num)>=degree(den):
        num = 22801+4406.18*%s + 382.37*%s^2 + 21.02*%s^3 + %s^5;
        h2 = syslin('c',num/den)
        d = pfss(h2)
        typeof(d($)) // last component = integer part = polynomial

## See also

- pbig
- bdiag
- coffg
- dtsi