home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / maths / rlab / controls / CTB / step < prev    next >
Text File  |  1995-11-15  |  3KB  |  138 lines

  1. //--------------------------------------------------------------------------------
  2. //
  3. // step
  4. //
  5. // Syntax: G=step(A,B,C,D,IU,T)
  6. //
  7. // This routine plots the step response of continuous-time linear systems.
  8. // It plots the time response of the following linear continuous-time
  9. // system
  10. //     .
  11. //     x = Ax + Bu
  12. //     y = Cx + Du
  13. //
  14. // to a step input applied to the input IU. The routine may be called
  15. // in several fashions:
  16. //
  17. // (1)  G=step(A,B,C,D)
  18. //      (This produces the step response of the system looping over the
  19. //       inputs and looping over the output with an arbitrary time
  20. //       vector T=0.0:20.0:0.1).
  21. //
  22. // (2)  G=step(A,B,C,D,IU)
  23. //      (This produces the step response of the system to the IU input
  24. //       and looped over the outputs with an arbitrary time T=0.0:20.0:0.1)
  25. //
  26. // (3)  G=step(A,B,C,D,IU,T)
  27. //      (This produces the step response of the system to the IU input
  28. //       and looped over the outputs for the specified time vector T).
  29. //
  30. // (4)  G=step(NUM,DEN)
  31. //      (This produces the step response of the transfer function model
  32. //       with an arbitrary time T=0.0:20.0:0.1).
  33. //
  34. // (5)  G=step(NUM,DEN,T)
  35. //      (This produces the step response of the transfer function model to
  36. //       for the specified time vector T).
  37. //
  38. // For the cases where the time vector T is specified, the times must
  39. // be regularly spaced.
  40. //
  41. // Note: Two matrices are returned in a list.
  42. //
  43. //       G.x = X values in the plot.
  44. //       G.y = Y values in the plot.
  45. //
  46. // Note: The matrix G.y has as many columns as there are outputs and
  47. //       has length(T) rows. The matrix G.x has as many columns as states
  48. //       and has length(T) rows).
  49. //
  50. // Copyright(C), by Jeffrey B. Layton, 1994
  51. // Version JBL 940915
  52. //--------------------------------------------------------------------------------
  53.  
  54. rfile tfchk
  55. rfile tf2ss
  56. rfile isempty
  57. rfile abcdchk
  58. rfile lsim
  59.  
  60. step = function(a,b,c,d,iu,t)
  61. {
  62.    local(nargs,Dum,num,den,A,B,C,D,msg,estr,IU,T,n,x,y)
  63.  
  64. // Count number of input arguments
  65.    nargs=0;
  66.    if (exist(a)) {nargs=nargs+1;}
  67.    if (exist(b)) {nargs=nargs+1;}
  68.    if (exist(c)) {nargs=nargs+1;}
  69.    if (exist(d)) {nargs=nargs+1;}
  70.    if (exist(iu)) {nargs=nargs+1;}
  71.    if (exist(t)) {nargs=nargs+1;}
  72.  
  73. // Check system type
  74.    if (nargs < 4) {
  75.  
  76. // T.F. - convert
  77.        Dum=tfchk(a,b);
  78.        num=Dum.numc;
  79.        den=Dum.denc;
  80.        Dum=tf2ss(num,den);
  81.        A=Dum.a;
  82.        B=Dum.b;
  83.        C=Dum.c;
  84.        D=Dum.d;
  85.        IU=1;
  86.        if (exist(c)) {
  87.            T=c;
  88.            if (T.nr == 1) {
  89.                T=T.';
  90.            }
  91.        else
  92.            T=[0.0:20.0:0.1];
  93.            T=T.';
  94.        }
  95.    else
  96. // S.S.
  97.        A=a;
  98.        B=b;
  99.        C=c;
  100.        D=d;
  101.        if (exist(iu)) {
  102.            IU=iu;
  103.            if (exist(t)) {
  104.                T=t;
  105.                if (T.nr == 1) {
  106.                    T=T.';
  107.                }
  108.            else
  109.                T=[0.0:20.0:0.1];
  110.                T=T.';
  111.            }
  112.        else
  113.            IU=B.nc;
  114.            T=[0.0:20.0:0.1];
  115.            T=T.';
  116.        }
  117.        msg="";
  118.        msg=abcdchk(A,B,C,D);
  119.        if (msg != "") {
  120.            estr="lsim: "+msg;
  121.            error(estr);
  122.        }
  123.    }
  124.  
  125. // Perform Simulation (use lsim)
  126.    n=length(T);
  127.    for (i in 1:IU) {
  128. // Set B and D matrices for the ith input
  129.         BI=B[;i];
  130.         DI=D[;i];
  131.         Dum=lsim(A,BI,C,DI,ones(n,1),T,zeros(BI.nr,BI.nc));
  132.         x=Dum.x;
  133.         y=Dum.y;
  134.    }
  135.  
  136.    return << x=x; y=y >>
  137. };
  138.