diff scripts/control/csrefcard.lt @ 3280:46b82fca02fc

[project @ 1999-10-12 17:04:44 by jwe]
author jwe
date Tue, 12 Oct 1999 17:04:45 +0000
parents
children 6304d9ea0a30
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/scripts/control/csrefcard.lt
@@ -0,0 +1,1486 @@
+@Include { OCSTreport }
+@Report
+  @Title {
+    { clines 0.8vx } @Break { 1.4f @Font {
+      Octave Controls Toolbox Reference Card }
+      0.8f @Font 0.7vx @Break { The Controls Toolbox was written by
+      A. Scottedward Hodel  <A.S.Hodel@Eng.Auburn.EDU> }
+    }
+  }
+  @Author { clines @Break { Kai P. Mueller
+    <mueller@ifr.ing.tu-bs.de> }
+  }
+  @Institution { clines @Break { Technical University of Braunschweig
+    Control Department }
+  }
+  @DateLine { Yes }
+  @CoverSheet { No }
+  @InitialFont { Schoolbook Base 12p }
+  @InitialSpace { tex }
+//
+
+@Abstract 
+  @Title { }
+@Begin
+@I {
+This document provides an overview of the Controls Toolbox functions
+of Octave. It is still under construction, don't rely on details.
+}
+@End @Abstract
+
+@Section
+  @Title { System Analysis }
+@Begin
+  @BeginSubSections
+
+  @SubSection
+    @Title { Properties }
+  @Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { is_controllable }
+      B { controllability check
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [retval,U] = is_controllable(a [, b ,tol])
+        }
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_detectable }
+      B { decetability check (unstable subsystem stabilizable?)
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [retval,U] = is_detectable(a , c [, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_dgkf }
+      B { checks if packed system meets assumptions for the
+	  H{ @Sub @Sym infinity } Doyle-Glover-algorithm
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retval = dgkf(Asys,nu,ny[,tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_digital }
+      B { returns true if packed system is a sampled system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { is_observable }
+      B { observability check
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [retval,U] = is_observable(a , c [, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_sample }
+      B { returns true if sampling time Ts is a legal (scalar) value
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_siso }
+      B { returns true if packed system is siso
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  SISO = is_siso(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_stabilizable }
+      B { returns true if system stabilizable
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [retval,U] = is_stabilizable(a [, b ,tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { is_stable }
+      B { stability check
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  is_stable(a [,tol,disc])
+	}
+      }
+      C { }
+  }
+  @End @SubSection
+
+  @SubSection
+    @Title { Time Domain }
+  @Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { step }
+      B { step response of a system (mimo, discrete, or both)
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [y, u] = step(sys[, tstop, n, inp])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { impulse }
+      B { impulse response of a system (mimo, discrete, or both)
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [y, u] = impulse(sys[, tstop, n, inp])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { stepimp }
+      B { common code for step and impulse
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { damp }
+      B { display eigenvalues, damping ratios, and naural frequencies of a
+	  matrix or poles of a packed system (continuous and discrete)
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  damp(p,[ tsamp])
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { dcgain }
+      B { calculate steady state gain of a packed system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [gm, ok] = dcgain(sys[, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { dgram }
+      B { discrete controllability grammian
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { gram }
+      B { continuous controllabilty grammian
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { h2norm }
+      B { continuous system H{ @Sub 2} norm
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  out = h2norm(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { lsim }
+      B { simulation of a linear system with arbitrary input and
+          time vector
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [y,x] = lsim(sys,u,t[,x0])
+	}
+      }
+      C { }
+  }
+  @End @SubSection
+
+  @SubSection
+    @Title { Frequency Domain }
+  @Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { bode }
+      B { bode diagram or compute magnitude and phase data
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [mag,phase,w] = bode(sys[,w,outputs,inputs])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { bode_bounds }
+      B { calculation of frequencies for bode and nyquist
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use } 
+    @Rowb above { yes }
+      A { bodquist }
+      B { common code for bode und nyquist
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { freqchkw }
+      B { check frequency vector, used by freqresp
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { freqresp }
+      B { calculation of the mutivariable frequency response of a system, 
+          used by bode and nyquist
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  out = freqresp(sys, SISO, DIGITAL, USEW
+	  @LLP
+	  [, w, SQUARE_NYQUIST])
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { nyquist }
+      B { nyquist diagram
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { dcgain }
+      B { calculate steady state gain of a packed system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [gm, ok] = dcgain(sys[, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { h2norm }
+      B { continuous system H{ @Sub 2} norm
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  out = h2norm(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { hinfnorm }
+      B { continuous system H{ @Sub @Sym infinity} norm
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [g gmin gmax] = hinfnorm(sys[,tol,gmin,gmax,ptol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { ltifr }
+      B { siso system frequency response
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { pzmap }
+      B { plot of poles and zeros of a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  pzmap(sys) or [zer,pol] = pzmap(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { rlocus }
+      B { displays root locus plot
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  rlocus(sys[,inc,mink,maxk])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { tzero }
+      B { transmission zeros of a continuous"/"discrete system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [zer,gain] = tzero(A,B,C,D) or
+	  @LLP
+	  zer = tzero(Asys)
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { tzero2 }
+      B { compute the transmission zeros of an a, b, c, d system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zgpbal }
+      B { used by tzero
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = zgpbal(Asys) - packed system input
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { zgreduce }
+      B { used by tzero
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { zgrownorm }
+      B { used by tzero
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+  }
+  @End @SubSection
+  @EndSubSections
+@End @Section
+
+@Section
+  @Title { System Building }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { abcddim }
+      B { dimension compatibility check
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { abcddims }
+      B { used by abcddim
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { outlist }
+      B { prints enumerated list of strings
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  outlist(x[,tabchar,yd,ilist])
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { parallel }
+      B { parallel connection of two systems
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  sysp = parallel(Asys,Bsys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysadd }
+      B { addition of two systems
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [sys] = sysysadd(Gsys,Hsys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysappend }
+      B { append new inputs and outputs to a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = sysappend(sys,b,c[,d,outname,inname,yd])
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { syssetsignals }
+      B { change names of system inputs, outputs, or states
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys=syssetsignals(sys,opt,names[,sigidx])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { syschtsam }
+      B { change sampling time of a (sampled) system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = syschtsam(sys,tsam)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysconnect }
+      B { form a closed loop system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = sysconnect(sys, output_list, input_list [, order, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { syscont }
+      B { extract continuous part of a mixed continuous"/"discrete system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [csys,Acd,Ccd,Dcd] = syscont(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { syscont_disc }
+      B { extract continuous"/"discrete part
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use, used by syscont and sysdisc, internal use }
+    @Rowb above { yes }
+      A { sysdefioname }
+      B { create defaut signal names
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  ioname = sysdefioname(n,str[,m])
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { sysdefstname }
+      B { create default state names
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { sysdimensions }
+      B { get number of states, inputs, and outputs from system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [n,nz,m,p] = sysdimensions(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysdisc }
+      B { extract purely discrete portion of a mixed
+          continuous"/"discrete system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [dsys,Adc,Cdc] = sysdisc(sys)
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { sysdup }
+      B { duplicate specified input"/"output connections of a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = sysdup(Asys,output_list,input_list)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysgroup }
+      B { combines two packed system matrices into a single system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  sys = sysgroup(Asys,Bsys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysgroupn }
+      B { locate and mark duplicate names (in sysgroup)
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { sysmult }
+      B { concatenates two systems
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [sys] = sysmult(Asys,Bsys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysprune }
+      B { extract specified inputs"/"outputs from a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = sysprune(sys,output_list,input_list)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysreorder }
+      B { reorder elements of a vector
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { used by sysconnect }
+    @Rowb above { yes }
+      A { sysscale }
+      B { input"/"output scaling of a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retsys = sysscale(Asys, output_list, input_list [,inname, outname])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { syssub }
+      B { subtraction of two systems
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [sys] = syssub(Gsys,Hsys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysupdate }
+      B { update the internal representation of a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  newsys = sysupdate(sys,opt)
+	}
+      }
+      C { }
+  }
+  @NP
+@End @Section
+
+
+@Section
+  @Title { Display and Convenience Functions }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { polyout }
+      B { formatted display of polynomials
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [y = ] polyout(c,[x])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { prompt }
+      B { prompt user to continue
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  prompt([str])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sortcom }
+      B { sort a complex vector by real, imaginary, or magnitude
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  yy = sortcom(xx[,opt]
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { swap }
+      B { exchange two values
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { swapcols }
+      B { permute columns of a matrix into reverse order
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A {swaprows  }
+      B { permute rows of a matrix into reverse order
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysout }
+      B { print out a packed system in desired format
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  sysout(sys[,opt])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { tfout }
+      B { formatted transfer function num(s)"/"den(s)
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  tfout(num,denom[,x])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zpout }
+      B { print formatted zero-pole form
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  zpout(zer,pol,k[,x])
+	}
+      }
+      C { }
+  }
+  @NP
+@End @Section
+
+@Section
+  @Title { System Representations and Conversions }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { c2d }
+      B { continuous to discrete conversion of a packed system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  dsys=c2d(sys[,T])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { fir2sys }
+      B { FIR (finite impulse response) to packed system conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { ss2sys }
+      B { conversion from state space to system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  OUTSYS = ss2sys(A, B, C [, D, TSAM, N,
+	  NZ, STNAME, INNAME, OUTNAME, OUTLIST])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { ss2tf }
+      B { conversion from state space to transfer function
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [num,den] = ss2tf(a,b,c,d)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { ss2zp }
+      B { conversion from state space to zero pole representation
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [zer,pol,k] = ss2zp(a,b,c,d)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sys2fir }
+      B { extract fir system from packed system form
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sys2ss }
+      B { conversion from packed system to state space form
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [a, b, c, d, tsam, n, nz, stname, inname, outname] = sys2ss(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sys2tf }
+      B { conversion from packed system to stransfer function
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { sys2zp }
+      B { conversion from packed system to zero pole representation
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [zer,pol,k] = ss2zp(a,b,c,d)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { sysdisc }
+      B { extract purely discrete portion of a mixed
+          continuous"/"discrete system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [dsys,Adc,Cdc] = sysdisc(sys)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { tf2ss }
+      B { function to state-space conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { tf2sys }
+      B { tranfer function to system conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { tf2sysl }
+      B { strips leading zero coefficient in polynonials
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use (used by tf2sys) }
+    @Rowb above { yes }
+      A { tf2zp }
+      B { tranfer function to state-space conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zp2ss }
+      B { zero-pole representation to state space form conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zp2ssg2 }
+      B { used by zp2ssg2
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+    @Rowb above { yes }
+      A { zp2sys }
+      B { zero-pole representation to packed system conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  outsys = zp2sys(zer, pol, k [, tsam, inname, outname])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zp2tf }
+      B { zero-pole representation to transfer function conversion
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+  }
+  @NP
+@End @Section
+
+@Section
+  @Title { Equation Solvers and Math Functions }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { are }
+      B { algebraic riccati equation solver
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  x = are (a, b, c)
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { dlyap }
+      B { discrete Lyapunov equation solver
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { dare }
+      B { discrete algebaic riccati equation solver
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { lyap }
+      B { Lyapunov"/"Sylvester equation solver
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  lyap (a, b [,c])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { pinv }
+      B { pseudoinverse of a matrix
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zgfmul }
+      B { compute product of zgep incidence matrix f with vector x
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { used by zgscal }
+    @Rowb above { yes }
+      A { zgfslv }
+      B { solve system of equations for dense zgep problem
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zginit }
+      B { construct right hand side for the zero-computation generalized
+	  eigenvalue problem
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zgscal }
+      B { generalized conjugate gradient iteration to solve zero-computation
+	  generalized eigenvalue problem balancing equation
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A {zgsgiv  }
+      B { apply givens rotation c,s to column vector a,b
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { zgshsr }
+      B { apply householder vector, used by zgfslv
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+  }
+@End @Section
+
+@Section
+  @Title { Controller Design }
+@Begin
+  @BeginSubSections
+  @SubSection
+    @Title { Classic Methods }
+  @Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { dlqe }
+      B { discrete Kalman filter design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { dlqr }
+      B { discrete linear quadratic regulator (Riccati controller) design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [k, p, e] = lqr (A, B, Q, R [, Z])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { lqe }
+      B { contiuous time Kalman filter design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { lqg }
+      B { continuous"/"discrete lqg (linear quadratic gaussian) controller
+          design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { lqr }
+      B { continuous lqr (Riccati-) controller design
+        @DP { Helvetica Base -2p } @Font @CurveBox {
+	*** no description ***
+      }
+      }
+      C { }
+    @Rowb above { yes }
+      A { place }
+      B { calculation of feedback gain matrix K, using pole-placement
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  K = place(sys, P)
+	}
+      }
+      C { }
+  }
+  @NP
+  @End @SubSection
+
+  @SubSection
+    @Title { Modern Methods }
+  @Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { h2syn }
+      B { H{ @Sub 2}-optimal controller design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [K, gain, Kc, Kf, Pc, Pf] = h2syn(Asys, nu, ny [, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { hinfsyn }
+      B { continuous system H{ @Sub @Sym infinity}-optimal controller design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  [K,g, ghi, glo, Pc, Pf] = hinfsyn(Asys, nu, ny, gmax,
+	  gmin, gtol [, ptol, tol])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { hinfsyn_chk }
+      B { check of existence of an H{ @Sub @Sym infinity}-optimal
+          controller, used internally by hinfsyn
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { internal use }
+  }
+  @End @SubSection
+  @EndSubSections
+  @NP
+@End @Section
+
+@Section
+  @Title { Miscellanious }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { analdemo }
+      B { state space analysis demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { use by controldemo }
+    @Rowb above { yes }
+      A { bddemo }
+      B { block diagram manipulations demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { used by controldemo }
+    @Rowb above { yes }
+      A { controldemo }
+      B { Octave Controls Toolbox demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { frdemo }
+      B { menu-based frequency response demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { used by controldemo }
+    @Rowb above { yes }
+      A { jet707 }
+      B { Boeing 707-321 aircraft mimo example
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  outsys = jet707()
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { ord2 }
+      B { second order siso example
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  outsys = ord2(nfreq, damp[, gain])
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { dgkfdemo }
+      B { H{ @Sub 2}"/"H{@Sub @Sym infinity} controller design demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { }
+    @Rowb above { yes }
+      A { moddemo }
+      B { system conversion demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { used by controldemo }
+    @Rowb above { yes }
+      A { packedform }
+      B { srcipt for sysrepdemo, the system representations demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { used by controldemo }
+    @Rowb above { yes }
+      A { rldemo }
+      B { root locus demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { used by controldemo }
+    @Rowb above { yes }
+      A { sysrepdemo }
+      B { system representation demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { used by controldemo }
+  }
+@End @Section
+
+@Section
+  @Title { New Functions (most likely not on your system) }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { ctrb }
+      B { Forms the controllability matrix of a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  ctrb(sys [, b])
+	}
+      }
+      C { *not* for controllablity tests, use is_controllable instead
+      }
+    @Rowb above { yes }
+      A { is_abcd }
+      B { Returns true if dimensions are compatible, false otherwise.
+          Complains about the (first) failing matrix dimension.
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  retval = is_abcd(a [, b, c, d])
+	}
+      }
+      C { In contrast to abcddim() the function is_abcd() accepts
+      1 to 4 arguments.
+      }
+    @Rowb above { yes }
+      A { obsv }
+      B { Forms the observability matrix of a system
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  obsv(sys [, c])
+	}
+      }
+      C { *not* for observablity tests, use is_observable instead
+      }
+    @Rowb above { yes }
+      A { template }
+      B { Starting point for your own function
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  y = template(x[, a])
+	}
+      }
+      C { ridiculous calculation }
+  }
+@End @Section
+
+@Section
+  @Title { Obsolete }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { DEMOcontrol }
+      B { Octave Controls Toolbox demo
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  no parameters
+	}
+      }
+      C { obsolete - use democontrol instead }
+    @Rowb above { yes }
+      A { dlqg }
+      B { discrete linear quadratic gaussian design
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { obsolete - use lqg instead } 
+    @Rowb above { yes }
+      A { minfo }
+      B { determine type of system matrix
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { obsolete - use ss2sys, tf2sys, sys2ss, or sys2tf instead }
+  }
+
+  @DP @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { packsys }
+      B { pack A, B, C, D matrices into a system representation
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { obsolete - use ss2sys instead }
+    @Rowb above { yes }
+      A { rotg }
+      B { givens rotation
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { obsolete - use givens instead }
+    @Rowb above { yes }
+      A { series }
+      B { connect two systems
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { obsolete - superseeded by sysmult}
+    @Rowb above { yes }
+      A { unpacksys }
+      B { conversion from packed system (sys) to state space
+          @DP { Helvetica Base -2p } @Font @CurveBox {
+	  *** no description ***
+	}
+      }
+      C { use sys2ss insted}
+  }
+@End @Section
+
+@Section
+  @Title { Dubious }
+@Begin
+  @PP
+  @Tab
+    between { single }
+    @Fmta { @Col @Heading A !
+            @Col @Heading B !
+	    @Col @Heading C }
+    @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A !
+            @Col 7c @Wide { ragged nohyphen } @Break B !
+	    @Col 3c @Wide { ragged nohyphen } @Break C }
+  {
+    @Rowa above { double } below { double }
+      A { name } B { description "/" usage } C { remarks } 
+    @Rowb above { yes }
+      A { demomarsyas }
+      B { unknown interface demo }
+      C { }
+    @Rowb above { yes }
+      A { mb }
+      B { unknown purpose }
+      C { }
+    @Rowb above { yes }
+      A { sysball }
+      B { unknown purpose }
+      C { }
+  }
+@End @Section
+
+@Appendix
+  @Title { Maintainer }
+@Begin
+@PP
+Mail any comments or suggestions to Kai P. Mueller
+<mueller@ifr.ing.tu-bs.de>.
+Report m-files problems to A. Scottedward Hodel
+<A.S.Hodel@Eng.Auburn.EDU> or to the authors.
+@End @Appendix
+
+@Appendix
+  @Title { Production Note }
+@Begin
+@PP
+A recent version of this brochure can be copied from
+@LLP
+ftp:"//"ifr.ing.tu-bs.de"/"pub"/"ControlSW"/"doc
+("\""lout"\"" source and PostScript{@Sup @Char registered}).
+I am too dump to supply a T{/0.2fo E}X source.
+@End @Appendix