Please note that the recommended version of Scilab is 6.1.1. This page might be outdated.

However, this page did not exist in the previous stable version.

# 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

## Comments

Add a comment:Please login to comment this page.