home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21fb.zip / octave / doc / octave.i08 (.txt) < prev    next >
GNU Info File  |  2000-01-15  |  51KB  |  1,120 lines

  1. This is Info file octave, produced by Makeinfo-1.64 from the input file
  2. octave.tex.
  3. START-INFO-DIR-ENTRY
  4. * Octave: (octave).    Interactive language for numerical computations.
  5. END-INFO-DIR-ENTRY
  6.    Copyright (C) 1996, 1997 John W. Eaton.
  7.    Permission is granted to make and distribute verbatim copies of this
  8. manual provided the copyright notice and this permission notice are
  9. preserved on all copies.
  10.    Permission is granted to copy and distribute modified versions of
  11. this manual under the conditions for verbatim copying, provided that
  12. the entire resulting derived work is distributed under the terms of a
  13. permission notice identical to this one.
  14.    Permission is granted to copy and distribute translations of this
  15. manual into another language, under the above conditions for modified
  16. versions.
  17. File: octave,  Node: Ordinary Differential Equations,  Next: Differential-Algebraic Equations,  Prev: Differential Equations,  Up: Differential Equations
  18. Ordinary Differential Equations
  19. ===============================
  20.    The function `lsode' can be used to solve ODEs of the form
  21.      dx
  22.      -- = f (x, t)
  23.      dt
  24. using Hindmarsh's ODE solver LSODE.
  25.  - Loadable Function:  lsode (FCN, X0, T, T_CRIT)
  26.      Return a matrix of X as a function of T, given the initial state
  27.      of the system X0.  Each row in the result matrix corresponds to
  28.      one of the elements in the vector T.  The first element of T
  29.      corresponds to the initial state X0, so that the first row of the
  30.      output is X0.
  31.      The first argument, FCN, is a string that names the function to
  32.      call to compute the vector of right hand sides for the set of
  33.      equations.  It must have the form
  34.           XDOT = f (X, T)
  35.      where XDOT and X are vectors and T is a scalar.
  36.      The fourth argument is optional, and may be used to specify a set
  37.      of times that the ODE solver should not integrate past.  It is
  38.      useful for avoiding difficulties with singularities and points
  39.      where there is a discontinuity in the derivative.
  40.    Here is an example of solving a set of three differential equations
  41. using `lsode'.  Given the function
  42.      function xdot = f (x, t)
  43.      
  44.        xdot = zeros (3,1);
  45.      
  46.        xdot(1) = 77.27 * (x(2) - x(1)*x(2) + x(1) \
  47.                  - 8.375e-06*x(1)^2);
  48.        xdot(2) = (x(3) - x(1)*x(2) - x(2)) / 77.27;
  49.        xdot(3) = 0.161*(x(1) - x(3));
  50.      
  51.      endfunction
  52. and the initial condition `x0 = [ 4; 1.1; 4 ]', the set of equations
  53. can be integrated using the command
  54.      t = linspace (0, 500, 1000);
  55.      
  56.      y = lsode ("f", x0, t);
  57.    If you try this, you will see that the value of the result changes
  58. dramatically between T = 0 and 5, and again around T = 305.  A more
  59. efficient set of output points might be
  60.      t = [0, logspace (-1, log10(303), 150), \
  61.              logspace (log10(304), log10(500), 150)];
  62.  - Loadable Function:  lsode_options (OPT, VAL)
  63.      When called with two arguments, this function allows you set
  64.      options parameters for the function `lsode'.  Given one argument,
  65.      `lsode_options' returns the value of the corresponding option.  If
  66.      no arguments are supplied, the names of all the available options
  67.      and their current values are displayed.
  68.    See Alan C. Hindmarsh, `ODEPACK, A Systematized Collection of ODE
  69. Solvers', in Scientific Computing, R. S. Stepleman, editor, (1983) for
  70. more information about the inner workings of `lsode'.
  71. File: octave,  Node: Differential-Algebraic Equations,  Prev: Ordinary Differential Equations,  Up: Differential Equations
  72. Differential-Algebraic Equations
  73. ================================
  74.    The function `dassl' can be used to solve DAEs of the form
  75.      0 = f (x-dot, x, t),    x(t=0) = x_0, x-dot(t=0) = x-dot_0
  76. using Petzold's DAE solver DASSL.
  77.  - Loadable Function: [X, XDOT] = dassl (FCN, X0, XDOT0, T, T_CRIT)
  78.      Return a matrix of states and their first derivatives with respect
  79.      to T.  Each row in the result matrices correspond to one of the
  80.      elements in the vector T.  The first element of T corresponds to
  81.      the initial state X0 and derivative XDOT0, so that the first row
  82.      of the output X is X0 and the first row of the output XDOT is
  83.      XDOT0.
  84.      The first argument, FCN, is a string that names the function to
  85.      call to compute the vector of residuals for the set of equations.
  86.      It must have the form
  87.           RES = f (X, XDOT, T)
  88.      where X, XDOT, and RES are vectors, and T is a scalar.
  89.      The second and third arguments to `dassl' specify the initial
  90.      condition of the states and their derivatives, and the fourth
  91.      argument specifies a vector of output times at which the solution
  92.      is desired, including the time corresponding to the initial
  93.      condition.
  94.      The set of initial states and derivatives are not strictly
  95.      required to be consistent.  In practice, however, DASSL is not
  96.      very good at determining a consistent set for you, so it is best
  97.      if you ensure that the initial values result in the function
  98.      evaluating to zero.
  99.      The fifth argument is optional, and may be used to specify a set of
  100.      times that the DAE solver should not integrate past.  It is useful
  101.      for avoiding difficulties with singularities and points where
  102.      there is a discontinuity in the derivative.
  103.  - Loadable Function:  dassl_options (OPT, VAL)
  104.      When called with two arguments, this function allows you set
  105.      options parameters for the function `lsode'.  Given one argument,
  106.      `dassl_options' returns the value of the corresponding option.  If
  107.      no arguments are supplied, the names of all the available options
  108.      and their current values are displayed.
  109.    See K. E. Brenan, et al., `Numerical Solution of Initial-Value
  110. Problems in Differential-Algebraic Equations', North-Holland (1989) for
  111. more information about the implementation of DASSL.
  112.    % DO NOT EDIT!  Generated automatically by munge-texi.
  113. File: octave,  Node: Optimization,  Next: Statistics,  Prev: Differential Equations,  Up: Top
  114. Optimization
  115. ************
  116. * Menu:
  117. * Quadratic Programming::
  118. * Nonlinear Programming::
  119. * Linear Least Squares::
  120. File: octave,  Node: Quadratic Programming,  Next: Nonlinear Programming,  Prev: Optimization,  Up: Optimization
  121. Quadratic Programming
  122. =====================
  123. File: octave,  Node: Nonlinear Programming,  Next: Linear Least Squares,  Prev: Quadratic Programming,  Up: Optimization
  124. Nonlinear Programming
  125. =====================
  126. File: octave,  Node: Linear Least Squares,  Prev: Nonlinear Programming,  Up: Optimization
  127. Linear Least Squares
  128. ====================
  129.  - Function File: [BETA, V, R] = gls (Y, X, O)
  130.      Generalized least squares estimation for the multivariate model `Y
  131.      = X * B + E' with `mean (E) =  0' and `cov (vec (E)) = (S^2)*O',
  132.      where Y is a T by P matrix, X is a T by K  matrix, B is a K by P
  133.      matrix, E is a T by P matrix, and O is a TP by TP  matrix.
  134.      Each row of Y and X is an observation and each column a variable.
  135.      The return values BETA, V, and R are defined as  follows.
  136.     BETA
  137.           The GLS estimator for B.
  138.     V
  139.           The GLS estimator for `S^2'.
  140.     R
  141.           The matrix of GLS residuals, `R = Y - X * BETA'.
  142.  - Function File: [BETA, SIGMA, R] = ols (Y, X)
  143.      Ordinary least squares estimation for the multivariate model `Y =
  144.      X*B + E' with `mean (E) = 0' and `cov (vec (E)) = kron (S, I)'.
  145.      where Y is a T by P matrix, X is a T by K  matrix, B is a K by P
  146.      matrix, and E is a T  by P matrix.
  147.      Each row of Y and X is an observation and each column a  variable.
  148.      The return values BETA, SIGMA, and R are defined as  follows.
  149.     BETA
  150.           The OLS estimator for B, `BETA = pinv (X) * Y', where `pinv
  151.           (X)' denotes the pseudoinverse of X.
  152.     SIGMA
  153.           The OLS estimator for the matrix S,
  154.                SIGMA = (Y-X*BETA)'
  155.                   * (Y-X*BETA)
  156.                   / (T-rank(X))
  157.     R
  158.           The matrix of OLS residuals, `R = Y - X * BETA'.
  159.    % DO NOT EDIT!  Generated automatically by munge-texi.
  160. File: octave,  Node: Statistics,  Next: Sets,  Prev: Optimization,  Up: Top
  161. Statistics
  162. **********
  163.    I hope that someday Octave will include more statistics functions.
  164. If you would like to help improve Octave in this area, please contact
  165. (bug-octave@bevo.che.wisc.edu).
  166.  - Function File:  mean (X, OPT)
  167.      If X is a vector, compute the mean of the elements of X
  168.            mean (x) = SUM_i x(i) / N
  169.       If X is a matrix, compute the mean for each column and return them
  170.      in a row vector.
  171.      With the optional argument OPT, the kind of mean computed can be
  172.      selected.  The following options are recognized:
  173.     `"a"'
  174.           Compute the (ordinary) arithmetic mean.  This is the default.
  175.     `"g"'
  176.           Computer the geometric mean.
  177.     `"h"'
  178.           Compute the harmonic mean.
  179.  - Function File:  median (X)
  180.      If X is a vector, compute the median value of the elements of X.
  181.                        x(ceil(N/2)),             N odd
  182.            median(x) =
  183.                        (x(N/2) + x((N/2)+1))/2,  N even
  184.       If X is a matrix, compute the median value for each  column
  185.      and return them in a row vector.
  186.  - Function File:  std (X)
  187.      If X is a vector, compute the standard deviation of the elements
  188.      of X.
  189.            std (x) = sqrt (sumsq (x - mean (x)) / (n - 1))
  190.       If X is a matrix, compute the standard deviation for  each
  191.      column and return them in a row vector.
  192.  - Function File:  cov (X, Y)
  193.      If each row of X and Y is an observation and each column is  a
  194.      variable, the (I,J)-th entry of `cov (X, Y)' is the covariance
  195.      between the I-th  variable in X and the J-th variable in Y.  If
  196.      called  with one argument, compute `cov (X, X)'.
  197.  - Function File:  corrcoef (X, Y)
  198.      If each row of X and Y is an observation and each column is  a
  199.      variable, the (I,J)-th entry of `corrcoef (X, Y)' is the
  200.      correlation between the I-th variable in X and the J-th variable
  201.      in Y.   If called with one argument, compute `corrcoef (X, X)'.
  202.  - Function File:  kurtosis (X)
  203.      If X is a vector of length N, return the kurtosis
  204.            kurtosis (x) = N^(-1) std(x)^(-4) sum ((x - mean(x)).^4) - 3
  205.      of X.  If X is a matrix, return the row vector containing  the
  206.      kurtosis of each column.
  207.  - Function File:  mahalanobis (X, Y)
  208.      Return the Mahalanobis' D-square distance between the multivariate
  209.      samples X and Y, which must have the same number of  components
  210.      (columns), but may have a different number of observations  (rows).
  211.  - Function File:  skewness (X)
  212.      If X is a vector of length N, return the skewness
  213.            skewness (x) = N^(-1) std(x)^(-3) sum ((x - mean(x)).^3)
  214.      of X.  If X is a matrix, return the row vector containing  the
  215.      skewness of each column.
  216.    % DO NOT EDIT!  Generated automatically by munge-texi.
  217. File: octave,  Node: Sets,  Next: Polynomial Manipulations,  Prev: Statistics,  Up: Top
  218.    Octave has a limited set of functions for managing sets of data,
  219. where a set is defined as a collection unique elements.
  220.  - Function File:  create_set (X)
  221.      Return a row vector containing the unique values in X, sorted in
  222.      ascending order.  For example,
  223.            create_set ([ 1, 2; 3, 4; 4, 2 ])
  224.           => [ 1, 2, 3, 4 ]
  225.  - Function File:  union (X, Y)
  226.      Return the set of elements that are in either of the sets X and Y.
  227.      For example,
  228.            union ([ 1, 2, 4 ], [ 2, 3, 5 ])
  229.           => [ 1, 2, 3, 4, 5 ]
  230.  - Function File:  intersection (X, Y)
  231.      Return the set of elements that are in both sets X and Y.   For
  232.      example,
  233.            intersection ([ 1, 2, 3 ], [ 2, 3, 5 ])
  234.           => [ 2, 3 ]
  235.  - Function File:  complement (X, Y)
  236.      Return the elements of set Y that are not in set X.  For  example,
  237.            complement ([ 1, 2, 3 ], [ 2, 3, 5 ])
  238.           => 5
  239.    % DO NOT EDIT!  Generated automatically by munge-texi.
  240. File: octave,  Node: Polynomial Manipulations,  Next: Control Theory,  Prev: Sets,  Up: Top
  241. Polynomial Manipulations
  242. ************************
  243.    In Octave, a polynomial is represented by its coefficients (arranged
  244. in descending order).  For example, a vector  C of length  N+1
  245. corresponds to the following polynomial of order  N
  246.      p(x) = C(1) x^N + ... + C(N) x + C(N+1).
  247.  - Function File:  compan (C)
  248.      Compute the companion matrix corresponding to polynomial
  249.      coefficient  vector C.
  250.      The companion matrix is
  251.                 _                                                        _
  252.                |  -c(2)/c(1)   -c(3)/c(1)  ...  -c(N)/c(1)  -c(N+1)/c(1)  |
  253.                |       1            0      ...       0             0      |
  254.                |       0            1      ...       0             0      |
  255.            A = |       .            .   .            .             .      |
  256.                |       .            .       .        .             .      |
  257.                |       .            .           .    .             .      |
  258.                |_      0            0      ...       1             0     _|
  259.      The eigenvalues of the companion matrix are equal to the roots of
  260.      the  polynomial.
  261.  - Function File:  conv (A, B)
  262.      Convolve two vectors.
  263.      `y = conv (a, b)' returns a vector of length equal to `length (a)
  264.      + length (b) - 1'.   If A and B are polynomial coefficient
  265.      vectors, `conv'  returns the coefficients of the product
  266.      polynomial.
  267.  - Function File:  deconv (Y, A)
  268.      Deconvolve two vectors.
  269.      `[b, r] = deconv (y, a)' solves for B and R such that `y = conv
  270.      (a, b) + r'.
  271.      If Y and A are polynomial coefficient vectors, B will  contain the
  272.      coefficients of the polynomial quotient and R will be  a remander
  273.      polynomial of lowest order.
  274.  - Function File:  poly (A)
  275.      If A is a square N-by-N matrix, `poly (A)'  is the row vector of
  276.      the coefficients of `det (z * eye (N) - a)',  the characteristic
  277.      polynomial of A.  If X is a vector, `poly (X)' is a vector of
  278.      coefficients of the polynomial  whose roots are the elements of X.
  279.  - Function File:  polyderiv (C)
  280.      Return the coefficients of the derivative of the polynomial whose
  281.      coefficients are given by vector C.
  282.  - Function File: [P, YF] = polyfit (X, Y, N)
  283.      Return the coefficients of a polynomial P(X) of degree N that
  284.      minimizes `sumsq (p(x(i)) - y(i))',   to best fit the data in the
  285.      least squares sense.
  286.      If two output arguments are requested, the second contains the
  287.      values of  the polynomial for each value of X.
  288.  - Function File:  polyinteg (C)
  289.      Return the coefficients of the integral of the polynomial whose
  290.      coefficients are represented by the vector C.
  291.      The constant of integration is set to zero.
  292.  - Function File:  polyreduce (C)
  293.      Reduces a polynomial coefficient vector to a minimum number of
  294.      terms by  stripping off any leading zeros.
  295.  - Function File:  polyval (C, X)
  296.      Evaluate a polynomial.
  297.      `polyval (C, X)' will evaluate the polynomial at the  specified
  298.      value of X.
  299.      If X is a vector or matrix, the polynomial is evaluated at each of
  300.      the elements of X.
  301.  - Function File:  polyvalm (C, X)
  302.      Evaluate a polynomial in the matrix sense.
  303.      `polyvalm (C, X)' will evaluate the polynomial in the  matrix
  304.      sense, i.e. matrix multiplication is used instead of element by
  305.      element multiplication as is used in polyval.
  306.      The argument X must be a square matrix.
  307.  - Function File:  residue (B, A, TOL)
  308.      If B and A are vectors of polynomial coefficients, then  residue
  309.      calculates the partial fraction expansion corresponding to the
  310.      ratio of the two polynomials.
  311.      The function `residue' returns R, P, K, and E, where the vector R
  312.      contains the residue terms, P  contains the pole values, K
  313.      contains the coefficients of a direct  polynomial term (if it
  314.      exists) and E is a vector containing the  powers of the
  315.      denominators in the partial fraction terms.
  316.      Assuming B and A represent polynomials   P (s) and Q(s)   we have:
  317.             P(s)    M       r(m)         N
  318.             ---- = SUM -------------  + SUM k(i)*s^(N-i)
  319.             Q(s)   m=1 (s-p(m))^e(m)    i=1
  320.      where M is the number of poles (the length of the R, P, and E
  321.      vectors) and N is the length of the K  vector.
  322.      The argument TOL is optional, and if not specified, a default
  323.      value of 0.001 is assumed.  The tolerance value is used to
  324.      determine  whether poles with small imaginary components are
  325.      declared real.  It is  also used to determine if two poles are
  326.      distinct.  If the ratio of the  imaginary part of a pole to the
  327.      real part is less than TOL, the  imaginary part is discarded.  If
  328.      two poles are farther apart than TOL they are distinct.  For
  329.      example,
  330.             b = [1, 1, 1];
  331.             a = [1, -5, 8, -4];
  332.             [r, p, k, e] = residue (b, a);
  333.           => r = [-2, 7, 3]
  334.           => p = [2, 2, 1]
  335.           => k = [](0x0)
  336.           => e = [1, 2, 1]
  337.      which implies the following partial fraction expansion
  338.                    s^2 + s + 1       -2        7        3
  339.               ------------------- = ----- + ------- + -----
  340.               s^3 - 5s^2 + 8s - 4   (s-2)   (s-2)^2   (s-1)
  341.  - Function File:  roots (V)
  342.      For a vector V with N components, return  the roots of the
  343.      polynomial
  344.            v(1) * z^(N-1) + ... + v(N-1) * z + v(N).
  345.    % DO NOT EDIT!  Generated automatically by munge-texi.
  346. File: octave,  Node: Control Theory,  Next: Signal Processing,  Prev: Polynomial Manipulations,  Up: Top
  347. Control Theory
  348. **************
  349.    The Octave Control Systems Toolbox (OCST) was initially developed by
  350. Dr. A. Scottedward Hodel (a.s.hodel@eng.auburn.edu) with the assistance
  351. of his students
  352.    * R. Bruce Tenison (btenison@dibbs.net),
  353.    * David C. Clem,
  354.    * John E. Ingram (John.Ingram@sea.siemans.com), and
  355.    * Kristi McGowan.  This development was supported in part by NASA's
  356. Marshall Space Flight Center as part of an in-house CACSD environment.
  357. Additional important contributions were made by Dr. Kai Mueller
  358. (mueller@ifr.ing.tu-bs.de) and Jose Daniel Munoz Frias (`place.m').
  359.    An on-line menu-driven tutorial is available via `DEMOcontrol';
  360. beginning OCST users should start with this program.
  361.  - Function File :   DEMOcontrol
  362.      Octave Control Systems Toolbox demo/tutorial program.  The demo
  363.      allows the user to select among several categories of OCST
  364.      function:
  365.            octave:1> DEMOcontrol
  366.             O C T A V E    C O N T R O L   S Y S T E M S   T O O L B O X
  367.            Octave Controls System Toolbox Demo
  368.           
  369.              [ 1] System representation
  370.              [ 2] Block diagram manipulations
  371.              [ 3] Frequency response functions
  372.              [ 4] State space analysis functions
  373.              [ 5] Root locus functions
  374.              [ 6] LQG/H2/Hinfinity functions
  375.              [ 7] End
  376.       Command examples are interactively run for users to observe
  377.      the use  of OCST functions.
  378. * Menu:
  379. * sysstruct::
  380. * sysinterface::
  381. * sysdisp::
  382. * blockdiag::
  383. * numerical::
  384. * sysprop::
  385. * systime::
  386. * sysfreq::
  387. * cacsd::
  388. * misc::
  389. File: octave,  Node: sysstruct,  Next: sysinterface,  Prev: Control Theory,  Up: Control Theory
  390. System Data Structure
  391. =====================
  392. * Menu:
  393. * sysstructvars::
  394. * sysstructtf::
  395. * sysstructzp::
  396. * sysstructss::
  397.    The OCST stores all dynamic systems in a single data structure
  398. format that can represent continuous systems, discrete-systems, and
  399. mixed (hybrid) systems in state-space form, and can also represent
  400. purely continuous/discrete systems in either transfer function or
  401. pole-zero form. In order to provide more flexibility in treatment of
  402. discrete/hybrid systems, the OCST also keeps a record of which system
  403. outputs are sampled.
  404.    Octave structures are accessed with a syntax much like that used by
  405. the C programming language.  For consistency in use of the data
  406. structure used in the OCST, it is recommended that the system structure
  407. access m-files be used (*Note sysinterface::).  Some elements of the
  408. data structure are absent depending on the internal system
  409. representation(s) used.  More than one system representation can be
  410. used for SISO systems; the OCST m-files ensure that all representations
  411. used are consistent with one another.
  412.  - Function File :  sysrepdemo
  413.      Tutorial for the use of the system data structure functions.
  414. File: octave,  Node: sysstructvars,  Next: sysstructtf,  Prev: sysstruct,  Up: sysstruct
  415. Variables common to all OCST system formats
  416. -------------------------------------------
  417.    The data structure elements (and variable types) common to all
  418. system representations are listed below; examples of the initialization
  419. and use of the system data structures are given in subsequent sections
  420. and in the online demo `DEMOcontrol'.
  421.      The respective number of continuous and discrete states in the
  422.      system (scalar)
  423. INNAME, OUTNAME
  424.      list of name(s) of the system input, output signal(s). (list of
  425.      strings)
  426.      System status vector.  (vector)
  427.      This vector indicates both what representation was used to
  428.      initialize the system data structure (called the primary system
  429.      type) and which other representations are currently up-to-date
  430.      with the primary system type (*Note structaccess::).
  431.     SYS(0)
  432.           primary system type
  433.           =0 for tf form (initialized with `tf2sys' or `fir2sys')
  434.           =1 for zp form (initialized with `zp2sys')
  435.           =2 for ss form (initialized with `ss2sys')
  436.     SYS(1:3)
  437.           boolean flags to indicate whether tf, zp, or ss, respectively,
  438.                  are "up to date" (whether it is safe to use the
  439.           variables           associated with these representations).
  440.           These flags are changed when calls are made to the
  441.           `sysupdate' command.
  442.      Discrete time sampling period  (nonnegative scalar).   TSAM is set
  443.      to 0 for continuous time systems.
  444.      Discrete-time output list (vector)
  445.      indicates which outputs are discrete time (i.e.,     produced by
  446.      D/A converters) and which are continuous time.      yd(ii) = 0 if
  447.      output ii is continuous, = 1 if discrete.
  448.    The remaining variables of the  system data structure are only
  449. present if the corresponding entry of the `sys' vector is true (=1).
  450. File: octave,  Node: sysstructtf,  Next: sysstructzp,  Prev: sysstructvars,  Up: sysstruct
  451. `tf' format variables
  452. ---------------------
  453.      numerator coefficients   (vector)
  454.      denominator coefficients   (vector)
  455. File: octave,  Node: sysstructzp,  Next: sysstructss,  Prev: sysstructtf,  Up: sysstruct
  456. `zp' format variables
  457. ---------------------
  458.      system zeros   (vector)
  459.      system poles    (vector)
  460.      leading coefficient   (scalar)
  461. File: octave,  Node: sysstructss,  Prev: sysstructzp,  Up: sysstruct
  462. `ss' format variables
  463. ---------------------
  464. A,B,C,D
  465.      The usual state-space matrices. If a system has both
  466.      continuous and discrete states, they are sorted so that
  467.      continuous states come first, then discrete states
  468.      *Note* some functions (e.g., `bode', `hinfsyn') will not accept
  469.      systems with both discrete and continuous states/outputs
  470. STNAME
  471.      names of system states   (list of strings)
  472. File: octave,  Node: sysinterface,  Next: sysdisp,  Prev: sysstruct,  Up: Control Theory
  473. System Construction and Interface Functions
  474. ===========================================
  475.    Construction and manipulations of the OCST system data structure
  476. (*Note sysstruct::) requires attention to many details in order to
  477. ensure that data structure contents remain consistent.  Users are
  478. strongly encouraged to use the system interface functions in this
  479. section.  Functions for the formatted display in of system data
  480. structures are given in *Note sysdisp::.
  481. * Menu:
  482. * fir2sys::
  483. * ss2sys::
  484. * tf2sys::
  485. * zp2sys::
  486. * structaccess::
  487. * structintern::
  488. File: octave,  Node: fir2sys,  Next: ss2sys,  Prev: sysinterface,  Up: sysinterface
  489. Finite impulse response system interface functions
  490. --------------------------------------------------
  491.  - Function File :  SYS = fir2sys ( NUM{, TSAM, INNAME, OUTNAME } )
  492.      construct a system data structure from FIR description
  493.      *Inputs:*
  494.     NUM
  495.           vector of coefficients [c_0 c_1 ... c_n]  of the SISO FIR
  496.           transfer function
  497.           C(z) = c0 + c1*z^{-1} + c2*z^{-2} + ... + znz^{-n}
  498.     TSAM
  499.           sampling time (default: 1)
  500.     INNAME
  501.           name of input signal;  may be a string or a list with a
  502.           single entry.
  503.     OUTNAME
  504.           name of output signal; may be a string or a list with a
  505.           single entry.
  506.      *Outputs* SYS (system data structure)
  507.      *Example*
  508.            octave:1> sys = fir2sys([1 -1 2 4],0.342,"A/D input","filter output");
  509.            octave:2> sysout(sys)
  510.            Input(s)
  511.                    1: A/D input
  512.           
  513.            Output(s):
  514.                    1: filter output (discrete)
  515.           
  516.            Sampling interval: 0.342
  517.            transfer function form:
  518.            1*z^3 - 1*z^2 + 2*z^1 + 4
  519.            -------------------------
  520.            1*z^3 + 0*z^2 + 0*z^1 + 0
  521.  - Function File : [C, TSAM, INPUT, OUTPUT] = sys2fir (SYS)
  522.      Extract FIR data from system data structure; see *Note fir2sys::
  523.      for  parameter descriptions.
  524. File: octave,  Node: ss2sys,  Next: tf2sys,  Prev: fir2sys,  Up: sysinterface
  525. State space system interface functions
  526. --------------------------------------
  527.  - Function File :  SYS = ss2sys (A,B,C{,D, TSAM, N, NZ, STNAME,
  528.           INNAME, OUTNAME, OUTLIST})
  529.      Create system structure from state-space data.   May be continous,
  530.       discrete, or mixed (sampeled-data)
  531.      *Inputs*
  532.     A, B, C, D
  533.           usual state space matrices.
  534.           default: D = zero matrix
  535.     TSAM
  536.           sampling rate.  Default: tsam = 0 (continuous system)
  537.     N, NZ
  538.           number of continuous, discrete states in the system
  539.           default:
  540.          TSAM = 0
  541.                n = `rows'(A), nz = 0
  542.          TSAM > 0
  543.                n = 0,       nz = `rows'(A)
  544.                see below for system partitioning
  545.     STNAME
  546.           list of strings of state signal names
  547.           default (STNAME=[] on input): `x_n' for continuous states,
  548.           `xd_n' for discrete states
  549.     INNAME
  550.           list of strings of input signal names
  551.           default (INNAME = [] on input): `u_n'
  552.     OUTNAME
  553.           list of strings of input signal names
  554.           default (OUTNAME = [] on input): `y_n'
  555.     OUTLIST
  556.           list of indices of outputs y that are sampled
  557.           default:
  558.          TSAM = 0
  559.                `outlist = []'
  560.          TSAM > 0
  561.                `outlist = 1:`rows'(C)'
  562.           Unlike states, discrete/continous outputs may appear in any
  563.           order.
  564.           *Note* `sys2ss' returns a vector YD where YD(OUTLIST) = 1;
  565.           all other entries of YD are 0.
  566.      *Outputs* OUTSYS = system data structure
  567.      *System partitioning*
  568.      Suppose for simplicity that outlist specified    that the first
  569.      several outputs were continuous and the remaining outputs    were
  570.      discrete.  Then the system is partitioned as
  571.            x = [ xc ]  (n x 1)
  572.                [ xd ]  (nz x 1 discrete states)
  573.            a = [ acc acd ]  b = [ bc ]
  574.                [ adc add ]      [ bd ]
  575.            c = [ ccc ccd ]  d = [ dc ]
  576.                [ cdc cdd ]      [ dd ]
  577.           
  578.                (cdc = c(outlist,1:n), etc.)
  579.       with dynamic equations:   d/dt xc(t)     = acc*xc(t)      +
  580.      acd*xd(k*tsam) + bc*u(t)
  581.      xd((k+1)*tsam) = adc*xc(k*tsam) + add*xd(k*tsam) + bd*u(k*tsam)
  582.      yc(t)      = ccc*xc(t)      + ccd*xd(k*tsam) + dc*u(t)
  583.      yd(k*tsam) = cdc*xc(k*tsam) + cdd*xd(k*tsam) + dd*u(k*tsam)
  584.      *Signal partitions*
  585.                    | continuous      | discrete               |
  586.            ----------------------------------------------------
  587.            states  | stname(1:n,:)   | stname((n+1):(n+nz),:) |
  588.            ----------------------------------------------------
  589.            outputs | outname(cout,:) | outname(outlist,:)     |
  590.            ----------------------------------------------------
  591.       where cout is the list of in 1:`rows'(P)  that are not
  592.      contained in outlist. (Discrete/continuous outputs  may be entered
  593.      in any order desired by the user.)
  594.      *Example*
  595.            octave:1> a = [1 2 3; 4 5 6; 7 8 10];
  596.            octave:2> b = [0 0 ; 0 1 ; 1 0];
  597.            octave:3> c = eye(3);
  598.            octave:4> sys = ss2sys(a,b,c,[],0,3,0,list("volts","amps","joules"));
  599.            octave:5> sysout(sys);
  600.            Input(s)
  601.                    1: u_1
  602.                    2: u_2
  603.           
  604.            Output(s):
  605.                    1: y_1
  606.                    2: y_2
  607.                    3: y_3
  608.           
  609.            state-space form:
  610.            3 continuous states, 0 discrete states
  611.            State(s):
  612.                    1: volts
  613.                    2: amps
  614.                    3: joules
  615.           
  616.            A matrix: 3 x 3
  617.               1   2   3
  618.               4   5   6
  619.               7   8  10
  620.            B matrix: 3 x 2
  621.              0  0
  622.              0  1
  623.              1  0
  624.            C matrix: 3 x 3
  625.              1  0  0
  626.              0  1  0
  627.              0  0  1
  628.            D matrix: 3 x 3
  629.              0  0
  630.              0  0
  631.              0  0
  632.       Notice that the D matrix is constructed  by default to the
  633.      correct dimensions.  Default input and output signals names were
  634.      assigned  since none were given.
  635.  - Function File : [A,B,C,D,TSAM,N,NZ,STNAME,INNAME,OUTNAME,YD] =
  636.           sys2ss (SYS)
  637.      Extract state space representation from system data structure.
  638.      *Inputs* SYS system data structure (*Note sysstruct::)
  639.      *Outputs*
  640.     A,B,C,D
  641.           state space matrices for sys
  642.     TSAM
  643.           sampling time of sys (0 if continuous)
  644.     N, NZ
  645.           number of continuous, discrete states (discrete states come
  646.                   last in state vector X)
  647.     STNAME, INNAME, OUTNAME
  648.           signal names (lists of strings);  names of states,
  649.           inputs, and outputs, respectively
  650.     YD
  651.           binary vector; YD(II) is 1 if output Y(II)$   is discrete
  652.           (sampled); otherwise  YD(II) 0.
  653.      A warning massage is printed if the system is a mixed  continuous
  654.      and discrete system
  655.      *Example*
  656.            octave:1> sys=tf2sys([1 2],[3 4 5]);
  657.            octave:2> [a,b,c,d] = sys2ss(sys)
  658.            a =
  659.               0.00000   1.00000
  660.              -1.66667  -1.33333
  661.            b =
  662.              0
  663.              1
  664.            c = 0.66667  0.33333
  665.            d = 0
  666. File: octave,  Node: tf2sys,  Next: zp2sys,  Prev: ss2sys,  Up: sysinterface
  667. Transfer function system interface functions
  668. --------------------------------------------
  669.  - Function File :  SYS =  tf2sys( NUM, DEN {, TSAM, INNAME, OUTNAME })
  670.      build system data structure from transfer function format data
  671.      *Inputs*
  672.     NUM, DEN
  673.           coefficients of numerator/denominator polynomials
  674.     TSAM
  675.           sampling interval. default: 0 (continuous time)
  676.     INNAME, OUTNAME
  677.           input/output signal names; may be a string or list with a
  678.           single string  entry.
  679.      *Outputs* SYS = system data structure
  680.      *Example*
  681.            octave:1> sys=tf2sys([2 1],[1 2 1],0.1);
  682.            octave:2> sysout(sys)
  683.            Input(s)
  684.                    1: u_1
  685.            Output(s):
  686.                    1: y_1 (discrete)
  687.            Sampling interval: 0.1
  688.            transfer function form:
  689.            2*z^1 + 1
  690.            -----------------
  691.            1*z^2 + 2*z^1 + 1
  692. File: octave,  Node: zp2sys,  Next: structaccess,  Prev: tf2sys,  Up: sysinterface
  693. Zero-pole system interface functions
  694. ------------------------------------
  695.  - Function File :  SYS = zp2sys (ZER,POL,K{,TSAM,INNAME,OUTNAME})
  696.      Create system data structure from zero-pole data
  697.      *Inputs*
  698.     ZER
  699.           vector of system zeros
  700.     POL
  701.           vector of system poles
  702.     K
  703.           scalar leading coefficient
  704.     TSAM
  705.           sampling period. default: 0 (continuous system)
  706.     INNAME, OUTNAME
  707.           input/output signal names (lists of strings)
  708.      *Outputs*   sys: system data structure
  709.      *Example*
  710.            octave:1> sys=zp2sys([1 -1],[-2 -2 0],1);
  711.            octave:2> sysout(sys)
  712.            Input(s)
  713.                    1: u_1
  714.            Output(s):
  715.                    1: y_1
  716.            zero-pole form:
  717.            1 (s - 1) (s + 1)
  718.            -----------------
  719.            s (s + 2) (s + 2)
  720.  - Function File : [ZER, POL, K, TSAM, INNAME, OUTNAME] = sys2zp (SYS)
  721.      Extract zero/pole/leading coefficient information from a system
  722.      data  structure
  723.      See *Note zp2sys:: for parameter descriptions.
  724.      *Example*
  725.            octave:1> sys=ss2sys([1 -2; -1.1,-2.1],[0;1],[1 1]);
  726.            octave:2> [zer,pol,k] = sys2zp(sys)
  727.            zer = 3.0000
  728.            pol =
  729.              -2.6953
  730.               1.5953
  731.            k = 1
  732. File: octave,  Node: structaccess,  Next: structintern,  Prev: zp2sys,  Up: sysinterface
  733. Data structure access functions
  734. -------------------------------
  735.  - Function File : RETSYS = syschnames (SYS, OPT, LIST, NAMES)
  736.      Superseded by `syssetsignals'
  737.  - Function File :  retsys = syschtsam ( sys,tsam )
  738.      This function changes the sampling time (tsam) of the system.
  739.      Exits with  an error if sys is purely continuous time.
  740.  - Function File :  [N, NZ, M, P,YD] = sysdimensions (SYS{, OPT})
  741.      return the number of states, inputs, and/or outputs in the system
  742.      SYS.
  743.      *Inputs*
  744.     SYS
  745.           system data structure
  746.     OPT
  747.           String indicating which dimensions are desired.  Values:
  748.          `"all"'
  749.                (default) return all parameters as specified under
  750.                Outputs below.
  751.          `"cst"'
  752.                return N= number of continuous states
  753.          `"dst"'
  754.                return N= number of discrete states
  755.          `"in"'
  756.                return N= number of inputs
  757.          `"out"'
  758.                return N= number of outputs
  759.      *Outputs*
  760.     N
  761.           number of continuous states (or individual requested
  762.           dimension as specified  by OPT).
  763.     NZ
  764.           number of discrete states
  765.     M
  766.           number of system inputs
  767.     P
  768.           number of system outputs
  769.     YD
  770.           binary vector; YD(II) is nonzero if output II is  discrete.
  771.           yd(ii) = 0 if output II is continous
  772.  - Function File :  SYSTYPE = sysgettype ( SYS )
  773.      return the initial system type of the system
  774.      *Inputs* SYS: system data structure
  775.      *Outputs* SYSTYPE: string indicating how the structure was
  776.      initially              constructed:        values: `"ss"', `"zp"',
  777.      or `"tf"'
  778.      *Note* FIR initialized systems return `systype="tf"'.
  779.  - Function File :  SYS = sysupdate ( SYS, OPT )
  780.      Update the internal representation of a system.
  781.      *Inputs*
  782.     SYS:
  783.           system data structure
  784.     OPT
  785.           string:
  786.          `"tf"'
  787.                update transfer function form
  788.          `"zp"'
  789.                update zero-pole form
  790.          `"ss"'
  791.                update state space form
  792.          `"all"'
  793.                all of the above
  794.      *Outputs* RETSYS: contains union of data in sys and requested data.
  795.      If requested data in sys is already up to date then retsys=sys.
  796.      Conversion to `tf' or `zp' exits with an error if the system is
  797.      mixed continuous/digital.
  798. File: octave,  Node: structintern,  Prev: structaccess,  Up: sysinterface
  799. Data structure internal functions
  800. ---------------------------------
  801.  - Function File :   syschnamesl
  802.      used internally in syschnames   item olist: index list
  803.      old_names: original list names   inames: new names   listname:
  804.      name of index list
  805.      combines the two string lists old_names and inames
  806.  - Function File :  IONAME = sysdefioname (N,STR {,M})
  807.      return default input or output names given N, STR, M.  N is the
  808.      final value, STR is the string prefix, and M  is start value
  809.      used internally, minimal argument checking
  810.      *Example* `ioname = sysdefioname(5,"u",3)'  returns the list:
  811.            ioname =
  812.            (
  813.              [1] = u_3
  814.              [2] = u_4
  815.              [3] = u_5
  816.            )
  817.  - Function File :  STNAME = sysdefstname (N, NZ)
  818.      return default state names given N, NZ
  819.      used internally, minimal argument checking
  820. File: octave,  Node: sysdisp,  Next: blockdiag,  Prev: sysinterface,  Up: Control Theory
  821. System display functions
  822. ========================
  823.  - Function File :  Y = polyout ( C{, X})
  824.      write formatted polynomial
  825.               c(x) = c(1) * x^n + ... + c(n) x + c(n+1)
  826.        to string Y or to the screen (if Y is omitted) X defaults to the
  827.      string `"s"'
  828.    See also: polyval, polyvalm, poly, roots, conv, deconv, residue,
  829. filter, polyderiv, polyinteg, polyout
  830.  - Function File :   zpout (ZER, POL, K{, X})
  831.      print formatted zero-pole form to the screen.  X defaults to the
  832.      string `"s"'
  833.  - Function File :   outlist (LMAT{, TABCHAR, YD, ILIST })
  834.      Prints an enumerated list of strings.    internal use only;
  835.      minimal argument checking performed
  836.      *Inputs*
  837.     LMAT
  838.           list of strings
  839.     TABCHAR
  840.           tab character (default: none)
  841.     YD
  842.           indices of strings to append with the string "(discrete)"
  843.                  (used by SYSOUT; minimal checking of this argument)
  844.            yd = []  indicates all outputs are continuous
  845.     ILIST
  846.           index numbers to print with names.
  847.           default: `1:rows(lmat)'
  848.      *Outputs*     prints the list to the screen, numbering each string
  849.      in order.
  850. File: octave,  Node: blockdiag,  Next: numerical,  Prev: sysdisp,  Up: Control Theory
  851. Block Diagram Manipulations
  852. ===========================
  853.    *Note systime::
  854.    Unless otherwise noted, all parameters (input,output) are system
  855. data structures.
  856.  - Function File :  outputs = bddemo ( inputs )
  857.      Octave Controls toolbox demo: Block Diagram Manipulations demo
  858.  - Function File : SYS = buildssic(CLST, ULST, OLST, ILST, S1, S2, S3,
  859.           S4, S5, S6, S7, S8)
  860.      Contributed by Kai Mueller.
  861.      Form an arbitrary complex (open or closed loop) system in
  862.      state-space form from several systems. "`buildssic'" can   easily
  863.      (despite it's cryptic syntax) integrate transfer functions   from
  864.      a complex block diagram into a single system with one call.
  865.      This function is especially useful for building open loop
  866.      interconnections for H_infinity and H2 designs or for closing
  867.      loops with these controllers.
  868.      Although this function is general purpose, the use of "`sysgroup'"
  869.       "`sysmult'", "`sysconnect'" and the like is recommended for
  870.      standard   operations since they can handle mixed discrete and
  871.      continuous   systems and also the names of inputs, outputs, and
  872.      states.
  873.      The parameters consist of 4 lists that describe the connections
  874.      outputs and inputs and up to 8 systems s1-s8.    Format of the
  875.      lists:
  876.     CLST
  877.           connection list, describes the input signal of  each system.
  878.           The maximum number of rows of Clst is  equal to the sum of
  879.           all inputs of s1-s8.
  880.           Example: `[1 2 -1; 2 1 0]' ==> new input 1 is old inpout 1  +
  881.           output 2 - output 1, new input 2 is old input 2  + output 1.
  882.           The order of rows is arbitrary.
  883.     ULST
  884.           if not empty the old inputs in vector Ulst will
  885.           be appended to the outputs. You need this if you
  886.           want to "pull out" the input of a system. Elements
  887.           are input numbers of s1-s8.
  888.     OLST
  889.           output list, specifiy the outputs of the resulting
  890.           systems. Elements are output numbers of s1-s8.
  891.           The numbers are alowed to be negative and may
  892.           appear in any order. An empty matrix means             all
  893.           outputs.
  894.     ILST
  895.           input list, specifiy the inputs of the resulting
  896.           systems. Elements are input numbers of s1-s8.
  897.           The numbers are alowed to be negative and may
  898.           appear in any order. An empty matrix means             all
  899.           inputs.
  900.      Example:  Very simple closed loop system.
  901.            w        e  +-----+   u  +-----+
  902.             --->o--*-->|  K  |--*-->|  G  |--*---> y
  903.                 ^  |   +-----+  |   +-----+  |
  904.               - |  |            |            |
  905.                 |  |            +----------------> u
  906.                 |  |                         |
  907.                 |  +-------------------------|---> e
  908.                 |                            |
  909.                 +----------------------------+
  910.      The closed loop system GW can be optained by
  911.            GW = buildssic([1 2; 2 -1], 2, [1 2 3], 2, G, K);
  912.     CLST
  913.           (1. row) connect input 1 (G) with output 2 (K).   (2. row)
  914.           connect input 2 (K) with neg. output 1 (G).
  915.     ULST
  916.           append input of (2) K to the number of outputs.
  917.     OLST
  918.           Outputs are output of 1 (G), 2 (K) and appended output 3
  919.           (from Ulst).
  920.     ILST
  921.           the only input is 2 (K).
  922.      Here is a real example:
  923.                                     +----+
  924.                -------------------->| W1 |---> v1
  925.            z   |                    +----+
  926.            ----|-------------+                   || GW   ||     => min.
  927.                |             |                        vz   infty
  928.                |    +---+    v      +----+
  929.                *--->| G |--->O--*-->| W2 |---> v2
  930.                |    +---+       |   +----+
  931.                |                |
  932.                |                v
  933.               u                  y
  934.      The closed loop system GW from [z; u]' to [v1; v2; y]' can be
  935.      obtained by (all SISO systems):
  936.            GW = buildssic([1, 4; 2, 4; 3, 1], 3, [2, 3, 5],
  937.                           [3, 4], G, W1, W2, One);
  938.       where "One" is a unity gain (auxillary) function with order 0.
  939.      (e.g. `One = ugain(1);')
  940.  - Function File :  OUTSYS  = jet707 ( )
  941.      Creates linearized state space model of a Boeing 707-321 aircraft
  942.      at v=80m/s. (M = 0.26, Ga0 = -3 deg, alpha0 = 4 deg, kappa = 50
  943.      deg)   System inputs:   (1) thrust   and (2) elevator angle
  944.      System outputs:  (1) airspeed and (2) pitch angle   Ref: R.
  945.      Brockhaus: Flugregelung (Flight Control), Springer, 1994
  946.      see also: ord2
  947.      Contributed by Kai Mueller
  948.    See also: jet707 (MIMO example, Boeing 707-321 aircraft model)
  949.  - Function File :  SYS = sysadd ( GSYS,HSYS)
  950.      returns SYS = GSYS + HSYS.
  951.         * Exits with  an error if GSYS and HSYS are not compatibly
  952.           dimensioned.
  953.         * Prints a warning message is system states have identical
  954.           names;    duplicate names are given a suffix to make them
  955.           unique.
  956.         * SYS input/output names are taken from GSYS.
  957.                      ________
  958.                 ----|  Gsys  |---
  959.            u   |    ----------  +|
  960.            -----                (_)----> y
  961.                |     ________   +|
  962.                 ----|  Hsys  |---
  963.                      --------
  964.  - Function File : RETSYS = sysconnect (SYS, OUT_IDX,IN_IDX{,ORDER,
  965.           TOL})
  966.      Close the loop from specified outputs to respective specified
  967.      inputs
  968.      *Inputs*
  969.     SYS
  970.           system data structure
  971.     OUT_IDX, IN_IDX
  972.           list of connections indices; y(out_idx(ii))  is connected to
  973.           u(in_idx(ii)).
  974.     ORDER
  975.           logical flag (default = 0)
  976.          `0'
  977.                leave inputs and outputs in their original order
  978.          `1'
  979.                permute inputs and outputs to the order shown in the
  980.                diagram below
  981.     TOL
  982.           tolerance for singularities in algebraic loops default: 200EPS
  983.      *Outputs* SYS: resulting closed loop system.
  984.      *Method* `sysconnect' internally permutes selected inputs, outputs
  985.      as shown   below, closes the loop, and then permutes inputs and
  986.      outputs back to their   original order
  987.                             ____________________
  988.             u_1       ----->|                  |----> y_1
  989.                             |        sys       |
  990.                     old u_2 |                  |
  991.            u_2* ---->(+)--->|                  |----->y_2
  992.            (in_idx)   ^     -------------------|    | (out_idx)
  993.                       |                             |
  994.                       -------------------------------
  995.       The input that has the summing junction added to it has an *
  996.      added to the end  of the input name.
  997.  - Function File:  [CSYS, ACD, CCD] =  syscont (SYS)
  998.      Extract the purely continuous subsystem of an input system.
  999.      *Inputs* SYS is a system data structure
  1000.      *Outputs*
  1001.     CSYS
  1002.           is the purely continuous input/output connections of SYS
  1003.     ACD, CCD:
  1004.           connections from discrete states to continuous states,
  1005.                   discrete states to continuous outputs, respectively.
  1006.           returns CSYS empty if no continuous/continous path exists
  1007.  - Function File :  [N_TOT, ST_C, ST_D, Y_C, Y_D] = syscont_disc(SYS)
  1008.      Used internally in syscont and sysdisc.
  1009.      *Inputs*  SYS is a system data structure.
  1010.      *Outputs*
  1011.     N_TOT
  1012.           total number of states
  1013.     ST_C
  1014.           vector of continuous state indices (empty if none)
  1015.     ST_D
  1016.           vector of discrete state indices (empty if none)
  1017.     Y_C
  1018.           vector of continuous output indices
  1019.     Y_D
  1020.           vector of discrete output indices
  1021.  - Function File :  [DSYS, ADC, CDC] = sysdisc (SYS)
  1022.      *Inputs* SYS = system data structure
  1023.      *Outputs*
  1024.     DSYS
  1025.           purely discrete portion of sys (returned empty if there is
  1026.                  no purely discrete path from inputs to outputs)
  1027.     ADC, CDC
  1028.           connections from continuous states to discrete states and
  1029.           discrete      outputs, respectively.
  1030.  - Function File :  SYS = sysgroup ( ASYS, BSYS)
  1031.      Combines two systems into a single system
  1032.      *Inputs* ASYS, BSYS: system data structures
  1033.      *Outputs* sys = block diag(Asys,Bsys)
  1034.                     __________________
  1035.                     |    ________    |
  1036.            u1 ----->|--> | Asys |--->|----> y1
  1037.                     |    --------    |
  1038.                     |    ________    |
  1039.            u2 ----->|--> | Bsys |--->|----> y2
  1040.                     |    --------    |
  1041.                     ------------------
  1042.                          Ksys
  1043.       The function also rearranges the internal state-space
  1044.      realization of SYS  so that the   continuous states come first and
  1045.      the discrete states come last.    If there are duplicate names,
  1046.      the second name has a unique suffix appended   on to the end of
  1047.      the name.
  1048.  - Function File :  NAMES = sysgroupn (NAMES)
  1049.      names = sysgroupn(names)  Locate and mark duplicate names  inputs:
  1050.        names: list of signal names    kind: kind of signal name (used
  1051.      for diagnostic message purposes only)  outputs:    returns names
  1052.      with unique suffixes added; diagnostic warning       message is
  1053.      printed to inform the user of the new signal name
  1054.      used internally in sysgroup and elsewhere.
  1055.  - Function File :  SYS = sysmult( ASYS, BSYS)
  1056.      Compute sys = Asys*Bsys (series connection):
  1057.            u   ----------     ----------
  1058.            --->|  Bsys  |---->|  Asys  |--->
  1059.                ----------     ----------
  1060.       A warning occurs if there is direct feed-through  from an
  1061.      input of Bsys or a continuous state of Bsys through a discrete
  1062.      output of Bsys to a continuous state or output in Asys (system
  1063.      data structure  does not recognize discrete inputs).
  1064.  - Function File :  RETSYS = sysprune ( ASYS, OUT_IDX, IN_IDX)
  1065.      Extract specified inputs/outputs from a system
  1066.      *Inputs*
  1067.     ASYS
  1068.           system data structure
  1069.     OUT_IDX,IN_IDX
  1070.           list of connections indices; the new         system has
  1071.           outputs y(out_idx(ii)) and inputs u(in_idx(ii)).          May
  1072.           select as [] (empty matrix) to specify all outputs/inputs.
  1073.      *Outputs* RETSYS: resulting system
  1074.                       ____________________
  1075.            u1 ------->|                  |----> y1
  1076.             (in_idx)  |       Asys       | (out_idx)
  1077.            u2 ------->|                  |----| y2
  1078.              (deleted)-------------------- (deleted)
  1079.  - Function File :  PV = sysreorder( VLEN, {varlist)
  1080.      *Inputs* VLEN=vector length, LIST= a subset of `[1:vlen]',
  1081.      *Outputs* PV: a permutation vector to order elements of `[1:vlen]'
  1082.      in `list' to the end of a vector.
  1083.      Used internally by `sysconnect' to permute vector elements to their
  1084.       desired locations.
  1085.  - Function File : SYS = sysscale (SYS, OUTSCALE, INSCALE{, OUTNAME,
  1086.           INNAME})
  1087.      scale inputs/outputs of a system.
  1088.      *Inputs*     sys: structured system     outscale, inscale:
  1089.      constant matrices of appropriate dimension
  1090.      *Outputs* SYS: resulting open loop system:
  1091.                  -----------    -------    -----------
  1092.            u --->| inscale |--->| sys |--->| outscale |---> y
  1093.                  -----------    -------    -----------
  1094.        If the input names and output names (each a list of strings)
  1095.      are not given and the scaling matrices   are not square, then
  1096.      default names will be given to the inputs and/or   outputs.
  1097.      A warning message is printed if outscale attempts to add continuous
  1098.      system outputs to discrete system outputs; otherwise YD is  set
  1099.      appropriately in the returned value of SYS.
  1100.  - Function File :  SYS = syssub (GSYS, HSYS)
  1101.      returns sys = Gsys - Hsys
  1102.      Method: GSYS and HSYS are connected in parallel   The input vector
  1103.      is connected to both systems; the outputs are   subtracted.
  1104.      Returned system names are those of GSYS.
  1105.                      ________
  1106.                 ----|  Gsys  |---
  1107.            u   |    ----------  +|
  1108.            -----                (_)----> y
  1109.                |     ________   -|
  1110.                 ----|  Hsys  |---
  1111.                      --------
  1112.  - Function File :  WSYS = wgt1o (VL, VH, FC)
  1113.      State space description of a first order weighting function.
  1114.      Weighting function are needed by the H2/H_infinity design
  1115.      procedure.    These function are part of thye augmented plant P
  1116.      (see hinfdemo   for an applicattion example).
  1117.      vl = Gain @ low frequencies
  1118.      vh = Gain @ high frequencies
  1119.      fc = Corner frequency (in Hz, *not* in rad/sec)
  1120.