# HG changeset patch # User jwe # Date 939747885 0 # Node ID 46b82fca02fcc7819a460d254b632fc80cdf45be # Parent 6dd06d525de6fcc08bcbae1f96ad1691f5767306 [project @ 1999-10-12 17:04:44 by jwe] diff --git a/scripts/control/MakeControlOct b/scripts/control/MakeControlOct new file mode 100644 --- /dev/null +++ b/scripts/control/MakeControlOct @@ -0,0 +1,94 @@ +%.oct : %.cc $(OCT_LIBS) ocst.h + @echo "making $@ from $<" + mkoctfile $< -locst -lm + +%.o : %.cc ocst.h + @echo "making $@ from $<" + mkoctfile $< + rm -f $*.oct + +OCT_FILES = abcddim.oct \ + fir2sys.oct \ + ss2sys.oct \ + tf2sys.oct \ + zp2sys.oct \ + #sysout.oct \ + zgsgiv.oct + +OCST_LIB = get_complex_vector.o \ + get_matrix.o \ + get_real_scalar.o \ + get_string_matrix.o \ + get_string.o \ + get_vect.o \ + pack.o \ + sysdefioname.o \ + sysdefstname.o + +OCT_LIBS= + +all: $(OCT_LIBS) $(OCT_FILES) + @echo "" + octave + +libocst.so: $(OCST_LIB) + gcc -fPIC -shared -R/opt/octave/lib -o libocst.so.1 $(OCST_LIB) + cp libocst.so.1 /opt/octave/lib + rm -f /opt/octave/lib/libocst.so + ln -s /opt/octave/lib/libocst.so.1 /opt/octave/lib/libocst.so + rm -f ./libocst.so + ln -s ./libocst.so.1 ./libocst.so + +ABCDDIM_DEP= abcddim.cc \ + zero_matrix.o +abcddim.oct: $(ABCDDIM_DEP) ocst.h + mkoctfile $(ABCDDIM_DEP) + +FIR2SYS_DEP= fir2sys.cc \ + get_real_scalar.o \ + get_string.o \ + get_vector.o \ + pack.o +fir2sys.oct: $(FIR2SYS_DEP) ocst.h + mkoctfile $(FIR2SYS_DEP) + +SS2SYS_DEP= ss2sys.cc \ + $(ABCDDIM_DEP) \ + add_name.o \ + get_matrix.o \ + get_real_scalar.o \ + get_string_matrix.o \ + get_vector.o \ + pack.o \ + sysdefioname.o \ + sysdefstname.o +ss2sys.oct: $(SS2SYS_DEP) ocst.h + mkoctfile $(SS2SYS_DEP) + +SYSOUT_DEP= sysout.cc +sysout.oct: $(SYSOUT_DEP) ocst.h + mkoctfile $(SYSOUT_DEP) + +TF2SYS_DEP= tf2sys.cc \ + get_real_scalar.o \ + get_string.o \ + get_vector.o \ + pack.o +tf2sys.oct: $(TF2SYS_DEP) ocst.h + mkoctfile $(TF2SYS_DEP) + +ZGSGIV_DEP=zgsgiv.cc +zgsgiv.oct: $(ZGSGIV_DEP) ocst.h + mkoctfile $(ZGSGIV_DEP) + +ZP2SYS_DEP= zp2sys.cc \ + get_complex_vector.o \ + get_real_scalar.o \ + get_string.o \ + pack.o +zp2sys.oct: $(ZP2SYS_DEP) ocst.h + mkoctfile $(ZP2SYS_DEP) + +clean: + rm -f *.o *.oct *.a *.so *.so.1 + diff --git a/scripts/control/OCSTreport b/scripts/control/OCSTreport new file mode 100644 --- /dev/null +++ b/scripts/control/OCSTreport @@ -0,0 +1,318 @@ + +############################################################################### +# # +# report # +# # +# Lout setup file for technical reports. # +# # +# Jeffrey H. Kingston # +# 12 September 1994 # +# # +############################################################################### + + +############################################################################### +# # +# @SysInclude commands for standard packages. # +# # +############################################################################### + + @SysInclude { fontdefs } # font definitions + @SysInclude { langdefs } # language definitions + @SysInclude { dl } # DocumentLayout package + @SysInclude { reportf } # ReportLayout extension + @SysInclude { tab } # @Tab table formatter +# @SysInclude { eq } # @Eq equation formatter +# @SysInclude { fig } # @Fig advanced graphics +# @SysInclude { graph } # @Graph graph drawing +# @SysInclude { cprint } # @CPrint C and C++ programs +# @SysInclude { pas } # @Pas Pascal programs + + +############################################################################### +# # +# @Include command for reading personal definitions from current directory. # +# # +############################################################################### + + @Include { mydefs } + + +############################################################################### +# # +# The @DocumentLayout @Use clause - overall document format options. # +# # +############################################################################### + +@Use { @DocumentLayout + # @InitialFont { Times Base 12p } # initial font + # @InitialBreak { adjust 1.20fx hyphen } # initial break + # @InitialSpace { lout } # initial space style + # @InitialLanguage { English } # initial language + # @InitialColour { black } # initial colour + # @OptimizePages { No } # optimize page breaks? + # @HeadingFont { Bold } # font for @Heading + # @ParaGap { 1.30vx } # gap between paragraphs + # @ParaIndent { 2.00f } # first-line indent for @PP + # @DisplayGap { 1.00v } # gap above, below displays + # @DisplayIndent { 2.00f } # @IndentedDisplay indent + # @DefaultIndent { 0.5rt } # @Display indent + # @DisplayNumStyle { (num) } # style of display numbers + # @WideIndent { 4.00f } # @WideTaggedList indent + # @VeryWideIndent { 8.00f } # @VeryWideTaggedList indent + # @ListGap { 1.00v } # gap between list items + # @ListIndent { 0c } # indent of list items + # @ListRightIndent { 0c } # right indent of list items + # @ListLabelWidth { 2.00f } # width allowed for list tags + @PageType { A4 } # page type (width, height) + # @PageType { Letter } # page type (width, height) + # @PageWidth { } # page width if type Other + # @PageHeight { } # page height if type Other + # @PageOrientation { Portrait } # Portrait, Landscape, etc. + # @PageBackground { } # background of each page + # @TopMargin { 2.50c } # top margin of all pages + # @FootMargin { 2.50c } # bottom margin of all pages + # @OddLeftMargin { 2.50c } # left margin of odd pages + # @OddRightMargin { 2.50c } # right margin of odd pages + # @EvenLeftMargin { 2.50c } # left margin of even pages + # @EvenRightMargin { 2.50c } # right margin of even pages + # @PageBoxType { None } # None Box CurveBox ShadowBox + # @PageBoxMargin { 1.00c } # page box margin + # @PageBoxLineWidth { } # page box line thickness + # @PageBoxPaint { none } # page box paint + # @PageBoxShadow { 0.60c } # shadow margin if ShadowBox + # @ColumnNumber { 1 } # number of columns (1 to 10) + # @ColumnGap { 1.00c } # column gap + # @FigureLocation { PageTop } # default figure location + # @TableLocation { PageTop } # default table location + # @FigureWord { figure } # "Figure" word else anything + # @TableWord { table } # "Table" word else anything + # @FigureNumbers { Arabic } # method of numbering figures + # @TableNumbers { Arabic } # method of numbering tables + # @FigureCaptionPos { Below } # Above or Below + # @TableCaptionPos { Below } # Above or Below + # @CaptionFont { } # figure, table caption font + # @CaptionBreak { } # figure, table caption break + # @MakeFigureContents { No } # list of figures at start + # @MakeTableContents { No } # list of tables at start + # @MakeContents { No } # make contents? Yes or No + # @ContentsGap { 0.20v } # extra gap above minor entry + # @ContentsGapAbove { 0.80v } # extra gap above major entry + # @ContentsGapBelow { 0.00v } # extra gap below major entry + # @ContentsLeader { .. } # leader symbol in contents + # @ContentsLeaderGap { 4s } # gap between leaders + # @ContentsRightWidth { 3f } # page numbers column width + # @MakeReferences { Yes } # make references? Yes or No + # @RefCiteStyle { [cite] } # citation style + # @RefCiteLabels { @RefNum } # citation items + # @RefNumbers { Arabic } # reference numbers + # @RefListFormat { Labels } # NoLabels, Labels, etc. + # @RefListLabels { [@RefNum] } # ref list label format + # @RefListTitle { references } # title of reference list + # @ChapRefListTitle { references } # title of chapter ref list + # @RefListIndent { 0c } # indent to left of labels + # @RefListRightIndent { 0c } # indent to right of items + # @RefListGap { 1.00v } # gap between ref list items + # @RefListFont { } # font used in reference list + # @RefListBreak { } # break style of ref list + # @RefListLabelWidth { 2.00f } # Labels column width + # @RefListSortKey { @Tag } # sorting key + # @MakeIndex { No } # make index? Yes or No + # @IndexFont { } # index entries font + # @IndexBreak { outdent 1.2fx } # index entries break + # @IndexColumnNumber { 2 } # index columns (1 to 10) + # @IndexColumnGap { 1.00c } # index column gap + # @MakeIndexA { No } # make index A? Yes or No + # @IndexAFont { } # index A entries font + # @IndexABreak { outdent 1.2fx } # index A entries break + # @IndexAColumnNumber { 2 } # index A columns (1 to 10) + # @IndexAColumnGap { 1.00c } # index A column gap + # @MakeIndexB { No } # make index B? Yes or No + # @IndexBFont { } # index B entries font + # @IndexBBreak { outdent 1.2fx } # index B entries break + # @IndexBColumnNumber { 2 } # index B columns (1 to 10) + # @IndexBColumnGap { 1.00c } # index B column gap + # @IndexFont { } # index entries font + # @IndexBreak { outdent 1.2fx } # index entries break + # @IndexColumnNumber { 2 } # index columns (1 to 10) + # @IndexColumnGap { 1.00c } # index column gap + # @TopGap { 0.75c } # gap between figures + # @MidGap { 0.75c } # gap above/below body text + # @FootNoteNumbers { Arabic } # footnote numbers + # @FootNoteThrough { No } # numbered through chapter? + # @FootNoteLocation { ColFoot } # where the footnote appears + # @FootNoteFont { 0.80f } # font for footnotes + # @FootNoteBreak { 1.20fx } # break for footnotes + # @FootLen { 2.00c } # length of footnote line + # @FootAboveGap { 1.00v } # gap above footnote line + # @FootGap { 0.20c } # gap between footnotes + # @EndNoteNumbers { Arabic } # endnote numbers + # @EndNoteFont { 0.80f } # font of endnotes + # @EndNoteBreak { 1.20fx } # break for endnotes + # @EndNoteGap { 0.20c } # gap between endnotes + # @TheoremThrough { No } # numbered through whole doc? + # @TheoremNumbers { Arabic } # theorem etc. numbers + # @DefinitionWord { definition } # "Definition" word, etc. + # @LemmaWord { lemma } # "Lemma" word, etc. + # @TheoremWord { theorem } # "Theorem" word, etc. + # @PropositionWord { proposition } # "Proposition" word, etc. + # @CorollaryWord { corollary } # "Corollary" word, etc. + # @ExampleWord { example } # "Example" word, etc. + # @ClaimWord { claim } # "Claim" word, etc. + # @ProofWord { proof } # "Proof" word, etc. + # @MarginNoteFont { 0.80f } # font of margin notes + # @MarginNoteBreak { ragged 1.10fx } # break style of margin notes + # @MarginNoteHGap { 0.5c } # horizontal gap to notes + # @MarginNoteVGap { 1.00v } # min vertical gap between + # @MarginNoteWidth { 1.50c } # width of margin notes + # @PageHeaders { Simple } # None Simple Titles NoTitles + # @PageNumbers { Arabic } # page numbers + # @FirstPageNumber { 1 } # number of first page + # @IntroPageNumbers { Roman } # intro page numbers + # @IntroFirstPageNumber{ 1 } # number of first intro page + + # @OddTop { @Centre{- @PageNum -} } # Simple page headers + # @OddFoot { @Null } + # @EvenTop { @Centre{- @PageNum -} } + # @EvenFoot { @Null } + # @StartOddTop { @Null } + # @StartOddFoot { @Null } + # @StartEvenTop { @Null } + # @StartEvenFoot { @Null } + # @IntroOddTop { @Null } + # @IntroOddFoot { @Null } + # @IntroEvenTop { @Null } + # @IntroEvenFoot { @Null } + # @IntroStartOddTop { @Null } + # @IntroStartOddFoot { @Null } + # @IntroStartEvenTop { @Null } + # @IntroStartEvenFoot { @Null } + + # Titles, NoTitles headers + # @RunningOddTop { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum } + # @RunningOddFoot { @Null } + # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} } + # @RunningEvenFoot { @Null } + # @RunningStartOddTop { @Null } + # @RunningStartOddFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningStartEvenTop { @Null } + # @RunningStartEvenFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningIntroOddTop { @Null } + # @RunningIntroOddFoot { @Right @PageNum } + # @RunningIntroEvenTop { @Null } + # @RunningIntroEvenFoot { @PageNum } + # @RunningIntroStartOddTop { @Null } + # @RunningIntroStartOddFoot { @Null } + # @RunningIntroStartEvenTop { @Null } + # @RunningIntroStartEvenFoot { @Null } +} + + +############################################################################### +# # +# The @ReportLayout @Use clause - options specific to technical reports. # +# # +############################################################################### + +@Use { @ReportLayout + # @CoverSheet { Yes } # make cover sheet + # @DateLine { No } # Yes, No, or a date + # @ReferencesBeforeAppendices { No } # pos of ref list + # @AbstractWord { abstract } # "Abstract" word etc. + # @ContentsWord { contents } # "Contents" word etc. + # @AppendixWord { appendix } # "Appendix" word etc. + # @IndexWord { index } # "Index" word etc. + # @IndexAWord { index } # "Index" word in index A + # @IndexBWord { index } # "Index" word in index B + # @SectionNumbers { Arabic } # section numbers + # @SubSectionNumbers { Arabic } # subsection numbers + # @SubSubSectionNumbers { Arabic } # sub-subsection numbers + # @AppendixNumbers { UCAlpha } # appendix numbers + # @SubAppendixNumbers { Arabic } # subappendix numbers + # @SubSubAppendixNumbers { Arabic } # sub-subappendix numbers + # @AbstractHeadingFont { Bold } # abstract heading font + # @AbstractHeadingBreak { ragged 1.2fx nohyphen } # abstract heading break + # @AbstractHeadingFormat { title } # abstract heading format + # @ContentsHeadingFont { Bold } # contents heading font + # @ContentsHeadingBreak { ragged 1.2fx nohyphen } # contents heading break + # @ContentsHeadingFormat { title } # contents heading format + # @SectionHeadingFont { Bold } # section heading font + # @SectionHeadingBreak { ragged 1.2fx nohyphen } # section heading break + # @SectionHeadingFormat { number @DotSep title } # section heading format + # @SubSectionHeadingFont { Bold } # subsection heading font + # @SubSectionHeadingBreak { ragged 1.2fx nohyphen } # subsection heading break + # @SubSectionHeadingFormat { number @DotSep title } # subsection heading format + # @SubSubSectionHeadingFont { Slope } # sub-subsection heading font + # @SubSubSectionHeadingBreak { ragged 1.2fx nohyphen } # sub-subsection heading break + # @SubSubSectionHeadingFormat { number @DotSep title } # sub-subsection heading format + # @AppendixHeadingFont { Bold } # appendix heading font + # @AppendixHeadingBreak { ragged 1.2fx nohyphen } # appendix heading break + # @AppendixHeadingFormat { number @DotSep title } # appendix heading format + # @SubAppendixHeadingFont { Bold } # subappendix heading font + # @SubAppendixHeadingBreak { ragged 1.2fx nohyphen } # subappendix heading break + # @SubAppendixHeadingFormat { number @DotSep title } # subappendix heading format + # @SubSubAppendixHeadingFont { Slope } # sub-subapp. heading font + # @SubSubAppendixHeadingBreak { ragged 1.2fx nohyphen } # sub-subappendix heading break + # @SubSubAppendixHeadingFormat{ number @DotSep title } # sub-subappendix heading format + # @ReferencesHeadingFont { Bold } # references heading font + # @ReferencesHeadingBreak { ragged 1.2fx nohyphen } # references heading break + # @ReferencesHeadingFormat { title } # references heading format + # @IndexHeadingFont { Bold } # index heading font + # @IndexHeadingBreak { ragged 1.2fx nohyphen } # index heading break + # @IndexHeadingFormat { title } # index heading format + # @IndexAHeadingFont { Bold } # index A heading font + # @IndexAHeadingBreak { ragged 1.2fx nohyphen } # index A heading break + # @IndexAHeadingFormat { title } # index A heading format + # @IndexBHeadingFont { Bold } # index B heading font + # @IndexBHeadingBreak { ragged 1.2fx nohyphen } # index B heading break + # @IndexBHeadingFormat { title } # index B heading format + # @SectionGap { 2.00v } # gap between sections + # @SubSectionGap { 1.50v } # gap between subsections + # @SubSubSectionGap { 1.50v } # gap between sub-subsections + # @AppendixGap { 2.00v } # gap between appendices + # @SubAppendixGap { 1.50v } # gap between subappendices + # @SubSubAppendixGap { 1.50v } # gap between sub-subapps + # @SectionInContents { Yes } # list sections in contents + # @SubSectionInContents { Yes } # list subsections + # @SubSubSectionInContents { No } # list sub-subsections + # @AppendixInContents { Yes } # list appendices + # @SubAppendixInContents { Yes } # list subappendices + # @SubSubAppendixInContents { No } # list sub-subappendices + # @ReferencesInContents { Yes } # list references + # @IndexInContents { Yes } # list index in contents + # @IndexAInContents { Yes } # list index A + # @IndexBInContents { Yes } # list index B + # @SectionNumInTheorems { No } # section numbers in theorems + # @SubSectionNumInTheorems { No } # subsection numbers in theorems + # @SubSubSectionNumInTheorems { No } # sub-subsection numbers in theorems + # @AppendixNumInTheorems { No } # appendix numbers in theorems + # @SubAppendixNumInTheorems { No } # subappendix numbers in theorems + # @SubSubAppendixNumInTheorems{ No } # sub-subappendix nums. in theorems + # @SectionNumInDisplays { Yes } # section numbers in displays + # @SubSectionNumInDisplays { No } # subsection numbers in displays + # @SubSubSectionNumInDisplays { No } # sub-subsection numbers in displays + # @AppendixNumInDisplays { Yes } # appendix numbers in displays + # @SubAppendixNumInDisplays { No } # subappendix numbers in displays + # @SubSubAppendixNumInDisplays{ No } # sub-subappendix nums in displays + # @SectionNumInFigures { Yes } # section number in figures + # @SubSectionNumInFigures { No } # subsection number in figures + # @SubSubSectionNumInFigures { No } # subsubsection number in figures + # @AppendixNumInFigures { Yes } # appendix number in figures + # @SubAppendixNumInFigures { No } # subappendix number in figures + # @SubSubAppendixNumInFigures { No } # sub-subappendix number in figures + # @SectionNumInTables { Yes } # section number in tables + # @SubSectionNumInTables { No } # subsection number in tables + # @SubSubSectionNumInTables { No } # subsubsection number in tables + # @AppendixNumInTables { Yes } # appendix number in tables + # @SubAppendixNumInTables { No } # subappendix number in tables + # @SubSubAppendixNumInTables { No } # sub-subappendix number in tables +} + + +############################################################################### +# # +# @Database (and @SysDatabase) clauses go here. # +# # +############################################################################### + +@SysDatabase @RefStyle { refstyle } # reference printing styles diff --git a/scripts/control/csrefcard.lt b/scripts/control/csrefcard.lt 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 } + } + } + @Author { clines @Break { Kai P. Mueller + } + } + @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 +. +Report m-files problems to A. Scottedward Hodel + 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 diff --git a/scripts/control/install-ocst b/scripts/control/install-ocst new file mode 100755 --- /dev/null +++ b/scripts/control/install-ocst @@ -0,0 +1,234 @@ +#!/bin/sh +# +# install-ocst -- install/update Octave Controls Toolbox (OCST) +# of A. Scottedward Hodel +# +# This script uses chunks of "install-octave" +# from John W. Eaton +# +# Kai P Mueller , TU Braunschweig +# 11/22/97 initial version +# + +if [ $# -ne 1 ] +then + echo + echo " usage: $0 (help | all | select)" + echo + exit 1 +fi + +case $1 in + + help) + cat << EOF +========================================================================== + install-ocst attempts to install (or update) the OCST (Octave controls + toolbox) of your version of Octave. + + The files in the subdirectories "general", "linear-algebra", + "strings", "plot", and "control" will be copied to the Octave data + directories with proper permissions. + + If the file "obsolete.files" exists this script file fill + ask if the files listed in "obsolete.files" should be removed. + + The install and update procedures differ in the way they perform the + copy of the files in this OCST version. + + o all Copy all files to the Octave data directories assuming that + this version is newer. Install does not ask any questions. + This modfe is best if you are the system administrator you + just want to install the control stuff. + + o select Copy all files but ask before replacing an existing file + which differs from the one in this distribution. The update + mode is appropriate for developers. New files will be + copied without confirmation. + Note: it can be very annoying to confirm the replacements. +========================================================================== +EOF + exit 0 + ;; + + all) + ask=no + ;; + + select) + ask=yes + ;; + + *) + echo + echo " usage: $0 (help | all | select)" + echo + exit 1 + ;; +esac + +if [ `whoami` != root ] +then + echo -n " * You should execute install-ocst as root, continue anyway? [n]: " + read ans + case "$ans" in + y | Y | yes | YES) + ;; + *) + exit 1 + ;; + esac +fi + +# change location of the distribution file here: +ocst_version=1.2 +datadir=/usr/local/share +oct_version=2.0.12 + +echo +echo " - This is the OCST V$ocst_version update procedure -" + +# change everything below at your own risk. +# check data directory +echo +echo -n " * Octave data dir is $datadir/octave; is that correct? [y]: " +read ans +case "$ans" in + n | N | no | NO) + echo -n " * Enter Octave data dir (without /octave/...): " + read datadir + ;; +esac +if [ ! -d "$datadir/octave" ] +then + echo "install-ocst: Octave dir ($datadir/octave) does not exist - Goodbye." + exit 1 +fi + +# check Octave version +echo +echo -n " * Octave version is $oct_version; is that correct? [y]: " +read ans +case "$ans" in + n | N | no | NO) + echo -n " * Enter Octave version: " + read oct_version + ;; +esac +toplevel=$datadir/octave/$oct_version/m +if [ ! -d $toplevel ] +then +echo "install-ocst: toplevel dir ($toplevel) does not exist - Goodbye." + exit 1 +fi + +# perform installation +echo +echo -n " * This is your last chance to quit, continue installation? [y]: " +read ans +case "$ans" in + n | N | no | NO) + echo "install-ocst aborted." + exit 0 + ;; +esac + +echo +distdir=`pwd` +for dd in general linear-algebra strings plot control +do + if [ -d "$dd" ] + then + echo " o installing files in $dd..." + cd $dd + for ff in `ls` + do + if [ $ask = yes ] + then + if [ -e "$toplevel/$dd/$ff" ] + then + diff $ff "$toplevel/$dd/$ff" > /dev/null + if [ "$?" = 0 ] + then + # files are identical; do not copy + echo "---> $ff (same version does already exist, no replacement)" + else + # file already exit, our version is (possible) newer + echo -n " * Replace existing $ff? [y]: " + read ans + case "$ans" in + n | N | no | NO) + echo "---> $ff skipped." + ;; + *) + cp $ff $toplevel/$dd + chmod 644 $toplevel/$dd/$ff + ;; + esac + fi + else + echo "---> $ff (new file)" + cp $ff $toplevel/$dd + chmod 644 $toplevel/$dd/$ff + fi + else + # copy everything without asking + cp $ff $toplevel/$dd + chmod 644 $toplevel/$dd/$ff + fi + done + echo " ...files in $dd installed." + fi + cd $distdir +done + +# check for "obsolete.files" +if [ ! -r obsolete.files ] +then + echo " o No obsolete files." +else + echo " o removing obsolete files..." + flist=`cat obsolete.files` + for ff in $flist + do + dfile=$toplevel/$ff + if [ ! -e "$dfile" ] + then + echo " * no obsolete file: $ff" + else + echo -n " * remove $ff? [n]: " + read ans + case "$ans" in + y | Y | yes | YES) + rm $dfile + ;; + esac + fi + done +fi + +echo +echo " All files have been installed. Now to the final question:" +echo + +echo -n " * Replace/create ls-R file? [y]: " +read ans +case "$ans" in + n | N | no | NO) + echo "--> no new ls-R file." + ;; + *) + if [ -d "$datadir/libexec" ] + then + echo "install-ocst: libexec directory found." + ls -LR $datadir/octave $libexecdir/octave > $datadir/octave/ls-R + else + echo "install-ocst: libexec directory not found." + echo " (you can safely ingnore this message.)" + ls -LR $datadir/octave > $datadir/octave/ls-R + fi + ;; +esac + +echo "Thank you for using install-ocst." +exit 0