Please note that the recommended version of Scilab is 2025.0.0. This page might be outdated.
See the recommended documentation of this function
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 andelts($)
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
Report an issue | ||
<< markp2ss | Linear System Representation | pol2des >> |