[Scilab-users] Problem with partial fraction decomposition (dfss)

Serge Steer Serge.Steer at inria.fr
Wed Oct 22 21:21:43 CEST 2014


Now you are using a too big value for rmax
-->pf = pfss(h)
  pf  =


        pf(1)

     0.75 - 0.25s
     ------------
                2
      1 - 2s + s

        pf(2)

     0.25
     ----
     1 + s
Some explanation
pfss converts the transfer function to state space representation and 
then trie to diagonalize the state matrix using the bdiag function

-->S=tf2ss(h);
-->bdiag(S.A)
  ans  =

     1.0000000  - 1.2247449    0.
     0.                  1.                  0.
     0.                  0.               - 1.
You can see with result above that there is a 2 by 2 jordan block (for 
the eigenvalue 1) which exhibits a coupling between the two states
Now with
-->bdiag(S.A,1/%eps)
ans  =

     1.0000000    0.    0.
     0.                 1.    0.
     0.                 0.  - 1.
  The Jordan block has been broken

[Ab,X]=bdiag(S.A,1/%eps);cond(X)
  ans  =

     5.074D+14
  bdiag has broken the jordan block using a singular "base change" so 
the decomposition is a non-sense.
Serge Steer

Le 21/10/2014 12:07, Tin Nguyen a écrit :
> Dear Serge Steer,
> Thank you very much for your response. Your code works fine.
> However, I still have some problem with this pfss function. For example, I
> try to decompose a fractional polynomial that has multi-order poles.
> H(z) = 1  /  { (1-s)^2 * (1+s) }
>
> You can find following from my console:
> -->s = poly(0,'s');
>   
> -->h = 1 / ( (1 + s) * (1 - s)^2)
>   h  =
>   
>            1
>      -------------
>                   2   3
>      1 - s - s + s
>   
> -->pf = pfss(h, 1/%eps)
>   pf  =
>   
>   
>         pf(1)
>   
>      - 9420237.9
>      -------------
>    - 1.0000000 + s
>   
>         pf(2)
>   
>      9420237.6
>      ---------
>      - 1 + s
>   
>         pf(3)
>   
>      0.25
>      ----
>      1 + s
>
> I also checked:
> -->pf(1)+pf(2)
>   ans  =
>   
>      0.75 - 0.25s
>      ------------
>                       2
>       1 - 2s + s
>
> I have no idea about this situation.
> Can you help me out! Thank you in advance!
>
> --Tin Nguyen
>
> -----Original Message-----
> From: users [mailto:users-bounces at lists.scilab.org] On Behalf Of Serge Steer
> Sent: Tuesday, October 14, 2014 6:36 PM
> To: users at lists.scilab.org
> Subject: Re: [Scilab-users] Problem with partial fraction decomposition
> (dfss)
>
> You just need to tune the rmax optionnal parameter pf =
> pfss(tf2ss(hz),5);length(pf)
>
> Serge Steer
> Le 13/10/2014 10:12, tinnguyen a écrit :
>> Hi guys,
>> I'm having trouble using scilab's function pfss to decompose a
>> polynomial in order to do inverse Z transform. Following is my code:
>> --> z = poly(0,'z')
>> --> hz = z^2 / (1 - 6*z + 11*z^2 - 6*z^3) pf = pfss(tf2ss(hz))
>> --> length(pf)
>> The fourth command returns '1'. However, I believe it should be 3. I
>> also did the decomposition manually and got the result as: hz =
>> 0.5/(1-z) + -1 /
>> (1-2*z) + 0.5/(1-3*z).
>> Nevertheless, if I change the numerator of hz from z^2 to z or z^3,
>> pfss works correctly. I definitely have no idea!!!? :D Please take a
>> look and correct me if i'm wrong.
>> Thank you so much!
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://mailinglists.scilab.org/Problem-with-partial-fraction-decomposi
>> tion-dfss-tp4031331.html Sent from the Scilab users - Mailing Lists
>> Archives mailing list archive at Nabble.com.
>> _______________________________________________
>> users mailing list
>> users at lists.scilab.org
>> http://lists.scilab.org/mailman/listinfo/users
>>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
>




More information about the users mailing list