home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21eb.zip / octave / doc / octave.i09 < prev    next >
Encoding:
GNU Info File  |  1999-05-13  |  41.3 KB  |  1,289 lines

  1. This is Info file octave, produced by Makeinfo-1.64 from the input file
  2. octave.tex.
  3.  
  4. START-INFO-DIR-ENTRY
  5. * Octave: (octave).    Interactive language for numerical computations.
  6. END-INFO-DIR-ENTRY
  7.  
  8.    Copyright (C) 1996, 1997 John W. Eaton.
  9.  
  10.    Permission is granted to make and distribute verbatim copies of this
  11. manual provided the copyright notice and this permission notice are
  12. preserved on all copies.
  13.  
  14.    Permission is granted to copy and distribute modified versions of
  15. this manual under the conditions for verbatim copying, provided that
  16. the entire resulting derived work is distributed under the terms of a
  17. permission notice identical to this one.
  18.  
  19.    Permission is granted to copy and distribute translations of this
  20. manual into another language, under the above conditions for modified
  21. versions.
  22.  
  23. 
  24. File: octave,  Node: ord2,  Next: parallel,  Prev: jet707,  Up: blockdiag
  25.  
  26.  - Function File :  OUTSYS = ord2 (NFREQ, DAMP{[, GAIN})
  27.      Creates a continuous 2nd order system with parameters: *Inputs*
  28.     NFREQ:   NATURAL FREQUENCY [HZ]. (NOT IN RAD/S)
  29.     DAMP:    DAMPING COEFFICIENT
  30.     GAIN:    DC-GAIN
  31.           This is steady state value only for damp > 0.
  32.           gain is assumed to be 1.0 if ommitted.  *Outputs* OUTSYS
  33.      system data structure has representation with `w = 2 * pi *
  34.      nfreq':
  35.               /                                        \
  36.               | / -2w*damp -w \  / w \                 |
  37.           G = | |             |, |   |, [ 0  gain ], 0 |
  38.               | \   w       0 /  \ 0 /                 |
  39.               \                                        /
  40.      *See also* `jet707' (MIMO example, Boeing 707-321 aircraft model)
  41.  
  42. 
  43. File: octave,  Node: parallel,  Next: sysadd,  Prev: ord2,  Up: blockdiag
  44.  
  45.  - Function File :  SYSP = parallel(ASYS, BSYS)
  46.      Forms the parallel connection of two systems.
  47.                    ____________________
  48.                    |      ________    |
  49.           u  ----->|----> | Asys |--->|----> y1
  50.               |    |      --------    |
  51.               |    |      ________    |
  52.               |--->|----> | Bsys |--->|----> y2
  53.                    |      --------    |
  54.                    --------------------
  55.                         Ksys
  56.  
  57. 
  58. File: octave,  Node: sysadd,  Next: sysappend,  Prev: parallel,  Up: blockdiag
  59.  
  60.  - Function File :  SYS = sysadd ( GSYS,HSYS)
  61.      returns SYS = GSYS + HSYS.
  62.         * Exits with an error if GSYS and HSYS are not compatibly
  63.           dimensioned.
  64.  
  65.         * Prints a warning message is system states have identical
  66.           names;   duplicate names are given a suffix to make them
  67.           unique.
  68.  
  69.         * SYS input/output names are taken from GSYS.
  70.                     ________
  71.                ----|  Gsys  |---
  72.           u   |    ----------  +|
  73.           -----                (_)----> y
  74.               |     ________   +|
  75.                ----|  Hsys  |---
  76.                     --------
  77.  
  78. 
  79. File: octave,  Node: sysappend,  Next: sysconnect,  Prev: sysadd,  Up: blockdiag
  80.  
  81.  - Function File : RETSYS = sysappend (SYS,B{, C, D, OUTNAME, INNAME,
  82.           YD})
  83.      appends new inputs and/or outputs to a system
  84.  
  85.      *Inputs*
  86.     SYS
  87.           system data structure
  88.  
  89.     B
  90.           matrix to be appended to sys "B" matrix (empty if none)
  91.  
  92.     C
  93.           matrix to be appended to sys "C" matrix (empty if none)
  94.  
  95.     D
  96.           revised sys d matrix (can be passed as [] if the revised d is
  97.           all zeros)
  98.  
  99.     OUTNAME
  100.           list of names for new outputs
  101.  
  102.     INNAME
  103.           list of names for new inputs
  104.  
  105.     YD
  106.           binary vector; `yd(ii)=0' indicates a continuous output;
  107.           `yd(ii)=1' indicates a discrete output.
  108.  
  109.      *Outputs* SYS
  110.              sys.b := [sys.b , b]
  111.              sys.c := [sys.c  ]
  112.                       [ c     ]
  113.              sys.d := [sys.d | D12 ]
  114.                       [D21   | D22 ]
  115.      where D12, D21, and D22 are the appropriate dimensioned
  116.      blocks of the input parameter D.
  117.         * The leading block D11 of D is ignored.
  118.  
  119.         * If INNAME and OUTNAME are not given as arguments,         the
  120.           new inputs and outputs are be assigned default names.
  121.  
  122.         * YD is a binary vector of length rows(c) that indicates
  123.           continuous/sampled outputs.  Default value for YD is:
  124.  
  125.         * SYS = continuous or mixed YD = `zeros(1,rows(c))'
  126.  
  127.         * SYS = discrete YD = `ones(1,rows(c))'
  128.  
  129.  
  130. 
  131. File: octave,  Node: sysconnect,  Next: syscont,  Prev: sysappend,  Up: blockdiag
  132.  
  133.  - Function File : RETSYS = sysconnect (SYS, OUT_IDX,IN_IDX{,ORDER,
  134.           TOL})
  135.      Close the loop from specified outputs to respective specified
  136.      inputs
  137.  
  138.      *Inputs*
  139.     SYS
  140.           system data structure
  141.  
  142.     OUT_IDX, IN_IDX
  143.           list of connections indices; `y(out_idx(ii))' is connected to
  144.           `u(in_idx(ii))'.
  145.  
  146.     ORDER
  147.           logical flag (default = 0)
  148.          `0'
  149.                leave inputs and outputs in their original order
  150.  
  151.          `1'
  152.                permute inputs and outputs to the order shown in the
  153.                diagram below
  154.  
  155.     TOL
  156.           tolerance for singularities in algebraic loops default: 200EPS
  157.  
  158.      *Outputs*  SYS: resulting closed loop system.
  159.  
  160.      *Method* `sysconnect' internally permutes selected inputs, outputs
  161.      as shown  below, closes the loop, and then permutes inputs and
  162.      outputs back to their  original order
  163.                            ____________________
  164.            u_1       ----->|                  |----> y_1
  165.                            |        sys       |
  166.                    old u_2 |                  |
  167.           u_2* ---->(+)--->|                  |----->y_2
  168.           (in_idx)   ^     -------------------|    | (out_idx)
  169.                      |                             |
  170.                      -------------------------------
  171.      The input that has the summing junction added to it has an *
  172.      added to the end of the input name.
  173.  
  174.  
  175. 
  176. File: octave,  Node: syscont,  Next: syscont_disc,  Prev: sysconnect,  Up: blockdiag
  177.  
  178.  - Function File:  [CSYS, ACD, CCD] =  syscont (SYS)
  179.      Extract the purely continuous subsystem of an input system.
  180.  
  181.      *Inputs* SYS is a system data structure
  182.  
  183.      *Outputs*
  184.     CSYS
  185.           is the purely continuous input/output connections of SYS
  186.  
  187.     ACD, CCD:
  188.           connections from discrete states to continuous states,
  189.                  discrete states to continuous outputs, respectively.
  190.  
  191.           returns CSYS empty if no continuous/continous path exists
  192.  
  193.  
  194. 
  195. File: octave,  Node: syscont_disc,  Next: sysdisc,  Prev: syscont,  Up: blockdiag
  196.  
  197.  - Function File :  [N_TOT, ST_C, ST_D, Y_C, Y_D] = syscont_disc(SYS)
  198.      Used internally in syscont and sysdisc.
  199.  
  200.      *Inputs*  SYS is a system data structure.
  201.  
  202.      *Outputs*
  203.     N_TOT
  204.           total number of states
  205.  
  206.     ST_C
  207.           vector of continuous state indices (empty if none)
  208.  
  209.     ST_D
  210.           vector of discrete state indices (empty if none)
  211.  
  212.     Y_C
  213.           vector of continuous output indices
  214.  
  215.     Y_D
  216.           vector of discrete output indices
  217.  
  218.  
  219. 
  220. File: octave,  Node: sysdisc,  Next: sysdup,  Prev: syscont_disc,  Up: blockdiag
  221.  
  222.  - Function File :  [DSYS, ADC, CDC] = sysdisc (SYS)
  223.      *Inputs* SYS = system data structure
  224.  
  225.      *Outputs*
  226.     DSYS
  227.           purely discrete portion of sys (returned empty if there is
  228.                 no purely discrete path from inputs to outputs)
  229.  
  230.     ADC, CDC
  231.           connections from continuous states to discrete states and
  232.           discrete     outputs, respectively.
  233.  
  234.  
  235. 
  236. File: octave,  Node: sysdup,  Next: sysgroup,  Prev: sysdisc,  Up: blockdiag
  237.  
  238.  - Function File :  RETSYS = sysdup (ASYS, OUT_IDX, IN_IDX)
  239.      Duplicate specified input/output connections of a system
  240.  
  241.      *Inputs*
  242.     ASYS
  243.           system data structure (*Note ss2sys::)
  244.  
  245.     OUT_IDX,IN_IDX
  246.           list of connections indices;        duplicates are made of
  247.           Y(OUT_IDX(II)) and U(IN_IDX(II)).
  248.  
  249.      *Outputs* RETSYS: resulting closed loop system:     duplicated i/o
  250.      names are appended with a `"+"' suffix.
  251.  
  252.      *Method* `sysdup' creates copies of selected inputs and outputs as
  253.      shown below.  u1/y1 is the set of original inputs/outputs, and
  254.      u2,y2 is the set of duplicated inputs/outputs in the order
  255.      specified  in IN_IDX, OUT_IDX, respectively
  256.                     ____________________
  257.           u1  ----->|                  |----> y1
  258.                     |       Asys       |
  259.           u2 ------>|                  |----->y2
  260.           (in_idx)  -------------------| (out_idx)
  261.  
  262.  
  263. 
  264. File: octave,  Node: sysgroup,  Next: sysgroupn,  Prev: sysdup,  Up: blockdiag
  265.  
  266.  - Function File :  SYS = sysgroup ( ASYS, BSYS)
  267.      Combines two systems into a single system
  268.  
  269.      *Inputs* ASYS, BSYS: system data structures
  270.  
  271.      *Outputs*  `sys = block diag(Asys,Bsys)'
  272.                    __________________
  273.                    |    ________    |
  274.           u1 ----->|--> | Asys |--->|----> y1
  275.                    |    --------    |
  276.                    |    ________    |
  277.           u2 ----->|--> | Bsys |--->|----> y2
  278.                    |    --------    |
  279.                    ------------------
  280.                         Ksys
  281.      The function also rearranges the internal state-space
  282.      realization of SYS so that the  continuous states come first and
  283.      the discrete states come last.   If there are duplicate names, the
  284.      second name has a unique suffix appended  on to the end of the
  285.      name.
  286.  
  287.  
  288. 
  289. File: octave,  Node: sysgroupn,  Next: sysmult,  Prev: sysgroup,  Up: blockdiag
  290.  
  291.  - Function File :  NAMES = sysgroupn (NAMES)
  292.      Locate and mark duplicate names.  Used internally in sysgroup (and
  293.      elsewhere).
  294.  
  295. 
  296. File: octave,  Node: sysmult,  Next: sysprune,  Prev: sysgroupn,  Up: blockdiag
  297.  
  298.  - Function File :  SYS = sysmult( ASYS, BSYS)
  299.      Compute `sys = Asys*Bsys' (series connection):
  300.           u   ----------     ----------
  301.           --->|  Bsys  |---->|  Asys  |--->
  302.               ----------     ----------
  303.      A warning occurs if there is direct feed-through from an
  304.      input of Bsys or a continuous state of Bsys through a discrete
  305.      output of Bsys to a continuous state or output in Asys (system
  306.      data structure does not recognize discrete inputs).
  307.  
  308. 
  309. File: octave,  Node: sysprune,  Next: sysreorder,  Prev: sysmult,  Up: blockdiag
  310.  
  311.  - Function File :  RETSYS = sysprune ( ASYS, OUT_IDX, IN_IDX)
  312.      Extract specified inputs/outputs from a system
  313.  
  314.      *Inputs*
  315.     ASYS
  316.           system data structure
  317.  
  318.     OUT_IDX,IN_IDX
  319.           list of connections indices; the new        system has
  320.           outputs y(out_idx(ii)) and inputs u(in_idx(ii)).         May
  321.           select as [] (empty matrix) to specify all outputs/inputs.
  322.  
  323.      *Outputs* RETSYS: resulting system
  324.                      ____________________
  325.           u1 ------->|                  |----> y1
  326.            (in_idx)  |       Asys       | (out_idx)
  327.           u2 ------->|                  |----| y2
  328.             (deleted)-------------------- (deleted)
  329.  
  330.  
  331. 
  332. File: octave,  Node: sysreorder,  Next: sysscale,  Prev: sysprune,  Up: blockdiag
  333.  
  334.  - Function File :  PV = sysreorder( VLEN, {varlist)
  335.      *Inputs* VLEN=vector length, LIST= a subset of `[1:vlen]',
  336.  
  337.      *Outputs*  PV: a permutation vector to order elements of
  338.      `[1:vlen]' in `list' to the end of a vector.
  339.  
  340.      Used internally by `sysconnect' to permute vector elements to their
  341.      desired locations.
  342.  
  343. 
  344. File: octave,  Node: sysscale,  Next: syssub,  Prev: sysreorder,  Up: blockdiag
  345.  
  346.  - Function File : SYS = sysscale (SYS, OUTSCALE, INSCALE{, OUTNAME,
  347.           INNAME})
  348.      scale inputs/outputs of a system.
  349.  
  350.      *Inputs*    sys: structured system    outscale, inscale: constant
  351.      matrices of appropriate dimension
  352.  
  353.      *Outputs* SYS: resulting open loop system:
  354.                 -----------    -------    -----------
  355.           u --->| inscale |--->| sys |--->| outscale |---> y
  356.                 -----------    -------    -----------
  357.       If the input names and output names (each a list of strings) are
  358.      not given and the scaling matrices  are not square, then default
  359.      names will be given to the inputs and/or  outputs.
  360.  
  361.      A warning message is printed if outscale attempts to add continuous
  362.      system outputs to discrete system outputs; otherwise YD is set
  363.      appropriately in the returned value of SYS.
  364.  
  365. 
  366. File: octave,  Node: syssub,  Prev: sysscale,  Up: blockdiag
  367.  
  368.  - Function File :  SYS = syssub (GSYS, HSYS)
  369.      returns `sys = Gsys - Hsys'
  370.  
  371.      Method: GSYS and HSYS are connected in parallel  The input vector
  372.      is connected to both systems; the outputs are  subtracted.
  373.      Returned system names are those of GSYS.
  374.                     ________
  375.                ----|  Gsys  |---
  376.           u   |    ----------  +|
  377.           -----                (_)----> y
  378.               |     ________   -|
  379.                ----|  Hsys  |---
  380.                     --------
  381.  
  382.  - Function File :  OUTSYS = ugain(n)
  383.      Creates a system with unity gain, no states.   This trivial system
  384.      is sometimes needed to create arbitrary  complex systems from
  385.      simple systems with buildssic.   Watch out if you are forming
  386.      sampled systems since "ugain"  does not contain a sampling period.
  387.  
  388.      See also: hinfdemo (MIMO H_infinty example, Boeing 707-321
  389.      aircraft model)
  390.  
  391.  
  392.  - Function File :  WSYS = wgt1o (VL, VH, FC)
  393.      State space description of a first order weighting function.
  394.  
  395.      Weighting function are needed by the H2/H_infinity design
  396.      procedure.   These function are part of thye augmented plant P
  397.      (see hinfdemo  for an applicattion example).
  398.  
  399.      vl = Gain @ low frequencies
  400.  
  401.      vh = Gain @ high frequencies
  402.  
  403.      fc = Corner frequency (in Hz, *not* in rad/sec)
  404.  
  405. 
  406. File: octave,  Node: numerical,  Next: sysprop,  Prev: blockdiag,  Up: Control Theory
  407.  
  408. Numerical Functions
  409. ===================
  410.  
  411.  - Function File:  are (A, B, C, OPT)
  412.      Solve the algebraic Riccati equation
  413.           a' * x + x * a - x * b * x + c = 0
  414.  
  415.      *Inputs*
  416.  
  417.      for identically dimensioned square matrices
  418.     A
  419.           NxN matrix.
  420.  
  421.     B
  422.           NxN matrix or NxM matrix; in the latter case   B is replaced
  423.           by `b:=b*b''.
  424.  
  425.     C
  426.           NxN matrix or PxM matrix; in the latter case   C is replaced
  427.           by `c:=c'*c'.
  428.  
  429.     OPT
  430.           (optional argument; default = `"B"'): String option passed to
  431.           `balance' prior to ordered Schur decomposition.
  432.  
  433.      *Outputs* X: solution of the ARE.
  434.  
  435.      *Method* Laub's Schur method (IEEE Transactions on Automatic
  436.      Control, 1979) is applied to the appropriate Hamiltonian matrix.
  437.  
  438.  
  439.  - Function File:  dare (A, B, C, R, OPT)
  440.      Return the solution, X of the discrete-time algebraic Riccati
  441.      equation
  442.           a' x a - x + a' x b (r + b' x b)^(-1) b' x a + c = 0
  443.  
  444.      *Inputs*
  445.     A
  446.           N by N.
  447.  
  448.     B
  449.           N by M.
  450.  
  451.     C
  452.           N by N, symmetric positive semidefinite, or P by N.  In the
  453.           latter case `c:=c'*c' is used.
  454.  
  455.     R
  456.           M by M, symmetric positive definite (invertible).
  457.  
  458.     OPT
  459.           (optional argument; default = `"B"'): String option passed to
  460.           `balance' prior to ordered QZ decomposition.
  461.  
  462.      *Outputs* X solution of DARE.
  463.  
  464.      *Method* Generalized eigenvalue approach (Van Dooren; SIAM J.
  465.      Sci. Stat. Comput., Vol 2) applied  to the appropriate symplectic
  466.      pencil.
  467.  
  468.      See also: Ran and Rodman, "Stable Hermitian Solutions of Discrete
  469.      Algebraic Riccati Equations," Mathematics of Control, Signals and
  470.      Systems, Vol 5, no 2 (1992)  pp 165-194.
  471.  
  472.  
  473.  - Function File :  M = dgram ( A, B)
  474.      Return controllability grammian of discrete time system
  475.             x(k+1) = a x(k) + b u(k)
  476.  
  477.      *Inputs*
  478.     A
  479.           N by N matrix
  480.  
  481.     B
  482.           N by M matrix
  483.  
  484.      *Outputs* M (N by N) satisfies
  485.            a m a' - m + b*b' = 0
  486.  
  487.  
  488.  - Function File: X =  dlyap (A, B)
  489.      Solve the discrete-time Lyapunov equation
  490.  
  491.      *Inputs*
  492.     A
  493.           N by N matrix
  494.  
  495.     B
  496.           Matrix: N by N, N by M, or P by N.       *Outputs*   X:
  497.      matrix satisfying appropriate discrete time Lyapunov equation.
  498.      Options:
  499.         * B is square: solve `a x a' - x + b = 0'
  500.  
  501.         * B is not square: X satisfies either
  502.                      a x a' - x + b b' = 0
  503.                        or
  504.                 a' x a - x + b' b = 0,
  505.                        whichever is appropriate.     *Method*   Uses
  506.      Schur decomposition method as in Kitagawa,     `An Algorithm for
  507.      Solving the Matrix Equation X =     FXF' + S',   International
  508.      Journal of Control, Volume 25, Number 5, pages 745-753   (1977).
  509.  
  510.      Column-by-column solution method as suggested in   Hammarling,
  511.      `Numerical Solution of the Stable, Non-Negative   Definite
  512.      Lyapunov Equation', IMA Journal of Numerical Analysis, Volume   2,
  513.      pages 303-323 (1982).
  514.  
  515.  
  516.  - Function File :  M = gram (A, B)
  517.      Return controllability grammian M of the continuous time system `
  518.      dx/dt = a x + b u'.
  519.  
  520.      M satisfies ` a m + m a' + b b' = 0 '.
  521.  
  522.  - Function File:  lyap (A, B, C)
  523.  - Function File:  lyap (A, B)
  524.      Solve the Lyapunov (or Sylvester) equation via the Bartels-Stewart
  525.       algorithm (Communications of the ACM, 1972).
  526.  
  527.      If A, B, and C are specified, then `lyap' returns   the solution
  528.      of the  Sylvester equation    A and B must be real matrices.
  529.  
  530.      *Note* `qzval' is obsolete; use `qz' instead.
  531.  
  532.  - Function File :   zgfmul
  533.  - Function File :   zgfslv
  534.  - Function File :   zginit
  535.  - Function File : RETSYS = zgpbal (ASYS)
  536.  - Function File :  zgreduce
  537.  - Function File :  [NONZ, ZER] = zgrownorm (MAT, MEPS)
  538.  - Function File :  x = zgscal (F, Z, N, M, P)
  539.  - Function File :   zgsgiv ( )
  540.  - Function File :  X = zgshsr( Y)
  541.      Used internally by `tzero'.  Minimal argument checking performed.
  542.  
  543.      Details involving major subroutines:
  544.     `zgpbal'
  545.           Implementation of zero computation generalized eigenvalue
  546.           problem  balancing method.  `zgpbal' computes a
  547.           state/input/output weighting that attempts to  reduced the
  548.           range of the magnitudes of the nonzero elements of [a,b,c,d]
  549.           The weighting uses scalar multiplication by powers of 2, so
  550.           no roundoff  will occur.
  551.  
  552.           `zgpbal' should be followed by `zgpred'
  553.  
  554.     `zgreduce'
  555.           Implementation of procedure REDUCE in (Emami-Naeini and Van
  556.           Dooren, Automatica, 1982).
  557.  
  558.     `zgrownorm'
  559.           Returns NONZ = number of rows of MAT whose two norm exceeds
  560.                MEPS, ZER = number of rows of mat whose two norm
  561.           is less than meps
  562.  
  563.     `zgscal'
  564.           Generalized conjugate gradient iteration to  solve
  565.           zero-computation generalized eigenvalue problem balancing
  566.           equation  `fx=z';  called by `zgepbal'
  567.  
  568.     `zgsgiv'
  569.           apply givens rotation c,s to column vector a,b
  570.  
  571.     `zgshsr'
  572.           Apply Householder vector based on `e^(m)' (all ones) to
  573.           (column vector) Y.  Called by `zgfslv'.
  574.  
  575.      References:
  576.     *ZGEP*
  577.           Hodel, "Computation of Zeros with Balancing," 1992, Linear
  578.           Algebra  and its Applications
  579.  
  580.     **Generalized CG**
  581.           Golub and Van Loan, "Matrix Computations, 2nd ed" 1989
  582.  
  583.  
  584. 
  585. File: octave,  Node: sysprop,  Next: systime,  Prev: numerical,  Up: Control Theory
  586.  
  587. System Analysis-Properties
  588. ==========================
  589.  
  590.  - Function File :   analdemo ( )
  591.      Octave Controls toolbox demo: State Space analysis demo
  592.  
  593.  - Function File: [N, M, P] = abcddim (A, B, C, D)
  594.      Check for compatibility of the dimensions of the matrices defining
  595.      the linear system [A, B, C, D] corresponding to
  596.  
  597.           dx/dt = a x + b u
  598.           y = c x + d u
  599.  
  600.      or a similar discrete-time system.
  601.  
  602.      If the matrices are compatibly dimensioned, then `abcddim' returns
  603.  
  604.     N
  605.           The number of system states.
  606.  
  607.     M
  608.           The number of system inputs.
  609.  
  610.     P
  611.           The number of system outputs.
  612.  
  613.      Otherwise `abcddim' returns N = M = P = -1.
  614.  
  615.      Note: n = 0 (pure gain block) is returned without warning.
  616.  
  617.      See also: is_abcd
  618.  
  619.  - Function File : [Y, MY, NY] = abcddims (X)
  620.      Used internally in `abcddim'.  If X is a zero-size matrix, both
  621.      dimensions are set to 0 in Y.  MY and NY are the row and column
  622.      dimensions of the result.
  623.  
  624.  - Function File : QS = ctrb(SYS {, B})
  625.  - Function File : QS = ctrb(A, B)
  626.      Build controllability matrix
  627.                        2       n-1
  628.           Qs = [ B AB A B ... A   B ]
  629.  
  630.      of a system data structure or the pair (A, B).
  631.  
  632.      *Note* `ctrb' forms the controllability matrix.         The
  633.      numerical properties of `is_controllable'        are much better
  634.      for controllability tests.
  635.  
  636.  - Function File : RETVAL = h2norm(SYS)
  637.      Computes the H2 norm of a system data structure (continuous time
  638.      only)
  639.  
  640.      Reference:  Doyle, Glover, Khargonekar, Francis, "State Space
  641.      Solutions to Standard  H2 and Hinf Control Problems", IEEE TAC
  642.      August 1989
  643.  
  644.  - Function File : [G, GMIN, GMAX] = hinfnorm(SYS{, TOL, GMIN, GMAX,
  645.           PTOL})
  646.      Computes the H infinity norm of a system data structure.
  647.  
  648.      *Inputs*
  649.     SYS
  650.           system data structure
  651.  
  652.     TOL
  653.           H infinity norm search tolerance (default: 0.001)
  654.  
  655.     GMIN
  656.           minimum value for norm search (default: 1e-9)
  657.  
  658.     GMAX
  659.           maximum value for norm search (default: 1e+9)
  660.  
  661.     PTOL
  662.           pole tolerance:
  663.              * if sys is continuous, poles with |real(pole)| <
  664.                ptol*||H|| (H is appropriate Hamiltonian) are considered
  665.                to be on the imaginary axis.
  666.  
  667.              * if sys is discrete, poles with |abs(pole)-1| <
  668.                ptol*||[s1,s2]|| (appropriate symplectic pencil) are
  669.                considered to be on the unit circle
  670.  
  671.              * Default: 1e-9
  672.  
  673.      *Outputs*
  674.     G
  675.           Computed gain, within TOL of actual gain.  G is returned as
  676.           Inf if the system is unstable.
  677.  
  678.     GMIN, GMAX
  679.           Actual system gain lies in the interval [GMIN, GMAX]
  680.  
  681.      References:  Doyle, Glover, Khargonekar, Francis, "State space
  682.      solutions to standard     H2 and Hinf control problems", IEEE TAC
  683.      August 1989  Iglesias and Glover, "State-Space approach to
  684.      discrete-time Hinf control,"     Int. J. Control, vol 54, #5, 1991
  685.      Zhou, Doyle, Glover, "Robust and Optimal Control," Prentice-Hall,
  686.      1996  $Revision: 1.9 $
  687.  
  688.  - Function File :  QB = obsv (SYS{, C})
  689.      Build observability matrix
  690.                | C        |
  691.                | CA       |
  692.           Qb = | CA^2     |
  693.                | ...      |
  694.                | CA^(n-1) |
  695.      of a system data structure or the pair (A, C).
  696.  
  697.      Note: `obsv()' forms the observability matrix.
  698.  
  699.      The numerical properties of is_observable()        are much better
  700.      for observability tests.
  701.  
  702.  - Function File : [ZER, POL]= pzmap (SYS)
  703.      Plots the zeros and poles of a system in the complex plane.
  704.      *Inputs*  SYS system data structure
  705.  
  706.      *Outputs* if omitted, the poles and zeros are plotted on the
  707.      screen.            otherwise, pol, zer are returned as the system
  708.      poles and zeros.            (see sys2zp for a preferable function
  709.      call)
  710.  
  711.  - Function File: outputs =  synKnames (inputs)
  712.      Return controller signal names based in plant signal names and
  713.      dimensions
  714.  
  715.  - Function File :  RETVAL = is_abcd( A{, B, C, D})
  716.      Returns RETVAL = 1 if the dimensions of A, B, C, D  are
  717.      compatible, otherwise RETVAL = 0 with an appropriate diagnostic
  718.      message printed to the screen.
  719.  
  720.  - Function File : [RETVAL, U] = is_controllable (SYS{, TOL})
  721.  - Function File : [RETVAL, U] = is_controllable (A{, B ,TOL})
  722.      Logical check for system controllability.
  723.  
  724.      *Inputs*
  725.     SYS
  726.           system data structure
  727.  
  728.     A, B
  729.           N by N, N by M matrices, respectively
  730.  
  731.     TOL
  732.           optional roundoff paramter.  default value: `10*eps'
  733.  
  734.      *Outputs*
  735.     RETVAL
  736.           Logical flag; returns true (1) if the system SYS or the pair
  737.           (A,B) is controllable, whichever was passed as input
  738.           arguments.
  739.  
  740.     U
  741.           U is an orthogonal basis of the controllable subspace.
  742.  
  743.      *Method* Controllability is determined by applying Arnoldi
  744.      iteration with complete re-orthogonalization to obtain an
  745.      orthogonal basis of the Krylov subspace
  746.           span ([b,a*b,...,a^{n-1}*b]).
  747.      The Arnoldi iteration is executed with `krylov' if the system has
  748.      a single input; otherwise a block Arnoldi iteration is performed
  749.      with `krylovb'.
  750.  
  751.      *See also* `is_observable', `is_stabilizable', `is_detectable',
  752.          `krylov', `krylovb'
  753.  
  754.  
  755.  - Function File :  [RETVAL, U] = is_detectable (A, C{, TOL})
  756.  - Function File :  [RETVAL, U] = is_detectable (SYS{, TOL})
  757.      Test for detactability (observability of unstable modes) of (A,C).
  758.  
  759.      Returns 1 if the system A or the pair (A,C)is  detectable, 0 if
  760.      not.
  761.  
  762.      *See* `is_stabilizable' for detailed description of arguments and
  763.      computational method.
  764.  
  765.  
  766.  - Function File :  [RETVAL, DGKF_STRUCT ] = is_dgkf (ASYS, NU, NY, TOL
  767.           )
  768.      Determine whether a continuous time state space system meets
  769.      assumptions of DGKF algorithm.   Partitions system into:
  770.           [dx/dt] = [A  | Bw  Bu  ][w]
  771.           [ z   ]   [Cz | Dzw Dzu ][u]
  772.           [ y   ]   [Cy | Dyw Dyu ]
  773.      or similar discrete-time system.  If necessary, orthogonal
  774.      transformations QW, QZ and nonsingular  transformations RU, RY are
  775.      applied to respective vectors W, Z, U, Y in order to satisfy DGKF
  776.      assumptions.  Loop shifting is used if DYU block is nonzero.
  777.  
  778.      *Inputs*
  779.     ASYS
  780.           system data structure
  781.  
  782.     NU
  783.           number of controlled inputs
  784.  
  785.     NY
  786.           number of measured outputs
  787.  
  788.     TOL
  789.           threshhold for 0.  Default: 200EPS *Outputs*
  790.     RETVAL
  791.           true(1) if system passes check, false(0) otherwise
  792.  
  793.     DGKF_STRUCT
  794.           data structure of `is_dgkf' results.  Entries:
  795.          NW, NZ
  796.                dimensions of W, Z
  797.  
  798.          A
  799.                system A matrix
  800.  
  801.          BW
  802.                (N x NW) QW-transformed disturbance input matrix
  803.  
  804.          BU
  805.                (N x NU) RU-transformed controlled input matrix;
  806.  
  807.                *Note* `B = [Bw Bu] '
  808.  
  809.          CZ
  810.                (NZ x N) Qz-transformed error output matrix
  811.  
  812.          CY
  813.                (NY x N) RY-transformed measured output matrix
  814.  
  815.                *Note* `C = [Cz; Cy] '
  816.  
  817.          DZU, DYW
  818.                off-diagonal blocks of transformed D matrix that enter
  819.                Z, Y from U, W respectively
  820.  
  821.          RU
  822.                controlled input transformation matrix
  823.  
  824.          RY
  825.                observed output transformation matrix
  826.  
  827.          DYU_NZ
  828.                nonzero if the DYU block is nonzero.
  829.  
  830.          DYU
  831.                untransformed DYU block
  832.  
  833.          DFLG
  834.                nonzero if the system is discrete-time   `is_dgkf' exits
  835.      with an error if the system is mixed discrete/continuous
  836.  
  837.      *References*
  838.     *[1]*
  839.           Doyle, Glover, Khargonekar, Francis, "State Space Solutions
  840.             to Standard H2 and Hinf Control Problems," IEEE TAC August
  841.           1989
  842.  
  843.     *[2]*
  844.           Maciejowksi, J.M.: "Multivariable feedback design,"
  845.  
  846.  
  847.  - Function File :  RETVAL = is_digital ( SYS)
  848.      Return nonzero if system is digital; Exits with an error of sys is
  849.      a mixed (continuous and discrete) system
  850.  
  851.  - Function File :  [RETVAL,U] = is_observable (A, C{,TOL})
  852.  - Function File :  [RETVAL,U] = is_observable (SYS{, TOL})
  853.      Logical check for system observability.   Returns 1 if the system
  854.      SYS or the pair (A,C) is  observable, 0 if not.
  855.  
  856.      *See* `is_controllable' for detailed description of arguments and
  857.      default values.
  858.  
  859.  - Function File :  RETVAL = is_sample (TS)
  860.      return true if TS is a legal sampling time  (real,scalar, > 0)
  861.  
  862.  - Function File :  RETVAL = is_siso (SYS)
  863.      return nonzero if the system data structure SYS is single-input,
  864.      single-output.
  865.  
  866.  - Function File : [RETVAL, U] = is_stabilizable (SYS{, TOL})
  867.  - Function File : [RETVAL, U] = is_stabilizable (A{, B ,TOL})
  868.      Logical check for system stabilizability (i.e., all unstable modes
  869.      are controllable).
  870.  
  871.      *See* `is_controllable' for description of inputs, outputs.  Test
  872.      for stabilizability is performed via an ordered Schur decomposition
  873.      that reveals the unstable subspace of the system A matrix.
  874.  
  875.  
  876.  - Function File : FLG = is_signal_list (MYLIST)
  877.      returns true if mylist is a list of individual strings (legal for
  878.      input to SYSSETSIGNALS).
  879.  
  880.  - Function File :  RETVAL = is_stable (A{,TOL,DFLG})
  881.  - Function File :  RETVAL = is_stable (SYS{,TOL})
  882.      Returns retval = 1 if the matrix A or the system SYS is stable, or
  883.      0 if not.
  884.  
  885.      *Inputs*
  886.     TOL
  887.           is a roundoff paramter, set to 200*EPS if omitted.
  888.  
  889.     DFLG
  890.           Digital system flag (not required for system data structure):
  891.          `DFLG != 0'
  892.                stable if eig(a) in unit circle
  893.  
  894.          `DFLG == 0'
  895.                stable if eig(a) in open LHP (default)
  896.  
  897. 
  898. File: octave,  Node: systime,  Next: sysfreq,  Prev: sysprop,  Up: Control Theory
  899.  
  900. System Analysis-Time Domain
  901. ===========================
  902.  
  903.  - Function File :  DSYS = c2d (SYS{, OPT, T})
  904.  - Function File :  DSYS = c2d (SYS{, T})
  905.      *Inputs*
  906.     SYS
  907.           system data structure (may have both continuous time and
  908.           discrete time subsystems)
  909.  
  910.     OPT
  911.           string argument; conversion option (optional argument; may be
  912.           omitted as shown above)
  913.          `"ex"'
  914.                use the matrix exponential (default)
  915.  
  916.          `"bi"'
  917.                use the bilinear transformation
  918.                    2(z-1)
  919.                s = -----
  920.                    T(z+1)
  921.           FIXME: This option exits with an error if SYS is not purely
  922.           continuous. (The `ex' option can handle mixed systems.)
  923.  
  924.     T
  925.           sampling time; required if sys is purely continuous.
  926.  
  927.           *Note* If the 2nd argument is not a string, `c2d' assumes that
  928.           the 2nd argument is T and performs appropriate argument
  929.           checks.
  930.  
  931.      *Outputs* DSYS discrete time equivalent via zero-order hold,
  932.      sample each T sec.
  933.  
  934.      converts the system data structure describing
  935.           .
  936.           x = Ac x + Bc u
  937.      into a discrete time equivalent model
  938.           x[n+1] = Ad x[n] + Bd u[n]
  939.      via the matrix exponential or bilinear transform
  940.  
  941.      *Note* This function adds the suffix  `_d' to the names of the new
  942.      discrete states.
  943.  
  944.  - Function File : CSYS = d2c (SYS{,TOL})
  945.  - Function File : CSYS = d2c (SYS, OPT)
  946.      Convert discrete (sub)system to a purely continuous system.
  947.      Sampling time used is `sysgettsam(SYS)'
  948.  
  949.      *Inputs*
  950.     SYS
  951.           system data structure with discrete components
  952.  
  953.     TOL
  954.           Scalar value.   tolerance for convergence of default `"log"'
  955.           option (see below)
  956.  
  957.     OPT
  958.           conversion option.  Choose from:
  959.          `"log"'
  960.                (default) Conversion is performed via a matrix logarithm.
  961.                Due to some problems with this computation, it is
  962.                followed by a steepest descent algorithm to identify
  963.                continuous time A, B, to get a better fit to the
  964.                original data.
  965.  
  966.                If called as `d2c'(SYS,TOL), TOL=positive scalar,
  967.                the `"log"' option is used.  The default value for TOL
  968.                is         `1e-8'.
  969.  
  970.          `"bi"'
  971.                Conversion is performed via bilinear transform `z = (1 +
  972.                s T / 2)/(1 - s T / 2)' where T is the system sampling
  973.                time (see `sysgettsam').
  974.  
  975.                FIXME: bilinear option exits with an error if SYS is not
  976.                purely discrete
  977.  
  978.      *Outputs* CSYS continuous time system (same dimensions and signal
  979.      names as in SYS).
  980.  
  981.  - Function File : [DSYS, FIDX] = dmr2d (SYS, IDX, SPREFIX, TS2
  982.           {,CUFLG})
  983.      convert a multirate digital system to a single rate digital system
  984.      states specified by IDX, SPREFIX are sampled at TS2, all   others
  985.      are assumed sampled at TS1 = `sysgettsam(SYS)'.
  986.  
  987.      *Inputs*
  988.     SYS
  989.           discrete time system; `dmr2d' exits with an error if SYS is
  990.           not discrete
  991.  
  992.     IDX
  993.           list of states with sampling time `sysgettsam(SYS)' (may be
  994.           empty)
  995.  
  996.     SPREFIX
  997.           list of string prefixes of states with sampling time
  998.           `sysgettsam(SYS)' (may be empty)
  999.  
  1000.     TS2
  1001.           sampling time of states not specified by IDX, SPREFIX must be
  1002.           an integer multiple of `sysgettsam(SYS)'
  1003.  
  1004.     CUFLG
  1005.           "constant u flag" if CUFLG is nonzero then the system inputs
  1006.           are         assumed to be constant over the revised sampling
  1007.           interval TS2.          Otherwise, since the inputs can change
  1008.           during the interval         T in `[k Ts2, (k+1) Ts2]', an
  1009.           additional set of inputs is         included in the revised B
  1010.           matrix so that these intersample inputs         may be
  1011.           included in the single-rate system.          default  CUFLG =
  1012.           1.
  1013.  
  1014.      *Outputs*
  1015.     DSYS
  1016.           equivalent discrete time system with sampling time TS2.
  1017.  
  1018.           The sampling time of sys is updated to TS2.
  1019.  
  1020.           if CUFLG=0 then a set of additional inputs is added to
  1021.            the system with suffixes _d1, ..., _dn to indicate their
  1022.                delay from the starting time k TS2, i.e.           u =
  1023.           [u_1; u_1_d1; ..., u_1_dn] where u_1_dk is the input
  1024.              k*Ts1 units of time after u_1 is sampled. (Ts1 is
  1025.               the original sampling time of discrete time sys and
  1026.                  TS2 = (n+1)*Ts1)
  1027.  
  1028.     FIDX
  1029.           indices of "formerly fast" states specified by IDX and
  1030.           SPREFIX; these states are updated to the new (slower)
  1031.           sampling interval TS2.
  1032.  
  1033.      *WARNING* Not thoroughly tested yet; especially when CUFLG == 0.
  1034.  
  1035.  
  1036.  - Function File :  damp(P{, TSAM})
  1037.      Displays eigenvalues, natural frequencies and damping ratios
  1038.      of the eigenvalues of a matrix P or the A-matrix of a       system
  1039.      P, respectively.        If P is a system, TSAM must not be
  1040.      specified.        If P is a matrix and TSAM is specified,
  1041.      eigenvalues       of P are assumed to be in Z-domain.
  1042.  
  1043.      See also: `eig'
  1044.  
  1045.  - Function File : GM = dcgain(SYS{, tol})
  1046.      Returns dc-gain matrix. If dc-gain is infinite       an empty
  1047.      matrix is returned.        The argument TOL is an optional
  1048.      tolerance for the condition       number of A-Matrix in SYS
  1049.      (default TOL = 1.0e-10)
  1050.  
  1051.  - Function File : [Y, T] = impulse (SYS{, INP,TSTOP, N})
  1052.      Impulse response for a linear system.         The system can be
  1053.      discrete or multivariable (or both).  If no output arguments are
  1054.      specified, `impulse'  produces a plot or the step response data
  1055.      for system SYS.
  1056.  
  1057.      *Inputs*
  1058.     SYS
  1059.           System data structure.
  1060.  
  1061.     INP
  1062.           Index of input being excited
  1063.  
  1064.     TSTOP
  1065.           The argument TSTOP (scalar value) denotes the time when the
  1066.           simulation should end.
  1067.  
  1068.     N
  1069.           the number of data values.
  1070.  
  1071.           Both parameters TSTOP and N can be omitted and will be
  1072.           computed from the eigenvalues of the A-Matrix.  *Outputs* Y,
  1073.      T: impulse response
  1074.  
  1075.  - Function File : [Y, T] = step (SYS{, INP,TSTOP, N})
  1076.      Step response of a linear system; calling protocol is identical to
  1077.      `impulse'.
  1078.  
  1079.  - Function File :   stepimp ( )
  1080.      Used internally in `impulse', `step'.
  1081.  
  1082. 
  1083. File: octave,  Node: sysfreq,  Next: cacsd,  Prev: systime,  Up: Control Theory
  1084.  
  1085. System Analysis-Frequency Domain
  1086. ================================
  1087.  
  1088.    *Demonstration/tutorial script*
  1089.  
  1090.  - Function File :   frdemo ( )
  1091.  
  1092.  - Function File : [MAG, PHASE, W] = bode(SYS{,W, OUT_IDX, IN_IDX})
  1093.      If no output arguments are given: produce Bode plots of a system;
  1094.      otherwise, compute the frequency response of a system data
  1095.      structure
  1096.  
  1097.      *Inputs*
  1098.     SYS
  1099.           a system data structure (must be either purely continuous or
  1100.           discrete;          see is_digital)
  1101.  
  1102.     W
  1103.           frequency values for evaluation.
  1104.  
  1105.           if SYS is continuous, then bode evaluates `G(jw)' where
  1106.           `G(s)' is the system transfer function.
  1107.  
  1108.           if SYS is discrete, then bode evaluates G(`exp'(jwT)), where
  1109.              * T=`sysgettsam(SYS)' (the system sampling time) and
  1110.  
  1111.              * `G(z)' is the system transfer function.
  1112.  
  1113.           * Default* the default frequency range is selected as
  1114.           follows: (These         steps are NOT performed if W is
  1115.           specified)
  1116.             1. via routine bodquist, isolate all poles and zeros away
  1117.                from W=0 (JW=0 or ``exp'(jwT)'=1) and select the
  1118.                frequency range based on the breakpoint locations of the
  1119.                frequencies.
  1120.  
  1121.             2. if SYS is discrete time, the frequency range is limited
  1122.                            to `jwT' in [0,2 pi /T]
  1123.  
  1124.             3. A "smoothing" routine is used to ensure that the plot
  1125.                phase does               not change excessively from
  1126.                point to point and that singular               points
  1127.                (e.g., crossovers from +/- 180) are accurately shown.
  1128.  
  1129.  
  1130.     OUT_IDX, IN_IDX
  1131.           the indices of the output(s) and input(s) to be used in
  1132.           the frequency response; see `sysprune'.  *Outputs*
  1133.     MAG, PHASE
  1134.           the magnitude and phase of the frequency response
  1135.           `G(jw)' or `G(`exp'(jwT))' at the selected frequency values.
  1136.  
  1137.     W
  1138.           the vector of frequency values used
  1139.  
  1140.      *Notes*
  1141.        1. If no output arguments are given, e.g.,
  1142.                bode(sys);
  1143.           bode plots the results to the screen.  Descriptive labels are
  1144.           automatically placed.
  1145.  
  1146.           Failure to include a concluding semicolon will yield some
  1147.           garbage being printed to the screen (`ans = []').
  1148.  
  1149.        2. If the requested plot is for an MIMO system, mag is set to
  1150.           `||G(jw)||' or `||G(`exp'(jwT))||' and phase information is
  1151.           not computed.
  1152.  
  1153.  - Function File : [WMIN, WMAX] = bode_bounds (ZER, POL, DFLG{, TSAM })
  1154.      Get default range of frequencies based on cutoff frequencies of
  1155.      system poles and zeros.  Frequency range is the interval
  1156.      [10^wmin,10^wmax]
  1157.  
  1158.      Used internally in freqresp (`bode', `nyquist')
  1159.  
  1160.  - Function File :  [F, W] = bodquist (SYS, W, OUT_IDX, IN_IDX)
  1161.      used internally by bode, nyquist; compute system frequency
  1162.      response.
  1163.  
  1164.      *Inputs*
  1165.     SYS
  1166.           input system structure
  1167.  
  1168.     W
  1169.           range of frequencies; empty if user wants default
  1170.  
  1171.     OUT_IDX
  1172.           list of outputs; empty if user wants all
  1173.  
  1174.     IN_IDX
  1175.           list of inputs; empty if user wants all
  1176.  
  1177.     RNAME
  1178.           name of routine that called bodquist ("bode" or "nyquist")
  1179.      *Outputs*
  1180.     W
  1181.           list of frequencies
  1182.  
  1183.     F
  1184.           frequency response of sys; `f(ii) = f(omega(ii))' *Note*
  1185.      bodquist could easily be incorporated into a Nichols plot
  1186.      function; this is in a "to do" list.
  1187.  
  1188.  - Function File :  RETVAL = freqchkw ( W )
  1189.      Used by `freqresp' to check that input frequency vector W is legal.
  1190.      Returns boolean value.
  1191.  
  1192.  - Function File :  OUT = freqresp (SYS,USEW{,W});
  1193.      Frequency response function - used internally by `bode', `nyquist'.
  1194.      minimal argument checking; "do not attempt to do this at home"
  1195.  
  1196.      *Inputs*
  1197.     SYS
  1198.           system data structure
  1199.  
  1200.     USEW
  1201.           returned by `freqchkw'
  1202.  
  1203.     OPTIONAL
  1204.           must be present if USEW is true (nonzero) *Outputs*
  1205.     OUT
  1206.           vector of finite `G(j*w)' entries (or `||G(j*w)||' for MIMO)
  1207.  
  1208.     W
  1209.           vector of corresponding frequencies
  1210.  
  1211.  - Function File : OUT = ltifr (A, B, W)
  1212.  - Function File : OUT = ltifr (SYS, W)
  1213.      Linear time invariant frequency response of single input systems
  1214.      *Inputs*
  1215.     A, B
  1216.           coefficient matrices of `dx/dt = A x + B u'
  1217.  
  1218.     SYS
  1219.           system data structure
  1220.  
  1221.     W
  1222.           vector of frequencies *Outputs* OUT
  1223.                                      -1
  1224.                       G(s) = (jw I-A) B
  1225.      for complex frequencies `s = jw'.
  1226.  
  1227.  - Function File : [REALP, IMAGP, W] = nyquist (SYS{, W, OUT_IDX,
  1228.           IN_IDX, ATOL})
  1229.  - Function File :  nyquist (SYS{, W, OUT_IDX, IN_IDX, ATOL})
  1230.      Produce Nyquist plots of a system; if no output arguments are
  1231.      given, Nyquist plot is printed to the screen.
  1232.  
  1233.      Arguments are identical to `bode' with exceptions as noted below:
  1234.  
  1235.      *Inputs* (pass as empty to get default values)
  1236.     ATOL
  1237.           for interactive nyquist plots: atol is a change-in-slope
  1238.           tolerance for the of asymptotes (default = 0; 1e-2 is a good
  1239.           choice).  This allows the user to "zoom in" on portions of
  1240.           the Nyquist plot too small to be seen with large asymptotes.
  1241.      *Outputs*
  1242.     REALP, IMAGP
  1243.           the real and imaginary parts of the frequency response
  1244.           `G(jw)' or `G(exp(jwT))' at the selected frequency values.
  1245.  
  1246.     W
  1247.           the vector of frequency values used
  1248.  
  1249.      If no output arguments are given, nyquist plots the results to the
  1250.      screen.   If ATOL != 0 and asymptotes are detected then the user
  1251.      is asked     interactively if they wish to zoom in (remove
  1252.      asymptotes)  Descriptive labels are automatically placed.
  1253.  
  1254.      Note: if the requested plot is for an MIMO system, a warning
  1255.      message is  presented; the returned information is of the magnitude
  1256.      ||G(jw)|| or ||G(exp(jwT))|| only; phase information is not
  1257.      computed.
  1258.  
  1259.  
  1260.  - Function File:  tzero (A, B, C, D{, OPT})
  1261.  - Function File:  tzero (SYS{,OPT})
  1262.      Compute transmission zeros of a continuous
  1263.           .
  1264.           x = Ax + Bu
  1265.           y = Cx + Du
  1266.      or discrete
  1267.           x(k+1) = A x(k) + B u(k)
  1268.           y(k)   = C x(k) + D u(k)
  1269.      system.  *Outputs*
  1270.     ZER
  1271.           transmission zeros of the system
  1272.  
  1273.     GAIN
  1274.           leading coefficient (pole-zero form) of SISO transfer function
  1275.           returns gain=0 if system is multivariable *References*
  1276.        1. Emami-Naeini and Van Dooren, Automatica, 1982.
  1277.  
  1278.        2. Hodel, "Computation of Zeros with Balancing," 1992 Lin. Alg.
  1279.           Appl.
  1280.  
  1281.  - Function File :  ZR = tzero2 (A, B, C, D, BAL)
  1282.      Compute the transmission zeros of a, b, c, d.
  1283.  
  1284.      bal = balancing option (see balance); default is "B".
  1285.  
  1286.      Needs to incorporate `mvzero' algorithm to isolate finite zeros;
  1287.      use `tzero' instead.
  1288.  
  1289.