#! /bin/sh # # To apply this patch, cd to the top level Octave source directory and # run this file through /bin/sh. It will first remove any files that # have been deleted from the source distribution since the last # release and then update the sources with patch(1). # # Diffs for updating *.ps, *.dvi, *.info*, and *.html files are not # included because they can be recreated from the Texinfo files using # TeX, makeinfo, or texi2html. # # Diffs for updating parse.cc and y.tab.h are not included because # they can be recreated from the file parse.y using bison. # # Diffs for updating lex.cc are not included because it can be # recreated from lex.l using flex. # # John W. Eaton # jwe@bevo.che.wisc.edu # University of Wisconsin-Madison # Department of Chemical Engineering if test -f src/octave.cc ; then true else echo '***********************************************************' 1>&2 echo 'You must run this script in the top-level octave directory!' 1>&2 echo '***********************************************************' 1>&2 exit 1 fi ### ### Special commands should go here. ### echo 'patching existing files' patch -p1 << \PATCH_EOF diff -cNr octave-3.0.1/aclocal.m4 octave-3.0.2/aclocal.m4 *** octave-3.0.1/aclocal.m4 2008-04-21 18:00:19.000000000 +0200 --- octave-3.0.2/aclocal.m4 2008-08-05 09:46:03.000000000 +0200 *************** *** 885,890 **** --- 885,893 ---- rm -rf "$tmp" ]) SED=$octave_cv_path_sed + if test -z "$SED"; then + AC_MSG_ERROR([no usable version of sed found]) + fi fi AC_SUBST(SED) AC_MSG_RESULT([$SED]) diff -cNr octave-3.0.1/BUGS octave-3.0.2/BUGS *** octave-3.0.1/BUGS 2008-04-21 18:58:22.000000000 +0200 --- octave-3.0.2/BUGS 2008-08-20 07:51:13.000000000 +0200 *************** *** 124,130 **** 1.5 How to Report Bugs ====================== ! Send bug reports for Octave to one of the addresses listed in *note Bug Lists::. The fundamental principle of reporting bugs usefully is this: --- 124,130 ---- 1.5 How to Report Bugs ====================== ! Send bug reports for Octave to one of the addresses listed in *Note Bug Lists::. The fundamental principle of reporting bugs usefully is this: diff -cNr octave-3.0.1/ChangeLog octave-3.0.2/ChangeLog *** octave-3.0.1/ChangeLog 2008-04-21 18:00:19.000000000 +0200 --- octave-3.0.2/ChangeLog 2008-08-20 07:28:21.000000000 +0200 *************** *** 1,3 **** --- 1,31 ---- + 2008-08-19 Jaroslav Hajek + + Version 3.0.2 released. + + 2008-08-04 John W. Eaton + + * Makeconf.in (do-subst-script-vals): Also substitute SED. + * run-octave.in: Use sed to append : to path elements + instead of using the find expression "-exec echo '{}':". + Substitute SED here. + + * aclocal.m4: Fail if no usable version of sed is found. + + * Makefile.in (header-msg): Mention GNU Make requirement. + Update GCC version info. + + 2008-07-31 John W. Eaton + + * octMakefile.in (DISTFILES): Add "missing" to the list. + + 2008-07-10 John W. Eaton + + * octMakefile.in (DIRS_TO_MAKE): Delete $(localfcnfilepath) and + $(localoctfilepath) from the list. Include $(datadir) + $(localfcnfiledir) $(localapifcnfiledir) $(localverfcnfiledir) + $(localoctfiledir) $(localapioctfiledir) $(localveroctfiledir) + $(imagedir) and $(localapiarchlibdir) in the list. + 2008-04-09 Rafael Laboissiere * example/octave.desktop.in: Drop the Encoding key, which is diff -cNr octave-3.0.1/configure octave-3.0.2/configure *** octave-3.0.1/configure 2008-04-21 18:14:09.000000000 +0200 --- octave-3.0.2/configure 2008-08-14 12:49:56.000000000 +0200 *************** *** 26171,26176 **** --- 26171,26181 ---- fi SED=$octave_cv_path_sed + if test -z "$SED"; then + { { echo "$as_me:$LINENO: error: no usable version of sed found" >&5 + echo "$as_me: error: no usable version of sed found" >&2;} + { (exit 1); exit 1; }; } + fi fi { echo "$as_me:$LINENO: result: $SED" >&5 diff -cNr octave-3.0.1/doc/ChangeLog octave-3.0.2/doc/ChangeLog *** octave-3.0.1/doc/ChangeLog 2008-04-21 18:02:49.000000000 +0200 --- octave-3.0.2/doc/ChangeLog 2008-08-20 07:28:21.000000000 +0200 *************** *** 1,3 **** --- 1,7 ---- + 2008-08-14 Jaroslav Hajek + + Version 3.0.2 released. + 2008-04-21 John W. Eaton Version 3.0.1 released. diff -cNr octave-3.0.1/doc/conf.texi octave-3.0.2/doc/conf.texi *** octave-3.0.1/doc/conf.texi 2008-04-21 18:56:30.000000000 +0200 --- octave-3.0.2/doc/conf.texi 2008-08-14 13:42:07.000000000 +0200 *************** *** 18,26 **** @set OCTAVE_MANUAL @set top_srcdir .. ! @set abs_top_srcdir /scratch/jwe/release/octave-3.0 @set OCTAVEHOME /usr/local ! @set VERSION 3.0.1 @set HAVE_COLAMD @set HAVE_CHOLMOD @set HAVE_UMFPACK --- 18,26 ---- @set OCTAVE_MANUAL @set top_srcdir .. ! @set abs_top_srcdir /home/hajek/devel/octave/release-3-0-x @set OCTAVEHOME /usr/local ! @set VERSION 3.0.2 @set HAVE_COLAMD @set HAVE_CHOLMOD @set HAVE_UMFPACK Files octave-3.0.1/doc/faq/Octave-FAQ.pdf and octave-3.0.2/doc/faq/Octave-FAQ.pdf differ diff -cNr octave-3.0.1/doc/interpreter/arith.texi octave-3.0.2/doc/interpreter/arith.texi *** octave-3.0.1/doc/interpreter/arith.texi 2008-04-21 18:58:23.000000000 +0200 --- octave-3.0.2/doc/interpreter/arith.texi 2008-08-20 07:51:16.000000000 +0200 *************** *** 391,404 **** @anchor{doc-mod} @deftypefn {Mapping Function} {} mod (@var{x}, @var{y}) ! Compute modulo function, using @example x - y .* floor (x ./ y) @end example ! Note that this handles negative numbers correctly: ! @code{mod (-1, 3)} is 2, not -1 as @code{rem (-1, 3)} returns. Also, @code{mod (@var{x}, 0)} returns @var{x}. An error message is printed if the dimensions of the arguments do not --- 391,405 ---- @anchor{doc-mod} @deftypefn {Mapping Function} {} mod (@var{x}, @var{y}) ! Compute modulo function. Conceptually this is given by @example x - y .* floor (x ./ y) @end example ! and is written in a manner that the correct modulus is returned for ! integer types. This function handles negative values correctly. That ! is @code{mod (-1, 3)} is 2, not -1 as @code{rem (-1, 3)} returns. Also, @code{mod (@var{x}, 0)} returns @var{x}. An error message is printed if the dimensions of the arguments do not diff -cNr octave-3.0.1/doc/interpreter/convhull.eps octave-3.0.2/doc/interpreter/convhull.eps *** octave-3.0.1/doc/interpreter/convhull.eps 2008-04-21 18:57:08.000000000 +0200 --- octave-3.0.2/doc/interpreter/convhull.eps 2008-08-14 13:43:10.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: convhull.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:08 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: convhull.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:11 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (convhull.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:08 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (convhull.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:11 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 872,877 **** --- 872,878 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/convhull.pdf and octave-3.0.2/doc/interpreter/convhull.pdf differ diff -cNr octave-3.0.1/doc/interpreter/delaunay.eps octave-3.0.2/doc/interpreter/delaunay.eps *** octave-3.0.1/doc/interpreter/delaunay.eps 2008-04-21 18:57:09.000000000 +0200 --- octave-3.0.2/doc/interpreter/delaunay.eps 2008-08-14 13:43:12.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: delaunay.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:09 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: delaunay.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:13 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (delaunay.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:09 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (delaunay.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:13 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 819,824 **** --- 819,825 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/delaunay.pdf and octave-3.0.2/doc/interpreter/delaunay.pdf differ diff -cNr octave-3.0.1/doc/interpreter/errorbar.eps octave-3.0.2/doc/interpreter/errorbar.eps *** octave-3.0.1/doc/interpreter/errorbar.eps 2008-04-21 18:57:14.000000000 +0200 --- octave-3.0.2/doc/interpreter/errorbar.eps 2008-08-14 13:43:21.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: errorbar.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:14 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: errorbar.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:21 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (errorbar.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:14 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (errorbar.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:21 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 656,1230 **** 1.000 UP 0.500 UL LT0 ! 0.00 0.00 1.00 C 574 3053 M ! 0 -621 V ! -31 621 R 62 0 V ! 543 2432 M 62 0 V ! 33 304 R ! 0 4 V ! -31 -4 R 62 0 V ! -62 4 R 62 0 V ! 33 16 R ! 0 370 V ! 671 2756 M 62 0 V ! -62 370 R 62 0 V ! 33 80 R ! 0 -90 V ! -31 90 R 62 0 V ! -62 -90 R 62 0 V ! 33 394 R ! 0 -41 V ! -31 41 R 62 0 V ! -62 -41 R 62 0 V ! 32 21 R ! 0 100 V ! 862 3490 M 62 0 V ! -62 100 R 62 0 V ! 33 331 R ! 0 -347 V ! -31 347 R 62 0 V ! 926 3574 M 62 0 V ! 33 595 R ! 0 -261 V ! -31 261 R 62 0 V ! 990 3908 M 62 0 V ! 33 259 R ! 0 -664 V ! -31 664 R 62 0 V ! -62 -664 R 62 0 V ! 33 1202 R ! 0 -485 V ! -31 485 R 62 0 V ! -62 -485 R 62 0 V ! 33 -91 R ! 0 321 V ! -31 -321 R 62 0 V ! -62 321 R 62 0 V ! 33 304 R ! 0 -322 V ! -31 322 R 62 0 V ! -62 -322 R 62 0 V ! 33 259 R ! 0 40 V ! -31 -40 R 62 0 V ! -62 40 R 62 0 V ! 32 -91 R ! 0 232 V ! -31 -232 R 62 0 V ! -62 232 R 62 0 V ! 33 -133 R ! 0 133 V ! -31 -133 R 62 0 V ! -62 133 R 62 0 V ! 97 0 R ! 0 -132 V ! -31 132 R 62 0 V ! -62 -132 R 62 0 V ! 97 -23 R ! 0 155 V ! -31 -155 R 62 0 V ! -62 155 R 62 0 V ! 33 0 R ! 0 -207 V ! -31 207 R ! 1819 4872 L ! -62 -207 R 62 0 V ! 33 -144 R ! 0 112 V ! -31 -112 R 62 0 V ! -62 112 R 62 0 V ! 32 -29 R ! 0 -110 V ! -31 110 R 62 0 V ! -62 -110 R 62 0 V ! 33 111 R ! 0 -81 V ! -31 81 R 62 0 V ! -62 -81 R 62 0 V ! 33 -269 R ! 0 -77 V ! -31 77 R 62 0 V ! -62 -77 R 62 0 V ! 33 -84 R ! 0 -310 V ! -31 310 R 62 0 V ! -62 -310 R 62 0 V ! 33 67 R ! 0 311 V ! -31 -311 R 62 0 V ! -62 311 R 62 0 V ! 33 -666 R ! 0 255 V ! -31 -255 R 62 0 V ! -62 255 R 62 0 V ! 33 136 R ! 0 -514 V ! -31 514 R 62 0 V ! -62 -514 R 62 0 V ! 33 -196 R ! 0 703 V ! -31 -703 R 62 0 V ! -62 703 R 62 0 V ! 33 -728 R ! 0 -153 V ! -31 153 R 62 0 V ! -62 -153 R 62 0 V ! 32 -228 R ! 0 621 V ! -31 -621 R 62 0 V ! -62 621 R 62 0 V ! 33 -930 R ! 0 513 V ! -31 -513 R 62 0 V ! -62 513 R 62 0 V ! 33 -1043 R ! 0 483 V ! -31 -483 R 62 0 V ! -62 483 R 62 0 V ! 33 -224 R ! 0 85 V ! -31 -85 R 62 0 V ! -62 85 R 62 0 V ! 33 -287 R ! 0 164 V ! -31 -164 R 62 0 V ! -62 164 R 62 0 V ! 33 -427 R ! 0 -82 V ! -31 82 R 62 0 V ! -62 -82 R 62 0 V ! 33 107 R ! 0 -322 V ! -31 322 R 62 0 V ! -62 -322 R 62 0 V ! 33 -202 R ! 2938 1232 L ! -31 -5 R 62 0 V ! -62 5 R 62 0 V ! 32 45 R ! 0 -3 V ! -31 3 R 62 0 V ! -62 -3 R 62 0 V ! 33 -107 R ! 0 102 V ! -31 -102 R 62 0 V ! -62 102 R 62 0 V ! 33 -543 R ! 0 635 V ! 3098 726 M 62 0 V ! -62 635 R 62 0 V ! 33 -790 R ! 0 259 V ! 3162 571 M 62 0 V ! -62 259 R 62 0 V ! 33 -79 R ! 0 10 V ! -31 -10 R 62 0 V ! -62 10 R 62 0 V ! 33 -300 R ! 0 -181 V ! -31 181 R 62 0 V ! 3290 280 M 62 0 V ! 224 0 R ! 0 104 V ! 3545 280 M 62 0 V ! -62 104 R 62 0 V ! 33 38 R ! 0 -47 V ! -31 47 R 62 0 V ! -62 -47 R 62 0 V ! 97 -95 R ! 0 325 V ! 3737 280 M 62 0 V ! -62 325 R 62 0 V ! 33 -17 R ! 0 -273 V ! -31 273 R 62 0 V ! 3801 315 M 62 0 V ! 33 462 R ! 0 -315 V ! -31 315 R 62 0 V ! 3865 462 M 62 0 V ! 33 77 R ! 0 174 V ! 3929 539 M 62 0 V ! -62 174 R 62 0 V ! 33 -274 R ! 0 341 V ! 3993 439 M 62 0 V ! -62 341 R 62 0 V ! 32 14 R ! 0 417 V ! 4056 794 M 62 0 V ! -62 417 R 62 0 V ! 33 -37 R ! 0 -587 V ! -31 587 R 62 0 V ! 4120 587 M 62 0 V ! 33 654 R ! 0 88 V ! -31 -88 R 62 0 V ! -62 88 R 62 0 V ! 33 -80 R ! 0 326 V ! -31 -326 R 62 0 V ! -62 326 R ! 4310 1575 L ! 33 424 R ! 0 -379 V ! -31 379 R 62 0 V ! -62 -379 R 62 0 V ! 33 350 R ! 0 -113 V ! -31 113 R 62 0 V ! -62 -113 R 62 0 V ! 33 631 R ! 0 -425 V ! -31 425 R 62 0 V ! -62 -425 R 62 0 V ! 33 385 R ! 0 -460 V ! -31 460 R 62 0 V ! -62 -460 R 62 0 V ! 32 729 R ! 0 -352 V ! -31 352 R 62 0 V ! -62 -352 R 62 0 V ! 33 272 R ! 0 71 V ! -31 -71 R 62 0 V ! -62 71 R 62 0 V ! 33 285 R ! 0 176 V ! -31 -176 R 62 0 V ! -62 176 R 62 0 V ! 33 -219 R ! 0 109 V ! -31 -109 R 62 0 V ! -62 109 R 62 0 V ! 33 655 R ! 0 -375 V ! -31 375 R 62 0 V ! -62 -375 R 62 0 V ! 33 275 R ! 0 16 V ! -31 -16 R 62 0 V ! -62 16 R 62 0 V ! 33 308 R ! 0 -338 V ! -31 338 R 62 0 V ! -62 -338 R 62 0 V ! 33 1120 R ! 0 -726 V ! -31 726 R 62 0 V ! -62 -726 R 62 0 V ! 32 -115 R ! 0 318 V ! -31 -318 R 62 0 V ! -62 318 R 62 0 V ! 33 240 R ! 0 -186 V ! -31 186 R 62 0 V ! -62 -186 R 62 0 V ! 33 215 R ! 0 2 V ! -31 -2 R 62 0 V ! -62 2 R 62 0 V ! 33 404 R ! 0 -16 V ! -31 16 R 62 0 V ! -62 -16 R 62 0 V ! 33 16 R ! 0 -206 V ! -31 206 R 62 0 V ! -62 -206 R 62 0 V ! 33 -337 R ! 0 541 V ! -31 -541 R ! 5460 4329 L ! -62 541 R 62 0 V ! 33 -269 R ! 0 271 V ! -31 -271 R 62 0 V ! -62 271 R 62 0 V ! 33 -144 R ! 0 144 V ! -31 -144 R 62 0 V ! -62 144 R 62 0 V ! 33 0 R ! 0 -242 V ! -31 242 R 62 0 V ! -62 -242 R 62 0 V ! 32 35 R ! 0 -156 V ! -31 156 R 62 0 V ! -62 -156 R 62 0 V ! 33 363 R ! 0 -136 V ! -31 136 R 62 0 V ! -62 -136 R 62 0 V ! 33 136 R ! 0 -254 V ! -31 254 R 62 0 V ! -62 -254 R 62 0 V ! 33 134 R ! 0 76 V ! -31 -76 R 62 0 V ! -62 76 R 62 0 V ! 33 -632 R ! 0 669 V ! -31 -669 R 62 0 V ! -62 669 R 62 0 V ! 33 -450 R ! 0 -289 V ! -31 289 R 62 0 V ! -62 -289 R 62 0 V ! 33 503 R ! 0 -842 V ! -31 842 R 62 0 V ! -62 -842 R 62 0 V ! 33 -195 R ! 0 419 V ! -31 -419 R 62 0 V ! -62 419 R 62 0 V ! 32 -71 R ! 0 272 V ! -31 -272 R 62 0 V ! -62 272 R 62 0 V ! 33 -341 R ! 0 -83 V ! -31 83 R 62 0 V ! -62 -83 R 62 0 V ! 33 -448 R ! 0 79 V ! -31 -79 R 62 0 V ! -62 79 R 62 0 V ! 33 191 R ! 0 -522 V ! -31 522 R 62 0 V ! -62 -522 R 62 0 V ! 33 80 R ! 0 237 V ! -31 -237 R 62 0 V ! -62 237 R 62 0 V ! 33 -506 R ! 0 297 V ! -31 -297 R 62 0 V ! -62 297 R 62 0 V ! 33 -742 R ! 6579 2754 L ! -31 -300 R 62 0 V ! -62 300 R 62 0 V ! 33 -197 R ! 0 -123 V ! -31 123 R 62 0 V ! -62 -123 R 62 0 V ! 32 -172 R ! 0 -75 V ! -31 75 R 62 0 V ! -62 -75 R 62 0 V ! 33 7 R ! 0 -729 V ! -31 729 R 62 0 V ! -62 -729 R 62 0 V ! 33 286 R ! 0 -44 V ! -31 44 R 62 0 V ! -62 -44 R 62 0 V ! 33 -368 R ! 0 241 V ! -31 -241 R 62 0 V ! -62 241 R 62 0 V ! 33 -440 R ! 0 296 V ! -31 -296 R 62 0 V ! -62 296 R 62 0 V 574 2576 Pls 638 2805 Pls --- 656,1236 ---- 1.000 UP 0.500 UL LT0 ! 0.00 0.00 1.00 C 574 2272 M ! 0 -171 V ! -31 171 R 62 0 V ! 543 2101 M 62 0 V ! 33 827 R ! 0 -496 V ! -31 496 R 62 0 V ! 607 2432 M 62 0 V ! 33 861 R ! 0 -196 V ! -31 196 R 62 0 V ! 671 3097 M 62 0 V ! 33 158 R ! 0 24 V ! -31 -24 R 62 0 V ! -62 24 R 62 0 V ! 33 -29 R ! 0 112 V ! 799 3250 M 62 0 V ! -62 112 R 62 0 V ! 32 181 R ! 0 -253 V ! -31 253 R 62 0 V ! 862 3290 M 62 0 V ! 33 896 R ! 0 -792 V ! -31 792 R 62 0 V ! 926 3394 M 62 0 V ! 33 983 R ! 0 37 V ! -31 -37 R 62 0 V ! -62 37 R 62 0 V ! 33 -184 R ! 0 84 V ! -31 -84 R 62 0 V ! -62 84 R 62 0 V ! 33 -102 R ! 0 237 V ! -31 -237 R 62 0 V ! -62 237 R 62 0 V ! 33 109 R ! 0 211 V ! -31 -211 R 62 0 V ! -62 211 R 62 0 V ! 33 -275 R ! 0 241 V ! -31 -241 R 62 0 V ! -62 241 R 62 0 V ! 33 -239 R ! 0 156 V ! -31 -156 R 62 0 V ! -62 156 R 62 0 V ! 32 166 R ! 0 54 V ! -31 -54 R 62 0 V ! -62 54 R 62 0 V ! 33 0 R ! 0 -15 V ! -31 15 R 62 0 V ! -62 -15 R 62 0 V ! 225 -69 R ! 0 45 V ! -31 -45 R 62 0 V ! -62 45 R 62 0 V ! 33 -398 R ! 0 318 V ! -31 -318 R 62 0 V ! -62 318 R 62 0 V ! 33 -255 R ! 0 195 V ! -31 -195 R ! 1883 4498 L ! -62 195 R 62 0 V ! 32 -156 R ! 0 335 V ! -31 -335 R 62 0 V ! -62 335 R 62 0 V ! 33 -487 R ! 0 -353 V ! -31 353 R 62 0 V ! -62 -353 R 62 0 V ! 33 -38 R ! 0 128 V ! -31 -128 R 62 0 V ! -62 128 R 62 0 V ! 33 244 R ! 0 -86 V ! -31 86 R 62 0 V ! -62 -86 R 62 0 V ! 33 -579 R ! 0 534 V ! -31 -534 R 62 0 V ! -62 534 R 62 0 V ! 33 -493 R ! 0 142 V ! -31 -142 R 62 0 V ! -62 142 R 62 0 V ! 33 -779 R ! 0 235 V ! -31 -235 R 62 0 V ! -62 235 R 62 0 V ! 33 248 R ! 0 266 V ! -31 -266 R 62 0 V ! -62 266 R 62 0 V ! 33 -1098 R ! 0 312 V ! -31 -312 R 62 0 V ! -62 312 R 62 0 V ! 32 -415 R ! 0 298 V ! -31 -298 R 62 0 V ! -62 298 R 62 0 V ! 33 -495 R ! 0 145 V ! -31 -145 R 62 0 V ! -62 145 R 62 0 V ! 33 61 R ! 0 -49 V ! -31 49 R 62 0 V ! -62 -49 R 62 0 V ! 33 -207 R ! 0 -384 V ! -31 384 R 62 0 V ! -62 -384 R 62 0 V ! 33 -29 R ! 0 19 V ! -31 -19 R 62 0 V ! -62 19 R 62 0 V ! 33 -193 R ! 0 262 V ! -31 -262 R 62 0 V ! -62 262 R 62 0 V ! 33 -592 R ! 0 198 V ! -31 -198 R 62 0 V ! -62 198 R 62 0 V ! 33 -152 R ! 0 -238 V ! -31 238 R 62 0 V ! -62 -238 R 62 0 V ! 32 -644 R ! 3001 937 L ! 2970 653 M 62 0 V ! -62 284 R 62 0 V ! 33 -47 R ! 0 285 V ! 3034 890 M 62 0 V ! -62 285 R 62 0 V ! 33 -631 R ! 0 339 V ! 3098 544 M 62 0 V ! -62 339 R 62 0 V ! 33 -351 R ! 0 467 V ! 3162 532 M 62 0 V ! -62 467 R 62 0 V ! 33 -719 R ! 0 776 V ! 3226 280 M 62 0 V ! -62 776 R 62 0 V ! 33 -600 R ! 0 64 V ! -31 -64 R 62 0 V ! -62 64 R 62 0 V ! 33 -92 R ! 0 -28 V ! -31 28 R 62 0 V ! -62 -28 R 62 0 V ! 33 -120 R ! 0 351 V ! 3418 280 M 62 0 V ! -62 351 R 62 0 V ! 32 -102 R ! 0 -14 V ! -31 14 R 62 0 V ! -62 -14 R 62 0 V ! 97 -235 R ! 0 121 V ! 3609 280 M 62 0 V ! -62 121 R 62 0 V ! 33 114 R ! 0 -235 V ! -31 235 R 62 0 V ! 3673 280 M 62 0 V ! 33 134 R ! 0 -82 V ! -31 82 R 62 0 V ! -62 -82 R 62 0 V ! 33 -8 R ! 0 43 V ! -31 -43 R 62 0 V ! -62 43 R 62 0 V ! 33 144 R ! 0 -4 V ! -31 4 R 62 0 V ! -62 -4 R 62 0 V ! 33 -227 R ! 0 135 V ! 3929 280 M 62 0 V ! -62 135 R 62 0 V ! 33 651 R ! 0 -660 V ! -31 660 R 62 0 V ! 3993 406 M 62 0 V ! 32 591 R ! 0 -15 V ! -31 15 R 62 0 V ! -62 -15 R 62 0 V ! 33 93 R ! 0 37 V ! -31 -37 R 62 0 V ! -62 37 R ! 4182 1112 L ! 33 208 R ! 0 409 V ! -31 -409 R 62 0 V ! -62 409 R 62 0 V ! 33 -316 R ! 0 -120 V ! -31 120 R 62 0 V ! -62 -120 R 62 0 V ! 33 499 R ! 0 316 V ! -31 -316 R 62 0 V ! -62 316 R 62 0 V ! 33 -304 R ! 0 313 V ! -31 -313 R 62 0 V ! -62 313 R 62 0 V ! 33 -64 R ! 0 87 V ! -31 -87 R 62 0 V ! -62 87 R 62 0 V ! 33 23 R ! 0 261 V ! -31 -261 R 62 0 V ! -62 261 R 62 0 V ! 32 101 R ! 0 -28 V ! -31 28 R 62 0 V ! -62 -28 R 62 0 V ! 33 563 R ! 0 -217 V ! -31 217 R 62 0 V ! -62 -217 R 62 0 V ! 33 413 R ! 0 -435 V ! -31 435 R 62 0 V ! -62 -435 R 62 0 V ! 33 242 R ! 0 696 V ! -31 -696 R 62 0 V ! -62 696 R 62 0 V ! 33 -519 R ! 0 213 V ! -31 -213 R 62 0 V ! -62 213 R 62 0 V ! 33 241 R ! 0 -43 V ! -31 43 R 62 0 V ! -62 -43 R 62 0 V ! 33 550 R ! 0 -330 V ! -31 330 R 62 0 V ! -62 -330 R 62 0 V ! 33 776 R ! 0 -390 V ! -31 390 R 62 0 V ! -62 -390 R 62 0 V ! 32 -197 R ! 0 354 V ! -31 -354 R 62 0 V ! -62 354 R 62 0 V ! 33 106 R ! 0 19 V ! -31 -19 R 62 0 V ! -62 19 R 62 0 V ! 33 -90 R ! 0 -101 V ! -31 101 R 62 0 V ! -62 -101 R 62 0 V ! 33 503 R ! 0 -126 V ! -31 126 R ! 5332 4851 L ! -62 -126 R ! 62 0 V ! 33 -43 R ! 0 190 V ! -31 -190 R 62 0 V ! -62 190 R 62 0 V ! 33 0 R ! 0 -164 V ! -31 164 R 62 0 V ! -62 -164 R 62 0 V ! 97 -184 R ! 0 348 V ! -31 -348 R 62 0 V ! -62 348 R 62 0 V ! 33 -300 R ! 0 300 V ! -31 -300 R ! 62 0 V ! -62 300 R 62 0 V ! 32 0 R ! 0 -236 V ! -31 236 R 62 0 V ! -62 -236 R 62 0 V ! 33 -154 R ! 0 390 V ! -31 -390 R 62 0 V ! -62 390 R 62 0 V ! 33 -13 R ! 0 -166 V ! -31 166 R 62 0 V ! -62 -166 R 62 0 V ! 33 -207 R ! 0 100 V ! -31 -100 R 62 0 V ! -62 100 R 62 0 V ! 33 218 R ! 0 -66 V ! -31 66 R 62 0 V ! -62 -66 R 62 0 V ! 33 -271 R ! 0 -29 V ! -31 29 R 62 0 V ! -62 -29 R 62 0 V ! 33 -566 R ! 0 605 V ! -31 -605 R 62 0 V ! -62 605 R 62 0 V ! 33 -796 R ! 0 584 V ! -31 -584 R 62 0 V ! -62 584 R 62 0 V ! 32 -744 R ! 0 718 V ! -31 -718 R 62 0 V ! -62 718 R 62 0 V ! 33 -624 R ! 0 126 V ! -31 -126 R 62 0 V ! -62 126 R 62 0 V ! 33 -386 R ! 0 -412 V ! -31 412 R 62 0 V ! -62 -412 R 62 0 V ! 33 239 R ! 0 -78 V ! -31 78 R 62 0 V ! -62 -78 R 62 0 V ! 33 30 R ! 0 56 V ! -31 -56 R 62 0 V ! -62 56 R 62 0 V ! 33 -49 R ! 6515 3186 L ! -31 -45 R 62 0 V ! -62 45 R 62 0 V ! 33 -827 R ! 0 47 V ! -31 -47 R 62 0 V ! -62 47 R 62 0 V ! 33 -278 R ! 0 -352 V ! -31 352 R 62 0 V ! -62 -352 R 62 0 V ! 32 183 R ! 0 -106 V ! -31 106 R 62 0 V ! -62 -106 R 62 0 V ! 33 315 R ! 0 -483 V ! -31 483 R 62 0 V ! -62 -483 R 62 0 V ! 33 -148 R ! 0 13 V ! -31 -13 R 62 0 V ! -62 13 R 62 0 V ! 33 -175 R ! 0 432 V ! -31 -432 R 62 0 V ! -62 432 R 62 0 V ! 33 -476 R ! 0 -476 V ! -31 476 R 62 0 V ! 6931 855 M 62 0 V 574 2576 Pls 638 2805 Pls *************** *** 1338,1343 **** --- 1344,1350 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/errorbar.pdf and octave-3.0.2/doc/interpreter/errorbar.pdf differ Files octave-3.0.1/doc/interpreter/errorbar.png and octave-3.0.2/doc/interpreter/errorbar.png differ diff -cNr octave-3.0.1/doc/interpreter/extended.eps octave-3.0.2/doc/interpreter/extended.eps *** octave-3.0.1/doc/interpreter/extended.eps 2008-04-21 18:57:20.000000000 +0200 --- octave-3.0.2/doc/interpreter/extended.eps 2008-08-14 13:43:29.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: extended.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:20 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: extended.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:30 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (extended.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:20 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (extended.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:30 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 1108,1113 **** --- 1108,1114 ---- ] -53.3 MLshow 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/extended.pdf and octave-3.0.2/doc/interpreter/extended.pdf differ diff -cNr octave-3.0.1/doc/interpreter/gplot.eps octave-3.0.2/doc/interpreter/gplot.eps *** octave-3.0.1/doc/interpreter/gplot.eps 2008-04-21 18:56:50.000000000 +0200 --- octave-3.0.2/doc/interpreter/gplot.eps 2008-08-14 13:42:42.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: gplot.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:56:50 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: gplot.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:42:42 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (gplot.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:56:50 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (gplot.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:42:42 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 746,751 **** --- 746,752 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/gplot.pdf and octave-3.0.2/doc/interpreter/gplot.pdf differ diff -cNr octave-3.0.1/doc/interpreter/griddata.eps octave-3.0.2/doc/interpreter/griddata.eps *** octave-3.0.1/doc/interpreter/griddata.eps 2008-04-21 18:57:06.000000000 +0200 --- octave-3.0.2/doc/interpreter/griddata.eps 2008-08-14 13:43:08.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: griddata.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:06 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: griddata.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:08 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (griddata.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:06 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (griddata.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:08 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 534,5249 **** } ifelse 1.000 UP 1.000 UL ! LT0 ! .262 g .5708 g 3749 3517 M 1 -2 V stroke ! LT0 ! .262 g .5145 g 4001 3401 M -2 -8 V stroke ! LT0 ! .262 g .7424 g 3957 3846 M -6 -17 V stroke ! LT0 ! .262 g .6752 g 4022 3706 M 1 -1 V stroke ! LT0 ! .262 g .8254 g 3516 4005 M -2 -5 V stroke ! LT0 ! .262 g .8242 g 3516 4005 M 5 -9 V stroke ! LT0 ! .262 g .7721 g 4386 3859 M -9 -15 V stroke ! LT0 ! .262 g .8262 g 4046 3985 M 2 -3 V stroke ! LT0 ! .262 g .0847 g 1151 1992 M -75 -324 V stroke ! LT0 ! .262 g .0835 g 1174 2045 M -98 -377 V stroke ! LT0 ! .262 g .8273 g 3517 4007 M -1 -2 V stroke ! LT0 ! .262 g .7771 g 4384 3862 M 2 -3 V stroke ! LT0 ! .262 g .8767 g 3167 4084 M 15 -14 V stroke ! LT0 ! .262 g .9013 g 3443 4131 M -2 -4 V stroke ! LT0 ! .262 g .2494 g 1250 2371 M -76 -326 V stroke ! LT0 ! .262 g .2448 g 1273 2409 M -99 -364 V stroke ! LT0 ! .262 g .848 g 4468 3977 M -1 -1 V stroke ! LT0 ! .262 g .9586 g 3658 4231 M -8 -8 V stroke ! LT0 ! .262 g .9327 g 3544 4190 M 6 -4 V stroke ! LT0 ! .262 g .9329 g 4065 4169 M 9 -6 V stroke ! LT0 ! .262 g .2477 g 1227 2301 M -76 -309 V stroke ! LT0 ! .262 g .2506 g 1250 2371 M -99 -379 V stroke ! LT0 ! .262 g .4837 g 1348 2722 M -2 -8 V stroke ! LT0 ! .262 g .3962 g 1340 2688 M -67 -279 V stroke ! LT0 ! .262 g .3918 g 1371 2724 M -98 -315 V stroke ! LT0 ! .262 g .9671 g 3226 4230 M -6 -2 V stroke ! LT0 ! .262 g .9539 g 2929 4181 M 6 -1 V stroke LT0 ! .262 g .4119 g 3680 2638 M 0 1 V stroke LT0 ! .262 g .3769 g 3756 2531 M -1 1 V stroke LT0 ! .262 g .6087 g 3726 3202 M -43 -63 V stroke LT0 ! .262 g .6138 g 3552 3233 M 41 -96 V stroke LT0 ! .262 g .0854 g 6049 1836 M 75 -385 V stroke LT0 ! .262 g .0856 g 6026 1779 M 98 -328 V stroke LT0 ! .262 g .6173 g 3900 3219 M -43 -76 V stroke LT0 ! .262 g .61 g 3726 3202 M 28 -60 V stroke LT0 ! .262 g .9907 g 3643 4228 M -74 42 V stroke LT0 ! .262 g .9891 g 3742 4247 M -173 23 V stroke LT0 ! .262 g .9962 g 3470 4260 M 99 10 V stroke LT0 ! .262 g .9896 g 3817 4232 M -75 15 V stroke LT0 ! .262 g .987 g 3643 4228 M 99 19 V stroke LT0 ! .262 g .6175 g 3280 3214 M 28 -71 V stroke LT0 ! .262 g .6153 g 3552 3233 M -90 -95 V stroke LT0 ! .262 g .6335 g 3378 3318 M 73 -180 V stroke LT0 ! .262 g .6519 g 3824 3360 M -98 -158 V stroke LT0 ! .262 g .6513 g 3650 3365 M 76 -163 V stroke LT0 ! .262 g .6569 g 3650 3365 M -98 -132 V stroke LT0 ! .262 g .6687 g 3477 3423 M 75 -190 V stroke ! LT0 ! .262 g .9596 g 4493 4140 M -12 0 V stroke LT0 ! .262 g .9741 g 2925 4178 M -76 16 V stroke LT0 ! .262 g .9815 g 3023 4235 M -174 -41 V stroke LT0 ! .262 g .9674 g 2760 4160 M 89 34 V stroke LT0 ! .262 g .9885 g 4166 4217 M -76 9 V stroke LT0 ! .262 g .9889 g 3991 4226 M 99 0 V stroke ! LT0 ! .262 g .3576 g 1273 2466 M -23 -95 V stroke ! LT0 ! .262 g .4813 g 1348 2722 M -6 -21 V stroke ! LT0 ! .262 g .3952 g 1330 2656 M -80 -285 V stroke LT0 ! .262 g .7114 g 3749 3517 M -99 -152 V stroke LT0 ! .262 g .7163 g 3575 3546 M 75 -181 V stroke LT0 ! .262 g .9779 g 4340 4179 M -76 25 V stroke LT0 ! .262 g .985 g 4166 4217 M 98 -13 V stroke LT0 ! .262 g .988 g 3371 4196 M -75 60 V stroke LT0 ! .262 g .997 g 3470 4260 M -174 -4 V stroke LT0 ! .262 g .9958 g 3197 4237 M 99 19 V stroke LT0 ! .262 g .6347 g 4074 3274 M -71 -134 V stroke LT0 ! .262 g .6181 g 3900 3219 M 46 -82 V stroke LT0 ! .262 g .6676 g 3998 3395 M -98 -176 V stroke LT0 ! .262 g .6576 g 3824 3360 M 76 -141 V stroke ! LT0 ! .262 g .5035 g 1414 2894 M -43 -170 V stroke ! LT0 ! .262 g .5225 g 1470 3019 M -99 -295 V stroke LT0 ! .262 g .6497 g 3378 3318 M -98 -104 V stroke LT0 ! .262 g .6717 g 3204 3420 M 76 -206 V stroke LT0 ! .262 g .6216 g 3196 3151 M 84 63 V stroke LT0 ! .262 g .6867 g 3477 3423 M -99 -105 V stroke LT0 ! .262 g .7063 g 3303 3514 M 75 -196 V stroke LT0 ! .262 g .7185 g 3923 3537 M -99 -177 V stroke LT0 ! .262 g .7121 g 3749 3517 M 75 -157 V stroke LT0 ! .262 g .7281 g 3575 3546 M -98 -123 V stroke LT0 ! .262 g .7415 g 3401 3611 M 76 -188 V stroke LT0 ! .262 g .984 g 3719 4176 M -76 52 V stroke LT0 ! .262 g .9858 g 3546 4191 M 97 37 V stroke LT0 ! .262 g .9913 g 3546 4191 M -76 69 V stroke LT0 ! .262 g .9906 g 3371 4196 M 99 64 V stroke LT0 ! .262 g .6279 g 4149 3173 M -5 -10 V stroke LT0 ! .262 g .6544 g 3106 3358 M 71 -205 V stroke LT0 ! .262 g .7751 g 3673 3674 M -98 -128 V stroke LT0 ! .262 g .7855 g 3500 3726 M 75 -180 V stroke LT0 ! .262 g .7704 g 3847 3667 M -98 -150 V stroke LT0 ! .262 g .7702 g 3673 3674 M 76 -157 V stroke LT0 ! .262 g .9934 g 3099 4205 M -76 30 V stroke LT0 ! .262 g .995 g 3197 4237 M -174 -2 V stroke LT0 ! .262 g .9854 g 2925 4178 M 98 57 V stroke LT0 ! .262 g .9841 g 3893 4157 M -76 75 V stroke LT0 ! .262 g .9943 g 3991 4226 M -174 6 V stroke LT0 ! .262 g .9866 g 3719 4176 M 98 56 V stroke LT0 ! .262 g .9731 g 3447 4127 M -76 69 V stroke LT0 ! .262 g .9751 g 3273 4143 M 98 53 V stroke LT0 ! .262 g .8264 g 3771 3816 M -98 -142 V stroke LT0 ! .262 g .832 g 3598 3847 M 75 -173 V stroke LT0 ! .262 g .7989 g 3500 3726 M -99 -115 V stroke LT0 ! .262 g .8136 g 3326 3797 M 75 -186 V stroke LT0 ! .262 g .7611 g 3303 3514 M 98 97 V stroke LT0 ! .262 g .9829 g 3273 4143 M -76 94 V stroke LT0 ! .262 g .9955 g 3099 4205 M 98 32 V stroke LT0 ! .262 g .7823 g 3227 3709 M 76 -195 V stroke LT0 ! .262 g .7283 g 3204 3420 M 99 94 V stroke LT0 ! .262 g .6823 g 4074 3274 M -76 121 V stroke LT0 ! .262 g .7404 g 4097 3580 M -99 -185 V stroke LT0 ! .262 g .7284 g 3923 3537 M 75 -142 V stroke LT0 ! .262 g .753 g 3129 3628 M 75 -208 V stroke LT0 ! .262 g .7037 g 3106 3358 M 98 62 V stroke LT0 ! .262 g .989 g 4067 4169 M -76 57 V stroke LT0 ! .262 g .9845 g 3893 4157 M 98 69 V stroke LT0 ! .262 g .981 g 3000 4158 M -75 20 V stroke LT0 ! .262 g .9783 g 2826 4154 M 99 24 V stroke LT0 ! .262 g .8424 g 3598 3847 M -98 -121 V stroke LT0 ! .262 g .8492 g 3424 3884 M 76 -158 V stroke LT0 ! .262 g .6458 g 4149 3173 M -75 101 V stroke LT0 ! .262 g .7011 g 4172 3468 M -98 -194 V stroke ! LT0 ! .262 g .9671 g 4534 4141 M -20 -2 V stroke ! LT0 ! .262 g .9666 g 4504 4141 M 3 0 V stroke LT0 ! .262 g .7768 g 3923 3537 M -76 130 V stroke LT0 ! .262 g .8311 g 3946 3828 M -99 -161 V stroke LT0 ! .262 g .8266 g 3771 3816 M 76 -149 V stroke LT0 ! .262 g .9693 g 3620 4100 M -74 91 V stroke LT0 ! .262 g .9738 g 3447 4127 M 99 64 V stroke LT0 ! .262 g .7872 g 4021 3704 M -98 -167 V stroke LT0 ! .262 g .6564 g 3007 3310 M 50 -141 V stroke LT0 ! .262 g .9834 g 4415 4162 M -75 17 V stroke LT0 ! .262 g .9849 g 4241 4176 M 99 3 V stroke LT0 ! .262 g .9623 g 3794 4070 M -75 106 V stroke LT0 ! .262 g .9675 g 3620 4100 M 99 76 V stroke LT0 ! .262 g .992 g 4241 4176 M -75 41 V stroke LT0 ! .262 g .9886 g 4067 4169 M 99 48 V stroke LT0 ! .262 g .8808 g 3870 3958 M -99 -142 V stroke LT0 ! .262 g .8818 g 3696 3969 M 75 -153 V stroke LT0 ! .262 g .8873 g 3696 3969 M -98 -122 V stroke LT0 ! .262 g .8921 g 3523 3997 M 75 -150 V stroke LT0 ! .262 g .9552 g 3349 4052 M -76 91 V stroke LT0 ! .262 g .96 g 3174 4081 M 99 62 V stroke LT0 ! .262 g .899 g 3523 3997 M -99 -113 V stroke LT0 ! .262 g .91 g 3349 4052 M 75 -168 V stroke LT0 ! .262 g .8639 g 3326 3797 M 98 87 V stroke LT0 ! .262 g .9618 g 3968 4071 M -75 86 V stroke LT0 ! .262 g .9597 g 3794 4070 M 99 87 V stroke LT0 ! .262 g .629 g 4157 3166 M -8 7 V stroke LT0 ! .262 g .671 g 4248 3374 M -99 -201 V stroke LT0 ! .262 g .7367 g 3030 3569 M 76 -211 V stroke LT0 ! .262 g .6896 g 3007 3310 M 99 48 V stroke LT0 ! .262 g .9421 g 3523 3997 M -76 130 V stroke LT0 ! .262 g .9531 g 3349 4052 M 98 75 V stroke LT0 ! .262 g .9376 g 3620 4100 M -97 -103 V stroke LT0 ! .262 g .8827 g 3250 3973 M 76 -176 V stroke LT0 ! .262 g .8348 g 3227 3709 M 99 88 V stroke LT0 ! .262 g .9328 g 3696 3969 M -76 131 V stroke LT0 ! .262 g .9266 g 3870 3958 M -76 112 V stroke LT0 ! .262 g .9276 g 3696 3969 M 98 101 V stroke LT0 ! .262 g .8557 g 3152 3894 M 75 -185 V stroke LT0 ! .262 g .807 g 3129 3628 M 98 81 V stroke LT0 ! .262 g .9726 g 3174 4081 M -75 124 V stroke LT0 ! .262 g .9889 g 3000 4158 M 99 47 V stroke LT0 ! .262 g .9845 g 2728 4148 M -76 20 V stroke LT0 ! .262 g .98 g 2826 4154 M -174 14 V stroke LT0 ! .262 g .9827 g 2554 4148 M 98 20 V stroke ! LT0 ! .262 g .3983 g 1302 2572 M -75 -271 V stroke LT0 ! .262 g .4099 g 1325 2678 M -98 -377 V stroke ! LT0 ! .262 g .5406 g 1401 2922 M -96 -341 V stroke ! LT0 ! .262 g .3928 g 1304 2578 M -77 -277 V stroke LT0 ! .262 g .8854 g 3946 3828 M -76 130 V stroke LT0 ! .262 g .9286 g 3968 4071 M -98 -113 V stroke LT0 ! .262 g .8415 g 4021 3704 M -75 124 V stroke LT0 ! .262 g .8928 g 4044 3982 M -98 -154 V stroke LT0 ! .262 g .9337 g 3250 3973 M -76 108 V stroke LT0 ! .262 g .9484 g 3076 4043 M 98 38 V stroke LT0 ! .262 g .9289 g 3250 3973 M 99 79 V stroke LT0 ! .262 g .7991 g 4097 3580 M -76 124 V stroke LT0 ! .262 g .8523 g 4120 3866 M -99 -162 V stroke LT0 ! .262 g .9744 g 4143 4098 M -76 71 V stroke LT0 ! .262 g .9662 g 3968 4071 M 99 98 V stroke LT0 ! .262 g .8324 g 3053 3826 M 76 -198 V stroke LT0 ! .262 g .786 g 3030 3569 M 99 59 V stroke LT0 ! .262 g .9361 g 4044 3982 M -76 89 V stroke LT0 ! .262 g .9812 g 2902 4133 M -76 21 V stroke LT0 ! .262 g .983 g 2728 4148 M 98 6 V stroke LT0 ! .262 g .7592 g 4172 3468 M -75 112 V stroke LT0 ! .262 g .814 g 4195 3761 M -98 -181 V stroke LT0 ! .262 g .2674 g 3671 2120 M 16 3 V stroke LT0 ! .262 g .6647 g 2909 3287 M 36 -103 V stroke LT0 ! .262 g .6681 g 4324 3299 M -57 -118 V stroke LT0 ! .262 g .2464 g 5973 2206 M 76 -370 V stroke LT0 ! .262 g .2529 g 5950 2177 M 99 -341 V stroke LT0 ! .262 g .9036 g 3152 3894 M 98 79 V stroke LT0 ! .262 g .7259 g 2932 3522 M 75 -212 V stroke LT0 ! .262 g .6846 g 2909 3287 M 98 23 V stroke LT0 ! .262 g .7263 g 4248 3374 M -76 94 V stroke LT0 ! .262 g .7793 g 4271 3659 M -99 -191 V stroke LT0 ! .262 g .9183 g 3076 4043 M 76 -149 V stroke LT0 ! .262 g .8811 g 3053 3826 M 99 68 V stroke LT0 ! .262 g .9862 g 4317 4127 M -76 49 V stroke LT0 ! .262 g .9778 g 4143 4098 M 98 78 V stroke LT0 ! .262 g .9647 g 3076 4043 M -76 115 V stroke LT0 ! .262 g .9839 g 2902 4133 M 98 25 V stroke LT0 ! .262 g .8155 g 2954 3761 M 76 -192 V stroke LT0 ! .262 g .773 g 2932 3522 M 98 47 V stroke ! LT0 ! .262 g .6733 g 1568 3245 M -13 -30 V stroke LT0 ! .262 g .9036 g 4120 3866 M -76 116 V stroke LT0 ! .262 g .9443 g 4143 4098 M -99 -116 V stroke LT0 ! .262 g .9411 g 2977 3999 M 99 44 V stroke LT0 ! .262 g .9898 g 4491 4141 M -76 21 V stroke LT0 ! .262 g .9849 g 4589 4145 M -174 17 V stroke LT0 ! .262 g .9847 g 4317 4127 M 98 35 V stroke LT0 ! .262 g .8672 g 4195 3761 M -75 105 V stroke LT0 ! .262 g .9106 g 4218 4004 M -98 -138 V stroke LT0 ! .262 g .9513 g 4218 4004 M -75 94 V stroke LT0 ! .262 g .7022 g 4324 3299 M -76 75 V stroke LT0 ! .262 g .7529 g 4347 3574 M -99 -200 V stroke LT0 ! .262 g .9882 g 2629 4134 M -75 14 V stroke LT0 ! .262 g .9847 g 2455 4126 M 99 22 V stroke LT0 ! .262 g .9038 g 2977 3999 M 76 -173 V stroke LT0 ! .262 g .8618 g 2954 3761 M 99 65 V stroke LT0 ! .262 g .9895 g 4665 4141 M -76 4 V stroke LT0 ! .262 g .9877 g 4491 4141 M 98 4 V stroke LT0 ! .262 g .3998 g 4156 2476 M -1 -2 V stroke LT0 ! .262 g .8341 g 4271 3659 M -76 102 V stroke LT0 ! .262 g .8785 g 4294 3907 M -99 -146 V stroke LT0 ! .262 g .4028 g 4169 2481 M -13 -5 V stroke LT0 ! .262 g .6718 g 4399 3245 M -24 -51 V stroke LT0 ! .262 g .7283 g 2833 3505 M 76 -218 V stroke LT0 ! .262 g .6896 g 2810 3281 M 99 6 V stroke LT0 ! .262 g .8085 g 2856 3729 M 76 -207 V stroke LT0 ! .262 g .7696 g 2833 3505 M 99 17 V stroke LT0 ! .262 g .9219 g 4294 3907 M -76 97 V stroke LT0 ! .262 g .9597 g 4317 4127 M -99 -123 V stroke LT0 ! .262 g .9818 g 2803 4091 M -75 57 V stroke LT0 ! .262 g .99 g 2629 4134 M 99 14 V stroke LT0 ! .262 g .8891 g 2879 3950 M 75 -189 V stroke LT0 ! .262 g .851 g 2856 3729 M 98 32 V stroke LT0 ! .262 g .9603 g 2902 4133 M 75 -134 V stroke LT0 ! .262 g .9311 g 2879 3950 M 98 49 V stroke LT0 ! .262 g .98 g 2803 4091 M 99 42 V stroke LT0 ! .262 g .8059 g 4347 3574 M -76 85 V stroke LT0 ! .262 g .8546 g 4369 3841 M -98 -182 V stroke LT0 ! .262 g .6873 g 4399 3245 M -75 54 V stroke LT0 ! .262 g .7369 g 4422 3515 M -98 -216 V stroke LT0 ! .262 g .6385 g 2863 3140 M 1 -3 V stroke LT0 ! .262 g .6766 g 2810 3281 M 34 -90 V stroke LT0 ! .262 g .9716 g 4392 4048 M -75 79 V stroke LT0 ! .262 g .8991 g 4369 3841 M -75 66 V stroke LT0 ! .262 g .9339 g 4392 4048 M -98 -141 V stroke LT0 ! .262 g .2802 g 3664 2093 M 77 20 V stroke LT0 ! .262 g .9908 g 2531 4117 M -76 9 V stroke LT0 ! .262 g .9846 g 2356 4098 M 99 28 V stroke LT0 ! .262 g .7876 g 4422 3515 M -75 59 V stroke LT0 ! .262 g .8334 g 4445 3769 M -98 -195 V stroke LT0 ! .262 g .9508 g 2803 4091 M 76 -141 V stroke LT0 ! .262 g .9234 g 2780 3916 M 99 34 V stroke LT0 ! .262 g .991 g 4567 4102 M -76 39 V stroke LT0 ! .262 g .9767 g 4392 4048 M 99 93 V stroke ! LT0 ! .262 g .8211 g 1643 3518 M -1 -3 V stroke LT0 ! .262 g .952 g 4468 3977 M -76 71 V stroke LT0 ! .262 g .8853 g 2780 3916 M 76 -187 V stroke LT0 ! .262 g .9747 g 2705 4060 M 98 31 V stroke LT0 ! .262 g .8496 g 2757 3705 M 99 24 V stroke LT0 ! .262 g .9783 g 4915 4063 M -76 32 V stroke LT0 ! .262 g .9868 g 4741 4107 M 98 -12 V stroke LT0 ! .262 g .9871 g 4665 4141 M 174 -46 V stroke LT0 ! .262 g .8107 g 2757 3705 M 76 -200 V stroke LT0 ! .262 g .7736 g 2734 3489 M 99 16 V stroke LT0 ! .262 g .9829 g 2705 4060 M -76 74 V stroke LT0 ! .262 g .9944 g 2531 4117 M 98 17 V stroke LT0 ! .262 g .6834 g 4475 3218 M -4 -8 V stroke LT0 ! .262 g .735 g 2734 3489 M 76 -208 V stroke LT0 ! .262 g .703 g 2712 3294 M 98 -13 V stroke LT0 ! .262 g .2531 g 5950 2177 M 76 -398 V stroke LT0 ! .262 g .2466 g 5927 2091 M 99 -312 V stroke LT0 ! .262 g .6837 g 4475 3218 M -76 27 V stroke LT0 ! .262 g .7258 g 4498 3457 M -99 -212 V stroke LT0 ! .262 g .9958 g 4741 4107 M -76 34 V stroke LT0 ! .262 g .9929 g 4567 4102 M 98 39 V stroke LT0 ! .262 g .8821 g 4445 3769 M -76 72 V stroke LT0 ! .262 g .9172 g 4468 3977 M -99 -136 V stroke ! LT0 ! .262 g .2923 g 3739 2112 M -75 -19 V stroke ! LT0 ! .262 g .2913 g 3838 2133 M -174 -40 V stroke ! LT0 ! .262 g .2803 g 3661 2093 M 3 0 V stroke LT0 ! .262 g .3411 g 4020 2259 M 15 11 V stroke LT0 ! .262 g .9913 g 2432 4097 M -76 1 V stroke LT0 ! .262 g .9815 g 2258 4063 M 98 35 V stroke LT0 ! .262 g .6943 g 2712 3294 M 33 -90 V stroke LT0 ! .262 g .9473 g 2705 4060 M 75 -144 V stroke LT0 ! .262 g .9197 g 2682 3884 M 98 32 V stroke LT0 ! .262 g .9379 g 4544 3922 M -76 55 V stroke LT0 ! .262 g .9664 g 4567 4102 M -99 -125 V stroke LT0 ! .262 g .7754 g 4498 3457 M -76 58 V stroke LT0 ! .262 g .8192 g 4521 3702 M -99 -187 V stroke LT0 ! .262 g .9732 g 2606 4035 M 99 25 V stroke LT0 ! .262 g .884 g 2682 3884 M 75 -179 V stroke LT0 ! .262 g .8536 g 2659 3696 M 98 9 V stroke LT0 ! .262 g .434 g 4242 2524 M -10 -15 V stroke LT0 ! .262 g .3936 g 5898 2532 M 75 -326 V stroke LT0 ! .262 g .4096 g 5875 2542 M 98 -336 V stroke LT0 ! .262 g .8649 g 4521 3702 M -76 67 V stroke LT0 ! .262 g .9028 g 4544 3922 M -99 -153 V stroke LT0 ! .262 g .9862 g 4642 4054 M -75 48 V stroke LT0 ! .262 g .8165 g 2659 3696 M 75 -207 V stroke LT0 ! .262 g .785 g 2636 3503 M 98 -14 V stroke LT0 ! .262 g .557 g 1401 2922 M -76 -244 V stroke LT0 ! .262 g .5629 g 1424 3006 M -99 -328 V stroke LT0 ! .262 g .9847 g 2606 4035 M -75 82 V stroke LT0 ! .262 g .9975 g 2432 4097 M 99 20 V stroke ! LT0 ! .262 g .3223 g 3913 2185 M -75 -52 V stroke ! LT0 ! .262 g .3272 g 4012 2232 M -174 -99 V stroke ! LT0 ! .262 g .3034 g 3739 2112 M 99 21 V stroke LT0 ! .262 g .9811 g 4990 4041 M -75 22 V stroke LT0 ! .262 g .9891 g 4816 4083 M 99 -20 V stroke LT0 ! .262 g .9896 g 2334 4074 M -76 -11 V stroke LT0 ! .262 g .9738 g 2175 4019 M 83 44 V stroke ! LT0 ! .262 g .783 g 1702 3526 M -35 -59 V stroke LT0 ! .262 g .9976 g 4816 4083 M -75 24 V stroke LT0 ! .262 g .9892 g 4642 4054 M 99 53 V stroke ! LT0 ! .262 g .4053 g 3044 2359 M 1 -1 V stroke LT0 ! .262 g .9455 g 2606 4035 M 76 -151 V stroke LT0 ! .262 g .9196 g 2583 3866 M 99 18 V stroke LT0 ! .262 g .6862 g 4496 3214 M -21 4 V stroke LT0 ! .262 g .7278 g 4573 3426 M -98 -208 V stroke LT0 ! .262 g .7531 g 2636 3503 M 76 -209 V stroke LT0 ! .262 g .7264 g 2613 3331 M 99 -37 V stroke LT0 ! .262 g .7699 g 4573 3426 M -75 31 V stroke LT0 ! .262 g .8097 g 4596 3654 M -98 -197 V stroke LT0 ! .262 g .9294 g 4619 3875 M -75 47 V stroke LT0 ! .262 g .9577 g 4642 4054 M -98 -132 V stroke ! LT0 ! .262 g .3318 g 3313 2171 M 11 -7 V stroke LT0 ! .262 g .9744 g 2508 4015 M 98 20 V stroke LT0 ! .262 g .8534 g 4596 3654 M -75 48 V stroke LT0 ! .262 g .8915 g 4619 3875 M -98 -173 V stroke ! LT0 ! .262 g .9802 g 2237 4039 M -12 -5 V stroke LT0 ! .262 g .9798 g 4718 4009 M -76 45 V stroke LT0 ! .262 g .8892 g 2583 3866 M 76 -170 V stroke LT0 ! .262 g .8636 g 2560 3698 M 99 -2 V stroke LT0 ! .262 g .9873 g 2508 4015 M -76 82 V stroke LT0 ! .262 g .9994 g 2334 4074 M 98 23 V stroke ! LT0 ! .262 g .3224 g 3815 2157 M -76 -45 V stroke ! LT0 ! .262 g .3086 g 3668 2112 M 71 0 V stroke LT0 ! .262 g .6312 g 4527 3013 M -1 -2 V stroke LT0 ! .262 g .7213 g 2613 3331 M 39 -101 V stroke LT0 ! .262 g .7036 g 2590 3195 M 4 -3 V stroke LT0 ! .262 g .8322 g 2560 3698 M 76 -195 V stroke LT0 ! .262 g .8064 g 2537 3530 M 99 -27 V stroke LT0 ! .262 g .9485 g 2508 4015 M 75 -149 V stroke LT0 ! .262 g .9285 g 2485 3872 M 98 -6 V stroke LT0 ! .262 g .9831 g 5066 4006 M -76 35 V stroke LT0 ! .262 g .9909 g 4892 4047 M 98 -6 V stroke LT0 ! .262 g .5319 g 1378 2807 M -76 -235 V stroke LT0 ! .262 g .5454 g 1401 2922 M -99 -350 V stroke LT0 ! .262 g .9241 g 4695 3834 M -76 41 V stroke LT0 ! .262 g .9515 g 4718 4009 M -99 -134 V stroke LT0 ! .262 g .976 g 2409 3991 M 99 24 V stroke LT0 ! .262 g .9989 g 4892 4047 M -76 36 V stroke LT0 ! .262 g .9882 g 4718 4009 M 98 74 V stroke LT0 ! .262 g .85 g 4672 3622 M -76 32 V stroke LT0 ! .262 g .886 g 4695 3834 M -99 -180 V stroke LT0 ! .262 g .7736 g 4649 3407 M -76 19 V stroke LT0 ! .262 g .8103 g 4672 3622 M -99 -196 V stroke ! LT0 ! .262 g .3767 g 4088 2305 M -76 -73 V stroke ! LT0 ! .262 g .3898 g 4186 2386 M 4012 2232 L stroke ! LT0 ! .262 g .3471 g 3913 2185 M 99 47 V stroke LT0 ! .262 g .7397 g 4649 3407 M -87 -181 V stroke LT0 ! .262 g .975 g 4793 3968 M -75 41 V stroke LT0 ! .262 g .9881 g 2409 3991 M -75 83 V stroke LT0 ! .262 g .9976 g 2235 4039 M 99 35 V stroke LT0 ! .262 g .7797 g 2537 3530 M 76 -199 V stroke LT0 ! .262 g .7591 g 2514 3383 M 99 -52 V stroke LT0 ! .262 g .9029 g 2485 3872 M 75 -174 V stroke LT0 ! .262 g .881 g 2462 3720 M 98 -22 V stroke LT0 ! .262 g .5281 g 5822 2847 M 76 -315 V stroke LT0 ! .262 g .537 g 5799 2827 M 99 -295 V stroke LT0 ! .262 g .4161 g 5875 2542 M 75 -365 V stroke LT0 ! .262 g .4165 g 5852 2486 M 98 -309 V stroke LT0 ! .262 g .6318 g 4529 3013 M -2 0 V stroke ! LT0 ! .262 g .3431 g 3716 2157 M -39 -23 V stroke ! LT0 ! .262 g .3672 g 3989 2260 M -76 -75 V stroke ! LT0 ! .262 g .3413 g 3815 2157 M 98 28 V stroke LT0 ! .262 g .956 g 2485 3872 M -76 119 V stroke LT0 ! .262 g .9805 g 2311 3984 M 98 7 V stroke LT0 ! .262 g .921 g 4770 3796 M -75 38 V stroke LT0 ! .262 g .9476 g 4793 3968 M -98 -134 V stroke ! LT0 ! .262 g .4055 g 3045 2359 M -1 0 V stroke LT0 ! .262 g .9777 g 5142 3953 M -76 53 V stroke LT0 ! .262 g .9907 g 4967 4016 M 99 -10 V stroke LT0 ! .262 g .9426 g 2386 3876 M 99 -4 V stroke LT0 ! .262 g .99 g 2311 3984 M -76 55 V stroke LT0 ! .262 g .9932 g 2136 4005 M 99 34 V stroke LT0 ! .262 g .6928 g 1499 3227 M -75 -221 V stroke LT0 ! .262 g .6951 g 1522 3295 M -98 -289 V stroke LT0 ! .262 g .9986 g 4967 4016 M -75 31 V stroke LT0 ! .262 g .9856 g 4793 3968 M 99 79 V stroke LT0 ! .262 g .853 g 4747 3602 M -75 20 V stroke LT0 ! .262 g .885 g 4770 3796 M -98 -174 V stroke LT0 ! .262 g .8553 g 2462 3720 M 75 -190 V stroke LT0 ! .262 g .8346 g 2439 3574 M 98 -44 V stroke LT0 ! .262 g .9732 g 4869 3936 M -76 32 V stroke LT0 ! .262 g .7857 g 4725 3412 M -76 -5 V stroke LT0 ! .262 g .8164 g 4747 3602 M -98 -195 V stroke ! LT0 ! .262 g .3669 g 3890 2237 M -75 -80 V stroke ! LT0 ! .262 g .3465 g 3716 2157 M 99 0 V stroke LT0 ! .262 g .7522 g 2514 3383 M 52 -129 V stroke LT0 ! .262 g .7612 g 4725 3412 M -81 -163 V stroke LT0 ! .262 g .9929 g 2212 3980 M -76 25 V stroke LT0 ! .262 g .983 g 2038 3946 M 98 59 V stroke LT0 ! .262 g .9753 g 5217 3930 M -75 23 V stroke LT0 ! .262 g .9808 g 5043 3961 M 99 -8 V stroke LT0 ! .262 g .9208 g 2386 3876 M 76 -156 V stroke LT0 ! .262 g .9031 g 2363 3742 M 99 -22 V stroke LT0 ! .262 g .9672 g 2386 3876 M -75 108 V stroke LT0 ! .262 g .9898 g 2212 3980 M 99 4 V stroke LT0 ! .262 g .9235 g 4846 3779 M -76 17 V stroke LT0 ! .262 g .9466 g 4869 3936 M -99 -140 V stroke ! LT0 ! .262 g .9253 g 1777 3734 M -1 -2 V stroke ! LT0 ! .262 g .4919 g 4360 2580 M -75 -95 V stroke ! LT0 ! .262 g .5137 g 4459 2698 M 4285 2485 L stroke ! LT0 ! .262 g .4448 g 4186 2386 M 99 99 V stroke LT0 ! .262 g .9577 g 2288 3886 M 98 -10 V stroke LT0 ! .262 g .8139 g 2439 3574 M 75 -191 V stroke LT0 ! .262 g .7978 g 2416 3447 M 98 -64 V stroke ! LT0 ! .262 g .4558 g 4262 2474 M -76 -88 V stroke ! LT0 ! .262 g .4145 g 4088 2305 M 98 81 V stroke LT0 ! .262 g .9938 g 5043 3961 M -76 55 V stroke LT0 ! .262 g .9862 g 4869 3936 M 98 80 V stroke LT0 ! .262 g .9875 g 2114 3967 M -76 -21 V stroke ! LT0 ! .262 g .9844 g 2122 3963 M -3 -1 V stroke LT0 ! .262 g .9744 g 2032 3942 M 6 4 V stroke LT0 ! .262 g .41 g 5852 2486 M 75 -395 V stroke LT0 ! .262 g .3968 g 5829 2372 M 98 -281 V stroke LT0 ! .262 g .5451 g 2750 2718 M 1 -3 V stroke LT0 ! .262 g .5701 g 2714 2737 M 10 -11 V stroke ! LT0 ! .262 g .4333 g 4163 2408 M -75 -103 V stroke ! LT0 ! .262 g .3969 g 3989 2260 M 99 45 V stroke LT0 ! .262 g .8626 g 4823 3597 M -76 5 V stroke LT0 ! .262 g .8915 g 4846 3779 M -99 -177 V stroke LT0 ! .262 g .9752 g 4945 3912 M -76 24 V stroke LT0 ! .262 g .5265 g 4441 2696 M -58 -84 V stroke LT0 ! .262 g .6798 g 2544 3033 M 11 -11 V stroke ! LT0 ! .262 g .5479 g 2771 2660 M 19 -24 V stroke LT0 ! .262 g .6444 g 5746 3094 M 76 -247 V stroke LT0 ! .262 g .6609 g 5723 3107 M 99 -260 V stroke ! LT0 ! .262 g .3775 g 3792 2232 M -76 -75 V stroke ! LT0 ! .262 g .3564 g 3691 2168 M 25 -11 V stroke ! LT0 ! .262 g .9442 g 1841 3813 M 77 52 V stroke LT0 ! .262 g .6798 g 1477 3139 M -76 -217 V stroke LT0 ! .262 g .6869 g 1499 3227 M -98 -305 V stroke LT0 ! .262 g .8824 g 2363 3742 M 76 -168 V stroke LT0 ! .262 g .8673 g 2340 3620 M 99 -46 V stroke LT0 ! .262 g .8066 g 4800 3431 M -75 -19 V stroke LT0 ! .262 g .8319 g 4823 3597 M -98 -185 V stroke LT0 ! .262 g .6176 g 4557 2839 M -6 -7 V stroke LT0 ! .262 g .9803 g 2288 3886 M -76 94 V stroke LT0 ! .262 g .9974 g 2114 3967 M 98 13 V stroke ! LT0 ! .262 g .4204 g 4065 2348 M -76 -88 V stroke ! LT0 ! .262 g .3928 g 3890 2237 M 99 23 V stroke LT0 ! .262 g .9564 g 1916 3865 M -75 -52 V stroke LT0 ! .262 g .9672 g 2015 3937 M 1841 3813 L stroke LT0 ! .262 g .9745 g 5293 3884 M -76 46 V stroke LT0 ! .262 g .985 g 5119 3937 M 98 -7 V stroke LT0 ! .262 g .9905 g 5119 3937 M -76 24 V stroke LT0 ! .262 g .9829 g 4945 3912 M 98 49 V stroke LT0 ! .262 g .8065 g 1598 3475 M -76 -180 V stroke LT0 ! .262 g .94 g 2288 3886 M 75 -144 V stroke LT0 ! .262 g .9269 g 2265 3772 M 98 -30 V stroke LT0 ! .262 g .9319 g 4922 3767 M -76 12 V stroke LT0 ! .262 g .9521 g 4945 3912 M -99 -133 V stroke LT0 ! .262 g .553 g 5799 2827 M 76 -285 V stroke LT0 ! .262 g .5664 g 5776 2827 M 99 -285 V stroke LT0 ! .262 g .9743 g 2189 3897 M 99 -11 V stroke LT0 ! .262 g .786 g 2416 3447 M 71 -170 V stroke LT0 ! .262 g .7806 g 2393 3354 M 80 -72 V stroke LT0 ! .262 g .7861 g 4800 3431 M -82 -160 V stroke LT0 ! .262 g .9798 g 5020 3890 M -75 22 V stroke LT0 ! .262 g .8802 g 4899 3612 M -76 -15 V stroke LT0 ! .262 g .903 g 4922 3767 M -99 -170 V stroke ! LT0 ! .262 g .4223 g 3966 2329 M -76 -92 V stroke ! LT0 ! .262 g .3979 g 3792 2232 M 98 5 V stroke LT0 ! .262 g .7343 g 5671 3298 M 75 -204 V stroke LT0 ! .262 g .7513 g 5648 3313 M 98 -219 V stroke LT0 ! .262 g .9914 g 2189 3897 M -75 70 V stroke LT0 ! .262 g .9989 g 2015 3937 M 99 30 V stroke LT0 ! .262 g .963 g 5368 3815 M -75 69 V stroke LT0 ! .262 g .9836 g 5194 3911 M 99 -27 V stroke LT0 ! .262 g .8512 g 2340 3620 M 76 -173 V stroke LT0 ! .262 g .8416 g 2317 3521 M 99 -74 V stroke LT0 ! .262 g .6453 g 1454 2991 M -76 -184 V stroke LT0 ! .262 g .6664 g 1477 3139 M -99 -332 V stroke LT0 ! .262 g .9941 g 5194 3911 M -75 26 V stroke LT0 ! .262 g .9875 g 5020 3890 M 99 47 V stroke LT0 ! .262 g .9083 g 1719 3679 M -12 -22 V stroke ! LT0 ! .262 g .877 g 1681 3585 M -14 -20 V stroke LT0 ! .262 g .9118 g 2265 3772 M 75 -152 V stroke LT0 ! .262 g .8997 g 2242 3662 M 98 -42 V stroke LT0 ! .262 g .8334 g 4876 3462 M -76 -31 V stroke LT0 ! .262 g .8549 g 4899 3612 M -99 -181 V stroke LT0 ! .262 g .9413 g 4997 3754 M -75 13 V stroke LT0 ! .262 g .9597 g 5020 3890 M -98 -123 V stroke ! LT0 ! .262 g .519 g 4337 2590 M -75 -116 V stroke ! LT0 ! .262 g .5029 g 4360 2580 M -98 -106 V stroke ! LT0 ! .262 g .4745 g 4163 2408 M 99 66 V stroke LT0 ! .262 g .9612 g 2265 3772 M -76 125 V stroke LT0 ! .262 g .985 g 2091 3881 M 98 16 V stroke LT0 ! .262 g .9393 g 5444 3717 M -76 98 V stroke LT0 ! .262 g .9735 g 5270 3871 M 98 -56 V stroke ! LT0 ! .262 g .9774 g 5266 3871 M 11 -6 V stroke ! LT0 ! .262 g .5551 g 4436 2689 M -76 -109 V stroke ! LT0 ! .262 g .5437 g 4459 2698 M -99 -118 V stroke LT0 ! .262 g .9533 g 2166 3805 M 99 -33 V stroke LT0 ! .262 g .9925 g 2091 3881 M -76 56 V stroke LT0 ! .262 g .9869 g 1916 3865 M 99 72 V stroke LT0 ! .262 g .8313 g 5572 3517 M 99 -219 V stroke ! LT0 ! .262 g .5705 g 2771 2660 M -76 101 V stroke ! LT0 ! .262 g .6241 g 2597 2898 M 98 -137 V stroke LT0 ! .262 g .6664 g 2566 2961 M 12 -16 V stroke LT0 ! .262 g .9841 g 5096 3864 M -76 26 V stroke ! LT0 ! .262 g .5983 g 4534 2805 M -75 -107 V stroke LT0 ! .262 g .5877 g 4539 2813 M -80 -115 V stroke ! LT0 ! .262 g .6243 g 4633 2942 M 4459 2698 L stroke LT0 ! .262 g .6867 g 2537 3048 M 5 -9 V stroke ! LT0 ! .262 g .4317 g 3868 2324 M -76 -92 V stroke ! LT0 ! .262 g .4121 g 3727 2256 M 65 -24 V stroke LT0 ! .262 g .6698 g 5723 3107 M 76 -280 V stroke LT0 ! .262 g .6854 g 5701 3116 M 98 -289 V stroke ! LT0 ! .262 g .6765 g 5703 3108 M 96 -281 V stroke ! LT0 ! .262 g .7945 g 5625 3336 M 77 -224 V stroke ! LT0 ! .262 g .4985 g 4239 2519 M -76 -111 V stroke ! LT0 ! .262 g .4569 g 4065 2348 M 98 60 V stroke LT0 ! .262 g .7936 g 1575 3372 M -76 -145 V stroke LT0 ! .262 g .8042 g 1598 3475 M -99 -248 V stroke LT0 ! .262 g .9098 g 5520 3623 M -76 94 V stroke ! LT0 ! .262 g .9712 g 5322 3825 M 4 -4 V stroke ! LT0 ! .262 g .9386 g 5403 3753 M 8 -7 V stroke LT0 ! .262 g .9873 g 1992 3880 M -76 -15 V stroke LT0 ! .262 g .9664 g 1818 3799 M 98 66 V stroke LT0 ! .262 g .8812 g 5520 3623 M 34 -76 V stroke ! LT0 ! .262 g .5521 g 2787 2642 M -16 18 V stroke ! LT0 ! .262 g .5926 g 2673 2797 M 98 -137 V stroke LT0 ! .262 g .7916 g 2393 3354 M 27 -57 V stroke LT0 ! .262 g .5667 g 5776 2827 M 76 -341 V stroke LT0 ! .262 g .56 g 5753 2740 M 99 -254 V stroke LT0 ! .262 g .9369 g 1795 3750 M -76 -71 V stroke LT0 ! .262 g .9347 g 1818 3799 M -99 -120 V stroke LT0 ! .262 g .6652 g 4656 3002 M -58 -95 V stroke LT0 ! .262 g .9941 g 5270 3871 M -76 40 V stroke LT0 ! .262 g .9907 g 5096 3864 M 98 47 V stroke LT0 ! .262 g .9017 g 4974 3624 M -75 -12 V stroke LT0 ! .262 g .9185 g 4997 3754 M -98 -142 V stroke LT0 ! .262 g .9752 g 1894 3845 M -76 -46 V stroke ! LT0 ! .262 g .4838 g 4140 2466 M -75 -118 V stroke ! LT0 ! .262 g .4499 g 3966 2329 M 99 19 V stroke LT0 ! .262 g .9299 g 5421 3746 M 99 -123 V stroke LT0 ! .262 g .8018 g 4853 3342 M -63 -48 V stroke LT0 ! .262 g .8141 g 4876 3462 M -95 -171 V stroke LT0 ! .262 g .8334 g 2317 3521 M 76 -167 V stroke LT0 ! .262 g .8294 g 2294 3445 M 99 -91 V stroke LT0 ! .262 g .9771 g 2166 3805 M -75 76 V stroke LT0 ! .262 g .9928 g 1992 3880 M 99 1 V stroke ! LT0 ! .262 g .6046 g 2748 2719 M 11 -16 V stroke LT0 ! .262 g .954 g 5073 3756 M -76 -2 V stroke LT0 ! .262 g .9657 g 5096 3864 M -99 -110 V stroke LT0 ! .262 g .8901 g 2242 3662 M 75 -141 V stroke LT0 ! .262 g .8869 g 2219 3591 M 98 -70 V stroke LT0 ! .262 g .9899 g 5171 3850 M -75 14 V stroke LT0 ! .262 g .6946 g 4687 3055 M -31 -53 V stroke LT0 ! .262 g .7499 g 4754 3171 M -4 -7 V stroke LT0 ! .262 g .9412 g 2166 3805 M 76 -143 V stroke LT0 ! .262 g .9355 g 2143 3723 M 99 -61 V stroke LT0 ! .262 g .9764 g 2068 3821 M 98 -16 V stroke LT0 ! .262 g .8653 g 4951 3502 M -75 -40 V stroke LT0 ! .262 g .8802 g 4974 3624 M -98 -162 V stroke ! LT0 ! .262 g .4854 g 4042 2442 M -76 -113 V stroke ! LT0 ! .262 g .4561 g 3868 2324 M 98 5 V stroke LT0 ! .262 g .9885 g 5345 3821 M -75 50 V stroke LT0 ! .262 g .9933 g 5171 3850 M 99 21 V stroke ! LT0 ! .262 g .4777 g 3758 2344 M -5 -6 V stroke LT0 ! .262 g .5468 g 5753 2740 M 76 -368 V stroke LT0 ! .262 g .5328 g 5730 2622 M 99 -250 V stroke LT0 ! .262 g .7774 g 1552 3275 M -75 -136 V stroke LT0 ! .262 g .7866 g 1575 3372 M -98 -233 V stroke LT0 ! .262 g .8882 g 1674 3579 M -76 -104 V stroke LT0 ! .262 g .8902 g 1696 3646 M -98 -171 V stroke LT0 ! .262 g .7678 g 5648 3313 M 75 -206 V stroke LT0 ! .262 g .7867 g 5625 3336 M 98 -229 V stroke LT0 ! .262 g .9921 g 2068 3821 M -76 59 V stroke LT0 ! .262 g .996 g 1894 3845 M 98 35 V stroke LT0 ! .262 g .7558 g 4768 3185 M -14 -14 V stroke LT0 ! .262 g .813 g 4853 3342 M -18 -31 V stroke LT0 ! .262 g .927 g 5050 3655 M -76 -31 V stroke LT0 ! .262 g .9372 g 5073 3756 M -99 -132 V stroke LT0 ! .262 g .9954 g 5247 3822 M -76 28 V stroke LT0 ! .262 g .9781 g 5073 3756 M 98 94 V stroke LT0 ! .262 g .9744 g 5421 3746 M -76 75 V stroke LT0 ! .262 g .9905 g 5247 3822 M 98 -1 V stroke ! LT0 ! .262 g .6252 g 4511 2814 M -75 -125 V stroke ! LT0 ! .262 g .6097 g 4534 2805 M -98 -116 V stroke ! LT0 ! .262 g .5711 g 4337 2590 M 99 99 V stroke LT0 ! .262 g .9728 g 5148 3769 M -75 -13 V stroke ! LT0 ! .262 g .5922 g 4413 2721 M -76 -131 V stroke ! LT0 ! .262 g .5429 g 4239 2519 M 98 71 V stroke ! LT0 ! .262 g .6462 g 2673 2797 M -76 101 V stroke ! LT0 ! .262 g .701 g 2498 3040 M 99 -142 V stroke LT0 ! .262 g .992 g 1969 3805 M -75 40 V stroke LT0 ! .262 g .9773 g 1795 3750 M 99 95 V stroke ! LT0 ! .262 g .4972 g 3943 2447 M -75 -123 V stroke ! LT0 ! .262 g .4743 g 3770 2357 M 98 -33 V stroke LT0 ! .262 g .9484 g 1772 3717 M -76 -71 V stroke LT0 ! .262 g .9426 g 1795 3750 M -99 -104 V stroke LT0 ! .262 g .9721 g 1871 3764 M -76 -14 V stroke LT0 ! .262 g .9708 g 2143 3723 M -75 98 V stroke LT0 ! .262 g .9882 g 1969 3805 M 99 16 V stroke LT0 ! .262 g .8483 g 5572 3517 M 76 -204 V stroke LT0 ! .262 g .8614 g 5549 3516 M 99 -203 V stroke LT0 ! .262 g .8339 g 2294 3445 M 65 -125 V stroke LT0 ! .262 g .841 g 2272 3400 M 71 -73 V stroke LT0 ! .262 g .7348 g 1529 3124 M -75 -133 V stroke LT0 ! .262 g .7564 g 1552 3275 M -98 -284 V stroke ! LT0 ! .262 g .6667 g 4610 2925 M -76 -120 V stroke ! LT0 ! .262 g .657 g 4633 2942 M -99 -137 V stroke LT0 ! .262 g .6988 g 5701 3116 M 75 -289 V stroke LT0 ! .262 g .691 g 5678 3025 M 98 -198 V stroke LT0 ! .262 g .8416 g 4928 3405 M -75 -63 V stroke LT0 ! .262 g .8508 g 4951 3502 M -98 -160 V stroke LT0 ! .262 g .8828 g 2219 3591 M 75 -146 V stroke LT0 ! .262 g .8821 g 2196 3530 M 98 -85 V stroke ! LT0 ! .262 g .57 g 4314 2648 M -75 -129 V stroke ! LT0 ! .262 g .5254 g 4140 2466 M 99 53 V stroke ! LT0 ! .262 g .6197 g 2748 2719 M -75 78 V stroke ! LT0 ! .262 g .6718 g 2574 2949 M 99 -152 V stroke LT0 ! .262 g .9323 g 2143 3723 M 76 -132 V stroke LT0 ! .262 g .9298 g 2120 3654 M 99 -63 V stroke LT0 ! .262 g .9693 g 2045 3757 M 98 -34 V stroke LT0 ! .262 g .9478 g 5497 3642 M -76 104 V stroke LT0 ! .262 g .9805 g 5323 3790 M 98 -44 V stroke ! LT0 ! .262 g .9894 g 5247 3822 M 78 -34 V stroke ! LT0 ! .262 g .716 g 4708 3051 M -75 -109 V stroke ! LT0 ! .262 g .7116 g 4716 3061 M -83 -119 V stroke LT0 ! .262 g .866 g 1651 3472 M -76 -100 V stroke LT0 ! .262 g .8776 g 1674 3579 M -99 -207 V stroke ! LT0 ! .262 g .5583 g 4216 2601 M -76 -135 V stroke ! LT0 ! .262 g .5192 g 4042 2442 M 98 24 V stroke LT0 ! .262 g .9098 g 5572 3517 M -75 125 V stroke LT0 ! .262 g .9582 g 5398 3732 M 99 -90 V stroke LT0 ! .262 g .9012 g 5027 3550 M -76 -48 V stroke LT0 ! .262 g .9121 g 5050 3655 M -99 -153 V stroke LT0 ! .262 g .9233 g 5474 3642 M 98 -125 V stroke ! LT0 ! .262 g .6087 g 2754 2715 M -6 4 V stroke ! LT0 ! .262 g .6507 g 2650 2872 M 98 -153 V stroke LT0 ! .262 g .9868 g 2045 3757 M -76 48 V stroke LT0 ! .262 g .9868 g 1871 3764 M 98 41 V stroke LT0 ! .262 g .9967 g 5323 3790 M -76 32 V stroke LT0 ! .262 g .99 g 5148 3769 M 99 53 V stroke LT0 ! .262 g .9534 g 5125 3671 M -75 -16 V stroke LT0 ! .262 g .9626 g 5148 3769 M -98 -114 V stroke ! LT0 ! .262 g .5243 g 3845 2475 M -73 -114 V stroke ! LT0 ! .262 g .6098 g 2975 2623 M 1 -1 V stroke LT0 ! .262 g .9869 g 5224 3751 M -76 18 V stroke ! LT0 ! .262 g .5588 g 4117 2578 M -75 -136 V stroke ! LT0 ! .262 g .5264 g 3943 2447 M 99 -5 V stroke LT0 ! .262 g .9832 g 1946 3732 M -75 32 V stroke LT0 ! .262 g .9779 g 1772 3717 M 99 47 V stroke LT0 ! .262 g .8486 g 4928 3405 M -48 -78 V stroke LT0 ! .262 g .6842 g 5678 3025 M 75 -285 V stroke LT0 ! .262 g .6826 g 5655 2960 M 98 -220 V stroke LT0 ! .262 g .9445 g 1749 3651 M -75 -72 V stroke LT0 ! .262 g .9464 g 1772 3717 M -98 -138 V stroke ! LT0 ! .262 g .9563 g 1763 3654 M -2 -2 V stroke LT0 ! .262 g .8023 g 5625 3336 M 76 -220 V stroke LT0 ! .262 g .8055 g 5602 3292 M 99 -176 V stroke LT0 ! .262 g .9667 g 2120 3654 M -75 103 V stroke LT0 ! .262 g .9831 g 1946 3732 M 99 25 V stroke LT0 ! .262 g .9909 g 5398 3732 M -75 58 V stroke LT0 ! .262 g .9935 g 5224 3751 M 99 39 V stroke LT0 ! .262 g .8478 g 1628 3375 M -76 -100 V stroke LT0 ! .262 g .8569 g 1651 3472 M -99 -197 V stroke LT0 ! .262 g .929 g 2196 3530 M -76 124 V stroke LT0 ! .262 g .9625 g 2022 3681 M 98 -27 V stroke LT0 ! .262 g .9821 g 1848 3725 M -76 -8 V stroke ! LT0 ! .262 g .9751 g 1851 3724 M -79 -7 V stroke LT0 ! .262 g .8849 g 2272 3400 M -76 130 V stroke LT0 ! .262 g .9314 g 2097 3606 M 99 -76 V stroke LT0 ! .262 g .8858 g 5004 3465 M -76 -60 V stroke LT0 ! .262 g .8921 g 5027 3550 M -99 -145 V stroke LT0 ! .262 g .8528 g 2305 3344 M -33 56 V stroke LT0 ! .262 g .8881 g 2173 3485 M 99 -85 V stroke LT0 ! .262 g .8761 g 2249 3388 M 23 -27 V stroke LT0 ! .262 g .8532 g 2295 3335 M 1 -2 V stroke ! LT0 ! .262 g .5586 g 3407 2472 M 7 -7 V stroke ! LT0 ! .262 g .7266 g 2574 2949 M -76 91 V stroke ! LT0 ! .262 g .7707 g 2426 3153 M 72 -113 V stroke ! LT0 ! .262 g .7699 g 2402 3172 M 96 -132 V stroke LT0 ! .262 g .979 g 2022 3681 M -76 51 V stroke LT0 ! .262 g .9874 g 1848 3725 M 98 7 V stroke ! LT0 ! .262 g .7022 g 4587 2953 M -76 -139 V stroke ! LT0 ! .262 g .6823 g 4610 2925 M -99 -111 V stroke ! LT0 ! .262 g .6463 g 4413 2721 M 98 93 V stroke LT0 ! .262 g .9936 g 5300 3732 M -76 19 V stroke LT0 ! .262 g .9776 g 5125 3671 M 99 80 V stroke LT0 ! .262 g .9376 g 5103 3593 M -76 -43 V stroke LT0 ! .262 g .9425 g 5125 3671 M -98 -121 V stroke ! LT0 ! .262 g .5711 g 4019 2575 M -76 -128 V stroke ! LT0 ! .262 g .5458 g 3845 2475 M 98 -28 V stroke ! LT0 ! .262 g .6714 g 4488 2864 M -75 -143 V stroke ! LT0 ! .262 g .6193 g 4314 2648 M 99 73 V stroke LT0 ! .262 g .8803 g 5549 3516 M 76 -180 V stroke LT0 ! .262 g .8858 g 5526 3481 M 99 -145 V stroke ! LT0 ! .262 g .7398 g 4686 3053 M -76 -128 V stroke ! LT0 ! .262 g .7257 g 4708 3051 M -98 -126 V stroke LT0 ! .262 g .9717 g 5474 3642 M -76 90 V stroke LT0 ! .262 g .9909 g 5300 3732 M 98 0 V stroke LT0 ! .262 g .6686 g 5655 2960 M 75 -338 V stroke LT0 ! .262 g .6464 g 5632 2807 M 98 -185 V stroke LT0 ! .262 g .9757 g 5201 3685 M -76 -14 V stroke LT0 ! .262 g .8105 g 1605 3250 M -76 -126 V stroke LT0 ! .262 g .8262 g 1628 3375 M -99 -251 V stroke ! LT0 ! .262 g .7027 g 2650 2872 M -76 77 V stroke ! LT0 ! .262 g .7545 g 2475 3102 M 99 -153 V stroke ! LT0 ! .262 g .6502 g 4390 2796 M -76 -148 V stroke ! LT0 ! .262 g .6028 g 4216 2601 M 98 47 V stroke ! LT0 ! .262 g .7841 g 4784 3168 M -76 -117 V stroke ! LT0 ! .262 g .7894 g 4832 3218 M 4708 3051 L stroke LT0 ! .262 g .9273 g 1726 3569 M -75 -97 V stroke LT0 ! .262 g .933 g 1749 3651 M -98 -179 V stroke LT0 ! .262 g .9365 g 5549 3516 M -75 126 V stroke LT0 ! .262 g .9725 g 5375 3678 M 99 -36 V stroke LT0 ! .262 g .9419 g 5451 3608 M 98 -92 V stroke ! LT0 ! .262 g .9507 g 5375 3678 M 174 -162 V stroke LT0 ! .262 g .7976 g 5602 3292 M 76 -267 V stroke LT0 ! .262 g .7962 g 5579 3227 M 99 -202 V stroke LT0 ! .262 g .9649 g 2097 3606 M -75 75 V stroke LT0 ! .262 g .9817 g 1923 3686 M 99 -5 V stroke ! LT0 ! .262 g .6911 g 2668 2859 M -18 13 V stroke ! LT0 ! .262 g .7345 g 2551 3028 M 99 -156 V stroke ! LT0 ! .262 g .6402 g 4291 2750 M -75 -149 V stroke ! LT0 ! .262 g .5979 g 4117 2578 M 99 23 V stroke LT0 ! .262 g .9902 g 1923 3686 M -75 39 V stroke LT0 ! .262 g .9803 g 1749 3651 M 99 74 V stroke LT0 ! .262 g .9918 g 5375 3678 M -75 54 V stroke LT0 ! .262 g .9916 g 5201 3685 M 99 47 V stroke LT0 ! .262 g .9774 g 1825 3655 M -76 -4 V stroke LT0 ! .262 g .8925 g 4981 3415 M -53 -56 V stroke LT0 ! .262 g .886 g 5004 3465 M -86 -114 V stroke ! LT0 ! .262 g .6101 g 2976 2623 M -1 0 V stroke ! LT0 ! .262 g .5966 g 3920 2606 M -75 -131 V stroke ! LT0 ! .262 g .5603 g 3831 2480 M 14 -5 V stroke LT0 ! .262 g .9345 g 2173 3485 M -76 121 V stroke LT0 ! .262 g .965 g 1999 3623 M 98 -17 V stroke LT0 ! .262 g .8987 g 2249 3388 M -76 97 V stroke LT0 ! .262 g .9372 g 2075 3560 M 98 -75 V stroke LT0 ! .262 g .9292 g 5080 3526 M -76 -61 V stroke LT0 ! .262 g .9313 g 5103 3593 M -99 -128 V stroke ! LT0 ! .262 g .6404 g 4193 2725 M -76 -147 V stroke ! LT0 ! .262 g .6034 g 4019 2575 M 98 3 V stroke LT0 ! .262 g .9923 g 5277 3677 M -76 8 V stroke LT0 ! .262 g .9708 g 5103 3593 M 98 92 V stroke LT0 ! .262 g .9026 g 1703 3444 M -75 -69 V stroke LT0 ! .262 g .9182 g 1726 3569 M -98 -194 V stroke LT0 ! .262 g .9683 g 5178 3616 M -75 -23 V stroke LT0 ! .262 g .8807 g 2261 3370 M -12 18 V stroke LT0 ! .262 g .9111 g 2150 3480 M 99 -92 V stroke LT0 ! .262 g .9818 g 1999 3623 M -76 63 V stroke LT0 ! .262 g .9874 g 1825 3655 M 98 31 V stroke LT0 ! .262 g .978 g 5451 3608 M -76 70 V stroke LT0 ! .262 g .9925 g 5277 3677 M 98 1 V stroke LT0 ! .262 g .8889 g 5526 3481 M 76 -189 V stroke LT0 ! .262 g .8886 g 5504 3422 M 98 -130 V stroke LT0 ! .262 g .7945 g 5579 3227 M 76 -267 V stroke LT0 ! .262 g .7833 g 5556 3122 M 99 -162 V stroke LT0 ! .262 g .9474 g 5526 3481 M -75 127 V stroke LT0 ! .262 g .9792 g 5352 3625 M 99 -17 V stroke LT0 ! .262 g .9677 g 2075 3560 M -76 63 V stroke LT0 ! .262 g .9807 g 1900 3624 M 99 -1 V stroke LT0 ! .262 g .9863 g 1900 3624 M -75 31 V stroke LT0 ! .262 g .9717 g 1726 3569 M 99 86 V stroke LT0 ! .262 g .95 g 5428 3561 M 98 -80 V stroke ! LT0 ! .262 g .6505 g 4094 2721 M -75 -146 V stroke ! LT0 ! .262 g .6219 g 3920 2606 M 99 -31 V stroke LT0 ! .262 g .9708 g 1802 3593 M -76 -24 V stroke ! LT0 ! .262 g .9638 g 1801 3592 M -75 -23 V stroke ! LT0 ! .262 g .9783 g 1900 3624 M -99 -32 V stroke ! LT0 ! .262 g .8131 g 4761 3174 M -75 -121 V stroke ! LT0 ! .262 g .7982 g 4784 3168 M -98 -115 V stroke ! LT0 ! .262 g .7597 g 4587 2953 M 99 100 V stroke ! LT0 ! .262 g .7806 g 4663 3085 M -76 -132 V stroke ! LT0 ! .262 g .7272 g 4488 2864 M 99 89 V stroke LT0 ! .262 g .8702 g 1680 3315 M -75 -65 V stroke LT0 ! .262 g .8869 g 1703 3444 M -98 -194 V stroke ! LT0 ! .262 g .7535 g 4564 3008 M -76 -144 V stroke ! LT0 ! .262 g .7022 g 4390 2796 M 98 68 V stroke ! LT0 ! .262 g .8336 g 4817 3215 M -33 -47 V stroke ! LT0 ! .262 g .8309 g 4825 3217 M -41 -49 V stroke ! LT0 ! .262 g .7862 g 2551 3028 M -76 74 V stroke ! LT0 ! .262 g .8044 g 2453 3132 M 22 -30 V stroke ! LT0 ! .262 g .804 g 2445 3138 M 30 -36 V stroke LT0 ! .262 g .9937 g 5352 3625 M -75 52 V stroke LT0 ! .262 g .9898 g 5178 3616 M 99 61 V stroke LT0 ! .262 g .9043 g 4981 3415 M -27 -36 V stroke LT0 ! .262 g .7612 g 5556 3122 M 76 -315 V stroke LT0 ! .262 g .7377 g 5533 2963 M 99 -156 V stroke ! LT0 ! .262 g .7344 g 4466 2944 M -76 -148 V stroke ! LT0 ! .262 g .6875 g 4291 2750 M 99 46 V stroke LT0 ! .262 g .9496 g 2150 3480 M -75 80 V stroke LT0 ! .262 g .972 g 1976 3584 M 99 -24 V stroke LT0 ! .262 g .9329 g 5057 3476 M -76 -61 V stroke LT0 ! .262 g .9309 g 5080 3526 M -99 -111 V stroke ! LT0 ! .262 g .9405 g 5060 3478 M -7 -6 V stroke ! LT0 ! .262 g .9247 g 5051 3471 M -70 -56 V stroke LT0 ! .262 g .9886 g 5254 3614 M -76 2 V stroke LT0 ! .262 g .9661 g 5080 3526 M 98 90 V stroke LT0 ! .262 g .9651 g 5155 3554 M -75 -28 V stroke ! LT0 ! .262 g .7742 g 2590 3000 M -39 28 V stroke ! LT0 ! .262 g .7948 g 2506 3094 M 45 -66 V stroke LT0 ! .262 g .985 g 1976 3584 M -76 40 V stroke LT0 ! .262 g .9854 g 1802 3593 M 98 31 V stroke LT0 ! .262 g .8871 g 5504 3422 M 75 -195 V stroke LT0 ! .262 g .8777 g 5481 3324 M 98 -97 V stroke ! LT0 ! .262 g .7251 g 4367 2899 M -76 -149 V stroke ! LT0 ! .262 g .6827 g 4193 2725 M 98 25 V stroke LT0 ! .262 g .9818 g 5428 3561 M -76 64 V stroke LT0 ! .262 g .9925 g 5254 3614 M 98 11 V stroke LT0 ! .262 g .9298 g 2197 3423 M -47 57 V stroke LT0 ! .262 g .9557 g 2052 3528 M 98 -48 V stroke LT0 ! .262 g .9423 g 1779 3480 M -76 -36 V stroke LT0 ! .262 g .9552 g 1802 3593 M -99 -149 V stroke ! LT0 ! .262 g .674 g 3996 2740 M -76 -134 V stroke ! LT0 ! .262 g .6369 g 3907 2610 M 13 -4 V stroke LT0 ! .262 g .9912 g 1877 3590 M -75 3 V stroke ! LT0 ! .262 g .9838 g 1882 3589 M -6 0 V stroke LT0 ! .262 g .9497 g 5428 3561 M 76 -139 V stroke LT0 ! .262 g .9464 g 5405 3489 M 99 -67 V stroke LT0 ! .262 g .9848 g 5329 3580 M 99 -19 V stroke ! LT0 ! .262 g .7253 g 4268 2875 M -75 -150 V stroke ! LT0 ! .262 g .6875 g 4094 2721 M 99 4 V stroke LT0 ! .262 g .9781 g 2052 3528 M -76 56 V stroke LT0 ! .262 g .9908 g 1877 3590 M 99 -6 V stroke LT0 ! .262 g .9955 g 5329 3580 M -75 34 V stroke LT0 ! .262 g .9876 g 5155 3554 M 99 60 V stroke ! LT0 ! .262 g .9204 g 2230 3380 M 1 -2 V stroke LT0 ! .262 g .9107 g 1756 3358 M -76 -43 V stroke LT0 ! .262 g .9257 g 1779 3480 M -99 -165 V stroke LT0 ! .262 g .8665 g 5481 3324 M 75 -202 V stroke LT0 ! .262 g .8576 g 5458 3228 M 98 -106 V stroke LT0 ! .262 g .9868 g 5231 3553 M -76 1 V stroke LT0 ! .262 g .9671 g 5057 3476 M 98 78 V stroke LT0 ! .262 g .9695 g 2127 3482 M -75 46 V stroke LT0 ! .262 g .9833 g 1953 3548 M 99 -20 V stroke ! LT0 ! .262 g .8595 g 4784 3209 M -23 -35 V stroke ! LT0 ! .262 g .8556 g 4798 3212 M -37 -38 V stroke ! LT0 ! .262 g .834 g 4663 3085 M 98 89 V stroke ! LT0 ! .262 g .7454 g 2912 2846 M 2 -3 V stroke LT0 ! .262 g .944 g 5057 3476 M -61 -62 V stroke LT0 ! .262 g .9703 g 5132 3510 M -75 -34 V stroke ! LT0 ! .262 g .8517 g 4729 3196 M -66 -111 V stroke ! LT0 ! .262 g .8069 g 4564 3008 M 99 77 V stroke ! LT0 ! .262 g .7344 g 4170 2868 M -76 -147 V stroke ! LT0 ! .262 g .7027 g 3996 2740 M 98 -19 V stroke LT0 ! .262 g .9718 g 1855 3505 M -76 -25 V stroke LT0 ! .262 g .9783 g 1877 3590 M -98 -110 V stroke LT0 ! .262 g .996 g 1953 3548 M -76 42 V stroke LT0 ! .262 g .9815 g 5405 3489 M -76 91 V stroke LT0 ! .262 g .9948 g 5231 3553 M 98 27 V stroke ! LT0 ! .262 g .8324 g 4640 3136 M -76 -128 V stroke ! LT0 ! .262 g .7857 g 4466 2944 M 98 64 V stroke LT0 ! .262 g .937 g 5405 3489 M 76 -165 V stroke LT0 ! .262 g .9304 g 5382 3403 M 99 -79 V stroke LT0 ! .262 g .8342 g 5458 3228 M 75 -265 V stroke LT0 ! .262 g .8138 g 5435 3083 M 98 -120 V stroke ! LT0 ! .262 g .816 g 4541 3080 M -75 -136 V stroke ! LT0 ! .262 g .772 g 4367 2899 M 99 45 V stroke LT0 ! .262 g .9782 g 5306 3508 M 99 -19 V stroke LT0 ! .262 g .9589 g 2203 3418 M -76 64 V stroke LT0 ! .262 g .9781 g 2029 3507 M 98 -25 V stroke LT0 ! .262 g .0828 g 3367 1095 M 3268 716 L stroke LT0 ! .262 g .0838 g 3192 1107 M 76 -391 V stroke LT0 ! .262 g .9914 g 5306 3508 M -75 45 V stroke LT0 ! .262 g .99 g 5132 3510 M 99 43 V stroke ! LT0 ! .262 g .794 g 2853 2935 M -6 0 V stroke LT0 ! .262 g .9918 g 2029 3507 M -76 41 V stroke LT0 ! .262 g .9895 g 1855 3505 M 98 43 V stroke ! LT0 ! .262 g .8074 g 4443 3038 M -76 -139 V stroke ! LT0 ! .262 g .7677 g 4268 2875 M 99 24 V stroke LT0 ! .262 g .9384 g 1832 3368 M -76 -10 V stroke LT0 ! .262 g .9568 g 1855 3505 M -99 -147 V stroke ! LT0 ! .262 g .7696 g 4051 2841 M -4 -6 V stroke ! LT0 ! .262 g .7186 g 4006 2759 M -10 -19 V stroke ! LT0 ! .262 g .7133 g 3994 2740 M 2 0 V stroke LT0 ! .262 g .9455 g 2270 3362 M -67 56 V stroke LT0 ! .262 g .9696 g 2104 3470 M 99 -52 V stroke LT0 ! .262 g .992 g 5208 3504 M -76 6 V stroke LT0 ! .262 g .9765 g 5034 3445 M 98 65 V stroke ! LT0 ! .262 g .7588 g 3782 2796 M -2 -2 V stroke LT0 ! .262 g .9898 g 1930 3492 M -75 13 V stroke LT0 ! .262 g .9215 g 5382 3403 M 76 -175 V stroke LT0 ! .262 g .9116 g 5359 3302 M 99 -74 V stroke LT0 ! .262 g .9716 g 5382 3403 M -76 105 V stroke LT0 ! .262 g .9934 g 5208 3504 M 98 4 V stroke LT0 ! .262 g .9803 g 5109 3468 M -75 -23 V stroke LT0 ! .262 g .9543 g 4935 3364 M 99 81 V stroke ! LT0 ! .262 g .8065 g 4344 3008 M -76 -133 V stroke ! LT0 ! .262 g .7722 g 4170 2868 M 98 7 V stroke LT0 ! .262 g .9887 g 2104 3470 M -75 37 V stroke LT0 ! .262 g .9922 g 1930 3492 M 99 15 V stroke LT0 ! .262 g .9365 g 2289 3347 M -5 4 V stroke LT0 ! .262 g .9604 g 2180 3414 M 83 -49 V stroke LT0 ! .262 g .9704 g 5284 3445 M 98 -42 V stroke LT0 ! .262 g .9587 g 5011 3407 M -76 -43 V stroke LT0 ! .262 g .936 g 4889 3330 M 46 34 V stroke ! LT0 ! .262 g .9605 g 5011 3407 M -96 -64 V stroke LT0 ! .262 g .8912 g 5359 3302 M 76 -219 V stroke LT0 ! .262 g .8717 g 5336 3161 M 99 -78 V stroke ! LT0 ! .262 g .8777 g 4640 3136 M 65 50 V stroke LT0 ! .262 g .9585 g 1907 3379 M -75 -11 V stroke LT0 ! .262 g .9714 g 1930 3492 M -98 -124 V stroke ! LT0 ! .262 g .9615 g 2230 3380 M 3 -2 V stroke ! LT0 ! .262 g .9396 g 2303 3330 M 4 -3 V stroke LT0 ! .262 g .9922 g 5284 3445 M -76 59 V stroke LT0 ! .262 g .9958 g 5109 3468 M 99 36 V stroke LT0 ! .262 g .9958 g 2006 3465 M -76 27 V stroke ! LT0 ! .262 g .8802 g 4665 3169 M -25 -33 V stroke ! LT0 ! .262 g .8627 g 4541 3080 M 99 56 V stroke ! LT0 ! .262 g .7989 g 4212 2946 M -42 -78 V stroke ! LT0 ! .262 g .782 g 4105 2875 M 65 -7 V stroke LT0 ! .262 g .9822 g 2180 3414 M -76 56 V stroke LT0 ! .262 g .9924 g 2006 3465 M 98 5 V stroke ! LT0 ! .262 g .8734 g 4579 3140 M -38 -60 V stroke ! LT0 ! .262 g .8514 g 4443 3038 M 98 42 V stroke ! LT0 ! .262 g .7921 g 3082 2889 M 6 -9 V stroke LT0 ! .262 g .9604 g 5284 3445 M 75 -143 V stroke LT0 ! .262 g .9479 g 5261 3334 M 98 -32 V stroke LT0 ! .262 g .993 g 5185 3434 M -76 34 V stroke LT0 ! .262 g .9848 g 5011 3407 M 98 61 V stroke LT0 ! .262 g .9894 g 5185 3434 M 99 11 V stroke LT0 ! .262 g .2516 g 3291 1493 M -99 -386 V stroke LT0 ! .262 g .2422 g 3117 1460 M 75 -353 V stroke LT0 ! .262 g .9742 g 2255 3370 M -75 44 V stroke LT0 ! .262 g .9882 g 2081 3438 M 99 -24 V stroke LT0 ! .262 g .2462 g 3465 1466 M -98 -371 V stroke LT0 ! .262 g .2506 g 3291 1493 M 76 -398 V stroke LT0 ! .262 g .985 g 5086 3411 M -75 -4 V stroke LT0 ! .262 g .967 g 4912 3342 M 99 65 V stroke ! LT0 ! .262 g .8492 g 3005 2989 M -5 -3 V stroke ! LT0 ! .262 g .8659 g 4480 3101 M -37 -63 V stroke ! LT0 ! .262 g .8463 g 4344 3008 M 99 30 V stroke LT0 ! .262 g .9984 g 2081 3438 M -75 27 V stroke LT0 ! .262 g .9829 g 1907 3379 M 99 86 V stroke LT0 ! .262 g .9724 g 1983 3362 M -76 17 V stroke LT0 ! .262 g .9743 g 4988 3380 M -76 -38 V stroke LT0 ! .262 g .9284 g 5261 3334 M 75 -173 V stroke LT0 ! .262 g .9127 g 5238 3209 M 98 -48 V stroke LT0 ! .262 g .9769 g 5261 3334 M -76 100 V stroke LT0 ! .262 g .9932 g 5086 3411 M 99 23 V stroke LT0 ! .262 g .9702 g 2331 3331 M -76 39 V stroke LT0 ! .262 g .9854 g 2157 3404 M 98 -34 V stroke ! LT0 ! .262 g .8502 g 4354 3025 M -10 -17 V stroke ! LT0 ! .262 g .8462 g 4325 3007 M 19 1 V stroke LT0 ! .262 g .9718 g 5162 3355 M 99 -21 V stroke LT0 ! .262 g .9994 g 2157 3404 M -76 34 V stroke LT0 ! .262 g .9879 g 1983 3362 M 98 76 V stroke LT0 ! .262 g .9783 g 2058 3338 M -75 24 V stroke LT0 ! .262 g .9881 g 5162 3355 M -76 56 V stroke LT0 ! .262 g .9923 g 4988 3380 M 98 31 V stroke LT0 ! .262 g .9695 g 2407 3301 M -76 30 V stroke LT0 ! .262 g .9817 g 2233 3361 M 98 -30 V stroke ! LT0 ! .262 g .8508 g 3003 2991 M 2 -2 V stroke ! LT0 ! .262 g .9234 g 2583 3193 M -2 0 V stroke LT0 ! .262 g .4017 g 3215 1848 M -98 -388 V stroke LT0 ! .262 g .3769 g 3041 1750 M 76 -290 V stroke LT0 ! .262 g .9562 g 5162 3355 M 76 -146 V stroke LT0 ! .262 g .942 g 5139 3236 M 99 -27 V stroke LT0 ! .262 g .9969 g 2233 3361 M -76 43 V stroke LT0 ! .262 g .9898 g 2058 3338 M 99 66 V stroke LT0 ! .262 g .9922 g 5064 3353 M -76 27 V stroke LT0 ! .262 g .9851 g 4889 3330 M 99 50 V stroke LT0 ! .262 g .9881 g 5064 3353 M 98 2 V stroke LT0 ! .262 g .9816 g 2134 3311 M -76 27 V stroke LT0 ! .262 g .9879 g 4965 3334 M -76 -4 V stroke LT0 ! .262 g .977 g 4791 3295 M 98 35 V stroke LT0 ! .262 g .4103 g 3390 1837 M -99 -344 V stroke LT0 ! .262 g .4111 g 3215 1848 M 76 -355 V stroke LT0 ! .262 g .3979 g 3564 1796 M -99 -330 V stroke LT0 ! .262 g .4059 g 3390 1837 M 75 -371 V stroke LT0 ! .262 g .9726 g 2482 3279 M -75 22 V stroke LT0 ! .262 g .9821 g 2308 3328 M 99 -27 V stroke ! LT0 ! .262 g .8961 g 4176 3055 M -1 -1 V stroke LT0 ! .262 g .9943 g 2308 3328 M -75 33 V stroke LT0 ! .262 g .9887 g 2134 3311 M 99 50 V stroke LT0 ! .262 g .9739 g 5139 3236 M -75 117 V stroke LT0 ! .262 g .995 g 4965 3334 M 99 19 V stroke LT0 ! .262 g .9862 g 4866 3312 M -75 -17 V stroke LT0 ! .262 g .9739 g 4765 3286 M 26 9 V stroke LT0 ! .262 g .9624 g 5041 3246 M 98 -10 V stroke ! LT0 ! .262 g .9688 g 4495 3208 M -1 -1 V stroke LT0 ! .262 g .984 g 2210 3283 M -76 28 V stroke LT0 ! .262 g .524 g 3140 2148 M -99 -398 V stroke LT0 ! .262 g .4987 g 2966 2047 M 75 -297 V stroke ! LT0 ! .262 g .8916 g 3538 3009 M 7 -5 V stroke LT0 ! .262 g .9775 g 2558 3257 M -76 22 V stroke LT0 ! .262 g .9827 g 2384 3286 M 98 -7 V stroke LT0 ! .262 g .9922 g 2384 3286 M -76 42 V stroke LT0 ! .262 g .9897 g 2210 3283 M 98 45 V stroke LT0 ! .262 g .9835 g 5041 3246 M -76 88 V stroke LT0 ! .262 g .9971 g 4866 3312 M 99 22 V stroke ! LT0 ! .262 g .9676 g 4388 3189 M -9 -8 V stroke LT0 ! .262 g .9745 g 4942 3237 M 99 9 V stroke LT0 ! .262 g .985 g 2285 3250 M -75 33 V stroke ! LT0 ! .262 g .969 g 4495 3208 M 14 2 V stroke LT0 ! .262 g .9881 g 4942 3237 M -76 75 V stroke LT0 ! .262 g .9977 g 4768 3286 M 98 26 V stroke LT0 ! .262 g .9937 g 2459 3268 M -75 18 V stroke LT0 ! .262 g .9875 g 2285 3250 M 99 36 V stroke LT0 ! .262 g .9825 g 2633 3235 M -75 22 V stroke LT0 ! .262 g .9885 g 2459 3268 M 99 -11 V stroke LT0 ! .262 g .5546 g 3314 2165 M -99 -317 V stroke LT0 ! .262 g .5488 g 3140 2148 M 75 -300 V stroke LT0 ! .262 g .5329 g 3661 2095 M -97 -299 V stroke LT0 ! .262 g .5422 g 3488 2142 M 76 -346 V stroke LT0 ! .262 g .5502 g 3488 2142 M -98 -305 V stroke LT0 ! .262 g .5538 g 3314 2165 M 76 -328 V stroke LT0 ! .262 g .6453 g 3064 2436 M -98 -389 V stroke LT0 ! .262 g .6261 g 2890 2361 M 76 -314 V stroke LT0 ! .262 g .9802 g 4844 3220 M 98 17 V stroke LT0 ! .262 g .9858 g 4669 3256 M -124 -34 V stroke ! LT0 ! .262 g .9089 g 3506 3034 M -2 -1 V stroke LT0 ! .262 g .9822 g 2361 3206 M -76 44 V stroke LT0 ! .262 g .9898 g 4844 3220 M -76 66 V stroke LT0 ! .262 g .9964 g 4669 3256 M 99 30 V stroke LT0 ! .262 g .9791 g 2633 3235 M 108 -30 V stroke LT0 ! .262 g .9866 g 2709 3209 M -76 26 V stroke LT0 ! .262 g .9921 g 2535 3240 M 98 -5 V stroke LT0 ! .262 g .9981 g 2535 3240 M -76 28 V stroke LT0 ! .262 g .9883 g 2361 3206 M 98 62 V stroke LT0 ! .262 g .9838 g 4745 3203 M 99 17 V stroke LT0 ! .262 g .9903 g 4745 3203 M -76 53 V stroke LT0 ! .262 g .994 g 4571 3226 M 98 30 V stroke LT0 ! .262 g .9846 g 4472 3201 M -75 -3 V stroke LT0 ! .262 g .9845 g 4571 3226 M -174 -28 V stroke LT0 ! .262 g .9779 g 4311 3183 M 86 15 V stroke LT0 ! .262 g .9728 g 2436 3144 M -75 62 V stroke ! LT0 ! .262 g .9628 g 3898 3115 M -2 -2 V stroke LT0 ! .262 g .6818 g 3238 2476 M -98 -328 V stroke LT0 ! .262 g .6706 g 3064 2436 M 76 -288 V stroke LT0 ! .262 g .9855 g 4646 3161 M -75 65 V stroke LT0 ! .262 g .993 g 4472 3201 M 99 25 V stroke LT0 ! .262 g .6475 g 3760 2337 M -99 -242 V stroke LT0 ! .262 g .6525 g 3587 2366 M 74 -271 V stroke LT0 ! .262 g .9818 g 4646 3161 M 99 42 V stroke LT0 ! .262 g .9839 g 2785 3158 M -76 51 V stroke LT0 ! .262 g .9845 g 2883 3186 M -174 23 V stroke LT0 ! .262 g .984 g 2611 3166 M 98 43 V stroke LT0 ! .262 g .9894 g 2611 3166 M -76 74 V stroke LT0 ! .262 g .9825 g 2436 3144 M 99 96 V stroke LT0 ! .262 g .6885 g 3412 2472 M -98 -307 V stroke LT0 ! .262 g .6877 g 3238 2476 M 76 -311 V stroke LT0 ! .262 g .961 g 2512 3090 M -76 54 V stroke LT0 ! .262 g .7563 g 2989 2662 M -99 -301 V stroke LT0 ! .262 g .7363 g 2814 2585 M 76 -224 V stroke LT0 ! .262 g .988 g 2959 3184 M -76 2 V stroke LT0 ! .262 g .9803 g 2785 3158 M 98 28 V stroke LT0 ! .262 g .6619 g 3587 2366 M -99 -224 V stroke LT0 ! .262 g .6849 g 3412 2472 M 76 -330 V stroke LT0 ! .262 g .9805 g 4200 3176 M -135 -33 V stroke LT0 ! .262 g .9767 g 4548 3131 M 98 30 V stroke LT0 ! .262 g .9704 g 2686 3093 M -75 73 V stroke LT0 ! .262 g .968 g 2512 3090 M 99 76 V stroke LT0 ! .262 g .9842 g 4548 3131 M -76 70 V stroke LT0 ! .262 g .9957 g 4374 3187 M 98 14 V stroke LT0 ! .262 g .9834 g 2860 3141 M -75 17 V stroke LT0 ! .262 g .9704 g 2686 3093 M 99 65 V stroke LT0 ! .262 g .9439 g 2588 3005 M -76 85 V stroke LT0 ! .262 g .836 g 2913 2845 M -99 -260 V stroke LT0 ! .262 g .8113 g 2739 2747 M 75 -162 V stroke LT0 ! .262 g .9809 g 4275 3106 M -75 70 V stroke LT0 ! .262 g .994 g 4374 3187 M -174 -11 V stroke LT0 ! .262 g .9882 g 4101 3145 M 99 31 V stroke LT0 ! .262 g .7891 g 3163 2713 M -99 -277 V stroke LT0 ! .262 g .7755 g 2989 2662 M 75 -226 V stroke LT0 ! .262 g .9526 g 2762 3024 M -76 69 V stroke LT0 ! .262 g .9464 g 2588 3005 M 98 88 V stroke LT0 ! .262 g .8619 g 2739 2747 M -76 119 V stroke LT0 ! .262 g .9131 g 2762 3024 M -99 -158 V stroke LT0 ! .262 g .907 g 2588 3005 M 75 -139 V stroke LT0 ! .262 g .9711 g 4449 3087 M 99 44 V stroke LT0 ! .262 g .8764 g 2837 2921 M -98 -174 V stroke LT0 ! .262 g .7546 g 3684 2590 M -97 -224 V stroke LT0 ! .262 g .7703 g 3511 2664 M 76 -298 V stroke LT0 ! .262 g .7386 g 3858 2535 M -98 -198 V stroke LT0 ! .262 g .7496 g 3684 2590 M 76 -253 V stroke LT0 ! .262 g .9965 g 3034 3157 M -75 27 V stroke LT0 ! .262 g .9909 g 3133 3158 M -174 26 V stroke LT0 ! .262 g .9912 g 2860 3141 M 99 43 V stroke LT0 ! .262 g .9833 g 4101 3145 M -158 -8 V stroke LT0 ! .262 g .9923 g 3209 3149 M -76 9 V stroke LT0 ! .262 g .9853 g 3228 3148 M -95 10 V stroke LT0 ! .262 g .9923 g 3034 3157 M 99 1 V stroke LT0 ! .262 g .9826 g 4449 3087 M -75 100 V stroke LT0 ! .262 g .9853 g 4275 3106 M 99 81 V stroke LT0 ! .262 g .9603 g 4351 3023 M -76 83 V stroke LT0 ! .262 g .9658 g 4177 3054 M 98 52 V stroke LT0 ! .262 g .9276 g 2837 2921 M -75 103 V stroke LT0 ! .262 g .9656 g 2860 3141 M -98 -117 V stroke LT0 ! .262 g .9731 g 4177 3054 M -76 91 V stroke LT0 ! .262 g .9897 g 4003 3133 M 98 12 V stroke LT0 ! .262 g .8043 g 3337 2722 M -99 -246 V stroke LT0 ! .262 g .8004 g 3163 2713 M 75 -237 V stroke LT0 ! .262 g .9577 g 4351 3023 M 98 64 V stroke LT0 ! .262 g .976 g 2936 3061 M -76 80 V stroke LT0 ! .262 g .9012 g 2913 2845 M -76 76 V stroke LT0 ! .262 g .938 g 2936 3061 M -99 -140 V stroke LT0 ! .262 g .866 g 3087 2880 M -98 -218 V stroke LT0 ! .262 g .856 g 2913 2845 M 76 -183 V stroke LT0 ! .262 g .7933 g 3511 2664 M -99 -192 V stroke LT0 ! .262 g .8051 g 3337 2722 M 75 -250 V stroke LT0 ! .262 g .9938 g 3730 3130 M -76 7 V stroke LT0 ! .262 g .9916 g 3829 3146 M -175 -9 V stroke LT0 ! .262 g .9936 g 3557 3137 M 97 0 V stroke LT0 ! .262 g .9406 g 4252 2964 M 99 59 V stroke LT0 ! .262 g .9461 g 4252 2964 M -75 90 V stroke LT0 ! .262 g .9618 g 4078 3038 M 99 16 V stroke LT0 ! .262 g .8088 g 3957 2687 M -99 -152 V stroke LT0 ! .262 g .8319 g 3783 2794 M 75 -259 V stroke LT0 ! .262 g .9925 g 3110 3101 M -76 56 V stroke LT0 ! .262 g .9813 g 2936 3061 M 98 96 V stroke LT0 ! .262 g .9594 g 3012 3005 M -76 56 V stroke LT0 ! .262 g .9952 g 3904 3113 M -75 33 V stroke LT0 ! .262 g .9941 g 4003 3133 M -174 13 V stroke LT0 ! .262 g .9975 g 3730 3130 M 99 16 V stroke LT0 ! .262 g .8429 g 3783 2794 M -99 -204 V stroke LT0 ! .262 g .8537 g 3609 2847 M 75 -257 V stroke LT0 ! .262 g .9226 g 3012 3005 M -99 -160 V stroke LT0 ! .262 g .9283 g 4154 2920 M 98 44 V stroke LT0 ! .262 g .9924 g 3284 3093 M -75 56 V stroke LT0 ! .262 g .9972 g 3383 3139 M -174 10 V stroke LT0 ! .262 g .9925 g 3110 3101 M 99 48 V stroke LT0 ! .262 g .9784 g 4078 3038 M -75 95 V stroke LT0 ! .262 g .9939 g 3904 3113 M 99 20 V stroke LT0 ! .262 g .9914 g 3458 3084 M -75 55 V stroke LT0 ! .262 g .9981 g 3557 3137 M -174 2 V stroke LT0 ! .262 g .9919 g 3284 3093 M 99 46 V stroke LT0 ! .262 g .8663 g 4055 2831 M -98 -144 V stroke LT0 ! .262 g .8842 g 3881 2915 M 76 -228 V stroke LT0 ! .262 g .8862 g 3261 2901 M -98 -188 V stroke LT0 ! .262 g .8796 g 3087 2880 M 76 -167 V stroke LT0 ! .262 g .8694 g 3609 2847 M -98 -183 V stroke LT0 ! .262 g .8776 g 3435 2890 M 76 -226 V stroke LT0 ! .262 g .9439 g 4154 2920 M -76 118 V stroke LT0 ! .262 g .9629 g 3980 3009 M 98 29 V stroke LT0 ! .262 g .996 g 3631 3090 M -74 47 V stroke LT0 ! .262 g .9928 g 3458 3084 M 99 53 V stroke LT0 ! .262 g .9699 g 3186 2994 M -76 107 V stroke LT0 ! .262 g .9706 g 3012 3005 M 98 96 V stroke LT0 ! .262 g .9089 g 4055 2831 M 99 89 V stroke LT0 ! .262 g .9326 g 3087 2880 M -75 125 V stroke LT0 ! .262 g .9319 g 3186 2994 M -99 -114 V stroke LT0 ! .262 g .9279 g 3980 3009 M 75 -178 V stroke LT0 ! .262 g .8893 g 3435 2890 M -98 -168 V stroke LT0 ! .262 g .8901 g 3261 2901 M 76 -179 V stroke LT0 ! .262 g .9909 g 3806 3060 M -76 70 V stroke LT0 ! .262 g .9962 g 3631 3090 M 99 40 V stroke LT0 ! .262 g .9777 g 3360 3020 M -76 73 V stroke LT0 ! .262 g .9698 g 3186 2994 M 98 99 V stroke LT0 ! .262 g .9384 g 3261 2901 M -75 93 V stroke LT0 ! .262 g .9785 g 3980 3009 M -76 104 V stroke LT0 ! .262 g .9886 g 3806 3060 M 98 53 V stroke LT0 ! .262 g .9754 g 3534 3005 M -76 79 V stroke LT0 ! .262 g .9772 g 3360 3020 M 98 64 V stroke LT0 ! .262 g .9073 g 3881 2915 M -98 -121 V stroke LT0 ! .262 g .9225 g 3707 2987 M 76 -193 V stroke LT0 ! .262 g .9458 g 3881 2915 M 99 94 V stroke LT0 ! .262 g .9463 g 3360 3020 M -99 -119 V stroke LT0 ! .262 g .9559 g 3806 3060 M 75 -145 V stroke LT0 ! .262 g .9333 g 3707 2987 M -98 -140 V stroke LT0 ! .262 g .9356 g 3534 3005 M 75 -158 V stroke LT0 ! .262 g .9763 g 3707 2987 M -76 103 V stroke LT0 ! .262 g .9787 g 3534 3005 M 97 85 V stroke LT0 ! .262 g .9711 g 3707 2987 M 99 73 V stroke LT0 ! .262 g .9455 g 3435 2890 M -75 130 V stroke LT0 ! .262 g .9437 g 3534 3005 M -99 -115 V stroke LT0 --- 534,5249 ---- } ifelse 1.000 UP 1.000 UL ! LT1 ! .5708 g 3749 3517 M 1 -2 V stroke ! LT1 ! .5145 g 4001 3401 M -2 -8 V stroke ! LT1 ! .7424 g 3957 3846 M -6 -17 V stroke ! LT1 ! .6752 g 4022 3706 M 1 -1 V stroke ! LT1 ! .8254 g 3516 4005 M -2 -5 V stroke ! LT1 ! .8242 g 3516 4005 M 5 -9 V stroke ! LT1 ! .7721 g 4386 3859 M -9 -15 V stroke ! LT1 ! .8262 g 4046 3985 M 2 -3 V stroke ! LT1 ! .0847 g 1151 1992 M -75 -324 V stroke ! LT1 ! .0835 g 1174 2045 M -98 -377 V stroke ! LT1 ! .8273 g 3517 4007 M -1 -2 V stroke ! LT1 ! .7771 g 4384 3862 M 2 -3 V stroke ! LT1 ! .8767 g 3167 4084 M 15 -14 V stroke ! LT1 ! .9013 g 3443 4131 M -2 -4 V stroke ! LT1 ! .2494 g 1250 2371 M -76 -326 V stroke ! LT1 ! .2448 g 1273 2409 M -99 -364 V stroke ! LT1 ! .848 g 4468 3977 M -1 -1 V stroke ! LT1 ! .9586 g 3658 4231 M -8 -8 V stroke ! LT1 ! .9327 g 3544 4190 M 6 -4 V stroke ! LT1 ! .9329 g 4065 4169 M 9 -6 V stroke ! LT1 ! .2477 g 1227 2301 M -76 -309 V stroke ! LT1 ! .2506 g 1250 2371 M -99 -379 V stroke ! LT1 ! .4837 g 1348 2722 M -2 -8 V stroke ! LT1 ! .3962 g 1340 2688 M -67 -279 V stroke ! LT1 ! .3918 g 1371 2724 M -98 -315 V stroke ! LT1 ! .9671 g 3226 4230 M -6 -2 V stroke ! LT1 ! .9539 g 2929 4181 M 6 -1 V stroke LT0 ! .4119 g 3680 2638 M 0 1 V stroke LT0 ! .3769 g 3756 2531 M -1 1 V stroke LT0 ! .6087 g 3726 3202 M -43 -63 V stroke LT0 ! .6138 g 3552 3233 M 41 -96 V stroke LT0 ! .0854 g 6049 1836 M 75 -385 V stroke LT0 ! .0856 g 6026 1779 M 98 -328 V stroke LT0 ! .6173 g 3900 3219 M -43 -76 V stroke LT0 ! .61 g 3726 3202 M 28 -60 V stroke LT0 ! .9907 g 3643 4228 M -74 42 V stroke LT0 ! .9891 g 3742 4247 M -173 23 V stroke LT0 ! .9962 g 3470 4260 M 99 10 V stroke LT0 ! .9896 g 3817 4232 M -75 15 V stroke LT0 ! .987 g 3643 4228 M 99 19 V stroke LT0 ! .6175 g 3280 3214 M 28 -71 V stroke LT0 ! .6153 g 3552 3233 M -90 -95 V stroke LT0 ! .6335 g 3378 3318 M 73 -180 V stroke LT0 ! .6519 g 3824 3360 M -98 -158 V stroke LT0 ! .6513 g 3650 3365 M 76 -163 V stroke LT0 ! .6569 g 3650 3365 M -98 -132 V stroke LT0 ! .6687 g 3477 3423 M 75 -190 V stroke ! LT1 ! .9596 g 4493 4140 M -12 0 V stroke LT0 ! .9741 g 2925 4178 M -76 16 V stroke LT0 ! .9815 g 3023 4235 M -174 -41 V stroke LT0 ! .9674 g 2760 4160 M 89 34 V stroke LT0 ! .9885 g 4166 4217 M -76 9 V stroke LT0 ! .9889 g 3991 4226 M 99 0 V stroke ! LT1 ! .3576 g 1273 2466 M -23 -95 V stroke ! LT1 ! .4813 g 1348 2722 M -6 -21 V stroke ! LT1 ! .3952 g 1330 2656 M -80 -285 V stroke LT0 ! .7114 g 3749 3517 M -99 -152 V stroke LT0 ! .7163 g 3575 3546 M 75 -181 V stroke LT0 ! .9779 g 4340 4179 M -76 25 V stroke LT0 ! .985 g 4166 4217 M 98 -13 V stroke LT0 ! .988 g 3371 4196 M -75 60 V stroke LT0 ! .997 g 3470 4260 M -174 -4 V stroke LT0 ! .9958 g 3197 4237 M 99 19 V stroke LT0 ! .6347 g 4074 3274 M -71 -134 V stroke LT0 ! .6181 g 3900 3219 M 46 -82 V stroke LT0 ! .6676 g 3998 3395 M -98 -176 V stroke LT0 ! .6576 g 3824 3360 M 76 -141 V stroke ! LT1 ! .5035 g 1414 2894 M -43 -170 V stroke ! LT1 ! .5225 g 1470 3019 M -99 -295 V stroke LT0 ! .6497 g 3378 3318 M -98 -104 V stroke LT0 ! .6717 g 3204 3420 M 76 -206 V stroke LT0 ! .6216 g 3196 3151 M 84 63 V stroke LT0 ! .6867 g 3477 3423 M -99 -105 V stroke LT0 ! .7063 g 3303 3514 M 75 -196 V stroke LT0 ! .7185 g 3923 3537 M -99 -177 V stroke LT0 ! .7121 g 3749 3517 M 75 -157 V stroke LT0 ! .7281 g 3575 3546 M -98 -123 V stroke LT0 ! .7415 g 3401 3611 M 76 -188 V stroke LT0 ! .984 g 3719 4176 M -76 52 V stroke LT0 ! .9858 g 3546 4191 M 97 37 V stroke LT0 ! .9913 g 3546 4191 M -76 69 V stroke LT0 ! .9906 g 3371 4196 M 99 64 V stroke LT0 ! .6279 g 4149 3173 M -5 -10 V stroke LT0 ! .6544 g 3106 3358 M 71 -205 V stroke LT0 ! .7751 g 3673 3674 M -98 -128 V stroke LT0 ! .7855 g 3500 3726 M 75 -180 V stroke LT0 ! .7704 g 3847 3667 M -98 -150 V stroke LT0 ! .7702 g 3673 3674 M 76 -157 V stroke LT0 ! .9934 g 3099 4205 M -76 30 V stroke LT0 ! .995 g 3197 4237 M -174 -2 V stroke LT0 ! .9854 g 2925 4178 M 98 57 V stroke LT0 ! .9841 g 3893 4157 M -76 75 V stroke LT0 ! .9943 g 3991 4226 M -174 6 V stroke LT0 ! .9866 g 3719 4176 M 98 56 V stroke LT0 ! .9731 g 3447 4127 M -76 69 V stroke LT0 ! .9751 g 3273 4143 M 98 53 V stroke LT0 ! .8264 g 3771 3816 M -98 -142 V stroke LT0 ! .832 g 3598 3847 M 75 -173 V stroke LT0 ! .7989 g 3500 3726 M -99 -115 V stroke LT0 ! .8136 g 3326 3797 M 75 -186 V stroke LT0 ! .7611 g 3303 3514 M 98 97 V stroke LT0 ! .9829 g 3273 4143 M -76 94 V stroke LT0 ! .9955 g 3099 4205 M 98 32 V stroke LT0 ! .7823 g 3227 3709 M 76 -195 V stroke LT0 ! .7283 g 3204 3420 M 99 94 V stroke LT0 ! .6823 g 4074 3274 M -76 121 V stroke LT0 ! .7404 g 4097 3580 M -99 -185 V stroke LT0 ! .7284 g 3923 3537 M 75 -142 V stroke LT0 ! .753 g 3129 3628 M 75 -208 V stroke LT0 ! .7037 g 3106 3358 M 98 62 V stroke LT0 ! .989 g 4067 4169 M -76 57 V stroke LT0 ! .9845 g 3893 4157 M 98 69 V stroke LT0 ! .981 g 3000 4158 M -75 20 V stroke LT0 ! .9783 g 2826 4154 M 99 24 V stroke LT0 ! .8424 g 3598 3847 M -98 -121 V stroke LT0 ! .8492 g 3424 3884 M 76 -158 V stroke LT0 ! .6458 g 4149 3173 M -75 101 V stroke LT0 ! .7011 g 4172 3468 M -98 -194 V stroke ! LT1 ! .9671 g 4534 4141 M -20 -2 V stroke ! LT1 ! .9666 g 4504 4141 M 3 0 V stroke LT0 ! .7768 g 3923 3537 M -76 130 V stroke LT0 ! .8311 g 3946 3828 M -99 -161 V stroke LT0 ! .8266 g 3771 3816 M 76 -149 V stroke LT0 ! .9693 g 3620 4100 M -74 91 V stroke LT0 ! .9738 g 3447 4127 M 99 64 V stroke LT0 ! .7872 g 4021 3704 M -98 -167 V stroke LT0 ! .6564 g 3007 3310 M 50 -141 V stroke LT0 ! .9834 g 4415 4162 M -75 17 V stroke LT0 ! .9849 g 4241 4176 M 99 3 V stroke LT0 ! .9623 g 3794 4070 M -75 106 V stroke LT0 ! .9675 g 3620 4100 M 99 76 V stroke LT0 ! .992 g 4241 4176 M -75 41 V stroke LT0 ! .9886 g 4067 4169 M 99 48 V stroke LT0 ! .8808 g 3870 3958 M -99 -142 V stroke LT0 ! .8818 g 3696 3969 M 75 -153 V stroke LT0 ! .8873 g 3696 3969 M -98 -122 V stroke LT0 ! .8921 g 3523 3997 M 75 -150 V stroke LT0 ! .9552 g 3349 4052 M -76 91 V stroke LT0 ! .96 g 3174 4081 M 99 62 V stroke LT0 ! .899 g 3523 3997 M -99 -113 V stroke LT0 ! .91 g 3349 4052 M 75 -168 V stroke LT0 ! .8639 g 3326 3797 M 98 87 V stroke LT0 ! .9618 g 3968 4071 M -75 86 V stroke LT0 ! .9597 g 3794 4070 M 99 87 V stroke LT0 ! .629 g 4157 3166 M -8 7 V stroke LT0 ! .671 g 4248 3374 M -99 -201 V stroke LT0 ! .7367 g 3030 3569 M 76 -211 V stroke LT0 ! .6896 g 3007 3310 M 99 48 V stroke LT0 ! .9421 g 3523 3997 M -76 130 V stroke LT0 ! .9531 g 3349 4052 M 98 75 V stroke LT0 ! .9376 g 3620 4100 M -97 -103 V stroke LT0 ! .8827 g 3250 3973 M 76 -176 V stroke LT0 ! .8348 g 3227 3709 M 99 88 V stroke LT0 ! .9328 g 3696 3969 M -76 131 V stroke LT0 ! .9266 g 3870 3958 M -76 112 V stroke LT0 ! .9276 g 3696 3969 M 98 101 V stroke LT0 ! .8557 g 3152 3894 M 75 -185 V stroke LT0 ! .807 g 3129 3628 M 98 81 V stroke LT0 ! .9726 g 3174 4081 M -75 124 V stroke LT0 ! .9889 g 3000 4158 M 99 47 V stroke LT0 ! .9845 g 2728 4148 M -76 20 V stroke LT0 ! .98 g 2826 4154 M -174 14 V stroke LT0 ! .9827 g 2554 4148 M 98 20 V stroke ! LT1 ! .3983 g 1302 2572 M -75 -271 V stroke LT0 ! .4099 g 1325 2678 M -98 -377 V stroke ! LT1 ! .5406 g 1401 2922 M -96 -341 V stroke ! LT1 ! .3928 g 1304 2578 M -77 -277 V stroke LT0 ! .8854 g 3946 3828 M -76 130 V stroke LT0 ! .9286 g 3968 4071 M -98 -113 V stroke LT0 ! .8415 g 4021 3704 M -75 124 V stroke LT0 ! .8928 g 4044 3982 M -98 -154 V stroke LT0 ! .9337 g 3250 3973 M -76 108 V stroke LT0 ! .9484 g 3076 4043 M 98 38 V stroke LT0 ! .9289 g 3250 3973 M 99 79 V stroke LT0 ! .7991 g 4097 3580 M -76 124 V stroke LT0 ! .8523 g 4120 3866 M -99 -162 V stroke LT0 ! .9744 g 4143 4098 M -76 71 V stroke LT0 ! .9662 g 3968 4071 M 99 98 V stroke LT0 ! .8324 g 3053 3826 M 76 -198 V stroke LT0 ! .786 g 3030 3569 M 99 59 V stroke LT0 ! .9361 g 4044 3982 M -76 89 V stroke LT0 ! .9812 g 2902 4133 M -76 21 V stroke LT0 ! .983 g 2728 4148 M 98 6 V stroke LT0 ! .7592 g 4172 3468 M -75 112 V stroke LT0 ! .814 g 4195 3761 M -98 -181 V stroke LT0 ! .2674 g 3671 2120 M 16 3 V stroke LT0 ! .6647 g 2909 3287 M 36 -103 V stroke LT0 ! .6681 g 4324 3299 M -57 -118 V stroke LT0 ! .2464 g 5973 2206 M 76 -370 V stroke LT0 ! .2529 g 5950 2177 M 99 -341 V stroke LT0 ! .9036 g 3152 3894 M 98 79 V stroke LT0 ! .7259 g 2932 3522 M 75 -212 V stroke LT0 ! .6846 g 2909 3287 M 98 23 V stroke LT0 ! .7263 g 4248 3374 M -76 94 V stroke LT0 ! .7793 g 4271 3659 M -99 -191 V stroke LT0 ! .9183 g 3076 4043 M 76 -149 V stroke LT0 ! .8811 g 3053 3826 M 99 68 V stroke LT0 ! .9862 g 4317 4127 M -76 49 V stroke LT0 ! .9778 g 4143 4098 M 98 78 V stroke LT0 ! .9647 g 3076 4043 M -76 115 V stroke LT0 ! .9839 g 2902 4133 M 98 25 V stroke LT0 ! .8155 g 2954 3761 M 76 -192 V stroke LT0 ! .773 g 2932 3522 M 98 47 V stroke ! LT1 ! .6733 g 1568 3245 M -13 -30 V stroke LT0 ! .9036 g 4120 3866 M -76 116 V stroke LT0 ! .9443 g 4143 4098 M -99 -116 V stroke LT0 ! .9411 g 2977 3999 M 99 44 V stroke LT0 ! .9898 g 4491 4141 M -76 21 V stroke LT0 ! .9849 g 4589 4145 M -174 17 V stroke LT0 ! .9847 g 4317 4127 M 98 35 V stroke LT0 ! .8672 g 4195 3761 M -75 105 V stroke LT0 ! .9106 g 4218 4004 M -98 -138 V stroke LT0 ! .9513 g 4218 4004 M -75 94 V stroke LT0 ! .7022 g 4324 3299 M -76 75 V stroke LT0 ! .7529 g 4347 3574 M -99 -200 V stroke LT0 ! .9882 g 2629 4134 M -75 14 V stroke LT0 ! .9847 g 2455 4126 M 99 22 V stroke LT0 ! .9038 g 2977 3999 M 76 -173 V stroke LT0 ! .8618 g 2954 3761 M 99 65 V stroke LT0 ! .9895 g 4665 4141 M -76 4 V stroke LT0 ! .9877 g 4491 4141 M 98 4 V stroke LT0 ! .3998 g 4156 2476 M -1 -2 V stroke LT0 ! .8341 g 4271 3659 M -76 102 V stroke LT0 ! .8785 g 4294 3907 M -99 -146 V stroke LT0 ! .4028 g 4169 2481 M -13 -5 V stroke LT0 ! .6718 g 4399 3245 M -24 -51 V stroke LT0 ! .7283 g 2833 3505 M 76 -218 V stroke LT0 ! .6896 g 2810 3281 M 99 6 V stroke LT0 ! .8085 g 2856 3729 M 76 -207 V stroke LT0 ! .7696 g 2833 3505 M 99 17 V stroke LT0 ! .9219 g 4294 3907 M -76 97 V stroke LT0 ! .9597 g 4317 4127 M -99 -123 V stroke LT0 ! .9818 g 2803 4091 M -75 57 V stroke LT0 ! .99 g 2629 4134 M 99 14 V stroke LT0 ! .8891 g 2879 3950 M 75 -189 V stroke LT0 ! .851 g 2856 3729 M 98 32 V stroke LT0 ! .9603 g 2902 4133 M 75 -134 V stroke LT0 ! .9311 g 2879 3950 M 98 49 V stroke LT0 ! .98 g 2803 4091 M 99 42 V stroke LT0 ! .8059 g 4347 3574 M -76 85 V stroke LT0 ! .8546 g 4369 3841 M -98 -182 V stroke LT0 ! .6873 g 4399 3245 M -75 54 V stroke LT0 ! .7369 g 4422 3515 M -98 -216 V stroke LT0 ! .6385 g 2863 3140 M 1 -3 V stroke LT0 ! .6766 g 2810 3281 M 34 -90 V stroke LT0 ! .9716 g 4392 4048 M -75 79 V stroke LT0 ! .8991 g 4369 3841 M -75 66 V stroke LT0 ! .9339 g 4392 4048 M -98 -141 V stroke LT0 ! .2802 g 3664 2093 M 77 20 V stroke LT0 ! .9908 g 2531 4117 M -76 9 V stroke LT0 ! .9846 g 2356 4098 M 99 28 V stroke LT0 ! .7876 g 4422 3515 M -75 59 V stroke LT0 ! .8334 g 4445 3769 M -98 -195 V stroke LT0 ! .9508 g 2803 4091 M 76 -141 V stroke LT0 ! .9234 g 2780 3916 M 99 34 V stroke LT0 ! .991 g 4567 4102 M -76 39 V stroke LT0 ! .9767 g 4392 4048 M 99 93 V stroke ! LT1 ! .8211 g 1643 3518 M -1 -3 V stroke LT0 ! .952 g 4468 3977 M -76 71 V stroke LT0 ! .8853 g 2780 3916 M 76 -187 V stroke LT0 ! .9747 g 2705 4060 M 98 31 V stroke LT0 ! .8496 g 2757 3705 M 99 24 V stroke LT0 ! .9783 g 4915 4063 M -76 32 V stroke LT0 ! .9868 g 4741 4107 M 98 -12 V stroke LT0 ! .9871 g 4665 4141 M 174 -46 V stroke LT0 ! .8107 g 2757 3705 M 76 -200 V stroke LT0 ! .7736 g 2734 3489 M 99 16 V stroke LT0 ! .9829 g 2705 4060 M -76 74 V stroke LT0 ! .9944 g 2531 4117 M 98 17 V stroke LT0 ! .6834 g 4475 3218 M -4 -8 V stroke LT0 ! .735 g 2734 3489 M 76 -208 V stroke LT0 ! .703 g 2712 3294 M 98 -13 V stroke LT0 ! .2531 g 5950 2177 M 76 -398 V stroke LT0 ! .2466 g 5927 2091 M 99 -312 V stroke LT0 ! .6837 g 4475 3218 M -76 27 V stroke LT0 ! .7258 g 4498 3457 M -99 -212 V stroke LT0 ! .9958 g 4741 4107 M -76 34 V stroke LT0 ! .9929 g 4567 4102 M 98 39 V stroke LT0 ! .8821 g 4445 3769 M -76 72 V stroke LT0 ! .9172 g 4468 3977 M -99 -136 V stroke ! LT1 ! .2923 g 3739 2112 M -75 -19 V stroke ! LT1 ! .2913 g 3838 2133 M -174 -40 V stroke ! LT1 ! .2803 g 3661 2093 M 3 0 V stroke LT0 ! .3411 g 4020 2259 M 15 11 V stroke LT0 ! .9913 g 2432 4097 M -76 1 V stroke LT0 ! .9815 g 2258 4063 M 98 35 V stroke LT0 ! .6943 g 2712 3294 M 33 -90 V stroke LT0 ! .9473 g 2705 4060 M 75 -144 V stroke LT0 ! .9197 g 2682 3884 M 98 32 V stroke LT0 ! .9379 g 4544 3922 M -76 55 V stroke LT0 ! .9664 g 4567 4102 M -99 -125 V stroke LT0 ! .7754 g 4498 3457 M -76 58 V stroke LT0 ! .8192 g 4521 3702 M -99 -187 V stroke LT0 ! .9732 g 2606 4035 M 99 25 V stroke LT0 ! .884 g 2682 3884 M 75 -179 V stroke LT0 ! .8536 g 2659 3696 M 98 9 V stroke LT0 ! .434 g 4242 2524 M -10 -15 V stroke LT0 ! .3936 g 5898 2532 M 75 -326 V stroke LT0 ! .4096 g 5875 2542 M 98 -336 V stroke LT0 ! .8649 g 4521 3702 M -76 67 V stroke LT0 ! .9028 g 4544 3922 M -99 -153 V stroke LT0 ! .9862 g 4642 4054 M -75 48 V stroke LT0 ! .8165 g 2659 3696 M 75 -207 V stroke LT0 ! .785 g 2636 3503 M 98 -14 V stroke LT0 ! .557 g 1401 2922 M -76 -244 V stroke LT0 ! .5629 g 1424 3006 M -99 -328 V stroke LT0 ! .9847 g 2606 4035 M -75 82 V stroke LT0 ! .9975 g 2432 4097 M 99 20 V stroke ! LT1 ! .3223 g 3913 2185 M -75 -52 V stroke ! LT1 ! .3272 g 4012 2232 M -174 -99 V stroke ! LT1 ! .3034 g 3739 2112 M 99 21 V stroke LT0 ! .9811 g 4990 4041 M -75 22 V stroke LT0 ! .9891 g 4816 4083 M 99 -20 V stroke LT0 ! .9896 g 2334 4074 M -76 -11 V stroke LT0 ! .9738 g 2175 4019 M 83 44 V stroke ! LT1 ! .783 g 1702 3526 M -35 -59 V stroke LT0 ! .9976 g 4816 4083 M -75 24 V stroke LT0 ! .9892 g 4642 4054 M 99 53 V stroke ! LT1 ! .4053 g 3044 2359 M 1 -1 V stroke LT0 ! .9455 g 2606 4035 M 76 -151 V stroke LT0 ! .9196 g 2583 3866 M 99 18 V stroke LT0 ! .6862 g 4496 3214 M -21 4 V stroke LT0 ! .7278 g 4573 3426 M -98 -208 V stroke LT0 ! .7531 g 2636 3503 M 76 -209 V stroke LT0 ! .7264 g 2613 3331 M 99 -37 V stroke LT0 ! .7699 g 4573 3426 M -75 31 V stroke LT0 ! .8097 g 4596 3654 M -98 -197 V stroke LT0 ! .9294 g 4619 3875 M -75 47 V stroke LT0 ! .9577 g 4642 4054 M -98 -132 V stroke ! LT1 ! .3318 g 3313 2171 M 11 -7 V stroke LT0 ! .9744 g 2508 4015 M 98 20 V stroke LT0 ! .8534 g 4596 3654 M -75 48 V stroke LT0 ! .8915 g 4619 3875 M -98 -173 V stroke ! LT1 ! .9802 g 2237 4039 M -12 -5 V stroke LT0 ! .9798 g 4718 4009 M -76 45 V stroke LT0 ! .8892 g 2583 3866 M 76 -170 V stroke LT0 ! .8636 g 2560 3698 M 99 -2 V stroke LT0 ! .9873 g 2508 4015 M -76 82 V stroke LT0 ! .9994 g 2334 4074 M 98 23 V stroke ! LT1 ! .3224 g 3815 2157 M -76 -45 V stroke ! LT1 ! .3086 g 3668 2112 M 71 0 V stroke LT0 ! .6312 g 4527 3013 M -1 -2 V stroke LT0 ! .7213 g 2613 3331 M 39 -101 V stroke LT0 ! .7036 g 2590 3195 M 4 -3 V stroke LT0 ! .8322 g 2560 3698 M 76 -195 V stroke LT0 ! .8064 g 2537 3530 M 99 -27 V stroke LT0 ! .9485 g 2508 4015 M 75 -149 V stroke LT0 ! .9285 g 2485 3872 M 98 -6 V stroke LT0 ! .9831 g 5066 4006 M -76 35 V stroke LT0 ! .9909 g 4892 4047 M 98 -6 V stroke LT0 ! .5319 g 1378 2807 M -76 -235 V stroke LT0 ! .5454 g 1401 2922 M -99 -350 V stroke LT0 ! .9241 g 4695 3834 M -76 41 V stroke LT0 ! .9515 g 4718 4009 M -99 -134 V stroke LT0 ! .976 g 2409 3991 M 99 24 V stroke LT0 ! .9989 g 4892 4047 M -76 36 V stroke LT0 ! .9882 g 4718 4009 M 98 74 V stroke LT0 ! .85 g 4672 3622 M -76 32 V stroke LT0 ! .886 g 4695 3834 M -99 -180 V stroke LT0 ! .7736 g 4649 3407 M -76 19 V stroke LT0 ! .8103 g 4672 3622 M -99 -196 V stroke ! LT1 ! .3767 g 4088 2305 M -76 -73 V stroke ! LT1 ! .3898 g 4186 2386 M 4012 2232 L stroke ! LT1 ! .3471 g 3913 2185 M 99 47 V stroke LT0 ! .7397 g 4649 3407 M -87 -181 V stroke LT0 ! .975 g 4793 3968 M -75 41 V stroke LT0 ! .9881 g 2409 3991 M -75 83 V stroke LT0 ! .9976 g 2235 4039 M 99 35 V stroke LT0 ! .7797 g 2537 3530 M 76 -199 V stroke LT0 ! .7591 g 2514 3383 M 99 -52 V stroke LT0 ! .9029 g 2485 3872 M 75 -174 V stroke LT0 ! .881 g 2462 3720 M 98 -22 V stroke LT0 ! .5281 g 5822 2847 M 76 -315 V stroke LT0 ! .537 g 5799 2827 M 99 -295 V stroke LT0 ! .4161 g 5875 2542 M 75 -365 V stroke LT0 ! .4165 g 5852 2486 M 98 -309 V stroke LT0 ! .6318 g 4529 3013 M -2 0 V stroke ! LT1 ! .3431 g 3716 2157 M -39 -23 V stroke ! LT1 ! .3672 g 3989 2260 M -76 -75 V stroke ! LT1 ! .3413 g 3815 2157 M 98 28 V stroke LT0 ! .956 g 2485 3872 M -76 119 V stroke LT0 ! .9805 g 2311 3984 M 98 7 V stroke LT0 ! .921 g 4770 3796 M -75 38 V stroke LT0 ! .9476 g 4793 3968 M -98 -134 V stroke ! LT1 ! .4055 g 3045 2359 M -1 0 V stroke LT0 ! .9777 g 5142 3953 M -76 53 V stroke LT0 ! .9907 g 4967 4016 M 99 -10 V stroke LT0 ! .9426 g 2386 3876 M 99 -4 V stroke LT0 ! .99 g 2311 3984 M -76 55 V stroke LT0 ! .9932 g 2136 4005 M 99 34 V stroke LT0 ! .6928 g 1499 3227 M -75 -221 V stroke LT0 ! .6951 g 1522 3295 M -98 -289 V stroke LT0 ! .9986 g 4967 4016 M -75 31 V stroke LT0 ! .9856 g 4793 3968 M 99 79 V stroke LT0 ! .853 g 4747 3602 M -75 20 V stroke LT0 ! .885 g 4770 3796 M -98 -174 V stroke LT0 ! .8553 g 2462 3720 M 75 -190 V stroke LT0 ! .8346 g 2439 3574 M 98 -44 V stroke LT0 ! .9732 g 4869 3936 M -76 32 V stroke LT0 ! .7857 g 4725 3412 M -76 -5 V stroke LT0 ! .8164 g 4747 3602 M -98 -195 V stroke ! LT1 ! .3669 g 3890 2237 M -75 -80 V stroke ! LT1 ! .3465 g 3716 2157 M 99 0 V stroke LT0 ! .7522 g 2514 3383 M 52 -129 V stroke LT0 ! .7612 g 4725 3412 M -81 -163 V stroke LT0 ! .9929 g 2212 3980 M -76 25 V stroke LT0 ! .983 g 2038 3946 M 98 59 V stroke LT0 ! .9753 g 5217 3930 M -75 23 V stroke LT0 ! .9808 g 5043 3961 M 99 -8 V stroke LT0 ! .9208 g 2386 3876 M 76 -156 V stroke LT0 ! .9031 g 2363 3742 M 99 -22 V stroke LT0 ! .9672 g 2386 3876 M -75 108 V stroke LT0 ! .9898 g 2212 3980 M 99 4 V stroke LT0 ! .9235 g 4846 3779 M -76 17 V stroke LT0 ! .9466 g 4869 3936 M -99 -140 V stroke ! LT1 ! .9253 g 1777 3734 M -1 -2 V stroke ! LT1 ! .4919 g 4360 2580 M -75 -95 V stroke ! LT1 ! .5137 g 4459 2698 M 4285 2485 L stroke ! LT1 ! .4448 g 4186 2386 M 99 99 V stroke LT0 ! .9577 g 2288 3886 M 98 -10 V stroke LT0 ! .8139 g 2439 3574 M 75 -191 V stroke LT0 ! .7978 g 2416 3447 M 98 -64 V stroke ! LT1 ! .4558 g 4262 2474 M -76 -88 V stroke ! LT1 ! .4145 g 4088 2305 M 98 81 V stroke LT0 ! .9938 g 5043 3961 M -76 55 V stroke LT0 ! .9862 g 4869 3936 M 98 80 V stroke LT0 ! .9875 g 2114 3967 M -76 -21 V stroke ! LT1 ! .9844 g 2122 3963 M -3 -1 V stroke LT0 ! .9744 g 2032 3942 M 6 4 V stroke LT0 ! .41 g 5852 2486 M 75 -395 V stroke LT0 ! .3968 g 5829 2372 M 98 -281 V stroke LT0 ! .5451 g 2750 2718 M 1 -3 V stroke LT0 ! .5701 g 2714 2737 M 10 -11 V stroke ! LT1 ! .4333 g 4163 2408 M -75 -103 V stroke ! LT1 ! .3969 g 3989 2260 M 99 45 V stroke LT0 ! .8626 g 4823 3597 M -76 5 V stroke LT0 ! .8915 g 4846 3779 M -99 -177 V stroke LT0 ! .9752 g 4945 3912 M -76 24 V stroke LT0 ! .5265 g 4441 2696 M -58 -84 V stroke LT0 ! .6798 g 2544 3033 M 11 -11 V stroke ! LT1 ! .5479 g 2771 2660 M 19 -24 V stroke LT0 ! .6444 g 5746 3094 M 76 -247 V stroke LT0 ! .6609 g 5723 3107 M 99 -260 V stroke ! LT1 ! .3775 g 3792 2232 M -76 -75 V stroke ! LT1 ! .3564 g 3691 2168 M 25 -11 V stroke ! LT1 ! .9442 g 1841 3813 M 77 52 V stroke LT0 ! .6798 g 1477 3139 M -76 -217 V stroke LT0 ! .6869 g 1499 3227 M -98 -305 V stroke LT0 ! .8824 g 2363 3742 M 76 -168 V stroke LT0 ! .8673 g 2340 3620 M 99 -46 V stroke LT0 ! .8066 g 4800 3431 M -75 -19 V stroke LT0 ! .8319 g 4823 3597 M -98 -185 V stroke LT0 ! .6176 g 4557 2839 M -6 -7 V stroke LT0 ! .9803 g 2288 3886 M -76 94 V stroke LT0 ! .9974 g 2114 3967 M 98 13 V stroke ! LT1 ! .4204 g 4065 2348 M -76 -88 V stroke ! LT1 ! .3928 g 3890 2237 M 99 23 V stroke LT0 ! .9564 g 1916 3865 M -75 -52 V stroke LT0 ! .9672 g 2015 3937 M 1841 3813 L stroke LT0 ! .9745 g 5293 3884 M -76 46 V stroke LT0 ! .985 g 5119 3937 M 98 -7 V stroke LT0 ! .9905 g 5119 3937 M -76 24 V stroke LT0 ! .9829 g 4945 3912 M 98 49 V stroke LT0 ! .8065 g 1598 3475 M -76 -180 V stroke LT0 ! .94 g 2288 3886 M 75 -144 V stroke LT0 ! .9269 g 2265 3772 M 98 -30 V stroke LT0 ! .9319 g 4922 3767 M -76 12 V stroke LT0 ! .9521 g 4945 3912 M -99 -133 V stroke LT0 ! .553 g 5799 2827 M 76 -285 V stroke LT0 ! .5664 g 5776 2827 M 99 -285 V stroke LT0 ! .9743 g 2189 3897 M 99 -11 V stroke LT0 ! .786 g 2416 3447 M 71 -170 V stroke LT0 ! .7806 g 2393 3354 M 80 -72 V stroke LT0 ! .7861 g 4800 3431 M -82 -160 V stroke LT0 ! .9798 g 5020 3890 M -75 22 V stroke LT0 ! .8802 g 4899 3612 M -76 -15 V stroke LT0 ! .903 g 4922 3767 M -99 -170 V stroke ! LT1 ! .4223 g 3966 2329 M -76 -92 V stroke ! LT1 ! .3979 g 3792 2232 M 98 5 V stroke LT0 ! .7343 g 5671 3298 M 75 -204 V stroke LT0 ! .7513 g 5648 3313 M 98 -219 V stroke LT0 ! .9914 g 2189 3897 M -75 70 V stroke LT0 ! .9989 g 2015 3937 M 99 30 V stroke LT0 ! .963 g 5368 3815 M -75 69 V stroke LT0 ! .9836 g 5194 3911 M 99 -27 V stroke LT0 ! .8512 g 2340 3620 M 76 -173 V stroke LT0 ! .8416 g 2317 3521 M 99 -74 V stroke LT0 ! .6453 g 1454 2991 M -76 -184 V stroke LT0 ! .6664 g 1477 3139 M -99 -332 V stroke LT0 ! .9941 g 5194 3911 M -75 26 V stroke LT0 ! .9875 g 5020 3890 M 99 47 V stroke LT0 ! .9083 g 1719 3679 M -12 -22 V stroke ! LT1 ! .877 g 1681 3585 M -14 -20 V stroke LT0 ! .9118 g 2265 3772 M 75 -152 V stroke LT0 ! .8997 g 2242 3662 M 98 -42 V stroke LT0 ! .8334 g 4876 3462 M -76 -31 V stroke LT0 ! .8549 g 4899 3612 M -99 -181 V stroke LT0 ! .9413 g 4997 3754 M -75 13 V stroke LT0 ! .9597 g 5020 3890 M -98 -123 V stroke ! LT1 ! .519 g 4337 2590 M -75 -116 V stroke ! LT1 ! .5029 g 4360 2580 M -98 -106 V stroke ! LT1 ! .4745 g 4163 2408 M 99 66 V stroke LT0 ! .9612 g 2265 3772 M -76 125 V stroke LT0 ! .985 g 2091 3881 M 98 16 V stroke LT0 ! .9393 g 5444 3717 M -76 98 V stroke LT0 ! .9735 g 5270 3871 M 98 -56 V stroke ! LT1 ! .9774 g 5266 3871 M 11 -6 V stroke ! LT1 ! .5551 g 4436 2689 M -76 -109 V stroke ! LT1 ! .5437 g 4459 2698 M -99 -118 V stroke LT0 ! .9533 g 2166 3805 M 99 -33 V stroke LT0 ! .9925 g 2091 3881 M -76 56 V stroke LT0 ! .9869 g 1916 3865 M 99 72 V stroke LT0 ! .8313 g 5572 3517 M 99 -219 V stroke ! LT1 ! .5705 g 2771 2660 M -76 101 V stroke ! LT1 ! .6241 g 2597 2898 M 98 -137 V stroke LT0 ! .6664 g 2566 2961 M 12 -16 V stroke LT0 ! .9841 g 5096 3864 M -76 26 V stroke ! LT1 ! .5983 g 4534 2805 M -75 -107 V stroke LT0 ! .5877 g 4539 2813 M -80 -115 V stroke ! LT1 ! .6243 g 4633 2942 M 4459 2698 L stroke LT0 ! .6867 g 2537 3048 M 5 -9 V stroke ! LT1 ! .4317 g 3868 2324 M -76 -92 V stroke ! LT1 ! .4121 g 3727 2256 M 65 -24 V stroke LT0 ! .6698 g 5723 3107 M 76 -280 V stroke LT0 ! .6854 g 5701 3116 M 98 -289 V stroke ! LT1 ! .6765 g 5703 3108 M 96 -281 V stroke ! LT1 ! .7945 g 5625 3336 M 77 -224 V stroke ! LT1 ! .4985 g 4239 2519 M -76 -111 V stroke ! LT1 ! .4569 g 4065 2348 M 98 60 V stroke LT0 ! .7936 g 1575 3372 M -76 -145 V stroke LT0 ! .8042 g 1598 3475 M -99 -248 V stroke LT0 ! .9098 g 5520 3623 M -76 94 V stroke ! LT1 ! .9712 g 5322 3825 M 4 -4 V stroke ! LT1 ! .9386 g 5403 3753 M 8 -7 V stroke LT0 ! .9873 g 1992 3880 M -76 -15 V stroke LT0 ! .9664 g 1818 3799 M 98 66 V stroke LT0 ! .8812 g 5520 3623 M 34 -76 V stroke ! LT1 ! .5521 g 2787 2642 M -16 18 V stroke ! LT1 ! .5926 g 2673 2797 M 98 -137 V stroke LT0 ! .7916 g 2393 3354 M 27 -57 V stroke LT0 ! .5667 g 5776 2827 M 76 -341 V stroke LT0 ! .56 g 5753 2740 M 99 -254 V stroke LT0 ! .9369 g 1795 3750 M -76 -71 V stroke LT0 ! .9347 g 1818 3799 M -99 -120 V stroke LT0 ! .6652 g 4656 3002 M -58 -95 V stroke LT0 ! .9941 g 5270 3871 M -76 40 V stroke LT0 ! .9907 g 5096 3864 M 98 47 V stroke LT0 ! .9017 g 4974 3624 M -75 -12 V stroke LT0 ! .9185 g 4997 3754 M -98 -142 V stroke LT0 ! .9752 g 1894 3845 M -76 -46 V stroke ! LT1 ! .4838 g 4140 2466 M -75 -118 V stroke ! LT1 ! .4499 g 3966 2329 M 99 19 V stroke LT0 ! .9299 g 5421 3746 M 99 -123 V stroke LT0 ! .8018 g 4853 3342 M -63 -48 V stroke LT0 ! .8141 g 4876 3462 M -95 -171 V stroke LT0 ! .8334 g 2317 3521 M 76 -167 V stroke LT0 ! .8294 g 2294 3445 M 99 -91 V stroke LT0 ! .9771 g 2166 3805 M -75 76 V stroke LT0 ! .9928 g 1992 3880 M 99 1 V stroke ! LT1 ! .6046 g 2748 2719 M 11 -16 V stroke LT0 ! .954 g 5073 3756 M -76 -2 V stroke LT0 ! .9657 g 5096 3864 M -99 -110 V stroke LT0 ! .8901 g 2242 3662 M 75 -141 V stroke LT0 ! .8869 g 2219 3591 M 98 -70 V stroke LT0 ! .9899 g 5171 3850 M -75 14 V stroke LT0 ! .6946 g 4687 3055 M -31 -53 V stroke LT0 ! .7499 g 4754 3171 M -4 -7 V stroke LT0 ! .9412 g 2166 3805 M 76 -143 V stroke LT0 ! .9355 g 2143 3723 M 99 -61 V stroke LT0 ! .9764 g 2068 3821 M 98 -16 V stroke LT0 ! .8653 g 4951 3502 M -75 -40 V stroke LT0 ! .8802 g 4974 3624 M -98 -162 V stroke ! LT1 ! .4854 g 4042 2442 M -76 -113 V stroke ! LT1 ! .4561 g 3868 2324 M 98 5 V stroke LT0 ! .9885 g 5345 3821 M -75 50 V stroke LT0 ! .9933 g 5171 3850 M 99 21 V stroke ! LT1 ! .4777 g 3758 2344 M -5 -6 V stroke LT0 ! .5468 g 5753 2740 M 76 -368 V stroke LT0 ! .5328 g 5730 2622 M 99 -250 V stroke LT0 ! .7774 g 1552 3275 M -75 -136 V stroke LT0 ! .7866 g 1575 3372 M -98 -233 V stroke LT0 ! .8882 g 1674 3579 M -76 -104 V stroke LT0 ! .8902 g 1696 3646 M -98 -171 V stroke LT0 ! .7678 g 5648 3313 M 75 -206 V stroke LT0 ! .7867 g 5625 3336 M 98 -229 V stroke LT0 ! .9921 g 2068 3821 M -76 59 V stroke LT0 ! .996 g 1894 3845 M 98 35 V stroke LT0 ! .7558 g 4768 3185 M -14 -14 V stroke LT0 ! .813 g 4853 3342 M -18 -31 V stroke LT0 ! .927 g 5050 3655 M -76 -31 V stroke LT0 ! .9372 g 5073 3756 M -99 -132 V stroke LT0 ! .9954 g 5247 3822 M -76 28 V stroke LT0 ! .9781 g 5073 3756 M 98 94 V stroke LT0 ! .9744 g 5421 3746 M -76 75 V stroke LT0 ! .9905 g 5247 3822 M 98 -1 V stroke ! LT1 ! .6252 g 4511 2814 M -75 -125 V stroke ! LT1 ! .6097 g 4534 2805 M -98 -116 V stroke ! LT1 ! .5711 g 4337 2590 M 99 99 V stroke LT0 ! .9728 g 5148 3769 M -75 -13 V stroke ! LT1 ! .5922 g 4413 2721 M -76 -131 V stroke ! LT1 ! .5429 g 4239 2519 M 98 71 V stroke ! LT1 ! .6462 g 2673 2797 M -76 101 V stroke ! LT1 ! .701 g 2498 3040 M 99 -142 V stroke LT0 ! .992 g 1969 3805 M -75 40 V stroke LT0 ! .9773 g 1795 3750 M 99 95 V stroke ! LT1 ! .4972 g 3943 2447 M -75 -123 V stroke ! LT1 ! .4743 g 3770 2357 M 98 -33 V stroke LT0 ! .9484 g 1772 3717 M -76 -71 V stroke LT0 ! .9426 g 1795 3750 M -99 -104 V stroke LT0 ! .9721 g 1871 3764 M -76 -14 V stroke LT0 ! .9708 g 2143 3723 M -75 98 V stroke LT0 ! .9882 g 1969 3805 M 99 16 V stroke LT0 ! .8483 g 5572 3517 M 76 -204 V stroke LT0 ! .8614 g 5549 3516 M 99 -203 V stroke LT0 ! .8339 g 2294 3445 M 65 -125 V stroke LT0 ! .841 g 2272 3400 M 71 -73 V stroke LT0 ! .7348 g 1529 3124 M -75 -133 V stroke LT0 ! .7564 g 1552 3275 M -98 -284 V stroke ! LT1 ! .6667 g 4610 2925 M -76 -120 V stroke ! LT1 ! .657 g 4633 2942 M -99 -137 V stroke LT0 ! .6988 g 5701 3116 M 75 -289 V stroke LT0 ! .691 g 5678 3025 M 98 -198 V stroke LT0 ! .8416 g 4928 3405 M -75 -63 V stroke LT0 ! .8508 g 4951 3502 M -98 -160 V stroke LT0 ! .8828 g 2219 3591 M 75 -146 V stroke LT0 ! .8821 g 2196 3530 M 98 -85 V stroke ! LT1 ! .57 g 4314 2648 M -75 -129 V stroke ! LT1 ! .5254 g 4140 2466 M 99 53 V stroke ! LT1 ! .6197 g 2748 2719 M -75 78 V stroke ! LT1 ! .6718 g 2574 2949 M 99 -152 V stroke LT0 ! .9323 g 2143 3723 M 76 -132 V stroke LT0 ! .9298 g 2120 3654 M 99 -63 V stroke LT0 ! .9693 g 2045 3757 M 98 -34 V stroke LT0 ! .9478 g 5497 3642 M -76 104 V stroke LT0 ! .9805 g 5323 3790 M 98 -44 V stroke ! LT1 ! .9894 g 5247 3822 M 78 -34 V stroke ! LT1 ! .716 g 4708 3051 M -75 -109 V stroke ! LT1 ! .7116 g 4716 3061 M -83 -119 V stroke LT0 ! .866 g 1651 3472 M -76 -100 V stroke LT0 ! .8776 g 1674 3579 M -99 -207 V stroke ! LT1 ! .5583 g 4216 2601 M -76 -135 V stroke ! LT1 ! .5192 g 4042 2442 M 98 24 V stroke LT0 ! .9098 g 5572 3517 M -75 125 V stroke LT0 ! .9582 g 5398 3732 M 99 -90 V stroke LT0 ! .9012 g 5027 3550 M -76 -48 V stroke LT0 ! .9121 g 5050 3655 M -99 -153 V stroke LT0 ! .9233 g 5474 3642 M 98 -125 V stroke ! LT1 ! .6087 g 2754 2715 M -6 4 V stroke ! LT1 ! .6507 g 2650 2872 M 98 -153 V stroke LT0 ! .9868 g 2045 3757 M -76 48 V stroke LT0 ! .9868 g 1871 3764 M 98 41 V stroke LT0 ! .9967 g 5323 3790 M -76 32 V stroke LT0 ! .99 g 5148 3769 M 99 53 V stroke LT0 ! .9534 g 5125 3671 M -75 -16 V stroke LT0 ! .9626 g 5148 3769 M -98 -114 V stroke ! LT1 ! .5243 g 3845 2475 M -73 -114 V stroke ! LT1 ! .6098 g 2975 2623 M 1 -1 V stroke LT0 ! .9869 g 5224 3751 M -76 18 V stroke ! LT1 ! .5588 g 4117 2578 M -75 -136 V stroke ! LT1 ! .5264 g 3943 2447 M 99 -5 V stroke LT0 ! .9832 g 1946 3732 M -75 32 V stroke LT0 ! .9779 g 1772 3717 M 99 47 V stroke LT0 ! .8486 g 4928 3405 M -48 -78 V stroke LT0 ! .6842 g 5678 3025 M 75 -285 V stroke LT0 ! .6826 g 5655 2960 M 98 -220 V stroke LT0 ! .9445 g 1749 3651 M -75 -72 V stroke LT0 ! .9464 g 1772 3717 M -98 -138 V stroke ! LT1 ! .9563 g 1763 3654 M -2 -2 V stroke LT0 ! .8023 g 5625 3336 M 76 -220 V stroke LT0 ! .8055 g 5602 3292 M 99 -176 V stroke LT0 ! .9667 g 2120 3654 M -75 103 V stroke LT0 ! .9831 g 1946 3732 M 99 25 V stroke LT0 ! .9909 g 5398 3732 M -75 58 V stroke LT0 ! .9935 g 5224 3751 M 99 39 V stroke LT0 ! .8478 g 1628 3375 M -76 -100 V stroke LT0 ! .8569 g 1651 3472 M -99 -197 V stroke LT0 ! .929 g 2196 3530 M -76 124 V stroke LT0 ! .9625 g 2022 3681 M 98 -27 V stroke LT0 ! .9821 g 1848 3725 M -76 -8 V stroke ! LT1 ! .9751 g 1851 3724 M -79 -7 V stroke LT0 ! .8849 g 2272 3400 M -76 130 V stroke LT0 ! .9314 g 2097 3606 M 99 -76 V stroke LT0 ! .8858 g 5004 3465 M -76 -60 V stroke LT0 ! .8921 g 5027 3550 M -99 -145 V stroke LT0 ! .8528 g 2305 3344 M -33 56 V stroke LT0 ! .8881 g 2173 3485 M 99 -85 V stroke LT0 ! .8761 g 2249 3388 M 23 -27 V stroke LT0 ! .8532 g 2295 3335 M 1 -2 V stroke ! LT1 ! .5586 g 3407 2472 M 7 -7 V stroke ! LT1 ! .7266 g 2574 2949 M -76 91 V stroke ! LT1 ! .7707 g 2426 3153 M 72 -113 V stroke ! LT1 ! .7699 g 2402 3172 M 96 -132 V stroke LT0 ! .979 g 2022 3681 M -76 51 V stroke LT0 ! .9874 g 1848 3725 M 98 7 V stroke ! LT1 ! .7022 g 4587 2953 M -76 -139 V stroke ! LT1 ! .6823 g 4610 2925 M -99 -111 V stroke ! LT1 ! .6463 g 4413 2721 M 98 93 V stroke LT0 ! .9936 g 5300 3732 M -76 19 V stroke LT0 ! .9776 g 5125 3671 M 99 80 V stroke LT0 ! .9376 g 5103 3593 M -76 -43 V stroke LT0 ! .9425 g 5125 3671 M -98 -121 V stroke ! LT1 ! .5711 g 4019 2575 M -76 -128 V stroke ! LT1 ! .5458 g 3845 2475 M 98 -28 V stroke ! LT1 ! .6714 g 4488 2864 M -75 -143 V stroke ! LT1 ! .6193 g 4314 2648 M 99 73 V stroke LT0 ! .8803 g 5549 3516 M 76 -180 V stroke LT0 ! .8858 g 5526 3481 M 99 -145 V stroke ! LT1 ! .7398 g 4686 3053 M -76 -128 V stroke ! LT1 ! .7257 g 4708 3051 M -98 -126 V stroke LT0 ! .9717 g 5474 3642 M -76 90 V stroke LT0 ! .9909 g 5300 3732 M 98 0 V stroke LT0 ! .6686 g 5655 2960 M 75 -338 V stroke LT0 ! .6464 g 5632 2807 M 98 -185 V stroke LT0 ! .9757 g 5201 3685 M -76 -14 V stroke LT0 ! .8105 g 1605 3250 M -76 -126 V stroke LT0 ! .8262 g 1628 3375 M -99 -251 V stroke ! LT1 ! .7027 g 2650 2872 M -76 77 V stroke ! LT1 ! .7545 g 2475 3102 M 99 -153 V stroke ! LT1 ! .6502 g 4390 2796 M -76 -148 V stroke ! LT1 ! .6028 g 4216 2601 M 98 47 V stroke ! LT1 ! .7841 g 4784 3168 M -76 -117 V stroke ! LT1 ! .7894 g 4832 3218 M 4708 3051 L stroke LT0 ! .9273 g 1726 3569 M -75 -97 V stroke LT0 ! .933 g 1749 3651 M -98 -179 V stroke LT0 ! .9365 g 5549 3516 M -75 126 V stroke LT0 ! .9725 g 5375 3678 M 99 -36 V stroke LT0 ! .9419 g 5451 3608 M 98 -92 V stroke ! LT1 ! .9507 g 5375 3678 M 174 -162 V stroke LT0 ! .7976 g 5602 3292 M 76 -267 V stroke LT0 ! .7962 g 5579 3227 M 99 -202 V stroke LT0 ! .9649 g 2097 3606 M -75 75 V stroke LT0 ! .9817 g 1923 3686 M 99 -5 V stroke ! LT1 ! .6911 g 2668 2859 M -18 13 V stroke ! LT1 ! .7345 g 2551 3028 M 99 -156 V stroke ! LT1 ! .6402 g 4291 2750 M -75 -149 V stroke ! LT1 ! .5979 g 4117 2578 M 99 23 V stroke LT0 ! .9902 g 1923 3686 M -75 39 V stroke LT0 ! .9803 g 1749 3651 M 99 74 V stroke LT0 ! .9918 g 5375 3678 M -75 54 V stroke LT0 ! .9916 g 5201 3685 M 99 47 V stroke LT0 ! .9774 g 1825 3655 M -76 -4 V stroke LT0 ! .8925 g 4981 3415 M -53 -56 V stroke LT0 ! .886 g 5004 3465 M -86 -114 V stroke ! LT1 ! .6101 g 2976 2623 M -1 0 V stroke ! LT1 ! .5966 g 3920 2606 M -75 -131 V stroke ! LT1 ! .5603 g 3831 2480 M 14 -5 V stroke LT0 ! .9345 g 2173 3485 M -76 121 V stroke LT0 ! .965 g 1999 3623 M 98 -17 V stroke LT0 ! .8987 g 2249 3388 M -76 97 V stroke LT0 ! .9372 g 2075 3560 M 98 -75 V stroke LT0 ! .9292 g 5080 3526 M -76 -61 V stroke LT0 ! .9313 g 5103 3593 M -99 -128 V stroke ! LT1 ! .6404 g 4193 2725 M -76 -147 V stroke ! LT1 ! .6034 g 4019 2575 M 98 3 V stroke LT0 ! .9923 g 5277 3677 M -76 8 V stroke LT0 ! .9708 g 5103 3593 M 98 92 V stroke LT0 ! .9026 g 1703 3444 M -75 -69 V stroke LT0 ! .9182 g 1726 3569 M -98 -194 V stroke LT0 ! .9683 g 5178 3616 M -75 -23 V stroke LT0 ! .8807 g 2261 3370 M -12 18 V stroke LT0 ! .9111 g 2150 3480 M 99 -92 V stroke LT0 ! .9818 g 1999 3623 M -76 63 V stroke LT0 ! .9874 g 1825 3655 M 98 31 V stroke LT0 ! .978 g 5451 3608 M -76 70 V stroke LT0 ! .9925 g 5277 3677 M 98 1 V stroke LT0 ! .8889 g 5526 3481 M 76 -189 V stroke LT0 ! .8886 g 5504 3422 M 98 -130 V stroke LT0 ! .7945 g 5579 3227 M 76 -267 V stroke LT0 ! .7833 g 5556 3122 M 99 -162 V stroke LT0 ! .9474 g 5526 3481 M -75 127 V stroke LT0 ! .9792 g 5352 3625 M 99 -17 V stroke LT0 ! .9677 g 2075 3560 M -76 63 V stroke LT0 ! .9807 g 1900 3624 M 99 -1 V stroke LT0 ! .9863 g 1900 3624 M -75 31 V stroke LT0 ! .9717 g 1726 3569 M 99 86 V stroke LT0 ! .95 g 5428 3561 M 98 -80 V stroke ! LT1 ! .6505 g 4094 2721 M -75 -146 V stroke ! LT1 ! .6219 g 3920 2606 M 99 -31 V stroke LT0 ! .9708 g 1802 3593 M -76 -24 V stroke ! LT1 ! .9638 g 1801 3592 M -75 -23 V stroke ! LT1 ! .9783 g 1900 3624 M -99 -32 V stroke ! LT1 ! .8131 g 4761 3174 M -75 -121 V stroke ! LT1 ! .7982 g 4784 3168 M -98 -115 V stroke ! LT1 ! .7597 g 4587 2953 M 99 100 V stroke ! LT1 ! .7806 g 4663 3085 M -76 -132 V stroke ! LT1 ! .7272 g 4488 2864 M 99 89 V stroke LT0 ! .8702 g 1680 3315 M -75 -65 V stroke LT0 ! .8869 g 1703 3444 M -98 -194 V stroke ! LT1 ! .7535 g 4564 3008 M -76 -144 V stroke ! LT1 ! .7022 g 4390 2796 M 98 68 V stroke ! LT1 ! .8336 g 4817 3215 M -33 -47 V stroke ! LT1 ! .8309 g 4825 3217 M -41 -49 V stroke ! LT1 ! .7862 g 2551 3028 M -76 74 V stroke ! LT1 ! .8044 g 2453 3132 M 22 -30 V stroke ! LT1 ! .804 g 2445 3138 M 30 -36 V stroke LT0 ! .9937 g 5352 3625 M -75 52 V stroke LT0 ! .9898 g 5178 3616 M 99 61 V stroke LT0 ! .9043 g 4981 3415 M -27 -36 V stroke LT0 ! .7612 g 5556 3122 M 76 -315 V stroke LT0 ! .7377 g 5533 2963 M 99 -156 V stroke ! LT1 ! .7344 g 4466 2944 M -76 -148 V stroke ! LT1 ! .6875 g 4291 2750 M 99 46 V stroke LT0 ! .9496 g 2150 3480 M -75 80 V stroke LT0 ! .972 g 1976 3584 M 99 -24 V stroke LT0 ! .9329 g 5057 3476 M -76 -61 V stroke LT0 ! .9309 g 5080 3526 M -99 -111 V stroke ! LT1 ! .9405 g 5060 3478 M -7 -6 V stroke ! LT1 ! .9247 g 5051 3471 M -70 -56 V stroke LT0 ! .9886 g 5254 3614 M -76 2 V stroke LT0 ! .9661 g 5080 3526 M 98 90 V stroke LT0 ! .9651 g 5155 3554 M -75 -28 V stroke ! LT1 ! .7742 g 2590 3000 M -39 28 V stroke ! LT1 ! .7948 g 2506 3094 M 45 -66 V stroke LT0 ! .985 g 1976 3584 M -76 40 V stroke LT0 ! .9854 g 1802 3593 M 98 31 V stroke LT0 ! .8871 g 5504 3422 M 75 -195 V stroke LT0 ! .8777 g 5481 3324 M 98 -97 V stroke ! LT1 ! .7251 g 4367 2899 M -76 -149 V stroke ! LT1 ! .6827 g 4193 2725 M 98 25 V stroke LT0 ! .9818 g 5428 3561 M -76 64 V stroke LT0 ! .9925 g 5254 3614 M 98 11 V stroke LT0 ! .9298 g 2197 3423 M -47 57 V stroke LT0 ! .9557 g 2052 3528 M 98 -48 V stroke LT0 ! .9423 g 1779 3480 M -76 -36 V stroke LT0 ! .9552 g 1802 3593 M -99 -149 V stroke ! LT1 ! .674 g 3996 2740 M -76 -134 V stroke ! LT1 ! .6369 g 3907 2610 M 13 -4 V stroke LT0 ! .9912 g 1877 3590 M -75 3 V stroke ! LT1 ! .9838 g 1882 3589 M -6 0 V stroke LT0 ! .9497 g 5428 3561 M 76 -139 V stroke LT0 ! .9464 g 5405 3489 M 99 -67 V stroke LT0 ! .9848 g 5329 3580 M 99 -19 V stroke ! LT1 ! .7253 g 4268 2875 M -75 -150 V stroke ! LT1 ! .6875 g 4094 2721 M 99 4 V stroke LT0 ! .9781 g 2052 3528 M -76 56 V stroke LT0 ! .9908 g 1877 3590 M 99 -6 V stroke LT0 ! .9955 g 5329 3580 M -75 34 V stroke LT0 ! .9876 g 5155 3554 M 99 60 V stroke ! LT1 ! .9204 g 2230 3380 M 1 -2 V stroke LT0 ! .9107 g 1756 3358 M -76 -43 V stroke LT0 ! .9257 g 1779 3480 M -99 -165 V stroke LT0 ! .8665 g 5481 3324 M 75 -202 V stroke LT0 ! .8576 g 5458 3228 M 98 -106 V stroke LT0 ! .9868 g 5231 3553 M -76 1 V stroke LT0 ! .9671 g 5057 3476 M 98 78 V stroke LT0 ! .9695 g 2127 3482 M -75 46 V stroke LT0 ! .9833 g 1953 3548 M 99 -20 V stroke ! LT1 ! .8595 g 4784 3209 M -23 -35 V stroke ! LT1 ! .8556 g 4798 3212 M -37 -38 V stroke ! LT1 ! .834 g 4663 3085 M 98 89 V stroke ! LT1 ! .7454 g 2912 2846 M 2 -3 V stroke LT0 ! .944 g 5057 3476 M -61 -62 V stroke LT0 ! .9703 g 5132 3510 M -75 -34 V stroke ! LT1 ! .8517 g 4729 3196 M -66 -111 V stroke ! LT1 ! .8069 g 4564 3008 M 99 77 V stroke ! LT1 ! .7344 g 4170 2868 M -76 -147 V stroke ! LT1 ! .7027 g 3996 2740 M 98 -19 V stroke LT0 ! .9718 g 1855 3505 M -76 -25 V stroke LT0 ! .9783 g 1877 3590 M -98 -110 V stroke LT0 ! .996 g 1953 3548 M -76 42 V stroke LT0 ! .9815 g 5405 3489 M -76 91 V stroke LT0 ! .9948 g 5231 3553 M 98 27 V stroke ! LT1 ! .8324 g 4640 3136 M -76 -128 V stroke ! LT1 ! .7857 g 4466 2944 M 98 64 V stroke LT0 ! .937 g 5405 3489 M 76 -165 V stroke LT0 ! .9304 g 5382 3403 M 99 -79 V stroke LT0 ! .8342 g 5458 3228 M 75 -265 V stroke LT0 ! .8138 g 5435 3083 M 98 -120 V stroke ! LT1 ! .816 g 4541 3080 M -75 -136 V stroke ! LT1 ! .772 g 4367 2899 M 99 45 V stroke LT0 ! .9782 g 5306 3508 M 99 -19 V stroke LT0 ! .9589 g 2203 3418 M -76 64 V stroke LT0 ! .9781 g 2029 3507 M 98 -25 V stroke LT0 ! .0828 g 3367 1095 M 3268 716 L stroke LT0 ! .0838 g 3192 1107 M 76 -391 V stroke LT0 ! .9914 g 5306 3508 M -75 45 V stroke LT0 ! .99 g 5132 3510 M 99 43 V stroke ! LT1 ! .794 g 2853 2935 M -6 0 V stroke LT0 ! .9918 g 2029 3507 M -76 41 V stroke LT0 ! .9895 g 1855 3505 M 98 43 V stroke ! LT1 ! .8074 g 4443 3038 M -76 -139 V stroke ! LT1 ! .7677 g 4268 2875 M 99 24 V stroke LT0 ! .9384 g 1832 3368 M -76 -10 V stroke LT0 ! .9568 g 1855 3505 M -99 -147 V stroke ! LT1 ! .7696 g 4051 2841 M -4 -6 V stroke ! LT1 ! .7186 g 4006 2759 M -10 -19 V stroke ! LT1 ! .7133 g 3994 2740 M 2 0 V stroke LT0 ! .9455 g 2270 3362 M -67 56 V stroke LT0 ! .9696 g 2104 3470 M 99 -52 V stroke LT0 ! .992 g 5208 3504 M -76 6 V stroke LT0 ! .9765 g 5034 3445 M 98 65 V stroke ! LT1 ! .7588 g 3782 2796 M -2 -2 V stroke LT0 ! .9898 g 1930 3492 M -75 13 V stroke LT0 ! .9215 g 5382 3403 M 76 -175 V stroke LT0 ! .9116 g 5359 3302 M 99 -74 V stroke LT0 ! .9716 g 5382 3403 M -76 105 V stroke LT0 ! .9934 g 5208 3504 M 98 4 V stroke LT0 ! .9803 g 5109 3468 M -75 -23 V stroke LT0 ! .9543 g 4935 3364 M 99 81 V stroke ! LT1 ! .8065 g 4344 3008 M -76 -133 V stroke ! LT1 ! .7722 g 4170 2868 M 98 7 V stroke LT0 ! .9887 g 2104 3470 M -75 37 V stroke LT0 ! .9922 g 1930 3492 M 99 15 V stroke LT0 ! .9365 g 2289 3347 M -5 4 V stroke LT0 ! .9604 g 2180 3414 M 83 -49 V stroke LT0 ! .9704 g 5284 3445 M 98 -42 V stroke LT0 ! .9587 g 5011 3407 M -76 -43 V stroke LT0 ! .936 g 4889 3330 M 46 34 V stroke ! LT1 ! .9605 g 5011 3407 M -96 -64 V stroke LT0 ! .8912 g 5359 3302 M 76 -219 V stroke LT0 ! .8717 g 5336 3161 M 99 -78 V stroke ! LT1 ! .8777 g 4640 3136 M 65 50 V stroke LT0 ! .9585 g 1907 3379 M -75 -11 V stroke LT0 ! .9714 g 1930 3492 M -98 -124 V stroke ! LT1 ! .9615 g 2230 3380 M 3 -2 V stroke ! LT1 ! .9396 g 2303 3330 M 4 -3 V stroke LT0 ! .9922 g 5284 3445 M -76 59 V stroke LT0 ! .9958 g 5109 3468 M 99 36 V stroke LT0 ! .9958 g 2006 3465 M -76 27 V stroke ! LT1 ! .8802 g 4665 3169 M -25 -33 V stroke ! LT1 ! .8627 g 4541 3080 M 99 56 V stroke ! LT1 ! .7989 g 4212 2946 M -42 -78 V stroke ! LT1 ! .782 g 4105 2875 M 65 -7 V stroke LT0 ! .9822 g 2180 3414 M -76 56 V stroke LT0 ! .9924 g 2006 3465 M 98 5 V stroke ! LT1 ! .8734 g 4579 3140 M -38 -60 V stroke ! LT1 ! .8514 g 4443 3038 M 98 42 V stroke ! LT1 ! .7921 g 3082 2889 M 6 -9 V stroke LT0 ! .9604 g 5284 3445 M 75 -143 V stroke LT0 ! .9479 g 5261 3334 M 98 -32 V stroke LT0 ! .993 g 5185 3434 M -76 34 V stroke LT0 ! .9848 g 5011 3407 M 98 61 V stroke LT0 ! .9894 g 5185 3434 M 99 11 V stroke LT0 ! .2516 g 3291 1493 M -99 -386 V stroke LT0 ! .2422 g 3117 1460 M 75 -353 V stroke LT0 ! .9742 g 2255 3370 M -75 44 V stroke LT0 ! .9882 g 2081 3438 M 99 -24 V stroke LT0 ! .2462 g 3465 1466 M -98 -371 V stroke LT0 ! .2506 g 3291 1493 M 76 -398 V stroke LT0 ! .985 g 5086 3411 M -75 -4 V stroke LT0 ! .967 g 4912 3342 M 99 65 V stroke ! LT1 ! .8492 g 3005 2989 M -5 -3 V stroke ! LT1 ! .8659 g 4480 3101 M -37 -63 V stroke ! LT1 ! .8463 g 4344 3008 M 99 30 V stroke LT0 ! .9984 g 2081 3438 M -75 27 V stroke LT0 ! .9829 g 1907 3379 M 99 86 V stroke LT0 ! .9724 g 1983 3362 M -76 17 V stroke LT0 ! .9743 g 4988 3380 M -76 -38 V stroke LT0 ! .9284 g 5261 3334 M 75 -173 V stroke LT0 ! .9127 g 5238 3209 M 98 -48 V stroke LT0 ! .9769 g 5261 3334 M -76 100 V stroke LT0 ! .9932 g 5086 3411 M 99 23 V stroke LT0 ! .9702 g 2331 3331 M -76 39 V stroke LT0 ! .9854 g 2157 3404 M 98 -34 V stroke ! LT1 ! .8502 g 4354 3025 M -10 -17 V stroke ! LT1 ! .8462 g 4325 3007 M 19 1 V stroke LT0 ! .9718 g 5162 3355 M 99 -21 V stroke LT0 ! .9994 g 2157 3404 M -76 34 V stroke LT0 ! .9879 g 1983 3362 M 98 76 V stroke LT0 ! .9783 g 2058 3338 M -75 24 V stroke LT0 ! .9881 g 5162 3355 M -76 56 V stroke LT0 ! .9923 g 4988 3380 M 98 31 V stroke LT0 ! .9695 g 2407 3301 M -76 30 V stroke LT0 ! .9817 g 2233 3361 M 98 -30 V stroke ! LT1 ! .8508 g 3003 2991 M 2 -2 V stroke ! LT1 ! .9234 g 2583 3193 M -2 0 V stroke LT0 ! .4017 g 3215 1848 M -98 -388 V stroke LT0 ! .3769 g 3041 1750 M 76 -290 V stroke LT0 ! .9562 g 5162 3355 M 76 -146 V stroke LT0 ! .942 g 5139 3236 M 99 -27 V stroke LT0 ! .9969 g 2233 3361 M -76 43 V stroke LT0 ! .9898 g 2058 3338 M 99 66 V stroke LT0 ! .9922 g 5064 3353 M -76 27 V stroke LT0 ! .9851 g 4889 3330 M 99 50 V stroke LT0 ! .9881 g 5064 3353 M 98 2 V stroke LT0 ! .9816 g 2134 3311 M -76 27 V stroke LT0 ! .9879 g 4965 3334 M -76 -4 V stroke LT0 ! .977 g 4791 3295 M 98 35 V stroke LT0 ! .4103 g 3390 1837 M -99 -344 V stroke LT0 ! .4111 g 3215 1848 M 76 -355 V stroke LT0 ! .3979 g 3564 1796 M -99 -330 V stroke LT0 ! .4059 g 3390 1837 M 75 -371 V stroke LT0 ! .9726 g 2482 3279 M -75 22 V stroke LT0 ! .9821 g 2308 3328 M 99 -27 V stroke ! LT1 ! .8961 g 4176 3055 M -1 -1 V stroke LT0 ! .9943 g 2308 3328 M -75 33 V stroke LT0 ! .9887 g 2134 3311 M 99 50 V stroke LT0 ! .9739 g 5139 3236 M -75 117 V stroke LT0 ! .995 g 4965 3334 M 99 19 V stroke LT0 ! .9862 g 4866 3312 M -75 -17 V stroke LT0 ! .9739 g 4765 3286 M 26 9 V stroke LT0 ! .9624 g 5041 3246 M 98 -10 V stroke ! LT1 ! .9688 g 4495 3208 M -1 -1 V stroke LT0 ! .984 g 2210 3283 M -76 28 V stroke LT0 ! .524 g 3140 2148 M -99 -398 V stroke LT0 ! .4987 g 2966 2047 M 75 -297 V stroke ! LT1 ! .8916 g 3538 3009 M 7 -5 V stroke LT0 ! .9775 g 2558 3257 M -76 22 V stroke LT0 ! .9827 g 2384 3286 M 98 -7 V stroke LT0 ! .9922 g 2384 3286 M -76 42 V stroke LT0 ! .9897 g 2210 3283 M 98 45 V stroke LT0 ! .9835 g 5041 3246 M -76 88 V stroke LT0 ! .9971 g 4866 3312 M 99 22 V stroke ! LT1 ! .9676 g 4388 3189 M -9 -8 V stroke LT0 ! .9745 g 4942 3237 M 99 9 V stroke LT0 ! .985 g 2285 3250 M -75 33 V stroke ! LT1 ! .969 g 4495 3208 M 14 2 V stroke LT0 ! .9881 g 4942 3237 M -76 75 V stroke LT0 ! .9977 g 4768 3286 M 98 26 V stroke LT0 ! .9937 g 2459 3268 M -75 18 V stroke LT0 ! .9875 g 2285 3250 M 99 36 V stroke LT0 ! .9825 g 2633 3235 M -75 22 V stroke LT0 ! .9885 g 2459 3268 M 99 -11 V stroke LT0 ! .5546 g 3314 2165 M -99 -317 V stroke LT0 ! .5488 g 3140 2148 M 75 -300 V stroke LT0 ! .5329 g 3661 2095 M -97 -299 V stroke LT0 ! .5422 g 3488 2142 M 76 -346 V stroke LT0 ! .5502 g 3488 2142 M -98 -305 V stroke LT0 ! .5538 g 3314 2165 M 76 -328 V stroke LT0 ! .6453 g 3064 2436 M -98 -389 V stroke LT0 ! .6261 g 2890 2361 M 76 -314 V stroke LT0 ! .9802 g 4844 3220 M 98 17 V stroke LT0 ! .9858 g 4669 3256 M -124 -34 V stroke ! LT1 ! .9089 g 3506 3034 M -2 -1 V stroke LT0 ! .9822 g 2361 3206 M -76 44 V stroke LT0 ! .9898 g 4844 3220 M -76 66 V stroke LT0 ! .9964 g 4669 3256 M 99 30 V stroke LT0 ! .9791 g 2633 3235 M 108 -30 V stroke LT0 ! .9866 g 2709 3209 M -76 26 V stroke LT0 ! .9921 g 2535 3240 M 98 -5 V stroke LT0 ! .9981 g 2535 3240 M -76 28 V stroke LT0 ! .9883 g 2361 3206 M 98 62 V stroke LT0 ! .9838 g 4745 3203 M 99 17 V stroke LT0 ! .9903 g 4745 3203 M -76 53 V stroke LT0 ! .994 g 4571 3226 M 98 30 V stroke LT0 ! .9846 g 4472 3201 M -75 -3 V stroke LT0 ! .9845 g 4571 3226 M -174 -28 V stroke LT0 ! .9779 g 4311 3183 M 86 15 V stroke LT0 ! .9728 g 2436 3144 M -75 62 V stroke ! LT1 ! .9628 g 3898 3115 M -2 -2 V stroke LT0 ! .6818 g 3238 2476 M -98 -328 V stroke LT0 ! .6706 g 3064 2436 M 76 -288 V stroke LT0 ! .9855 g 4646 3161 M -75 65 V stroke LT0 ! .993 g 4472 3201 M 99 25 V stroke LT0 ! .6475 g 3760 2337 M -99 -242 V stroke LT0 ! .6525 g 3587 2366 M 74 -271 V stroke LT0 ! .9818 g 4646 3161 M 99 42 V stroke LT0 ! .9839 g 2785 3158 M -76 51 V stroke LT0 ! .9845 g 2883 3186 M -174 23 V stroke LT0 ! .984 g 2611 3166 M 98 43 V stroke LT0 ! .9894 g 2611 3166 M -76 74 V stroke LT0 ! .9825 g 2436 3144 M 99 96 V stroke LT0 ! .6885 g 3412 2472 M -98 -307 V stroke LT0 ! .6877 g 3238 2476 M 76 -311 V stroke LT0 ! .961 g 2512 3090 M -76 54 V stroke LT0 ! .7563 g 2989 2662 M -99 -301 V stroke LT0 ! .7363 g 2814 2585 M 76 -224 V stroke LT0 ! .988 g 2959 3184 M -76 2 V stroke LT0 ! .9803 g 2785 3158 M 98 28 V stroke LT0 ! .6619 g 3587 2366 M -99 -224 V stroke LT0 ! .6849 g 3412 2472 M 76 -330 V stroke LT0 ! .9805 g 4200 3176 M -135 -33 V stroke LT0 ! .9767 g 4548 3131 M 98 30 V stroke LT0 ! .9704 g 2686 3093 M -75 73 V stroke LT0 ! .968 g 2512 3090 M 99 76 V stroke LT0 ! .9842 g 4548 3131 M -76 70 V stroke LT0 ! .9957 g 4374 3187 M 98 14 V stroke LT0 ! .9834 g 2860 3141 M -75 17 V stroke LT0 ! .9704 g 2686 3093 M 99 65 V stroke LT0 ! .9439 g 2588 3005 M -76 85 V stroke LT0 ! .836 g 2913 2845 M -99 -260 V stroke LT0 ! .8113 g 2739 2747 M 75 -162 V stroke LT0 ! .9809 g 4275 3106 M -75 70 V stroke LT0 ! .994 g 4374 3187 M -174 -11 V stroke LT0 ! .9882 g 4101 3145 M 99 31 V stroke LT0 ! .7891 g 3163 2713 M -99 -277 V stroke LT0 ! .7755 g 2989 2662 M 75 -226 V stroke LT0 ! .9526 g 2762 3024 M -76 69 V stroke LT0 ! .9464 g 2588 3005 M 98 88 V stroke LT0 ! .8619 g 2739 2747 M -76 119 V stroke LT0 ! .9131 g 2762 3024 M -99 -158 V stroke LT0 ! .907 g 2588 3005 M 75 -139 V stroke LT0 ! .9711 g 4449 3087 M 99 44 V stroke LT0 ! .8764 g 2837 2921 M -98 -174 V stroke LT0 ! .7546 g 3684 2590 M -97 -224 V stroke LT0 ! .7703 g 3511 2664 M 76 -298 V stroke LT0 ! .7386 g 3858 2535 M -98 -198 V stroke LT0 ! .7496 g 3684 2590 M 76 -253 V stroke LT0 ! .9965 g 3034 3157 M -75 27 V stroke LT0 ! .9909 g 3133 3158 M -174 26 V stroke LT0 ! .9912 g 2860 3141 M 99 43 V stroke LT0 ! .9833 g 4101 3145 M -158 -8 V stroke LT0 ! .9923 g 3209 3149 M -76 9 V stroke LT0 ! .9853 g 3228 3148 M -95 10 V stroke LT0 ! .9923 g 3034 3157 M 99 1 V stroke LT0 ! .9826 g 4449 3087 M -75 100 V stroke LT0 ! .9853 g 4275 3106 M 99 81 V stroke LT0 ! .9603 g 4351 3023 M -76 83 V stroke LT0 ! .9658 g 4177 3054 M 98 52 V stroke LT0 ! .9276 g 2837 2921 M -75 103 V stroke LT0 ! .9656 g 2860 3141 M -98 -117 V stroke LT0 ! .9731 g 4177 3054 M -76 91 V stroke LT0 ! .9897 g 4003 3133 M 98 12 V stroke LT0 ! .8043 g 3337 2722 M -99 -246 V stroke LT0 ! .8004 g 3163 2713 M 75 -237 V stroke LT0 ! .9577 g 4351 3023 M 98 64 V stroke LT0 ! .976 g 2936 3061 M -76 80 V stroke LT0 ! .9012 g 2913 2845 M -76 76 V stroke LT0 ! .938 g 2936 3061 M -99 -140 V stroke LT0 ! .866 g 3087 2880 M -98 -218 V stroke LT0 ! .856 g 2913 2845 M 76 -183 V stroke LT0 ! .7933 g 3511 2664 M -99 -192 V stroke LT0 ! .8051 g 3337 2722 M 75 -250 V stroke LT0 ! .9938 g 3730 3130 M -76 7 V stroke LT0 ! .9916 g 3829 3146 M -175 -9 V stroke LT0 ! .9936 g 3557 3137 M 97 0 V stroke LT0 ! .9406 g 4252 2964 M 99 59 V stroke LT0 ! .9461 g 4252 2964 M -75 90 V stroke LT0 ! .9618 g 4078 3038 M 99 16 V stroke LT0 ! .8088 g 3957 2687 M -99 -152 V stroke LT0 ! .8319 g 3783 2794 M 75 -259 V stroke LT0 ! .9925 g 3110 3101 M -76 56 V stroke LT0 ! .9813 g 2936 3061 M 98 96 V stroke LT0 ! .9594 g 3012 3005 M -76 56 V stroke LT0 ! .9952 g 3904 3113 M -75 33 V stroke LT0 ! .9941 g 4003 3133 M -174 13 V stroke LT0 ! .9975 g 3730 3130 M 99 16 V stroke LT0 ! .8429 g 3783 2794 M -99 -204 V stroke LT0 ! .8537 g 3609 2847 M 75 -257 V stroke LT0 ! .9226 g 3012 3005 M -99 -160 V stroke LT0 ! .9283 g 4154 2920 M 98 44 V stroke LT0 ! .9924 g 3284 3093 M -75 56 V stroke LT0 ! .9972 g 3383 3139 M -174 10 V stroke LT0 ! .9925 g 3110 3101 M 99 48 V stroke LT0 ! .9784 g 4078 3038 M -75 95 V stroke LT0 ! .9939 g 3904 3113 M 99 20 V stroke LT0 ! .9914 g 3458 3084 M -75 55 V stroke LT0 ! .9981 g 3557 3137 M -174 2 V stroke LT0 ! .9919 g 3284 3093 M 99 46 V stroke LT0 ! .8663 g 4055 2831 M -98 -144 V stroke LT0 ! .8842 g 3881 2915 M 76 -228 V stroke LT0 ! .8862 g 3261 2901 M -98 -188 V stroke LT0 ! .8796 g 3087 2880 M 76 -167 V stroke LT0 ! .8694 g 3609 2847 M -98 -183 V stroke LT0 ! .8776 g 3435 2890 M 76 -226 V stroke LT0 ! .9439 g 4154 2920 M -76 118 V stroke LT0 ! .9629 g 3980 3009 M 98 29 V stroke LT0 ! .996 g 3631 3090 M -74 47 V stroke LT0 ! .9928 g 3458 3084 M 99 53 V stroke LT0 ! .9699 g 3186 2994 M -76 107 V stroke LT0 ! .9706 g 3012 3005 M 98 96 V stroke LT0 ! .9089 g 4055 2831 M 99 89 V stroke LT0 ! .9326 g 3087 2880 M -75 125 V stroke LT0 ! .9319 g 3186 2994 M -99 -114 V stroke LT0 ! .9279 g 3980 3009 M 75 -178 V stroke LT0 ! .8893 g 3435 2890 M -98 -168 V stroke LT0 ! .8901 g 3261 2901 M 76 -179 V stroke LT0 ! .9909 g 3806 3060 M -76 70 V stroke LT0 ! .9962 g 3631 3090 M 99 40 V stroke LT0 ! .9777 g 3360 3020 M -76 73 V stroke LT0 ! .9698 g 3186 2994 M 98 99 V stroke LT0 ! .9384 g 3261 2901 M -75 93 V stroke LT0 ! .9785 g 3980 3009 M -76 104 V stroke LT0 ! .9886 g 3806 3060 M 98 53 V stroke LT0 ! .9754 g 3534 3005 M -76 79 V stroke LT0 ! .9772 g 3360 3020 M 98 64 V stroke LT0 ! .9073 g 3881 2915 M -98 -121 V stroke LT0 ! .9225 g 3707 2987 M 76 -193 V stroke LT0 ! .9458 g 3881 2915 M 99 94 V stroke LT0 ! .9463 g 3360 3020 M -99 -119 V stroke LT0 ! .9559 g 3806 3060 M 75 -145 V stroke LT0 ! .9333 g 3707 2987 M -98 -140 V stroke LT0 ! .9356 g 3534 3005 M 75 -158 V stroke LT0 ! .9763 g 3707 2987 M -76 103 V stroke LT0 ! .9787 g 3534 3005 M 97 85 V stroke LT0 ! .9711 g 3707 2987 M 99 73 V stroke LT0 ! .9455 g 3435 2890 M -75 130 V stroke LT0 ! .9437 g 3534 3005 M -99 -115 V stroke LT0 Files octave-3.0.1/doc/interpreter/griddata.pdf and octave-3.0.2/doc/interpreter/griddata.pdf differ diff -cNr octave-3.0.1/doc/interpreter/grid.eps octave-3.0.2/doc/interpreter/grid.eps *** octave-3.0.1/doc/interpreter/grid.eps 2008-04-21 18:56:52.000000000 +0200 --- octave-3.0.2/doc/interpreter/grid.eps 2008-08-14 13:42:45.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: grid.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:56:52 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: grid.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:42:45 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (grid.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:56:52 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (grid.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:42:45 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill Files octave-3.0.1/doc/interpreter/grid.pdf and octave-3.0.2/doc/interpreter/grid.pdf differ diff -cNr octave-3.0.1/doc/interpreter/hist.eps octave-3.0.2/doc/interpreter/hist.eps *** octave-3.0.1/doc/interpreter/hist.eps 2008-04-21 18:57:13.000000000 +0200 --- octave-3.0.2/doc/interpreter/hist.eps 2008-08-14 13:43:19.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: hist.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:13 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: hist.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:19 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (hist.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:13 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (hist.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:19 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 542,677 **** ] -46.7 MRshow 0.500 UL LTb ! 574 1115 M 63 0 V 6325 0 R -63 0 V stroke ! 0.00 0.00 0.00 C 490 1115 M [ [(Helvetica) 140.0 0.0 true true 0 (200)] ] -46.7 MRshow 0.500 UL LTb ! 574 1950 M 63 0 V 6325 0 R -63 0 V stroke ! 0.00 0.00 0.00 C 490 1950 M [ [(Helvetica) 140.0 0.0 true true 0 (400)] ] -46.7 MRshow 0.500 UL LTb ! 574 2785 M 63 0 V 6325 0 R -63 0 V stroke ! 0.00 0.00 0.00 C 490 2785 M [ [(Helvetica) 140.0 0.0 true true 0 (600)] ] -46.7 MRshow 0.500 UL LTb ! 574 3620 M 63 0 V 6325 0 R -63 0 V stroke ! 0.00 0.00 0.00 C 490 3620 M [ [(Helvetica) 140.0 0.0 true true 0 (800)] ] -46.7 MRshow 0.500 UL LTb ! 574 4455 M 63 0 V 6325 0 R -63 0 V stroke ! 0.00 0.00 0.00 C 490 4455 M [ [(Helvetica) 140.0 0.0 true true 0 (1000)] ] -46.7 MRshow 0.500 UL LTb ! 656 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 656 140 M [ [(Helvetica) 140.0 0.0 true true 0 (-4)] ] -46.7 MCshow 0.500 UL LTb ! 1475 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 1475 140 M [ [(Helvetica) 140.0 0.0 true true 0 (-3)] ] -46.7 MCshow 0.500 UL LTb ! 2294 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 2294 140 M [ [(Helvetica) 140.0 0.0 true true 0 (-2)] ] -46.7 MCshow 0.500 UL LTb ! 3113 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 3113 140 M [ [(Helvetica) 140.0 0.0 true true 0 (-1)] ] -46.7 MCshow 0.500 UL LTb ! 3932 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 3932 140 M [ [(Helvetica) 140.0 0.0 true true 0 (0)] ] -46.7 MCshow 0.500 UL LTb ! 4751 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 4751 140 M [ [(Helvetica) 140.0 0.0 true true 0 (1)] ] -46.7 MCshow 0.500 UL LTb ! 5570 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 5570 140 M [ [(Helvetica) 140.0 0.0 true true 0 (2)] ] -46.7 MCshow 0.500 UL LTb ! 6389 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 6389 140 M [ [(Helvetica) 140.0 0.0 true true 0 (3)] ] -46.7 MCshow 0.500 UL LTb 0.500 UL LTb 574 4872 N --- 542,697 ---- ] -46.7 MRshow 0.500 UL LTb ! 574 1045 M 63 0 V 6325 0 R -63 0 V stroke ! 0.00 0.00 0.00 C 490 1045 M [ [(Helvetica) 140.0 0.0 true true 0 (200)] ] -46.7 MRshow 0.500 UL LTb ! 574 1811 M 63 0 V 6325 0 R -63 0 V stroke ! 0.00 0.00 0.00 C 490 1811 M [ [(Helvetica) 140.0 0.0 true true 0 (400)] ] -46.7 MRshow 0.500 UL LTb ! 574 2576 M 63 0 V 6325 0 R -63 0 V stroke ! 0.00 0.00 0.00 C 490 2576 M [ [(Helvetica) 140.0 0.0 true true 0 (600)] ] -46.7 MRshow 0.500 UL LTb ! 574 3341 M 63 0 V 6325 0 R -63 0 V stroke ! 0.00 0.00 0.00 C 490 3341 M [ [(Helvetica) 140.0 0.0 true true 0 (800)] ] -46.7 MRshow 0.500 UL LTb ! 574 4107 M 63 0 V 6325 0 R -63 0 V stroke ! 0.00 0.00 0.00 C 490 4107 M [ [(Helvetica) 140.0 0.0 true true 0 (1000)] ] -46.7 MRshow 0.500 UL LTb ! 574 4872 M ! 63 0 V ! 6325 0 R ! -63 0 V ! stroke ! 0.00 0.00 0.00 C 490 4872 M ! [ [(Helvetica) 140.0 0.0 true true 0 (1200)] ! ] -46.7 MRshow ! 0.500 UL ! LTb ! 1088 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 1088 140 M [ [(Helvetica) 140.0 0.0 true true 0 (-4)] ] -46.7 MCshow 0.500 UL LTb ! 1822 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 1822 140 M [ [(Helvetica) 140.0 0.0 true true 0 (-3)] ] -46.7 MCshow 0.500 UL LTb ! 2556 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 2556 140 M [ [(Helvetica) 140.0 0.0 true true 0 (-2)] ] -46.7 MCshow 0.500 UL LTb ! 3291 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 3291 140 M [ [(Helvetica) 140.0 0.0 true true 0 (-1)] ] -46.7 MCshow 0.500 UL LTb ! 4025 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 4025 140 M [ [(Helvetica) 140.0 0.0 true true 0 (0)] ] -46.7 MCshow 0.500 UL LTb ! 4759 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 4759 140 M [ [(Helvetica) 140.0 0.0 true true 0 (1)] ] -46.7 MCshow 0.500 UL LTb ! 5493 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 5493 140 M [ [(Helvetica) 140.0 0.0 true true 0 (2)] ] -46.7 MCshow 0.500 UL LTb ! 6228 280 M 0 63 V 0 4529 R 0 -63 V stroke ! 0.00 0.00 0.00 C 6228 140 M [ [(Helvetica) 140.0 0.0 true true 0 (3)] ] -46.7 MCshow 0.500 UL LTb + 6962 280 M + 0 63 V + 0 4529 R + 0 -63 V + stroke + 0.00 0.00 0.00 C 6962 140 M + [ [(Helvetica) 140.0 0.0 true true 0 (4)] + ] -46.7 MCshow + 0.500 UL + LTb 0.500 UL LTb 574 4872 N *************** *** 685,1167 **** LTb 1.000 UL LT0 ! 0.00 0.00 0.50 C gsave 579 280 N 0 0 V 0 4 V 212 0 V 0 -4 V 1 PolyFill ! 579 280 M 0 4 V ! 212 0 V 0 -4 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 579 280 M 0 4 V ! 212 0 V 0 -4 V ! -212 0 V stroke 1.000 UL LT2 ! 0.00 0.00 0.50 C gsave 791 280 N 0 0 V 0 13 V 211 0 V 0 -13 V 1 PolyFill ! 791 280 M ! 0 13 V ! 211 0 V ! 0 -13 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 791 280 M ! 0 13 V ! 211 0 V ! 0 -13 V ! -211 0 V stroke 1.000 UL LT4 ! 0.00 0.00 0.50 C gsave 1002 280 N 0 0 V 0 13 V 212 0 V 0 -13 V 1 PolyFill ! 1002 280 M ! 0 13 V ! 212 0 V ! 0 -13 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 1002 280 M ! 0 13 V ! 212 0 V ! 0 -13 V ! -212 0 V stroke 1.000 UL LT6 ! 0.00 0.00 0.50 C gsave 1214 280 N 0 0 V 0 25 V 212 0 V 0 -25 V 1 PolyFill ! 1214 280 M ! 0 25 V ! 212 0 V ! 0 -25 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 1214 280 M ! 0 25 V ! 212 0 V ! 0 -25 V ! -212 0 V stroke 1.000 UL LT8 ! 0.00 0.00 0.50 C gsave 1426 280 N 0 0 V 0 50 V 212 0 V 0 -50 V 1 PolyFill ! 1426 280 M ! 0 50 V ! 212 0 V ! 0 -50 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 1426 280 M ! 0 50 V ! 212 0 V ! 0 -50 V ! -212 0 V stroke 1.000 UL LT1 ! 0.00 0.00 0.50 C gsave 1638 280 N 0 0 V 0 104 V 211 0 V 0 -104 V 1 PolyFill ! 1638 280 M ! 0 104 V ! 211 0 V ! 0 -104 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 1638 280 M ! 0 104 V ! 211 0 V ! 0 -104 V ! -211 0 V stroke 1.000 UL LT3 ! 0.00 0.00 0.50 C gsave 1849 280 N 0 0 V 0 309 V 212 0 V 0 -309 V 1 PolyFill ! 1849 280 M ! 0 309 V ! 212 0 V ! 0 -309 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 1849 280 M ! 0 309 V ! 212 0 V ! 0 -309 V ! -212 0 V stroke 1.000 UL LT5 ! 0.00 0.00 0.50 C gsave 2061 280 N 0 0 V 0 434 V 212 0 V 0 -434 V 1 PolyFill ! 2061 280 M ! 0 434 V ! 212 0 V ! 0 -434 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 2061 280 M ! 0 434 V ! 212 0 V ! 0 -434 V ! -212 0 V stroke 1.000 UL LT7 ! 0.00 0.00 0.50 C gsave 2273 280 N 0 0 V 0 739 V 212 0 V 0 -739 V 1 PolyFill ! 2273 280 M ! 0 739 V ! 212 0 V ! 0 -739 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 2273 280 M ! 0 739 V ! 212 0 V ! 0 -739 V ! -212 0 V stroke 1.000 UL LT0 ! 0.00 0.00 0.50 C gsave 2485 280 N 0 0 V 0 1002 V 211 0 V 0 -1002 V 1 PolyFill ! 2485 280 M ! 0 1002 V ! 211 0 V ! 0 -1002 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 2485 280 M ! 0 1002 V ! 211 0 V ! 0 -1002 V ! -211 0 V stroke 1.000 UL LT2 ! 0.00 0.00 0.50 C gsave 2696 280 N 0 0 V 0 1641 V 212 0 V 0 -1641 V 1 PolyFill ! 2696 280 M ! 0 1641 V ! 212 0 V ! 0 -1641 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 2696 280 M ! 0 1641 V ! 212 0 V ! 0 -1641 V ! -212 0 V stroke 1.000 UL LT4 ! 0.00 0.00 0.50 C gsave 2908 280 N 0 0 V 0 2304 V 212 0 V 0 -2304 V 1 PolyFill ! 2908 280 M ! 0 2304 V ! 212 0 V ! 0 -2304 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 2908 280 M ! 0 2304 V ! 212 0 V ! 0 -2304 V ! -212 0 V stroke 1.000 UL LT6 ! 0.00 0.00 0.50 C gsave 3120 280 N 0 0 V 0 3039 V 212 0 V 0 -3039 V 1 PolyFill ! 3120 280 M ! 0 3039 V ! 212 0 V ! 0 -3039 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 3120 280 M ! 0 3039 V ! 212 0 V ! 0 -3039 V ! -212 0 V stroke 1.000 UL LT8 ! 0.00 0.00 0.50 C gsave 3332 280 N 0 0 V 0 3732 V 211 0 V 0 -3732 V 1 PolyFill ! 3332 280 M ! 0 3732 V ! 211 0 V ! 0 -3732 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 3332 280 M ! 0 3732 V ! 211 0 V ! 0 -3732 V ! -211 0 V stroke 1.000 UL LT1 ! 0.00 0.00 0.50 C gsave 3543 280 N 0 0 V 0 4262 V 212 0 V 0 -4262 V 1 PolyFill ! 3543 280 M ! 0 4262 V ! 212 0 V ! 0 -4262 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 3543 280 M ! 0 4262 V ! 212 0 V ! 0 -4262 V ! -212 0 V stroke 1.000 UL LT3 ! 0.00 0.00 0.50 C gsave 3755 280 N 0 0 V 0 4296 V 212 0 V 0 -4296 V 1 PolyFill ! 3755 280 M ! 0 4296 V ! 212 0 V ! 0 -4296 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 3755 280 M ! 0 4296 V ! 212 0 V ! 0 -4296 V ! -212 0 V stroke 1.000 UL LT5 ! 0.00 0.00 0.50 C gsave 3967 280 N 0 0 V 0 4020 V 212 0 V 0 -4020 V 1 PolyFill ! 3967 280 M ! 0 4020 V ! 212 0 V ! 0 -4020 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 3967 280 M ! 0 4020 V ! 212 0 V ! 0 -4020 V ! -212 0 V stroke 1.000 UL LT7 ! 0.00 0.00 0.50 C gsave 4179 280 N 0 0 V 0 3962 V 211 0 V 0 -3962 V 1 PolyFill ! 4179 280 M ! 0 3962 V ! 211 0 V ! 0 -3962 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 4179 280 M ! 0 3962 V ! 211 0 V ! 0 -3962 V ! -211 0 V stroke 1.000 UL LT0 ! 0.00 0.00 0.50 C gsave 4390 280 N 0 0 V 0 3578 V 212 0 V 0 -3578 V 1 PolyFill ! 4390 280 M ! 0 3578 V ! 212 0 V ! 0 -3578 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 4390 280 M ! 0 3578 V ! 212 0 V ! 0 -3578 V ! -212 0 V stroke 1.000 UL LT2 ! 0.00 0.00 0.50 C gsave 4602 280 N 0 0 V 0 2446 V 212 0 V 0 -2446 V 1 PolyFill ! 4602 280 M ! 0 2446 V ! 212 0 V ! 0 -2446 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 4602 280 M ! 0 2446 V ! 212 0 V ! 0 -2446 V ! -212 0 V stroke 1.000 UL LT4 ! 0.00 0.00 0.50 C gsave 4814 280 N 0 0 V 0 2046 V 212 0 V 0 -2046 V 1 PolyFill ! 4814 280 M ! 0 2046 V ! 212 0 V ! 0 -2046 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 4814 280 M ! 0 2046 V ! 212 0 V ! 0 -2046 V ! -212 0 V stroke 1.000 UL LT6 ! 0.00 0.00 0.50 C gsave 5026 280 N 0 0 V 0 1432 V 211 0 V 0 -1432 V 1 PolyFill ! 5026 280 M ! 0 1432 V ! 211 0 V ! 0 -1432 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 5026 280 M ! 0 1432 V ! 211 0 V ! 0 -1432 V ! -211 0 V stroke 1.000 UL LT8 ! 0.00 0.00 0.50 C gsave 5237 280 N 0 0 V 0 977 V 212 0 V 0 -977 V 1 PolyFill ! 5237 280 M ! 0 977 V ! 212 0 V ! 0 -977 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 5237 280 M ! 0 977 V ! 212 0 V ! 0 -977 V ! -212 0 V stroke 1.000 UL LT1 ! 0.00 0.00 0.50 C gsave 5449 280 N 0 0 V 0 605 V 212 0 V 0 -605 V 1 PolyFill ! 5449 280 M ! 0 605 V ! 212 0 V ! 0 -605 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 5449 280 M ! 0 605 V ! 212 0 V ! 0 -605 V ! -212 0 V stroke 1.000 UL LT3 ! 0.00 0.00 0.50 C gsave 5661 280 N 0 0 V 0 405 V 212 0 V 0 -405 V 1 PolyFill ! 5661 280 M ! 0 405 V ! 212 0 V ! 0 -405 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 5661 280 M ! 0 405 V ! 212 0 V ! 0 -405 V ! -212 0 V stroke 1.000 UL LT5 ! 0.00 0.00 0.50 C gsave 5873 280 N 0 0 V 0 171 V 211 0 V 0 -171 V 1 PolyFill ! 5873 280 M ! 0 171 V ! 211 0 V ! 0 -171 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 5873 280 M ! 0 171 V ! 211 0 V ! 0 -171 V ! -211 0 V stroke 1.000 UL LT7 ! 0.00 0.00 0.50 C gsave 6084 280 N 0 0 V 0 83 V 212 0 V 0 -83 V 1 PolyFill ! 6084 280 M ! 0 83 V ! 212 0 V ! 0 -83 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 6084 280 M ! 0 83 V ! 212 0 V ! 0 -83 V ! -212 0 V stroke 1.000 UL LT0 ! 0.00 0.00 0.50 C gsave 6296 280 N 0 0 V 0 25 V 212 0 V 0 -25 V 1 PolyFill ! 6296 280 M ! 0 25 V ! 212 0 V ! 0 -25 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 6296 280 M ! 0 25 V ! 212 0 V ! 0 -25 V ! -212 0 V stroke 1.000 UL LT2 ! 0.00 0.00 0.50 C gsave 6508 280 N 0 0 V 0 8 V 212 0 V 0 -8 V 1 PolyFill ! 6508 280 M 0 8 V ! 212 0 V 0 -8 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 6508 280 M 0 8 V ! 212 0 V 0 -8 V ! -212 0 V stroke 1.000 UL LT4 ! 0.00 0.00 0.50 C gsave 6720 280 N 0 0 V 0 21 V 211 0 V 0 -21 V 1 PolyFill 6720 280 M ! 0 21 V ! 211 0 V ! 0 -21 V stroke 0.500 UL LT0 0.00 0.00 0.00 C 6720 280 M ! 0 21 V ! 211 0 V ! 0 -21 V ! -211 0 V stroke LTb 574 4872 N --- 705,1183 ---- LTb 1.000 UL LT0 ! 0.00 0.00 0.50 C gsave 646 280 N 0 0 V 0 4 V 210 0 V 0 -4 V 1 PolyFill ! 646 280 M 0 4 V ! 210 0 V 0 -4 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 646 280 M 0 4 V ! 210 0 V 0 -4 V ! -210 0 V stroke 1.000 UL LT2 ! 0.00 0.00 0.50 C gsave 856 280 N 0 0 V 0 0 V 209 0 V 0 0 V 1 PolyFill ! 856 280 M ! 209 0 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 856 280 M ! 209 0 V ! -209 0 V stroke 1.000 UL LT4 ! 0.00 0.00 0.50 C gsave 1065 280 N 0 0 V 0 4 V 210 0 V 0 -4 V 1 PolyFill ! 1065 280 M ! 0 4 V ! 210 0 V ! 0 -4 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 1065 280 M ! 0 4 V ! 210 0 V ! 0 -4 V ! -210 0 V stroke 1.000 UL LT6 ! 0.00 0.00 0.50 C gsave 1275 280 N 0 0 V 0 4 V 209 0 V 0 -4 V 1 PolyFill ! 1275 280 M ! 0 4 V ! 209 0 V ! 0 -4 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 1275 280 M ! 0 4 V ! 209 0 V ! 0 -4 V ! -209 0 V stroke 1.000 UL LT8 ! 0.00 0.00 0.50 C gsave 1484 280 N 0 0 V 0 23 V 209 0 V 0 -23 V 1 PolyFill ! 1484 280 M ! 0 23 V ! 209 0 V ! 0 -23 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 1484 280 M ! 0 23 V ! 209 0 V ! 0 -23 V ! -209 0 V stroke 1.000 UL LT1 ! 0.00 0.00 0.50 C gsave 1693 280 N 0 0 V 0 73 V 210 0 V 0 -73 V 1 PolyFill ! 1693 280 M ! 0 73 V ! 210 0 V ! 0 -73 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 1693 280 M ! 0 73 V ! 210 0 V ! 0 -73 V ! -210 0 V stroke 1.000 UL LT3 ! 0.00 0.00 0.50 C gsave 1903 280 N 0 0 V 0 57 V 209 0 V 0 -57 V 1 PolyFill ! 1903 280 M ! 0 57 V ! 209 0 V ! 0 -57 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 1903 280 M ! 0 57 V ! 209 0 V ! 0 -57 V ! -209 0 V stroke 1.000 UL LT5 ! 0.00 0.00 0.50 C gsave 2112 280 N 0 0 V 0 264 V 210 0 V 0 -264 V 1 PolyFill ! 2112 280 M ! 0 264 V ! 210 0 V ! 0 -264 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 2112 280 M ! 0 264 V ! 210 0 V ! 0 -264 V ! -210 0 V stroke 1.000 UL LT7 ! 0.00 0.00 0.50 C gsave 2322 280 N 0 0 V 0 337 V 209 0 V 0 -337 V 1 PolyFill ! 2322 280 M ! 0 337 V ! 209 0 V ! 0 -337 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 2322 280 M ! 0 337 V ! 209 0 V ! 0 -337 V ! -209 0 V stroke 1.000 UL LT0 ! 0.00 0.00 0.50 C gsave 2531 280 N 0 0 V 0 719 V 210 0 V 0 -719 V 1 PolyFill ! 2531 280 M ! 0 719 V ! 210 0 V ! 0 -719 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 2531 280 M ! 0 719 V ! 210 0 V ! 0 -719 V ! -210 0 V stroke 1.000 UL LT2 ! 0.00 0.00 0.50 C gsave 2741 280 N 0 0 V 0 1117 V 209 0 V 0 -1117 V 1 PolyFill ! 2741 280 M ! 0 1117 V ! 209 0 V ! 0 -1117 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 2741 280 M ! 0 1117 V ! 209 0 V ! 0 -1117 V ! -209 0 V stroke 1.000 UL LT4 ! 0.00 0.00 0.50 C gsave 2950 280 N 0 0 V 0 1814 V 210 0 V 0 -1814 V 1 PolyFill ! 2950 280 M ! 0 1814 V ! 210 0 V ! 0 -1814 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 2950 280 M ! 0 1814 V ! 210 0 V ! 0 -1814 V ! -210 0 V stroke 1.000 UL LT6 ! 0.00 0.00 0.50 C gsave 3160 280 N 0 0 V 0 2652 V 209 0 V 0 -2652 V 1 PolyFill ! 3160 280 M ! 0 2652 V ! 209 0 V ! 0 -2652 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 3160 280 M ! 0 2652 V ! 209 0 V ! 0 -2652 V ! -209 0 V stroke 1.000 UL LT8 ! 0.00 0.00 0.50 C gsave 3369 280 N 0 0 V 0 3092 V 209 0 V 0 -3092 V 1 PolyFill ! 3369 280 M ! 0 3092 V ! 209 0 V ! 0 -3092 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 3369 280 M ! 0 3092 V ! 209 0 V ! 0 -3092 V ! -209 0 V stroke 1.000 UL LT1 ! 0.00 0.00 0.50 C gsave 3578 280 N 0 0 V 0 3685 V 210 0 V 0 -3685 V 1 PolyFill ! 3578 280 M ! 0 3685 V ! 210 0 V ! 0 -3685 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 3578 280 M ! 0 3685 V ! 210 0 V ! 0 -3685 V ! -210 0 V stroke 1.000 UL LT3 ! 0.00 0.00 0.50 C gsave 3788 280 N 0 0 V 0 4301 V 209 0 V 0 -4301 V 1 PolyFill ! 3788 280 M ! 0 4301 V ! 209 0 V ! 0 -4301 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 3788 280 M ! 0 4301 V ! 209 0 V ! 0 -4301 V ! -209 0 V stroke 1.000 UL LT5 ! 0.00 0.00 0.50 C gsave 3997 280 N 0 0 V 0 4466 V 210 0 V 0 -4466 V 1 PolyFill ! 3997 280 M ! 0 4466 V ! 210 0 V ! 0 -4466 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 3997 280 M ! 0 4466 V ! 210 0 V ! 0 -4466 V ! -210 0 V stroke 1.000 UL LT7 ! 0.00 0.00 0.50 C gsave 4207 280 N 0 0 V 0 4018 V 209 0 V 0 -4018 V 1 PolyFill ! 4207 280 M ! 0 4018 V ! 209 0 V ! 0 -4018 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 4207 280 M ! 0 4018 V ! 209 0 V ! 0 -4018 V ! -209 0 V stroke 1.000 UL LT0 ! 0.00 0.00 0.50 C gsave 4416 280 N 0 0 V 0 3746 V 210 0 V 0 -3746 V 1 PolyFill ! 4416 280 M ! 0 3746 V ! 210 0 V ! 0 -3746 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 4416 280 M ! 0 3746 V ! 210 0 V ! 0 -3746 V ! -210 0 V stroke 1.000 UL LT2 ! 0.00 0.00 0.50 C gsave 4626 280 N 0 0 V 0 2484 V 209 0 V 0 -2484 V 1 PolyFill ! 4626 280 M ! 0 2484 V ! 209 0 V ! 0 -2484 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 4626 280 M ! 0 2484 V ! 209 0 V ! 0 -2484 V ! -209 0 V stroke 1.000 UL LT4 ! 0.00 0.00 0.50 C gsave 4835 280 N 0 0 V 0 2177 V 210 0 V 0 -2177 V 1 PolyFill ! 4835 280 M ! 0 2177 V ! 210 0 V ! 0 -2177 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 4835 280 M ! 0 2177 V ! 210 0 V ! 0 -2177 V ! -210 0 V stroke 1.000 UL LT6 ! 0.00 0.00 0.50 C gsave 5045 280 N 0 0 V 0 1393 V 209 0 V 0 -1393 V 1 PolyFill ! 5045 280 M ! 0 1393 V ! 209 0 V ! 0 -1393 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 5045 280 M ! 0 1393 V ! 209 0 V ! 0 -1393 V ! -209 0 V stroke 1.000 UL LT8 ! 0.00 0.00 0.50 C gsave 5254 280 N 0 0 V 0 865 V 209 0 V 0 -865 V 1 PolyFill ! 5254 280 M ! 0 865 V ! 209 0 V ! 0 -865 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 5254 280 M ! 0 865 V ! 209 0 V ! 0 -865 V ! -209 0 V stroke 1.000 UL LT1 ! 0.00 0.00 0.50 C gsave 5463 280 N 0 0 V 0 513 V 210 0 V 0 -513 V 1 PolyFill ! 5463 280 M ! 0 513 V ! 210 0 V ! 0 -513 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 5463 280 M ! 0 513 V ! 210 0 V ! 0 -513 V ! -210 0 V stroke 1.000 UL LT3 ! 0.00 0.00 0.50 C gsave 5673 280 N 0 0 V 0 226 V 209 0 V 0 -226 V 1 PolyFill ! 5673 280 M ! 0 226 V ! 209 0 V ! 0 -226 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 5673 280 M ! 0 226 V ! 209 0 V ! 0 -226 V ! -209 0 V stroke 1.000 UL LT5 ! 0.00 0.00 0.50 C gsave 5882 280 N 0 0 V 0 119 V 210 0 V 0 -119 V 1 PolyFill ! 5882 280 M ! 0 119 V ! 210 0 V ! 0 -119 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 5882 280 M ! 0 119 V ! 210 0 V ! 0 -119 V ! -210 0 V stroke 1.000 UL LT7 ! 0.00 0.00 0.50 C gsave 6092 280 N 0 0 V 0 61 V 209 0 V 0 -61 V 1 PolyFill ! 6092 280 M ! 0 61 V ! 209 0 V ! 0 -61 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 6092 280 M ! 0 61 V ! 209 0 V ! 0 -61 V ! -209 0 V stroke 1.000 UL LT0 ! 0.00 0.00 0.50 C gsave 6301 280 N 0 0 V 0 42 V 210 0 V 0 -42 V 1 PolyFill ! 6301 280 M ! 0 42 V ! 210 0 V ! 0 -42 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 6301 280 M ! 0 42 V ! 210 0 V ! 0 -42 V ! -210 0 V stroke 1.000 UL LT2 ! 0.00 0.00 0.50 C gsave 6511 280 N 0 0 V 0 8 V 209 0 V 0 -8 V 1 PolyFill ! 6511 280 M 0 8 V ! 209 0 V 0 -8 V stroke 0.500 UL LT0 ! 0.00 0.00 0.00 C 6511 280 M 0 8 V ! 209 0 V 0 -8 V ! -209 0 V stroke 1.000 UL LT4 ! 0.00 0.00 0.50 C gsave 6720 280 N 0 0 V 0 4 V 209 0 V 0 -4 V 1 PolyFill 6720 280 M ! 0 4 V ! 209 0 V ! 0 -4 V stroke 0.500 UL LT0 0.00 0.00 0.00 C 6720 280 M ! 0 4 V ! 209 0 V ! 0 -4 V ! -209 0 V stroke LTb 574 4872 N *************** *** 1173,1178 **** --- 1189,1195 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/hist.pdf and octave-3.0.2/doc/interpreter/hist.pdf differ Files octave-3.0.1/doc/interpreter/hist.png and octave-3.0.2/doc/interpreter/hist.png differ Files octave-3.0.1/doc/interpreter/HTML/errorbar.png and octave-3.0.2/doc/interpreter/HTML/errorbar.png differ Files octave-3.0.1/doc/interpreter/HTML/hist.png and octave-3.0.2/doc/interpreter/HTML/hist.png differ Files octave-3.0.1/doc/interpreter/HTML/interpderiv1.png and octave-3.0.2/doc/interpreter/HTML/interpderiv1.png differ diff -cNr octave-3.0.1/doc/interpreter/inpolygon.eps octave-3.0.2/doc/interpreter/inpolygon.eps *** octave-3.0.1/doc/interpreter/inpolygon.eps 2008-04-21 18:57:10.000000000 +0200 --- octave-3.0.2/doc/interpreter/inpolygon.eps 2008-08-14 13:43:15.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: inpolygon.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:10 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: inpolygon.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:15 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (inpolygon.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:10 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (inpolygon.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:15 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 854,859 **** --- 854,860 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/inpolygon.pdf and octave-3.0.2/doc/interpreter/inpolygon.pdf differ diff -cNr octave-3.0.1/doc/interpreter/interpderiv1.eps octave-3.0.2/doc/interpreter/interpderiv1.eps *** octave-3.0.1/doc/interpreter/interpderiv1.eps 2008-04-21 18:57:00.000000000 +0200 --- octave-3.0.2/doc/interpreter/interpderiv1.eps 2008-08-14 13:42:59.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: interpderiv1.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:00 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: interpderiv1.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:42:59 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (interpderiv1.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:00 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (interpderiv1.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:42:59 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 1034,1039 **** --- 1034,1040 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/interpderiv1.pdf and octave-3.0.2/doc/interpreter/interpderiv1.pdf differ Files octave-3.0.1/doc/interpreter/interpderiv1.png and octave-3.0.2/doc/interpreter/interpderiv1.png differ diff -cNr octave-3.0.1/doc/interpreter/interpderiv2.eps octave-3.0.2/doc/interpreter/interpderiv2.eps *** octave-3.0.1/doc/interpreter/interpderiv2.eps 2008-04-21 18:57:02.000000000 +0200 --- octave-3.0.2/doc/interpreter/interpderiv2.eps 2008-08-14 13:43:01.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: interpderiv2.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:02 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: interpderiv2.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:01 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (interpderiv2.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:02 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (interpderiv2.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:01 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 1050,1055 **** --- 1050,1056 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/interpderiv2.pdf and octave-3.0.2/doc/interpreter/interpderiv2.pdf differ diff -cNr octave-3.0.1/doc/interpreter/interpft.eps octave-3.0.2/doc/interpreter/interpft.eps *** octave-3.0.1/doc/interpreter/interpft.eps 2008-04-21 18:56:58.000000000 +0200 --- octave-3.0.2/doc/interpreter/interpft.eps 2008-08-14 13:42:54.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: interpft.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:56:58 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: interpft.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:42:54 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (interpft.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:56:58 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (interpft.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:42:54 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 1052,1057 **** --- 1052,1058 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/interpft.pdf and octave-3.0.2/doc/interpreter/interpft.pdf differ diff -cNr octave-3.0.1/doc/interpreter/interpn.eps octave-3.0.2/doc/interpreter/interpn.eps *** octave-3.0.1/doc/interpreter/interpn.eps 2008-04-21 18:56:59.000000000 +0200 --- octave-3.0.2/doc/interpreter/interpn.eps 2008-08-14 13:42:56.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: interpn.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:56:59 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: interpn.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:42:57 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (interpn.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:56:59 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (interpn.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:42:57 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 535,3605 **** 1.000 UP 1.000 UL LT0 ! .0117 g .4675 g 4072 3301 M -117 185 V stroke LT0 ! .0117 g .5325 g 3802 3581 M 153 -95 V stroke LT0 ! .0117 g .4031 g 4189 3119 M -117 182 V stroke LT0 ! .0117 g .4675 g 3919 3396 M 153 -95 V stroke LT0 ! .0117 g .3438 g 4293 2961 M -104 158 V stroke LT0 ! .0117 g .4036 g 4036 3214 M 153 -95 V stroke LT0 ! .0117 g .2501 g 4424 2768 M -1 0 V stroke LT0 ! .0117 g .3467 g 4154 3035 M 128 -80 V stroke LT0 ! .0117 g .2502 g 4423 2768 M 1 0 V stroke LT0 ! .0117 g .1626 g 4622 2402 M 12 -7 V stroke LT0 ! .0117 g .5325 g 3919 3396 M -117 185 V stroke LT0 ! .0117 g .5969 g 3649 3674 M 153 -93 V stroke LT0 ! .0117 g .468 g 4036 3214 M -117 182 V stroke LT0 ! .0117 g .532 g 3767 3489 M 152 -93 V stroke LT0 ! .0117 g .405 g 4154 3035 M -118 179 V stroke LT0 ! .0117 g .468 g 3884 3307 M 152 -93 V stroke LT0 ! .0117 g .3551 g 4229 2925 M -75 110 V stroke LT0 ! .0117 g .406 g 4001 3128 M 153 -93 V stroke LT0 ! .0117 g .3621 g 4118 2956 M 80 -49 V stroke LT0 ! .0117 g .0283 g 5037 2045 M -6 4 V stroke LT0 ! .0117 g .2734 g 4353 2637 M 0 -1 V stroke LT0 ! .0117 g .1644 g 4626 2398 M -4 4 V stroke LT0 ! .0117 g .5964 g 3767 3489 M -118 185 V stroke LT0 ! .0117 g .6599 g 3498 3763 M 151 -89 V stroke LT0 ! .0117 g .532 g 3884 3307 M -117 182 V stroke LT0 ! .0117 g .595 g 3614 3578 M 153 -89 V stroke LT0 ! .0117 g .469 g 4001 3128 M -117 179 V stroke LT0 ! .0117 g .531 g 3731 3396 M 153 -89 V stroke LT0 ! .0117 g .4084 g 4118 2956 M -117 172 V stroke LT0 ! .0117 g .469 g 3848 3217 M 153 -89 V stroke LT0 ! .0117 g .3676 g 4166 2888 M -48 68 V stroke LT0 ! .0117 g .4099 g 3965 3045 M 153 -89 V stroke LT0 ! .0117 g .3775 g 4083 2880 M 40 -23 V stroke ! LT0 ! .0117 g .0002 g 5361 1847 M -117 52 V stroke ! LT0 ! .0117 g .033 g 5091 1994 M 153 -95 V stroke LT0 ! .0117 g .089 g 4906 2122 M -2 2 V stroke LT0 ! .0117 g .2734 g 4353 2636 M 0 1 V stroke LT0 ! .0117 g .6584 g 3614 3578 M -116 185 V stroke LT0 ! .0117 g .7205 g 3345 3846 M 153 -83 V stroke LT0 ! .0117 g .594 g 3731 3396 M -117 182 V stroke LT0 ! .0117 g .6555 g 3462 3661 M 152 -83 V stroke LT0 ! .0117 g .531 g 3848 3217 M -117 179 V stroke LT0 ! .0117 g .5916 g 3579 3479 M 152 -83 V stroke ! LT0 ! .0117 g .0056 g 5478 1820 M -117 27 V stroke ! LT0 ! .0117 g .0325 g 5208 1942 M 153 -95 V stroke LT0 ! .0117 g .4705 g 3965 3045 M -117 172 V stroke LT0 ! .0117 g .5295 g 3696 3300 M 152 -83 V stroke LT0 ! .0117 g .1632 g 4699 2260 M -2 2 V stroke LT0 ! .0117 g .4133 g 4083 2880 M -118 165 V stroke LT0 ! .0117 g .4705 g 3813 3127 M 152 -82 V stroke LT0 ! .0117 g .3801 g 4109 2846 M -26 34 V stroke LT0 ! .0117 g .4153 g 3930 2963 M 153 -83 V stroke ! LT0 ! .0117 g .0652 g 5208 1942 M -117 52 V stroke ! LT0 ! .0117 g .0974 g 4938 2087 M 153 -93 V stroke LT0 ! .0117 g .1693 g 4679 2269 M 12 -7 V stroke LT0 ! .0117 g .2234 g 4551 2344 M 2 -1 V stroke LT0 ! .0117 g .3931 g 4047 2809 M 8 -5 V stroke ! LT0 ! .0117 g .0232 g 5595 1818 M -117 2 V stroke ! LT0 ! .0117 g .0437 g 5326 1915 M 152 -95 V stroke LT0 ! .0117 g .7175 g 3462 3661 M -117 185 V stroke LT0 ! .0117 g .7776 g 3192 3921 M 153 -75 V stroke LT0 ! .0117 g .6531 g 3579 3479 M -117 182 V stroke LT0 ! .0117 g .7126 g 3309 3736 M 153 -75 V stroke LT0 ! .0117 g .1888 g 4698 2233 M 10 -6 V stroke LT0 ! .0117 g .5901 g 3696 3300 M -117 179 V stroke LT0 ! .0117 g .6487 g 3427 3554 M 152 -75 V stroke LT0 ! .0117 g .5295 g 3813 3127 M -117 173 V stroke LT0 ! .0117 g .5867 g 3544 3375 M 152 -75 V stroke ! LT0 ! .0117 g .0706 g 5326 1915 M -118 27 V stroke ! LT0 ! .0117 g .0969 g 5056 2035 M 152 -93 V stroke LT0 ! .0117 g .4724 g 3930 2963 M -117 164 V stroke LT0 ! .0117 g .5276 g 3660 3202 M 153 -75 V stroke LT0 ! .0117 g .4197 g 4047 2809 M -117 154 V stroke LT0 ! .0117 g .4724 g 3777 3038 M 153 -75 V stroke ! LT0 ! .0117 g .1292 g 5056 2035 M -118 52 V stroke ! LT0 ! .0117 g .1604 g 4786 2176 M 152 -89 V stroke LT0 ! .0117 g .2236 g 4552 2343 M -1 1 V stroke LT0 ! .0117 g .3936 g 4052 2802 M -5 7 V stroke LT0 ! .0117 g .4221 g 3894 2883 M 153 -74 V stroke ! LT0 ! .0117 g .054 g 5713 1845 M -118 -27 V stroke ! LT0 ! .0117 g .0676 g 5443 1913 M 152 -95 V stroke LT0 ! .0117 g .7727 g 3309 3736 M -117 185 V stroke LT0 ! .0117 g .8303 g 3040 3986 M 152 -65 V stroke ! LT0 ! .0117 g .0881 g 5443 1913 M -117 2 V stroke ! LT0 ! .0117 g .1082 g 5173 2008 M 153 -93 V stroke LT0 ! .0117 g .7083 g 3427 3554 M -118 182 V stroke LT0 ! .0117 g .7654 g 3157 3801 M 152 -65 V stroke LT0 ! .0117 g .6453 g 3544 3375 M -117 179 V stroke LT0 ! .0117 g .7014 g 3274 3618 M 153 -64 V stroke LT0 ! .0117 g .2004 g 4696 2232 M -8 6 V stroke LT0 ! .0117 g .5847 g 3660 3202 M -116 173 V stroke LT0 ! .0117 g .6394 g 3391 3440 M 153 -65 V stroke ! LT0 ! .0117 g .1345 g 5173 2008 M -117 27 V stroke ! LT0 ! .0117 g .1599 g 4903 2124 M 153 -89 V stroke LT0 ! .0117 g .5276 g 3777 3038 M -117 164 V stroke LT0 ! .0117 g .5803 g 3508 3267 M 152 -65 V stroke LT0 ! .0117 g .4749 g 3894 2883 M -117 155 V stroke LT0 ! .0117 g .5251 g 3624 3103 M 153 -65 V stroke ! LT0 ! .0117 g .1912 g 4903 2124 M -117 52 V stroke ! LT0 ! .0117 g .2209 g 4633 2259 M 153 -83 V stroke LT0 ! .0117 g .4302 g 3997 2758 M -103 125 V stroke LT0 ! .0117 g .4749 g 3742 2948 M 152 -65 V stroke ! LT0 ! .0117 g .0989 g 5830 1902 M -117 -57 V stroke ! LT0 ! .0117 g .1052 g 5560 1940 M 153 -95 V stroke ! LT0 ! .0117 g .1189 g 5560 1940 M -117 -27 V stroke ! LT0 ! .0117 g .1321 g 5290 2006 M 153 -93 V stroke LT0 ! .0117 g .823 g 3157 3801 M -117 185 V stroke LT0 ! .0117 g .8777 g 2887 4038 M 153 -52 V stroke LT0 ! .0117 g .7585 g 3274 3618 M -117 183 V stroke LT0 ! .0117 g .8127 g 3004 3854 M 153 -53 V stroke LT0 ! .0117 g .4341 g 3859 2806 M 130 -55 V stroke ! LT0 ! .0117 g .1521 g 5290 2006 M -117 2 V stroke ! LT0 ! .0117 g .1711 g 5020 2097 M 153 -89 V stroke LT0 ! .0117 g .6956 g 3391 3440 M -117 178 V stroke LT0 ! .0117 g .7488 g 3121 3671 M 153 -53 V stroke LT0 ! .0117 g .635 g 3508 3267 M -117 173 V stroke LT0 ! .0117 g .6868 g 3238 3492 M 153 -52 V stroke LT0 ! .0117 g .5779 g 3624 3103 M -116 164 V stroke LT0 ! .0117 g .6277 g 3356 3320 M 152 -53 V stroke ! LT0 ! .0117 g .1965 g 5020 2097 M -117 27 V stroke ! LT0 ! .0117 g .2205 g 4750 2207 M 153 -83 V stroke LT0 ! .0117 g .5251 g 3742 2948 M -118 155 V stroke LT0 ! .0117 g .5725 g 3473 3155 M 151 -52 V stroke LT0 ! .0117 g .4778 g 3859 2806 M -117 142 V stroke LT0 ! .0117 g .5222 g 3590 3001 M 152 -53 V stroke LT0 ! .0117 g .3804 g 4116 2557 M 2 -1 V stroke ! LT0 ! .0117 g .2502 g 4750 2207 M -117 52 V stroke ! LT0 ! .0117 g .2725 g 4511 2319 M 122 -60 V stroke LT0 ! .0117 g .8674 g 3004 3854 M -117 184 V stroke LT0 ! .0117 g .9187 g 2734 4077 M 153 -39 V stroke ! LT0 ! .0117 g .1638 g 5677 1997 M -117 -57 V stroke ! LT0 ! .0117 g .1697 g 5407 2033 M 153 -93 V stroke LT0 ! .0117 g .803 g 3121 3671 M -117 183 V stroke LT0 ! .0117 g .8538 g 2851 3892 M 153 -38 V stroke ! LT0 ! .0117 g .1589 g 5947 1991 M -117 -89 V stroke ! LT0 ! .0117 g .1575 g 5677 1997 M 153 -95 V stroke ! LT0 ! .0117 g .1829 g 5407 2033 M -117 -27 V stroke ! LT0 ! .0117 g .1951 g 5137 2095 M 153 -89 V stroke LT0 ! .0117 g .4415 g 3947 2710 M -88 96 V stroke LT0 ! .0117 g .4778 g 3706 2858 M 153 -52 V stroke LT0 ! .0117 g .74 g 3238 3492 M -117 179 V stroke LT0 ! .0117 g .7898 g 2968 3710 M 153 -39 V stroke LT0 ! .0117 g .6794 g 3356 3320 M -118 172 V stroke LT0 ! .0117 g .7278 g 3086 3531 M 152 -39 V stroke ! LT0 ! .0117 g .2141 g 5137 2095 M -117 2 V stroke ! LT0 ! .0117 g .2317 g 4867 2179 M 153 -82 V stroke LT0 ! .0117 g .3064 g 4477 2336 M -9 5 V stroke LT0 ! .0117 g .3108 g 4432 2364 M -12 8 V stroke LT0 ! .0117 g .6223 g 3473 3155 M -117 165 V stroke LT0 ! .0117 g .6687 g 3203 3358 M 153 -38 V stroke LT0 ! .0117 g .4469 g 3823 2730 M 107 -36 V stroke LT0 ! .0117 g .5696 g 3590 3001 M -117 154 V stroke LT0 ! .0117 g .6135 g 3320 3194 M 153 -39 V stroke ! LT0 ! .0117 g .2556 g 4867 2179 M -117 28 V stroke ! LT0 ! .0117 g .2776 g 4597 2282 M 153 -75 V stroke LT0 ! .0117 g .5222 g 3706 2858 M -116 143 V stroke LT0 ! .0117 g .5632 g 3437 3039 M 153 -38 V stroke LT0 ! .0117 g .905 g 2851 3892 M -117 185 V stroke LT0 ! .0117 g .9524 g 2581 4099 M 153 -22 V stroke LT0 ! .0117 g .8406 g 2968 3710 M -117 182 V stroke LT0 ! .0117 g .8875 g 2699 3915 M 152 -23 V stroke LT0 ! .0117 g .3097 g 4456 2344 M 24 -10 V stroke LT0 ! .0117 g .7776 g 3086 3531 M -118 179 V stroke LT0 ! .0117 g .8235 g 2816 3732 M 152 -22 V stroke LT0 ! .0117 g .4812 g 3823 2730 M -117 128 V stroke LT0 ! .0117 g .5188 g 3554 2897 M 152 -39 V stroke LT0 ! .0117 g .717 g 3203 3358 M -117 173 V stroke LT0 ! .0117 g .7615 g 2933 3554 M 153 -23 V stroke ! LT0 ! .0117 g .2278 g 5524 2090 M -117 -57 V stroke ! LT0 ! .0117 g .2327 g 5254 2122 M 153 -89 V stroke ! LT0 ! .0117 g .2239 g 5794 2086 M -117 -89 V stroke ! LT0 ! .0117 g .2219 g 5524 2090 M 153 -93 V stroke ! LT0 ! .0117 g .2449 g 5254 2122 M -117 -27 V stroke ! LT0 ! .0117 g .2556 g 4985 2178 M 152 -83 V stroke LT0 ! .0117 g .6599 g 3320 3194 M -117 164 V stroke LT0 ! .0117 g .7024 g 3050 3381 M 153 -23 V stroke LT0 ! .0117 g .4114 g 4058 2525 M 1 -1 V stroke ! LT0 ! .0117 g .2732 g 4985 2178 M -118 1 V stroke ! LT0 ! .0117 g .2888 g 4715 2254 M 152 -75 V stroke ! LT0 ! .0117 g .2351 g 6064 2115 M 5947 1991 L stroke ! LT0 ! .0117 g .2253 g 5794 2086 M 153 -95 V stroke LT0 ! .0117 g .4532 g 3896 2661 M -73 69 V stroke LT0 ! .0117 g .4812 g 3671 2769 M 152 -39 V stroke LT0 ! .0117 g .6072 g 3437 3039 M -117 155 V stroke LT0 ! .0117 g .6472 g 3167 3216 M 153 -22 V stroke ! LT0 ! .0117 g .3108 g 4715 2254 M -118 28 V stroke ! LT0 ! .0117 g .3303 g 4445 2347 M 152 -65 V stroke LT0 ! .0117 g .9348 g 2699 3915 M -118 184 V stroke LT0 ! .0117 g .9778 g 2429 4104 M 152 -5 V stroke LT0 ! .0117 g .5598 g 3554 2897 M -117 142 V stroke LT0 ! .0117 g .5969 g 3284 3062 M 153 -23 V stroke LT0 ! .0117 g .8704 g 2816 3732 M -117 183 V stroke LT0 ! .0117 g .9128 g 2546 3919 M 153 -4 V stroke LT0 ! .0117 g .4601 g 3788 2657 M 82 -21 V stroke LT0 ! .0117 g .8074 g 2933 3554 M -117 178 V stroke LT0 ! .0117 g .8489 g 2663 3736 M 153 -4 V stroke LT0 ! .0117 g .5188 g 3671 2769 M -117 128 V stroke LT0 ! .0117 g .5525 g 3402 2920 M 152 -23 V stroke LT0 ! .0117 g .7468 g 3050 3381 M -117 173 V stroke LT0 ! .0117 g .7869 g 2780 3558 M 153 -4 V stroke LT0 ! .0117 g .6897 g 3167 3216 M -117 165 V stroke LT0 ! .0117 g .7278 g 2897 3385 M 153 -4 V stroke ! LT0 ! .0117 g .2898 g 5372 2179 M -118 -57 V stroke ! LT0 ! .0117 g .2932 g 5102 2205 M 152 -83 V stroke LT0 ! .0117 g .637 g 3284 3062 M -117 154 V stroke LT0 ! .0117 g .6726 g 3015 3221 M 152 -5 V stroke LT0 ! .0117 g .4851 g 3788 2657 M -117 112 V stroke LT0 ! .0117 g .5149 g 3519 2791 M 152 -22 V stroke ! LT0 ! .0117 g .304 g 5102 2205 M -117 -27 V stroke ! LT0 ! .0117 g .3127 g 4832 2253 M 153 -75 V stroke LT0 ! .0117 g .4116 g 4059 2524 M -1 1 V stroke ! LT0 ! .0117 g .2878 g 5642 2179 M -118 -89 V stroke ! LT0 ! .0117 g .2849 g 5372 2179 M 152 -89 V stroke LT0 ! .0117 g .9558 g 2546 3919 M -117 185 V stroke LT0 ! .0117 g .9939 g 2276 4088 M 153 16 V stroke ! LT0 ! .0117 g .3284 g 4832 2253 M -117 1 V stroke ! LT0 ! .0117 g .3416 g 4562 2319 M 153 -65 V stroke LT0 ! .0117 g .8914 g 2663 3736 M -117 183 V stroke LT0 ! .0117 g .929 g 2393 3903 M 153 16 V stroke LT0 ! .0117 g .5896 g 3402 2920 M -118 142 V stroke LT0 ! .0117 g .6223 g 3132 3066 M 152 -4 V stroke ! LT0 ! .0117 g .3 g 5911 2210 M 5794 2086 L stroke ! LT0 ! .0117 g .2898 g 5642 2179 M 152 -93 V stroke LT0 ! .0117 g .8284 g 2780 3558 M -117 178 V stroke LT0 ! .0117 g .865 g 2510 3721 M 153 15 V stroke ! LT0 ! .0117 g .3611 g 4562 2319 M -117 28 V stroke ! LT0 ! .0117 g .3777 g 4292 2399 M 153 -52 V stroke LT0 ! .0117 g .7678 g 2897 3385 M -117 173 V stroke LT0 ! .0117 g .803 g 2627 3542 M 153 16 V stroke LT0 ! .0117 g .4596 g 3847 2609 M -1 1 V stroke LT0 ! .0117 g .4651 g 3845 2610 M -57 47 V stroke LT0 ! .0117 g .4851 g 3635 2679 M 153 -22 V stroke LT0 ! .0117 g .5486 g 3519 2791 M -117 129 V stroke LT0 ! .0117 g .5779 g 3249 2924 M 153 -4 V stroke LT0 ! .0117 g .7107 g 3015 3221 M -118 164 V stroke LT0 ! .0117 g .7439 g 2745 3370 M 152 15 V stroke ! LT0 ! .0117 g .3284 g 6181 2274 M 6064 2115 L stroke ! LT0 ! .0117 g .3098 g 5911 2210 M 153 -95 V stroke LT0 ! .0117 g .658 g 3132 3066 M -117 155 V stroke LT0 ! .0117 g .6887 g 2862 3205 M 153 16 V stroke LT0 ! .0117 g .967 g 2393 3903 M -117 185 V stroke LT0 ! .0117 g .9998 g 2123 4050 M 153 38 V stroke LT0 ! .0117 g .5149 g 3635 2679 M -116 112 V stroke LT0 ! .0117 g .5403 g 3366 2796 M 153 -5 V stroke LT0 ! .0117 g .9026 g 2510 3721 M -117 182 V stroke LT0 ! .0117 g .9348 g 2240 3865 M 153 38 V stroke LT0 ! .0117 g .4675 g 1019 2524 M 901 2708 L stroke LT0 ! .0117 g .5603 g 1054 2995 M 901 2708 L stroke LT0 ! .0117 g .4728 g 3752 2586 M 64 -9 V stroke LT0 ! .0117 g .8396 g 2627 3542 M -117 179 V stroke LT0 ! .0117 g .8708 g 2358 3683 M 152 38 V stroke LT0 ! .0117 g .4031 g 1136 2341 M -117 183 V stroke LT0 ! .0117 g .4954 g 1171 2811 M 1019 2524 L stroke LT0 ! .0117 g .6106 g 3249 2924 M -117 142 V stroke LT0 ! .0117 g .6384 g 2979 3051 M 153 15 V stroke LT0 ! .0117 g .3401 g 1253 2163 M -117 178 V stroke LT0 ! .0117 g .4314 g 1289 2628 M 1136 2341 L stroke LT0 ! .0117 g .7791 g 2745 3370 M -118 172 V stroke LT0 ! .0117 g .8088 g 2475 3504 M 152 38 V stroke ! LT0 ! .0117 g .3489 g 5219 2262 M -117 -57 V stroke ! LT0 ! .0117 g .3503 g 4949 2280 M 153 -75 V stroke ! LT0 ! .0117 g .3591 g 4949 2280 M -117 -27 V stroke ! LT0 ! .0117 g .3655 g 4679 2318 M 153 -65 V stroke LT0 ! .0117 g .2795 g 1370 1990 M -117 173 V stroke LT0 ! .0117 g .3694 g 1406 2450 M 1253 2163 L stroke ! LT0 ! .0117 g .3787 g 4679 2318 M -117 1 V stroke ! LT0 ! .0117 g .3889 g 4409 2372 M 153 -53 V stroke ! LT0 ! .0117 g .3499 g 5489 2268 M -117 -89 V stroke ! LT0 ! .0117 g .3455 g 5219 2262 M 153 -83 V stroke LT0 ! .0117 g .7219 g 2862 3205 M -117 165 V stroke LT0 ! .0117 g .7498 g 2592 3332 M 153 38 V stroke LT0 ! .0117 g .5696 g 3366 2796 M -117 128 V stroke LT0 ! .0117 g .594 g 3096 2908 M 153 16 V stroke LT0 ! .0117 g .4895 g 3752 2586 M -117 93 V stroke LT0 ! .0117 g .5105 g 3483 2684 M 152 -5 V stroke LT0 ! .0117 g .2224 g 1487 1826 M -117 164 V stroke LT0 ! .0117 g .3103 g 1523 2278 M 1370 1990 L stroke LT0 ! .0117 g .9675 g 2240 3865 M -117 185 V stroke LT0 ! .0117 g .9944 g 1970 3988 M 153 62 V stroke ! LT0 ! .0117 g .4055 g 4409 2372 M -117 27 V stroke ! LT0 ! .0117 g .4067 g 4237 2413 M 55 -14 V stroke LT0 ! .0117 g .6692 g 2979 3051 M -117 154 V stroke LT0 ! .0117 g .6946 g 2709 3167 M 153 38 V stroke LT0 ! .0117 g .9031 g 2358 3683 M -118 182 V stroke LT0 ! .0117 g .9294 g 2088 3803 M 152 62 V stroke ! LT0 ! .0117 g .364 g 5759 2303 M 5642 2179 L stroke ! LT0 ! .0117 g .3528 g 5489 2268 M 153 -89 V stroke LT0 ! .0117 g .1697 g 1605 1671 M -118 155 V stroke LT0 ! .0117 g .2551 g 1640 2113 M 1487 1826 L stroke LT0 ! .0117 g .5881 g 1171 2811 M -117 184 V stroke LT0 ! .0117 g .6716 g 1207 3245 M 1054 2995 L stroke LT0 ! .0117 g .8401 g 2475 3504 M -117 179 V stroke LT0 ! .0117 g .8655 g 2205 3621 M 153 62 V stroke LT0 ! .0117 g .5237 g 1289 2628 M -118 183 V stroke LT0 ! .0117 g .6067 g 1324 3060 M 1171 2811 L stroke LT0 ! .0117 g .5359 g 3483 2684 M -117 112 V stroke LT0 ! .0117 g .5564 g 3213 2780 M 153 16 V stroke LT0 ! .0117 g .6218 g 3096 2908 M -117 143 V stroke LT0 ! .0117 g .6443 g 2826 3013 M 153 38 V stroke LT0 ! .0117 g .7795 g 2592 3332 M -117 172 V stroke LT0 ! .0117 g .8035 g 2322 3442 M 153 62 V stroke LT0 ! .0117 g .4607 g 1406 2450 M -117 178 V stroke LT0 ! .0117 g .5427 g 1441 2877 M 1289 2628 L stroke LT0 ! .0117 g .1223 g 1722 1529 M -117 142 V stroke LT0 ! .0117 g .2048 g 1757 1959 M 1605 1671 L stroke LT0 ! .0117 g .7224 g 2709 3167 M -117 165 V stroke LT0 ! .0117 g .7444 g 2439 3270 M 153 62 V stroke LT0 ! .0117 g .9563 g 2088 3803 M -118 185 V stroke LT0 ! .0117 g .9768 g 1818 3900 M 152 88 V stroke LT0 ! .0117 g .4768 g 3799 2557 M -47 29 V stroke LT0 ! .0117 g .4895 g 3600 2590 M 152 -4 V stroke LT0 ! .0117 g .4001 g 1523 2278 M -117 172 V stroke LT0 ! .0117 g .4807 g 1558 2699 M 1406 2450 L stroke ! LT0 ! .0117 g .3933 g 6029 2369 M 5911 2210 L stroke ! LT0 ! .0117 g .3743 g 5759 2303 M 152 -93 V stroke LT0 ! .0117 g .8918 g 2205 3621 M -117 182 V stroke LT0 ! .0117 g .9119 g 1935 3715 M 153 88 V stroke LT0 ! .0117 g .5808 g 3213 2780 M -117 128 V stroke LT0 ! .0117 g .5999 g 2943 2870 M 153 38 V stroke LT0 ! .0117 g .343 g 1640 2113 M -117 165 V stroke LT0 ! .0117 g .4216 g 1676 2527 M 1523 2278 L stroke LT0 ! .0117 g .6902 g 1324 3060 M -117 185 V stroke LT0 ! .0117 g .7649 g 1360 3458 M 1207 3245 L stroke LT0 ! .0117 g .6697 g 2826 3013 M -117 154 V stroke LT0 ! .0117 g .6892 g 2556 3105 M 153 62 V stroke LT0 ! .0117 g .8289 g 2322 3442 M -117 179 V stroke LT0 ! .0117 g .8479 g 2052 3532 M 153 89 V stroke LT0 ! .0117 g .0813 g 1839 1400 M -117 129 V stroke LT0 ! .0117 g .1604 g 1874 1816 M 1722 1529 L stroke LT0 ! .0117 g .6257 g 1441 2877 M -117 183 V stroke LT0 ! .0117 g .7 g 1477 3273 M 1324 3060 L stroke LT0 ! .0117 g .5105 g 3600 2590 M -117 94 V stroke LT0 ! .0117 g .5266 g 3331 2668 M 152 16 V stroke LT0 ! .0117 g .7683 g 2439 3270 M -117 172 V stroke LT0 ! .0117 g .7859 g 2169 3354 M 153 88 V stroke LT0 ! .0117 g .9324 g 1935 3715 M -117 185 V stroke LT0 ! .0117 g .946 g 1665 3783 M 153 117 V stroke LT0 ! .0117 g .2903 g 1757 1959 M -117 154 V stroke LT0 ! .0117 g .3665 g 1793 2363 M 1640 2113 L stroke LT0 ! .0117 g .5627 g 1558 2699 M -117 178 V stroke LT0 ! .0117 g .636 g 1594 3090 M 1441 2877 L stroke ! LT0 ! .0117 g .4094 g 4796 2345 M -117 -27 V stroke ! LT0 ! .0117 g .4128 g 4526 2370 M 153 -52 V stroke LT0 ! .0117 g .8679 g 2052 3532 M -117 183 V stroke LT0 ! .0117 g .8811 g 1782 3599 M 153 116 V stroke LT0 ! .0117 g .6223 g 2943 2870 M -117 143 V stroke LT0 ! .0117 g .6389 g 2674 2951 M 152 62 V stroke ! LT0 ! .0117 g .4231 g 4526 2370 M -117 2 V stroke ! LT0 ! .0117 g .4299 g 4257 2410 M 152 -38 V stroke ! LT0 ! .0117 g .4041 g 5066 2337 M -117 -57 V stroke ! LT0 ! .0117 g .4031 g 4796 2345 M 153 -65 V stroke LT0 ! .0117 g .7747 g 1477 3273 M -117 185 V stroke LT0 ! .0117 g .8411 g 1512 3637 M 1360 3458 L stroke LT0 ! .0117 g .7112 g 2556 3105 M -117 165 V stroke LT0 ! .0117 g .7268 g 2286 3181 M 153 89 V stroke LT0 ! .0117 g .5022 g 1676 2527 M -118 172 V stroke LT0 ! .0117 g .574 g 1711 2912 M 1558 2699 L stroke LT0 ! .0117 g .5471 g 3331 2668 M -118 112 V stroke LT0 ! .0117 g .5623 g 3061 2742 M 152 38 V stroke LT0 ! .0117 g .8049 g 2169 3354 M -117 178 V stroke LT0 ! .0117 g .8171 g 1899 3416 M 153 116 V stroke LT0 ! .0117 g .8948 g 1782 3599 M -117 184 V stroke LT0 ! .0117 g .9011 g 1512 3637 M 153 146 V stroke LT0 ! .0117 g .7102 g 1594 3090 M -117 183 V stroke LT0 ! .0117 g .7761 g 1629 3452 M 1477 3273 L stroke LT0 ! .0117 g .8425 g 1629 3452 M -117 185 V stroke ! LT0 ! .0117 g .4397 g 6299 2472 M 6181 2274 L stroke ! LT0 ! .0117 g .4119 g 6029 2369 M 152 -95 V stroke ! LT0 ! .0117 g .4089 g 5336 2351 M -117 -89 V stroke ! LT0 ! .0117 g .4026 g 5066 2337 M 153 -75 V stroke LT0 ! .0117 g .2429 g 1874 1816 M -117 143 V stroke LT0 ! .0117 g .3162 g 1910 2208 M 1757 1959 L stroke LT0 ! .0117 g .8303 g 1899 3416 M -117 183 V stroke LT0 ! .0117 g .8362 g 1629 3452 M 153 147 V stroke LT0 ! .0117 g .0476 g 1956 1288 M -117 112 V stroke LT0 ! .0117 g .1228 g 1992 1688 M 1839 1400 L stroke LT0 ! .0117 g .4451 g 1793 2363 M -117 164 V stroke LT0 ! .0117 g .5149 g 1828 2739 M 1676 2527 L stroke LT0 ! .0117 g .7444 g 2286 3181 M -117 173 V stroke LT0 ! .0117 g .7551 g 2017 3237 M 152 117 V stroke LT0 ! .0117 g .6472 g 1711 2912 M -117 178 V stroke LT0 ! .0117 g .7122 g 1747 3269 M 1594 3090 L stroke LT0 ! .0117 g .6584 g 2674 2951 M -118 154 V stroke LT0 ! .0117 g .6716 g 2404 3017 M 152 88 V stroke LT0 ! .0117 g .4856 g 3717 2517 M 46 -2 V stroke LT0 ! .0117 g .7781 g 1747 3269 M -118 183 V stroke LT0 ! .0117 g .7673 g 2017 3237 M -118 179 V stroke LT0 ! .0117 g .7722 g 1747 3269 M 152 147 V stroke LT0 ! .0117 g .5813 g 3061 2742 M -118 128 V stroke LT0 ! .0117 g .5945 g 2791 2808 M 152 62 V stroke LT0 ! .0117 g .7151 g 1864 3091 M -117 178 V stroke LT0 ! .0117 g .5867 g 1828 2739 M -117 173 V stroke LT0 ! .0117 g .6501 g 1864 3091 M 1711 2912 L stroke LT0 ! .0117 g .6873 g 2404 3017 M -118 164 V stroke LT0 ! .0117 g .696 g 2134 3065 M 152 116 V stroke LT0 ! .0117 g .4944 g 3717 2517 M -117 73 V stroke LT0 ! .0117 g .5056 g 3448 2575 M 152 15 V stroke LT0 ! .0117 g .3923 g 1910 2208 M -117 155 V stroke LT0 ! .0117 g .4597 g 1946 2576 M 1793 2363 L stroke LT0 ! .0117 g .7068 g 2134 3065 M -117 172 V stroke LT0 ! .0117 g .7102 g 1864 3091 M 153 146 V stroke ! LT0 ! .0117 g .426 g 5606 2392 M 5489 2268 L stroke ! LT0 ! .0117 g .4133 g 5336 2351 M 153 -83 V stroke LT0 ! .0117 g .6545 g 1981 2918 M -117 173 V stroke LT0 ! .0117 g .6111 g 2791 2808 M -117 143 V stroke LT0 ! .0117 g .6213 g 2521 2862 M 153 89 V stroke LT0 ! .0117 g .2019 g 1992 1688 M -118 128 V stroke LT0 ! .0117 g .2717 g 2027 2066 M 1874 1816 L stroke LT0 ! .0117 g .5295 g 1946 2576 M -118 163 V stroke LT0 ! .0117 g .5911 g 1981 2918 M 1828 2739 L stroke LT0 ! .0117 g .5217 g 3448 2575 M -117 93 V stroke LT0 ! .0117 g .5325 g 3178 2630 M 153 38 V stroke LT0 ! .0117 g .6345 g 2521 2862 M -117 155 V stroke LT0 ! .0117 g .6409 g 2251 2900 M 153 117 V stroke LT0 ! .0117 g .6497 g 2251 2900 M -117 165 V stroke LT0 ! .0117 g .6511 g 1981 2918 M 153 147 V stroke LT0 ! .0117 g .5974 g 2098 2754 M -117 164 V stroke LT0 ! .0117 g .345 g 2027 2066 M -117 142 V stroke LT0 ! .0117 g .4094 g 2063 2421 M 1910 2208 L stroke LT0 ! .0117 g .0222 g 2073 1194 M -117 94 V stroke LT0 ! .0117 g .093 g 2109 1576 M 1956 1288 L stroke LT0 ! .0117 g .5476 g 3178 2630 M -117 112 V stroke LT0 ! .0117 g .5569 g 2908 2680 M 153 62 V stroke LT0 ! .0117 g .4768 g 2063 2421 M -117 155 V stroke LT0 ! .0117 g .5359 g 2098 2754 M 1946 2576 L stroke LT0 ! .0117 g .5969 g 2368 2746 M -117 154 V stroke LT0 ! .0117 g .5959 g 2098 2754 M 153 146 V stroke LT0 ! .0117 g .5701 g 2908 2680 M -117 128 V stroke LT0 ! .0117 g .5769 g 2638 2720 M 153 88 V stroke LT0 ! .0117 g .5447 g 2215 2599 M -117 155 V stroke LT0 ! .0117 g .5872 g 2638 2720 M -117 142 V stroke LT0 ! .0117 g .5906 g 2368 2746 M 153 116 V stroke ! LT0 ! .0117 g .4573 g 5876 2462 M 5759 2303 L stroke ! LT0 ! .0117 g .4373 g 5606 2392 M 153 -89 V stroke LT0 ! .0117 g .1682 g 2109 1576 M -117 112 V stroke LT0 ! .0117 g .2341 g 2144 1937 M 1992 1688 L stroke LT0 ! .0117 g .4294 g 2180 2279 M -117 142 V stroke LT0 ! .0117 g .4856 g 2215 2599 M 2063 2421 L stroke LT0 ! .0117 g .304 g 2144 1937 M -117 129 V stroke LT0 ! .0117 g .365 g 2180 2279 M 2027 2066 L stroke ! LT0 ! .0117 g .4607 g 4374 2409 M -117 1 V stroke ! LT0 ! .0117 g .4636 g 4104 2433 M 153 -23 V stroke LT0 ! .0117 g .5496 g 2485 2603 M -117 143 V stroke LT0 ! .0117 g .5457 g 2215 2599 M 153 147 V stroke ! LT0 ! .0117 g .4539 g 4644 2397 M -118 -27 V stroke ! LT0 ! .0117 g .4539 g 4374 2409 M 152 -39 V stroke LT0 ! .0117 g .4887 g 3751 2501 M -34 16 V stroke LT0 ! .0117 g .4944 g 3565 2501 M 152 16 V stroke LT0 ! .0117 g .4973 g 2333 2458 M -118 141 V stroke LT0 ! .0117 g .5056 g 3565 2501 M -117 74 V stroke LT0 ! .0117 g .5115 g 3295 2537 M 153 38 V stroke LT0 ! .0117 g .5461 g 2755 2592 M -117 128 V stroke LT0 ! .0117 g .5461 g 2485 2603 M 153 117 V stroke ! LT0 ! .0117 g .4543 g 4914 2402 M -118 -57 V stroke ! LT0 ! .0117 g .4504 g 4644 2397 M 152 -52 V stroke LT0 ! .0117 g .5222 g 3295 2537 M -117 93 V stroke LT0 ! .0117 g .5271 g 3025 2569 M 153 61 V stroke LT0 ! .0117 g .5364 g 3025 2569 M -117 111 V stroke LT0 ! .0117 g .5393 g 2755 2592 M 153 88 V stroke LT0 ! .0117 g .0061 g 2190 1120 M -117 74 V stroke LT0 ! .0117 g .072 g 2226 1482 M 2073 1194 L stroke LT0 ! .0117 g .3884 g 2297 2151 M -117 128 V stroke LT0 ! .0117 g .4412 g 2333 2458 M 2180 2279 L stroke LT0 ! .0117 g .5085 g 2603 2476 M -118 127 V stroke LT0 ! .0117 g .5012 g 2333 2458 M 152 145 V stroke LT0 ! .0117 g .1428 g 2226 1482 M -117 94 V stroke LT0 ! .0117 g .2043 g 2262 1825 M 2109 1576 L stroke ! LT0 ! .0117 g .4641 g 5183 2426 M -117 -89 V stroke ! LT0 ! .0117 g .4553 g 4914 2402 M 152 -65 V stroke LT0 ! .0117 g .2703 g 2262 1825 M -118 112 V stroke LT0 ! .0117 g .3274 g 2297 2151 M 2144 1937 L stroke LT0 ! .0117 g .4563 g 2450 2329 M -117 129 V stroke ! LT0 ! .0117 g .5046 g 6146 2567 M 6029 2369 L stroke ! LT0 ! .0117 g .4763 g 5876 2462 M 153 -93 V stroke LT0 ! .0117 g .5125 g 2872 2480 M -117 112 V stroke LT0 ! .0117 g .5085 g 2603 2476 M 152 116 V stroke LT0 ! .0117 g .511 g 3142 2475 M -117 94 V stroke LT0 ! .0117 g .5095 g 2872 2480 M 153 89 V stroke LT0 ! .0117 g .3547 g 2414 2038 M -117 113 V stroke LT0 ! .0117 g .4036 g 2450 2329 M 2297 2151 L stroke ! LT0 ! .0117 g .4851 g 5453 2475 M 5336 2351 L stroke ! LT0 ! .0117 g .4705 g 5183 2426 M 153 -75 V stroke LT0 ! .0117 g .5061 g 3412 2463 M -117 74 V stroke LT0 ! .0117 g .5061 g 3142 2475 M 153 62 V stroke LT0 ! .0117 g .4749 g 2720 2364 M -117 112 V stroke LT0 ! .0117 g .4636 g 2450 2329 M 153 147 V stroke LT0 ! .0117 g .4226 g 2567 2217 M -117 112 V stroke LT0 ! .0117 g .4998 g 3681 2449 M -116 52 V stroke LT0 ! .0117 g .5002 g 3412 2463 M 153 38 V stroke LT0 ! .0117 g .2449 g 2379 1731 M -117 94 V stroke LT0 ! .0117 g .2976 g 2414 2038 M 2262 1825 L stroke LT0 ! .0117 g .4985 g 3681 2449 M 28 3 V stroke LT0 ! .0117 g .0002 g 2308 1069 M -118 51 V stroke LT0 ! .0117 g .0608 g 2343 1408 M 2190 1120 L stroke LT0 ! .0117 g .1267 g 2343 1408 M -117 74 V stroke LT0 ! .0117 g .1833 g 2379 1731 M 2226 1482 L stroke ! LT0 ! .0117 g .4905 g 4221 2432 M -117 1 V stroke ! LT0 ! .0117 g .482 g 4053 2434 M 51 -1 V stroke LT0 ! .0117 g .4871 g 2990 2386 M -118 94 V stroke LT0 ! .0117 g .4788 g 2720 2364 M 152 116 V stroke ! LT0 ! .0117 g .4915 g 4491 2436 M -117 -27 V stroke ! LT0 ! .0117 g .4875 g 4221 2432 M 153 -23 V stroke ! LT0 ! .0117 g .5193 g 5723 2551 M 5606 2392 L stroke ! LT0 ! .0117 g .4978 g 5453 2475 M 153 -83 V stroke LT0 ! .0117 g .3293 g 2531 1944 M -117 94 V stroke LT0 ! .0117 g .3738 g 2567 2217 M 2414 2038 L stroke LT0 ! .0117 g .4495 g 2837 2270 M -117 94 V stroke LT0 ! .0117 g .4338 g 2567 2217 M 153 147 V stroke LT0 ! .0117 g .4949 g 3260 2401 M -118 74 V stroke LT0 ! .0117 g .4885 g 2990 2386 M 152 89 V stroke ! LT0 ! .0117 g .5325 g 6146 2567 M 153 -95 V stroke ! LT0 ! .0117 g .4988 g 4761 2454 M -117 -57 V stroke ! LT0 ! .0117 g .4915 g 4491 2436 M 153 -39 V stroke LT0 ! .0117 g .3972 g 2684 2123 M -117 94 V stroke LT0 ! .0117 g .2288 g 2496 1657 M -117 74 V stroke LT0 ! .0117 g .2766 g 2531 1944 M 2379 1731 L stroke LT0 ! .0117 g .5002 g 3529 2411 M -117 52 V stroke LT0 ! .0117 g .4949 g 3260 2401 M 152 62 V stroke ! LT0 ! .0117 g .5144 g 5031 2491 M -117 -89 V stroke ! LT0 ! .0117 g .5027 g 4761 2454 M 153 -52 V stroke LT0 ! .0117 g .4709 g 3107 2313 M -117 73 V stroke LT0 ! .0117 g .4578 g 2837 2270 M 153 116 V stroke LT0 ! .0117 g .5005 g 3702 2444 M -21 5 V stroke LT0 ! .0117 g .4998 g 3529 2411 M 152 38 V stroke LT0 ! .0117 g .1208 g 2460 1356 M -117 52 V stroke LT0 ! .0117 g .1721 g 2496 1657 M 2343 1408 L stroke LT0 ! .0117 g .0056 g 2425 1041 M -117 28 V stroke LT0 ! .0117 g .0603 g 2460 1356 M 2308 1069 L stroke LT0 ! .0117 g .3132 g 2649 1871 M -118 73 V stroke LT0 ! .0117 g .3528 g 2684 2123 M 2531 1944 L stroke ! LT0 ! .0117 g .5686 g 5993 2659 M 5876 2462 L stroke ! LT0 ! .0117 g .5393 g 5723 2551 M 153 -89 V stroke LT0 ! .0117 g .4333 g 2954 2196 M -117 74 V stroke LT0 ! .0117 g .4128 g 2684 2123 M 153 147 V stroke LT0 ! .0117 g .3811 g 2801 2049 M -117 74 V stroke ! LT0 ! .0117 g .5403 g 5301 2549 M 5183 2426 L stroke ! LT0 ! .0117 g .5232 g 5031 2491 M 152 -65 V stroke LT0 ! .0117 g .489 g 3377 2349 M -117 52 V stroke LT0 ! .0117 g .4773 g 3107 2313 M 153 88 V stroke ! LT0 ! .0117 g .5212 g 4338 2458 M -117 -26 V stroke ! LT0 ! .0117 g .5129 g 4068 2436 M 153 -4 V stroke LT0 ! .0117 g .2229 g 2613 1606 M -117 51 V stroke LT0 ! .0117 g .2654 g 2649 1871 M 2496 1657 L stroke LT0 ! .0117 g .5056 g 3646 2384 M -117 27 V stroke LT0 ! .0117 g .4944 g 3377 2349 M 152 62 V stroke LT0 ! .0117 g .4651 g 3224 2261 M -117 52 V stroke LT0 ! .0117 g .4465 g 2954 2196 M 153 117 V stroke ! LT0 ! .0117 g .5364 g 4608 2493 M -117 -57 V stroke ! LT0 ! .0117 g .5251 g 4338 2458 M 153 -22 V stroke LT0 ! .0117 g .3074 g 2766 1819 M -117 52 V stroke LT0 ! .0117 g .3416 g 2801 2049 M 2649 1871 L stroke LT0 ! .0117 g .1262 g 2578 1329 M -118 27 V stroke LT0 ! .0117 g .1716 g 2613 1606 M 2460 1356 L stroke ! LT0 ! .0117 g .5784 g 5571 2633 M 5453 2475 L stroke ! LT0 ! .0117 g .5549 g 5301 2549 M 152 -74 V stroke LT0 ! .0117 g .4275 g 3071 2144 M -117 52 V stroke LT0 ! .0117 g .4016 g 2801 2049 M 153 147 V stroke LT0 ! .0117 g .511 g 3720 2402 M 1 0 V stroke LT0 ! .0117 g .5112 g 3646 2384 M 16 4 V stroke LT0 ! .0117 g .3752 g 2919 1998 M -118 51 V stroke ! LT0 ! .0117 g .5969 g 5993 2659 M 153 -92 V stroke ! LT0 ! .0117 g .5588 g 4878 2543 M -117 -89 V stroke ! LT0 ! .0117 g .5437 g 4608 2493 M 153 -39 V stroke LT0 ! .0117 g .0232 g 2542 1040 M -117 1 V stroke LT0 ! .0117 g .0715 g 2578 1329 M 2425 1041 L stroke LT0 ! .0117 g .4944 g 3494 2322 M -117 27 V stroke LT0 ! .0117 g .4768 g 3224 2261 M 153 88 V stroke ! LT0 ! .0117 g .5422 g 4185 2463 M -117 -27 V stroke ! LT0 ! .0117 g .5285 g 3931 2422 M 137 14 V stroke LT0 ! .0117 g .2283 g 2730 1578 M -117 28 V stroke LT0 ! .0117 g .2649 g 2766 1819 M 2613 1606 L stroke ! LT0 ! .0117 g .6306 g 5840 2748 M 5723 2551 L stroke ! LT0 ! .0117 g .5999 g 5571 2633 M 152 -82 V stroke ! LT0 ! .0117 g .5906 g 5148 2613 M 5031 2491 L stroke ! LT0 ! .0117 g .5706 g 4878 2543 M 153 -52 V stroke LT0 ! .0117 g .4705 g 3341 2233 M -117 28 V stroke LT0 ! .0117 g .446 g 3071 2144 M 153 117 V stroke LT0 ! .0117 g .5126 g 3659 2383 M -13 1 V stroke LT0 ! .0117 g .5056 g 3494 2322 M 152 62 V stroke LT0 ! .0117 g .3127 g 2883 1791 M -117 28 V stroke LT0 ! .0117 g .3411 g 2919 1998 M 2766 1819 L stroke ! LT0 ! .0117 g .5662 g 4455 2515 M -117 -57 V stroke ! LT0 ! .0117 g .5505 g 4185 2463 M 153 -5 V stroke LT0 ! .0117 g .4329 g 3188 2117 M -117 27 V stroke LT0 ! .0117 g .4011 g 2919 1998 M 152 146 V stroke LT0 ! .0117 g .3806 g 3036 1970 M -117 28 V stroke LT0 ! .0117 g .1438 g 2695 1327 M -117 2 V stroke LT0 ! .0117 g .1829 g 2730 1578 M 2578 1329 L stroke ! LT0 ! .0117 g .6335 g 5418 2708 M 5301 2549 L stroke ! LT0 ! .0117 g .6077 g 5148 2613 M 153 -64 V stroke LT0 ! .0117 g .512 g 3610 2320 M -116 2 V stroke LT0 ! .0117 g .488 g 3341 2233 M 153 89 V stroke ! LT0 ! .0117 g .5964 g 4725 2582 M -117 -89 V stroke ! LT0 ! .0117 g .5774 g 4455 2515 M 153 -22 V stroke LT0 ! .0117 g .054 g 2659 1066 M -117 -26 V stroke LT0 ! .0117 g .0955 g 2695 1327 M 2542 1040 L stroke LT0 ! .0117 g .2458 g 2847 1577 M -117 1 V stroke LT0 ! .0117 g .2761 g 2883 1791 M 2730 1578 L stroke ! LT0 ! .0117 g .6599 g 5840 2748 M 153 -89 V stroke LT0 ! .0117 g .488 g 3458 2232 M -117 1 V stroke LT0 ! .0117 g .4573 g 3188 2117 M 153 116 V stroke ! LT0 ! .0117 g .5872 g 4303 2520 M -118 -57 V stroke ! LT0 ! .0117 g .5667 g 4033 2447 M 152 16 V stroke LT0 ! .0117 g .3303 g 3000 1790 M -117 1 V stroke LT0 ! .0117 g .3523 g 3036 1970 M 2883 1791 L stroke ! LT0 ! .0117 g .635 g 4995 2666 M 4878 2543 L stroke ! LT0 ! .0117 g .6116 g 4725 2582 M 153 -39 V stroke LT0 ! .0117 g .4504 g 3306 2115 M -118 2 V stroke LT0 ! .0117 g .4124 g 3036 1970 M 152 147 V stroke LT0 ! .0117 g .5241 g 3610 2320 M 5 2 V stroke LT0 ! .0117 g .3982 g 3153 1969 M -117 1 V stroke ! LT0 ! .0117 g .6897 g 5688 2831 M 5571 2633 L stroke ! LT0 ! .0117 g .657 g 5418 2708 M 153 -75 V stroke LT0 ! .0117 g .1746 g 2812 1354 M -117 -27 V stroke LT0 ! .0117 g .2068 g 2847 1577 M 2695 1327 L stroke ! LT0 ! .0117 g .6262 g 4573 2604 M -118 -89 V stroke ! LT0 ! .0117 g .6028 g 4303 2520 M 152 -5 V stroke LT0 ! .0117 g .5246 g 3614 2321 M -4 -1 V stroke LT0 ! .0117 g .512 g 3458 2232 M 152 88 V stroke ! LT0 ! .0117 g .6838 g 5265 2773 M 5148 2613 L stroke ! LT0 ! .0117 g .655 g 4995 2666 M 153 -53 V stroke ! LT0 ! .0117 g .5984 g 4150 2504 M -117 -57 V stroke ! LT0 ! .0117 g .5725 g 3880 2409 M 153 38 V stroke LT0 ! .0117 g .2766 g 2965 1603 M -118 -26 V stroke LT0 ! .0117 g .3 g 3000 1790 M 2847 1577 L stroke LT0 ! .0117 g .0989 g 2776 1123 M -117 -57 V stroke LT0 ! .0117 g .1331 g 2812 1354 M 2659 1066 L stroke LT0 ! .0117 g .5178 g 3570 2257 M -112 -25 V stroke LT0 ! .0117 g .4812 g 3306 2115 M 152 117 V stroke ! LT0 ! .0117 g .7205 g 5688 2831 M 152 -83 V stroke ! LT0 ! .0117 g .6726 g 4842 2705 M 4725 2582 L stroke ! LT0 ! .0117 g .6453 g 4573 2604 M 152 -22 V stroke LT0 ! .0117 g .3611 g 3117 1817 M -117 -27 V stroke LT0 ! .0117 g .3762 g 3153 1969 M 3000 1790 L stroke LT0 ! .0117 g .4812 g 3423 2142 M -117 -27 V stroke LT0 ! .0117 g .4363 g 3153 1969 M 153 146 V stroke LT0 ! .0117 g .429 g 3270 1995 M -117 -26 V stroke ! LT0 ! .0117 g .5989 g 3997 2466 M -117 -57 V stroke ! LT0 ! .0117 g .5694 g 3790 2372 M 90 37 V stroke ! LT0 ! .0117 g .6472 g 4420 2608 M -117 -88 V stroke ! LT0 ! .0117 g .6189 g 4150 2504 M 153 16 V stroke ! LT0 ! .0117 g .7449 g 5535 2906 M 5418 2708 L stroke ! LT0 ! .0117 g .7097 g 5265 2773 M 153 -65 V stroke LT0 ! .0117 g .2195 g 2929 1411 M -117 -57 V stroke LT0 ! .0117 g .2444 g 2965 1603 M 2812 1354 L stroke ! LT0 ! .0117 g .7283 g 5112 2826 M 4995 2666 L stroke ! LT0 ! .0117 g .696 g 4842 2705 M 153 -39 V stroke LT0 ! .0117 g .3215 g 3082 1660 M -117 -57 V stroke LT0 ! .0117 g .3376 g 3117 1817 M 2965 1603 L stroke ! LT0 ! .0117 g .7024 g 4690 2727 M 4573 2604 L stroke ! LT0 ! .0117 g .6707 g 4420 2608 M 153 -4 V stroke ! LT0 ! .0117 g .6584 g 4267 2592 M -117 -88 V stroke ! LT0 ! .0117 g .6248 g 3997 2466 M 153 38 V stroke LT0 ! .0117 g .5834 g 3681 2310 M -7 -3 V stroke LT0 ! .0117 g .5174 g 3423 2142 M 141 108 V stroke LT0 ! .0117 g .1589 g 2894 1213 M -118 -90 V stroke LT0 ! .0117 g .1853 g 2929 1411 M 2776 1123 L stroke LT0 ! .0117 g .406 g 3235 1874 M -118 -57 V stroke LT0 ! .0117 g .4138 g 3270 1995 M 3117 1817 L stroke ! LT0 ! .0117 g .7776 g 5535 2906 M 153 -75 V stroke LT0 ! .0117 g .5233 g 3527 2193 M -104 -51 V stroke LT0 ! .0117 g .4739 g 3270 1995 M 153 147 V stroke LT0 ! .0117 g .4739 g 3387 2053 M -117 -58 V stroke ! LT0 ! .0117 g .7952 g 5382 2971 M 5265 2773 L stroke ! LT0 ! .0117 g .7571 g 5112 2826 M 153 -53 V stroke ! LT0 ! .0117 g .6589 g 4114 2555 M -117 -89 V stroke ! LT0 ! .0117 g .6194 g 3844 2404 M 153 62 V stroke ! LT0 ! .0117 g .7659 g 4960 2864 M 4842 2705 L stroke ! LT0 ! .0117 g .7297 g 4690 2727 M 152 -22 V stroke ! LT0 ! .0117 g .7234 g 4537 2731 M 4420 2608 L stroke ! LT0 ! .0117 g .6868 g 4267 2592 M 153 16 V stroke LT0 ! .0117 g .2795 g 3046 1500 M -117 -89 V stroke LT0 ! .0117 g .2966 g 3082 1660 M 2929 1411 L stroke ! LT0 ! .0117 g .6477 g 3962 2493 M -118 -89 V stroke ! LT0 ! .0117 g .6018 g 3692 2316 M 152 88 V stroke LT0 ! .0117 g .3816 g 3199 1750 M -117 -90 V stroke LT0 ! .0117 g .3899 g 3235 1874 M 3082 1660 L stroke LT0 ! .0117 g .6238 g 3809 2405 M -117 -89 V stroke LT0 ! .0117 g .5855 g 3657 2289 M 35 27 V stroke ! LT0 ! .0117 g .8303 g 5382 2971 M 153 -65 V stroke ! LT0 ! .0117 g .7346 g 4384 2716 M 4267 2592 L stroke ! LT0 ! .0117 g .6926 g 4114 2555 M 153 37 V stroke LT0 ! .0117 g .4661 g 3352 1963 M -117 -89 V stroke LT0 ! .0117 g .4661 g 3387 2053 M 3235 1874 L stroke ! LT0 ! .0117 g .8396 g 5230 3024 M 5112 2826 L stroke ! LT0 ! .0117 g .7981 g 4960 2864 M 152 -38 V stroke LT0 ! .0117 g .2351 g 3011 1336 M 2894 1213 L stroke LT0 ! .0117 g .2532 g 3046 1500 M 2894 1213 L stroke LT0 ! .0117 g .5225 g 3387 2053 M 132 126 V stroke ! LT0 ! .0117 g .7957 g 4807 2887 M 4690 2727 L stroke ! LT0 ! .0117 g .7551 g 4537 2731 M 153 -4 V stroke LT0 ! .0117 g .5293 g 3489 2130 M -102 -77 V stroke ! LT0 ! .0117 g .7351 g 4232 2678 M 4114 2555 L stroke ! LT0 ! .0117 g .6873 g 3962 2493 M 152 62 V stroke LT0 ! .0117 g .3557 g 3164 1624 M 3046 1500 L stroke LT0 ! .0117 g .3645 g 3199 1750 M 3046 1500 L stroke ! LT0 ! .0117 g .8167 g 4654 2891 M 4537 2731 L stroke ! LT0 ! .0117 g .7712 g 4384 2716 M 153 15 V stroke ! LT0 ! .0117 g .8777 g 5230 3024 M 152 -53 V stroke ! LT0 ! .0117 g .8772 g 5077 3062 M 4960 2864 L stroke ! LT0 ! .0117 g .8318 g 4807 2887 M 153 -23 V stroke ! LT0 ! .0117 g .7239 g 4079 2616 M 3962 2493 L stroke ! LT0 ! .0117 g .6697 g 3809 2405 M 153 88 V stroke LT0 ! .0117 g .4578 g 3316 1873 M 3199 1750 L stroke LT0 ! .0117 g .4578 g 3352 1963 M 3199 1750 L stroke ! LT0 ! .0117 g .7 g 3926 2528 M 3809 2405 L stroke ! LT0 ! .0117 g .6389 g 3656 2288 M 153 117 V stroke LT0 ! .0117 g .5839 g 3469 2086 M -2 -1 V stroke LT0 ! .0117 g .5352 g 3450 2066 M -98 -103 V stroke LT0 ! .0117 g .5273 g 3475 2107 M 3352 1963 L stroke ! LT0 ! .0117 g .6624 g 3773 2412 M 3656 2288 L stroke ! LT0 ! .0117 g .6052 g 3570 2205 M 86 83 V stroke ! LT0 ! .0117 g .8279 g 4501 2875 M 4384 2716 L stroke ! LT0 ! .0117 g .7771 g 4232 2678 M 152 38 V stroke LT0 ! .0117 g .3284 g 3128 1496 M 3011 1336 L stroke LT0 ! .0117 g .3376 g 3164 1624 M 3011 1336 L stroke ! LT0 ! .0117 g .907 g 4924 3085 M 4807 2887 L stroke ! LT0 ! .0117 g .8572 g 4654 2891 M 153 -4 V stroke ! LT0 ! .0117 g .9187 g 5077 3062 M 153 -38 V stroke ! LT0 ! .0117 g .8284 g 4349 2837 M 4232 2678 L stroke ! LT0 ! .0117 g .7717 g 4079 2616 M 153 62 V stroke LT0 ! .0117 g .449 g 3281 1784 M 3164 1624 L stroke LT0 ! .0117 g .449 g 3316 1873 M 3164 1624 L stroke ! LT0 ! .0117 g .8171 g 4196 2775 M 4079 2616 L stroke ! LT0 ! .0117 g .7542 g 3926 2528 M 153 88 V stroke ! LT0 ! .0117 g .928 g 4771 3089 M 4654 2891 L stroke ! LT0 ! .0117 g .8733 g 4501 2875 M 153 16 V stroke LT0 ! .0117 g .5403 g 3409 1999 M -93 -126 V stroke LT0 ! .0117 g .5782 g 3469 2086 M -23 -31 V stroke LT0 ! .0117 g .5291 g 3422 2020 M 3316 1873 L stroke ! LT0 ! .0117 g .7932 g 4043 2687 M 3926 2528 L stroke ! LT0 ! .0117 g .7234 g 3773 2412 M 153 116 V stroke ! LT0 ! .0117 g .9524 g 4924 3085 M 153 -23 V stroke ! LT0 ! .0117 g .6222 g 3621 2265 M 3486 2106 L stroke ! LT0 ! .0117 g .7556 g 3891 2572 M 3773 2412 L stroke ! LT0 ! .0117 g .6785 g 3621 2265 M 152 147 V stroke ! LT0 ! .0117 g .7034 g 3738 2425 M 3621 2265 L stroke ! LT0 ! .0117 g .9392 g 4619 3073 M 4501 2875 L stroke ! LT0 ! .0117 g .8792 g 4349 2837 M 152 38 V stroke LT0 ! .0117 g .4397 g 3245 1694 M 3128 1496 L stroke LT0 ! .0117 g .4397 g 3281 1784 M 3128 1496 L stroke ! LT0 ! .0117 g .9778 g 4771 3089 M 153 -4 V stroke ! LT0 ! .0117 g .9397 g 4466 3035 M 4349 2837 L stroke ! LT0 ! .0117 g .8738 g 4196 2775 M 153 62 V stroke LT0 ! .0117 g .5603 g 3398 1981 M 3281 1784 L stroke ! LT0 ! .0117 g .5813 g 3433 2033 M -62 -101 V stroke ! LT0 ! .0117 g .9285 g 4313 2973 M 4196 2775 L stroke ! LT0 ! .0117 g .8562 g 4043 2687 M 153 88 V stroke ! LT0 ! .0117 g .6624 g 3551 2231 M 3433 2033 L stroke ! LT0 ! .0117 g .6443 g 3586 2246 M 3433 2033 L stroke ! LT0 ! .0117 g .9939 g 4619 3073 M 152 16 V stroke ! LT0 ! .0117 g .9045 g 4160 2885 M 4043 2687 L stroke ! LT0 ! .0117 g .8254 g 3891 2572 M 152 115 V stroke ! LT0 ! .0117 g .7468 g 3702 2444 M 3586 2246 L stroke ! LT0 ! .0117 g .7205 g 3738 2425 M 3586 2246 L stroke ! LT0 ! .0117 g .8669 g 4008 2769 M 3891 2572 L stroke ! LT0 ! .0117 g .7805 g 3738 2425 M 153 147 V stroke ! LT0 ! .0117 g .8147 g 3855 2622 M 3738 2425 L stroke ! LT0 ! .0117 g .9998 g 4466 3035 M 153 38 V stroke LT0 ! .0117 g .5603 g 3398 1981 M 3245 1694 L stroke ! LT0 ! .0117 g .9944 g 4313 2973 M 153 62 V stroke ! LT0 ! .0117 g .6716 g 3551 2231 M 3398 1981 L stroke ! LT0 ! .0117 g .9768 g 4160 2885 M 153 88 V stroke ! LT0 ! .0117 g .7649 g 3702 2444 M 3551 2231 L stroke ! LT0 ! .0117 g .946 g 4008 2769 M 152 116 V stroke ! LT0 ! .0117 g .8411 g 3855 2622 M 3702 2444 L stroke ! LT0 ! .0117 g .9011 g 3855 2622 M 153 147 V stroke LT0 --- 535,3605 ---- 1.000 UP 1.000 UL LT0 ! .4675 g 4072 3301 M -117 185 V stroke LT0 ! .5325 g 3802 3581 M 153 -95 V stroke LT0 ! .4031 g 4189 3119 M -117 182 V stroke LT0 ! .4675 g 3919 3396 M 153 -95 V stroke LT0 ! .3438 g 4293 2961 M -104 158 V stroke LT0 ! .4036 g 4036 3214 M 153 -95 V stroke LT0 ! .2501 g 4424 2768 M -1 0 V stroke LT0 ! .3467 g 4154 3035 M 128 -80 V stroke LT0 ! .2502 g 4423 2768 M 1 0 V stroke LT0 ! .1626 g 4622 2402 M 12 -7 V stroke LT0 ! .5325 g 3919 3396 M -117 185 V stroke LT0 ! .5969 g 3649 3674 M 153 -93 V stroke LT0 ! .468 g 4036 3214 M -117 182 V stroke LT0 ! .532 g 3767 3489 M 152 -93 V stroke LT0 ! .405 g 4154 3035 M -118 179 V stroke LT0 ! .468 g 3884 3307 M 152 -93 V stroke LT0 ! .3551 g 4229 2925 M -75 110 V stroke LT0 ! .406 g 4001 3128 M 153 -93 V stroke LT0 ! .3621 g 4118 2956 M 80 -49 V stroke LT0 ! .0283 g 5037 2045 M -6 4 V stroke LT0 ! .2734 g 4353 2637 M 0 -1 V stroke LT0 ! .1644 g 4626 2398 M -4 4 V stroke LT0 ! .5964 g 3767 3489 M -118 185 V stroke LT0 ! .6599 g 3498 3763 M 151 -89 V stroke LT0 ! .532 g 3884 3307 M -117 182 V stroke LT0 ! .595 g 3614 3578 M 153 -89 V stroke LT0 ! .469 g 4001 3128 M -117 179 V stroke LT0 ! .531 g 3731 3396 M 153 -89 V stroke LT0 ! .4084 g 4118 2956 M -117 172 V stroke LT0 ! .469 g 3848 3217 M 153 -89 V stroke LT0 ! .3676 g 4166 2888 M -48 68 V stroke LT0 ! .4099 g 3965 3045 M 153 -89 V stroke LT0 ! .3775 g 4083 2880 M 40 -23 V stroke ! LT1 ! .0002 g 5361 1847 M -117 52 V stroke ! LT1 ! .033 g 5091 1994 M 153 -95 V stroke LT0 ! .089 g 4906 2122 M -2 2 V stroke LT0 ! .2734 g 4353 2636 M 0 1 V stroke LT0 ! .6584 g 3614 3578 M -116 185 V stroke LT0 ! .7205 g 3345 3846 M 153 -83 V stroke LT0 ! .594 g 3731 3396 M -117 182 V stroke LT0 ! .6555 g 3462 3661 M 152 -83 V stroke LT0 ! .531 g 3848 3217 M -117 179 V stroke LT0 ! .5916 g 3579 3479 M 152 -83 V stroke ! LT1 ! .0056 g 5478 1820 M -117 27 V stroke ! LT1 ! .0325 g 5208 1942 M 153 -95 V stroke LT0 ! .4705 g 3965 3045 M -117 172 V stroke LT0 ! .5295 g 3696 3300 M 152 -83 V stroke LT0 ! .1632 g 4699 2260 M -2 2 V stroke LT0 ! .4133 g 4083 2880 M -118 165 V stroke LT0 ! .4705 g 3813 3127 M 152 -82 V stroke LT0 ! .3801 g 4109 2846 M -26 34 V stroke LT0 ! .4153 g 3930 2963 M 153 -83 V stroke ! LT1 ! .0652 g 5208 1942 M -117 52 V stroke ! LT1 ! .0974 g 4938 2087 M 153 -93 V stroke LT0 ! .1693 g 4679 2269 M 12 -7 V stroke LT0 ! .2234 g 4551 2344 M 2 -1 V stroke LT0 ! .3931 g 4047 2809 M 8 -5 V stroke ! LT1 ! .0232 g 5595 1818 M -117 2 V stroke ! LT1 ! .0437 g 5326 1915 M 152 -95 V stroke LT0 ! .7175 g 3462 3661 M -117 185 V stroke LT0 ! .7776 g 3192 3921 M 153 -75 V stroke LT0 ! .6531 g 3579 3479 M -117 182 V stroke LT0 ! .7126 g 3309 3736 M 153 -75 V stroke LT0 ! .1888 g 4698 2233 M 10 -6 V stroke LT0 ! .5901 g 3696 3300 M -117 179 V stroke LT0 ! .6487 g 3427 3554 M 152 -75 V stroke LT0 ! .5295 g 3813 3127 M -117 173 V stroke LT0 ! .5867 g 3544 3375 M 152 -75 V stroke ! LT1 ! .0706 g 5326 1915 M -118 27 V stroke ! LT1 ! .0969 g 5056 2035 M 152 -93 V stroke LT0 ! .4724 g 3930 2963 M -117 164 V stroke LT0 ! .5276 g 3660 3202 M 153 -75 V stroke LT0 ! .4197 g 4047 2809 M -117 154 V stroke LT0 ! .4724 g 3777 3038 M 153 -75 V stroke ! LT1 ! .1292 g 5056 2035 M -118 52 V stroke ! LT1 ! .1604 g 4786 2176 M 152 -89 V stroke LT0 ! .2236 g 4552 2343 M -1 1 V stroke LT0 ! .3936 g 4052 2802 M -5 7 V stroke LT0 ! .4221 g 3894 2883 M 153 -74 V stroke ! LT1 ! .054 g 5713 1845 M -118 -27 V stroke ! LT1 ! .0676 g 5443 1913 M 152 -95 V stroke LT0 ! .7727 g 3309 3736 M -117 185 V stroke LT0 ! .8303 g 3040 3986 M 152 -65 V stroke ! LT1 ! .0881 g 5443 1913 M -117 2 V stroke ! LT1 ! .1082 g 5173 2008 M 153 -93 V stroke LT0 ! .7083 g 3427 3554 M -118 182 V stroke LT0 ! .7654 g 3157 3801 M 152 -65 V stroke LT0 ! .6453 g 3544 3375 M -117 179 V stroke LT0 ! .7014 g 3274 3618 M 153 -64 V stroke LT0 ! .2004 g 4696 2232 M -8 6 V stroke LT0 ! .5847 g 3660 3202 M -116 173 V stroke LT0 ! .6394 g 3391 3440 M 153 -65 V stroke ! LT1 ! .1345 g 5173 2008 M -117 27 V stroke ! LT1 ! .1599 g 4903 2124 M 153 -89 V stroke LT0 ! .5276 g 3777 3038 M -117 164 V stroke LT0 ! .5803 g 3508 3267 M 152 -65 V stroke LT0 ! .4749 g 3894 2883 M -117 155 V stroke LT0 ! .5251 g 3624 3103 M 153 -65 V stroke ! LT1 ! .1912 g 4903 2124 M -117 52 V stroke ! LT1 ! .2209 g 4633 2259 M 153 -83 V stroke LT0 ! .4302 g 3997 2758 M -103 125 V stroke LT0 ! .4749 g 3742 2948 M 152 -65 V stroke ! LT1 ! .0989 g 5830 1902 M -117 -57 V stroke ! LT1 ! .1052 g 5560 1940 M 153 -95 V stroke ! LT1 ! .1189 g 5560 1940 M -117 -27 V stroke ! LT1 ! .1321 g 5290 2006 M 153 -93 V stroke LT0 ! .823 g 3157 3801 M -117 185 V stroke LT0 ! .8777 g 2887 4038 M 153 -52 V stroke LT0 ! .7585 g 3274 3618 M -117 183 V stroke LT0 ! .8127 g 3004 3854 M 153 -53 V stroke LT0 ! .4341 g 3859 2806 M 130 -55 V stroke ! LT1 ! .1521 g 5290 2006 M -117 2 V stroke ! LT1 ! .1711 g 5020 2097 M 153 -89 V stroke LT0 ! .6956 g 3391 3440 M -117 178 V stroke LT0 ! .7488 g 3121 3671 M 153 -53 V stroke LT0 ! .635 g 3508 3267 M -117 173 V stroke LT0 ! .6868 g 3238 3492 M 153 -52 V stroke LT0 ! .5779 g 3624 3103 M -116 164 V stroke LT0 ! .6277 g 3356 3320 M 152 -53 V stroke ! LT1 ! .1965 g 5020 2097 M -117 27 V stroke ! LT1 ! .2205 g 4750 2207 M 153 -83 V stroke LT0 ! .5251 g 3742 2948 M -118 155 V stroke LT0 ! .5725 g 3473 3155 M 151 -52 V stroke LT0 ! .4778 g 3859 2806 M -117 142 V stroke LT0 ! .5222 g 3590 3001 M 152 -53 V stroke LT0 ! .3804 g 4116 2557 M 2 -1 V stroke ! LT1 ! .2502 g 4750 2207 M -117 52 V stroke ! LT1 ! .2725 g 4511 2319 M 122 -60 V stroke LT0 ! .8674 g 3004 3854 M -117 184 V stroke LT0 ! .9187 g 2734 4077 M 153 -39 V stroke ! LT1 ! .1638 g 5677 1997 M -117 -57 V stroke ! LT1 ! .1697 g 5407 2033 M 153 -93 V stroke LT0 ! .803 g 3121 3671 M -117 183 V stroke LT0 ! .8538 g 2851 3892 M 153 -38 V stroke ! LT1 ! .1589 g 5947 1991 M -117 -89 V stroke ! LT1 ! .1575 g 5677 1997 M 153 -95 V stroke ! LT1 ! .1829 g 5407 2033 M -117 -27 V stroke ! LT1 ! .1951 g 5137 2095 M 153 -89 V stroke LT0 ! .4415 g 3947 2710 M -88 96 V stroke LT0 ! .4778 g 3706 2858 M 153 -52 V stroke LT0 ! .74 g 3238 3492 M -117 179 V stroke LT0 ! .7898 g 2968 3710 M 153 -39 V stroke LT0 ! .6794 g 3356 3320 M -118 172 V stroke LT0 ! .7278 g 3086 3531 M 152 -39 V stroke ! LT1 ! .2141 g 5137 2095 M -117 2 V stroke ! LT1 ! .2317 g 4867 2179 M 153 -82 V stroke LT0 ! .3064 g 4477 2336 M -9 5 V stroke LT0 ! .3108 g 4432 2364 M -12 8 V stroke LT0 ! .6223 g 3473 3155 M -117 165 V stroke LT0 ! .6687 g 3203 3358 M 153 -38 V stroke LT0 ! .4469 g 3823 2730 M 107 -36 V stroke LT0 ! .5696 g 3590 3001 M -117 154 V stroke LT0 ! .6135 g 3320 3194 M 153 -39 V stroke ! LT1 ! .2556 g 4867 2179 M -117 28 V stroke ! LT1 ! .2776 g 4597 2282 M 153 -75 V stroke LT0 ! .5222 g 3706 2858 M -116 143 V stroke LT0 ! .5632 g 3437 3039 M 153 -38 V stroke LT0 ! .905 g 2851 3892 M -117 185 V stroke LT0 ! .9524 g 2581 4099 M 153 -22 V stroke LT0 ! .8406 g 2968 3710 M -117 182 V stroke LT0 ! .8875 g 2699 3915 M 152 -23 V stroke LT0 ! .3097 g 4456 2344 M 24 -10 V stroke LT0 ! .7776 g 3086 3531 M -118 179 V stroke LT0 ! .8235 g 2816 3732 M 152 -22 V stroke LT0 ! .4812 g 3823 2730 M -117 128 V stroke LT0 ! .5188 g 3554 2897 M 152 -39 V stroke LT0 ! .717 g 3203 3358 M -117 173 V stroke LT0 ! .7615 g 2933 3554 M 153 -23 V stroke ! LT1 ! .2278 g 5524 2090 M -117 -57 V stroke ! LT1 ! .2327 g 5254 2122 M 153 -89 V stroke ! LT1 ! .2239 g 5794 2086 M -117 -89 V stroke ! LT1 ! .2219 g 5524 2090 M 153 -93 V stroke ! LT1 ! .2449 g 5254 2122 M -117 -27 V stroke ! LT1 ! .2556 g 4985 2178 M 152 -83 V stroke LT0 ! .6599 g 3320 3194 M -117 164 V stroke LT0 ! .7024 g 3050 3381 M 153 -23 V stroke LT0 ! .4114 g 4058 2525 M 1 -1 V stroke ! LT1 ! .2732 g 4985 2178 M -118 1 V stroke ! LT1 ! .2888 g 4715 2254 M 152 -75 V stroke ! LT1 ! .2351 g 6064 2115 M 5947 1991 L stroke ! LT1 ! .2253 g 5794 2086 M 153 -95 V stroke LT0 ! .4532 g 3896 2661 M -73 69 V stroke LT0 ! .4812 g 3671 2769 M 152 -39 V stroke LT0 ! .6072 g 3437 3039 M -117 155 V stroke LT0 ! .6472 g 3167 3216 M 153 -22 V stroke ! LT1 ! .3108 g 4715 2254 M -118 28 V stroke ! LT1 ! .3303 g 4445 2347 M 152 -65 V stroke LT0 ! .9348 g 2699 3915 M -118 184 V stroke LT0 ! .9778 g 2429 4104 M 152 -5 V stroke LT0 ! .5598 g 3554 2897 M -117 142 V stroke LT0 ! .5969 g 3284 3062 M 153 -23 V stroke LT0 ! .8704 g 2816 3732 M -117 183 V stroke LT0 ! .9128 g 2546 3919 M 153 -4 V stroke LT0 ! .4601 g 3788 2657 M 82 -21 V stroke LT0 ! .8074 g 2933 3554 M -117 178 V stroke LT0 ! .8489 g 2663 3736 M 153 -4 V stroke LT0 ! .5188 g 3671 2769 M -117 128 V stroke LT0 ! .5525 g 3402 2920 M 152 -23 V stroke LT0 ! .7468 g 3050 3381 M -117 173 V stroke LT0 ! .7869 g 2780 3558 M 153 -4 V stroke LT0 ! .6897 g 3167 3216 M -117 165 V stroke LT0 ! .7278 g 2897 3385 M 153 -4 V stroke ! LT1 ! .2898 g 5372 2179 M -118 -57 V stroke ! LT1 ! .2932 g 5102 2205 M 152 -83 V stroke LT0 ! .637 g 3284 3062 M -117 154 V stroke LT0 ! .6726 g 3015 3221 M 152 -5 V stroke LT0 ! .4851 g 3788 2657 M -117 112 V stroke LT0 ! .5149 g 3519 2791 M 152 -22 V stroke ! LT1 ! .304 g 5102 2205 M -117 -27 V stroke ! LT1 ! .3127 g 4832 2253 M 153 -75 V stroke LT0 ! .4116 g 4059 2524 M -1 1 V stroke ! LT1 ! .2878 g 5642 2179 M -118 -89 V stroke ! LT1 ! .2849 g 5372 2179 M 152 -89 V stroke LT0 ! .9558 g 2546 3919 M -117 185 V stroke LT0 ! .9939 g 2276 4088 M 153 16 V stroke ! LT1 ! .3284 g 4832 2253 M -117 1 V stroke ! LT1 ! .3416 g 4562 2319 M 153 -65 V stroke LT0 ! .8914 g 2663 3736 M -117 183 V stroke LT0 ! .929 g 2393 3903 M 153 16 V stroke LT0 ! .5896 g 3402 2920 M -118 142 V stroke LT0 ! .6223 g 3132 3066 M 152 -4 V stroke ! LT1 ! .3 g 5911 2210 M 5794 2086 L stroke ! LT1 ! .2898 g 5642 2179 M 152 -93 V stroke LT0 ! .8284 g 2780 3558 M -117 178 V stroke LT0 ! .865 g 2510 3721 M 153 15 V stroke ! LT1 ! .3611 g 4562 2319 M -117 28 V stroke ! LT1 ! .3777 g 4292 2399 M 153 -52 V stroke LT0 ! .7678 g 2897 3385 M -117 173 V stroke LT0 ! .803 g 2627 3542 M 153 16 V stroke LT0 ! .4596 g 3847 2609 M -1 1 V stroke LT0 ! .4651 g 3845 2610 M -57 47 V stroke LT0 ! .4851 g 3635 2679 M 153 -22 V stroke LT0 ! .5486 g 3519 2791 M -117 129 V stroke LT0 ! .5779 g 3249 2924 M 153 -4 V stroke LT0 ! .7107 g 3015 3221 M -118 164 V stroke LT0 ! .7439 g 2745 3370 M 152 15 V stroke ! LT1 ! .3284 g 6181 2274 M 6064 2115 L stroke ! LT1 ! .3098 g 5911 2210 M 153 -95 V stroke LT0 ! .658 g 3132 3066 M -117 155 V stroke LT0 ! .6887 g 2862 3205 M 153 16 V stroke LT0 ! .967 g 2393 3903 M -117 185 V stroke LT0 ! .9998 g 2123 4050 M 153 38 V stroke LT0 ! .5149 g 3635 2679 M -116 112 V stroke LT0 ! .5403 g 3366 2796 M 153 -5 V stroke LT0 ! .9026 g 2510 3721 M -117 182 V stroke LT0 ! .9348 g 2240 3865 M 153 38 V stroke LT0 ! .4675 g 1019 2524 M 901 2708 L stroke LT0 ! .5603 g 1054 2995 M 901 2708 L stroke LT0 ! .4728 g 3752 2586 M 64 -9 V stroke LT0 ! .8396 g 2627 3542 M -117 179 V stroke LT0 ! .8708 g 2358 3683 M 152 38 V stroke LT0 ! .4031 g 1136 2341 M -117 183 V stroke LT0 ! .4954 g 1171 2811 M 1019 2524 L stroke LT0 ! .6106 g 3249 2924 M -117 142 V stroke LT0 ! .6384 g 2979 3051 M 153 15 V stroke LT0 ! .3401 g 1253 2163 M -117 178 V stroke LT0 ! .4314 g 1289 2628 M 1136 2341 L stroke LT0 ! .7791 g 2745 3370 M -118 172 V stroke LT0 ! .8088 g 2475 3504 M 152 38 V stroke ! LT1 ! .3489 g 5219 2262 M -117 -57 V stroke ! LT1 ! .3503 g 4949 2280 M 153 -75 V stroke ! LT1 ! .3591 g 4949 2280 M -117 -27 V stroke ! LT1 ! .3655 g 4679 2318 M 153 -65 V stroke LT0 ! .2795 g 1370 1990 M -117 173 V stroke LT0 ! .3694 g 1406 2450 M 1253 2163 L stroke ! LT1 ! .3787 g 4679 2318 M -117 1 V stroke ! LT1 ! .3889 g 4409 2372 M 153 -53 V stroke ! LT1 ! .3499 g 5489 2268 M -117 -89 V stroke ! LT1 ! .3455 g 5219 2262 M 153 -83 V stroke LT0 ! .7219 g 2862 3205 M -117 165 V stroke LT0 ! .7498 g 2592 3332 M 153 38 V stroke LT0 ! .5696 g 3366 2796 M -117 128 V stroke LT0 ! .594 g 3096 2908 M 153 16 V stroke LT0 ! .4895 g 3752 2586 M -117 93 V stroke LT0 ! .5105 g 3483 2684 M 152 -5 V stroke LT0 ! .2224 g 1487 1826 M -117 164 V stroke LT0 ! .3103 g 1523 2278 M 1370 1990 L stroke LT0 ! .9675 g 2240 3865 M -117 185 V stroke LT0 ! .9944 g 1970 3988 M 153 62 V stroke ! LT1 ! .4055 g 4409 2372 M -117 27 V stroke ! LT1 ! .4067 g 4237 2413 M 55 -14 V stroke LT0 ! .6692 g 2979 3051 M -117 154 V stroke LT0 ! .6946 g 2709 3167 M 153 38 V stroke LT0 ! .9031 g 2358 3683 M -118 182 V stroke LT0 ! .9294 g 2088 3803 M 152 62 V stroke ! LT1 ! .364 g 5759 2303 M 5642 2179 L stroke ! LT1 ! .3528 g 5489 2268 M 153 -89 V stroke LT0 ! .1697 g 1605 1671 M -118 155 V stroke LT0 ! .2551 g 1640 2113 M 1487 1826 L stroke LT0 ! .5881 g 1171 2811 M -117 184 V stroke LT0 ! .6716 g 1207 3245 M 1054 2995 L stroke LT0 ! .8401 g 2475 3504 M -117 179 V stroke LT0 ! .8655 g 2205 3621 M 153 62 V stroke LT0 ! .5237 g 1289 2628 M -118 183 V stroke LT0 ! .6067 g 1324 3060 M 1171 2811 L stroke LT0 ! .5359 g 3483 2684 M -117 112 V stroke LT0 ! .5564 g 3213 2780 M 153 16 V stroke LT0 ! .6218 g 3096 2908 M -117 143 V stroke LT0 ! .6443 g 2826 3013 M 153 38 V stroke LT0 ! .7795 g 2592 3332 M -117 172 V stroke LT0 ! .8035 g 2322 3442 M 153 62 V stroke LT0 ! .4607 g 1406 2450 M -117 178 V stroke LT0 ! .5427 g 1441 2877 M 1289 2628 L stroke LT0 ! .1223 g 1722 1529 M -117 142 V stroke LT0 ! .2048 g 1757 1959 M 1605 1671 L stroke LT0 ! .7224 g 2709 3167 M -117 165 V stroke LT0 ! .7444 g 2439 3270 M 153 62 V stroke LT0 ! .9563 g 2088 3803 M -118 185 V stroke LT0 ! .9768 g 1818 3900 M 152 88 V stroke LT0 ! .4768 g 3799 2557 M -47 29 V stroke LT0 ! .4895 g 3600 2590 M 152 -4 V stroke LT0 ! .4001 g 1523 2278 M -117 172 V stroke LT0 ! .4807 g 1558 2699 M 1406 2450 L stroke ! LT1 ! .3933 g 6029 2369 M 5911 2210 L stroke ! LT1 ! .3743 g 5759 2303 M 152 -93 V stroke LT0 ! .8918 g 2205 3621 M -117 182 V stroke LT0 ! .9119 g 1935 3715 M 153 88 V stroke LT0 ! .5808 g 3213 2780 M -117 128 V stroke LT0 ! .5999 g 2943 2870 M 153 38 V stroke LT0 ! .343 g 1640 2113 M -117 165 V stroke LT0 ! .4216 g 1676 2527 M 1523 2278 L stroke LT0 ! .6902 g 1324 3060 M -117 185 V stroke LT0 ! .7649 g 1360 3458 M 1207 3245 L stroke LT0 ! .6697 g 2826 3013 M -117 154 V stroke LT0 ! .6892 g 2556 3105 M 153 62 V stroke LT0 ! .8289 g 2322 3442 M -117 179 V stroke LT0 ! .8479 g 2052 3532 M 153 89 V stroke LT0 ! .0813 g 1839 1400 M -117 129 V stroke LT0 ! .1604 g 1874 1816 M 1722 1529 L stroke LT0 ! .6257 g 1441 2877 M -117 183 V stroke LT0 ! .7 g 1477 3273 M 1324 3060 L stroke LT0 ! .5105 g 3600 2590 M -117 94 V stroke LT0 ! .5266 g 3331 2668 M 152 16 V stroke LT0 ! .7683 g 2439 3270 M -117 172 V stroke LT0 ! .7859 g 2169 3354 M 153 88 V stroke LT0 ! .9324 g 1935 3715 M -117 185 V stroke LT0 ! .946 g 1665 3783 M 153 117 V stroke LT0 ! .2903 g 1757 1959 M -117 154 V stroke LT0 ! .3665 g 1793 2363 M 1640 2113 L stroke LT0 ! .5627 g 1558 2699 M -117 178 V stroke LT0 ! .636 g 1594 3090 M 1441 2877 L stroke ! LT1 ! .4094 g 4796 2345 M -117 -27 V stroke ! LT1 ! .4128 g 4526 2370 M 153 -52 V stroke LT0 ! .8679 g 2052 3532 M -117 183 V stroke LT0 ! .8811 g 1782 3599 M 153 116 V stroke LT0 ! .6223 g 2943 2870 M -117 143 V stroke LT0 ! .6389 g 2674 2951 M 152 62 V stroke ! LT1 ! .4231 g 4526 2370 M -117 2 V stroke ! LT1 ! .4299 g 4257 2410 M 152 -38 V stroke ! LT1 ! .4041 g 5066 2337 M -117 -57 V stroke ! LT1 ! .4031 g 4796 2345 M 153 -65 V stroke LT0 ! .7747 g 1477 3273 M -117 185 V stroke LT0 ! .8411 g 1512 3637 M 1360 3458 L stroke LT0 ! .7112 g 2556 3105 M -117 165 V stroke LT0 ! .7268 g 2286 3181 M 153 89 V stroke LT0 ! .5022 g 1676 2527 M -118 172 V stroke LT0 ! .574 g 1711 2912 M 1558 2699 L stroke LT0 ! .5471 g 3331 2668 M -118 112 V stroke LT0 ! .5623 g 3061 2742 M 152 38 V stroke LT0 ! .8049 g 2169 3354 M -117 178 V stroke LT0 ! .8171 g 1899 3416 M 153 116 V stroke LT0 ! .8948 g 1782 3599 M -117 184 V stroke LT0 ! .9011 g 1512 3637 M 153 146 V stroke LT0 ! .7102 g 1594 3090 M -117 183 V stroke LT0 ! .7761 g 1629 3452 M 1477 3273 L stroke LT0 ! .8425 g 1629 3452 M -117 185 V stroke ! LT1 ! .4397 g 6299 2472 M 6181 2274 L stroke ! LT1 ! .4119 g 6029 2369 M 152 -95 V stroke ! LT1 ! .4089 g 5336 2351 M -117 -89 V stroke ! LT1 ! .4026 g 5066 2337 M 153 -75 V stroke LT0 ! .2429 g 1874 1816 M -117 143 V stroke LT0 ! .3162 g 1910 2208 M 1757 1959 L stroke LT0 ! .8303 g 1899 3416 M -117 183 V stroke LT0 ! .8362 g 1629 3452 M 153 147 V stroke LT0 ! .0476 g 1956 1288 M -117 112 V stroke LT0 ! .1228 g 1992 1688 M 1839 1400 L stroke LT0 ! .4451 g 1793 2363 M -117 164 V stroke LT0 ! .5149 g 1828 2739 M 1676 2527 L stroke LT0 ! .7444 g 2286 3181 M -117 173 V stroke LT0 ! .7551 g 2017 3237 M 152 117 V stroke LT0 ! .6472 g 1711 2912 M -117 178 V stroke LT0 ! .7122 g 1747 3269 M 1594 3090 L stroke LT0 ! .6584 g 2674 2951 M -118 154 V stroke LT0 ! .6716 g 2404 3017 M 152 88 V stroke LT0 ! .4856 g 3717 2517 M 46 -2 V stroke LT0 ! .7781 g 1747 3269 M -118 183 V stroke LT0 ! .7673 g 2017 3237 M -118 179 V stroke LT0 ! .7722 g 1747 3269 M 152 147 V stroke LT0 ! .5813 g 3061 2742 M -118 128 V stroke LT0 ! .5945 g 2791 2808 M 152 62 V stroke LT0 ! .7151 g 1864 3091 M -117 178 V stroke LT0 ! .5867 g 1828 2739 M -117 173 V stroke LT0 ! .6501 g 1864 3091 M 1711 2912 L stroke LT0 ! .6873 g 2404 3017 M -118 164 V stroke LT0 ! .696 g 2134 3065 M 152 116 V stroke LT0 ! .4944 g 3717 2517 M -117 73 V stroke LT0 ! .5056 g 3448 2575 M 152 15 V stroke LT0 ! .3923 g 1910 2208 M -117 155 V stroke LT0 ! .4597 g 1946 2576 M 1793 2363 L stroke LT0 ! .7068 g 2134 3065 M -117 172 V stroke LT0 ! .7102 g 1864 3091 M 153 146 V stroke ! LT1 ! .426 g 5606 2392 M 5489 2268 L stroke ! LT1 ! .4133 g 5336 2351 M 153 -83 V stroke LT0 ! .6545 g 1981 2918 M -117 173 V stroke LT0 ! .6111 g 2791 2808 M -117 143 V stroke LT0 ! .6213 g 2521 2862 M 153 89 V stroke LT0 ! .2019 g 1992 1688 M -118 128 V stroke LT0 ! .2717 g 2027 2066 M 1874 1816 L stroke LT0 ! .5295 g 1946 2576 M -118 163 V stroke LT0 ! .5911 g 1981 2918 M 1828 2739 L stroke LT0 ! .5217 g 3448 2575 M -117 93 V stroke LT0 ! .5325 g 3178 2630 M 153 38 V stroke LT0 ! .6345 g 2521 2862 M -117 155 V stroke LT0 ! .6409 g 2251 2900 M 153 117 V stroke LT0 ! .6497 g 2251 2900 M -117 165 V stroke LT0 ! .6511 g 1981 2918 M 153 147 V stroke LT0 ! .5974 g 2098 2754 M -117 164 V stroke LT0 ! .345 g 2027 2066 M -117 142 V stroke LT0 ! .4094 g 2063 2421 M 1910 2208 L stroke LT0 ! .0222 g 2073 1194 M -117 94 V stroke LT0 ! .093 g 2109 1576 M 1956 1288 L stroke LT0 ! .5476 g 3178 2630 M -117 112 V stroke LT0 ! .5569 g 2908 2680 M 153 62 V stroke LT0 ! .4768 g 2063 2421 M -117 155 V stroke LT0 ! .5359 g 2098 2754 M 1946 2576 L stroke LT0 ! .5969 g 2368 2746 M -117 154 V stroke LT0 ! .5959 g 2098 2754 M 153 146 V stroke LT0 ! .5701 g 2908 2680 M -117 128 V stroke LT0 ! .5769 g 2638 2720 M 153 88 V stroke LT0 ! .5447 g 2215 2599 M -117 155 V stroke LT0 ! .5872 g 2638 2720 M -117 142 V stroke LT0 ! .5906 g 2368 2746 M 153 116 V stroke ! LT1 ! .4573 g 5876 2462 M 5759 2303 L stroke ! LT1 ! .4373 g 5606 2392 M 153 -89 V stroke LT0 ! .1682 g 2109 1576 M -117 112 V stroke LT0 ! .2341 g 2144 1937 M 1992 1688 L stroke LT0 ! .4294 g 2180 2279 M -117 142 V stroke LT0 ! .4856 g 2215 2599 M 2063 2421 L stroke LT0 ! .304 g 2144 1937 M -117 129 V stroke LT0 ! .365 g 2180 2279 M 2027 2066 L stroke ! LT1 ! .4607 g 4374 2409 M -117 1 V stroke ! LT1 ! .4636 g 4104 2433 M 153 -23 V stroke LT0 ! .5496 g 2485 2603 M -117 143 V stroke LT0 ! .5457 g 2215 2599 M 153 147 V stroke ! LT1 ! .4539 g 4644 2397 M -118 -27 V stroke ! LT1 ! .4539 g 4374 2409 M 152 -39 V stroke LT0 ! .4887 g 3751 2501 M -34 16 V stroke LT0 ! .4944 g 3565 2501 M 152 16 V stroke LT0 ! .4973 g 2333 2458 M -118 141 V stroke LT0 ! .5056 g 3565 2501 M -117 74 V stroke LT0 ! .5115 g 3295 2537 M 153 38 V stroke LT0 ! .5461 g 2755 2592 M -117 128 V stroke LT0 ! .5461 g 2485 2603 M 153 117 V stroke ! LT1 ! .4543 g 4914 2402 M -118 -57 V stroke ! LT1 ! .4504 g 4644 2397 M 152 -52 V stroke LT0 ! .5222 g 3295 2537 M -117 93 V stroke LT0 ! .5271 g 3025 2569 M 153 61 V stroke LT0 ! .5364 g 3025 2569 M -117 111 V stroke LT0 ! .5393 g 2755 2592 M 153 88 V stroke LT0 ! .0061 g 2190 1120 M -117 74 V stroke LT0 ! .072 g 2226 1482 M 2073 1194 L stroke LT0 ! .3884 g 2297 2151 M -117 128 V stroke LT0 ! .4412 g 2333 2458 M 2180 2279 L stroke LT0 ! .5085 g 2603 2476 M -118 127 V stroke LT0 ! .5012 g 2333 2458 M 152 145 V stroke LT0 ! .1428 g 2226 1482 M -117 94 V stroke LT0 ! .2043 g 2262 1825 M 2109 1576 L stroke ! LT1 ! .4641 g 5183 2426 M -117 -89 V stroke ! LT1 ! .4553 g 4914 2402 M 152 -65 V stroke LT0 ! .2703 g 2262 1825 M -118 112 V stroke LT0 ! .3274 g 2297 2151 M 2144 1937 L stroke LT0 ! .4563 g 2450 2329 M -117 129 V stroke ! LT1 ! .5046 g 6146 2567 M 6029 2369 L stroke ! LT1 ! .4763 g 5876 2462 M 153 -93 V stroke LT0 ! .5125 g 2872 2480 M -117 112 V stroke LT0 ! .5085 g 2603 2476 M 152 116 V stroke LT0 ! .511 g 3142 2475 M -117 94 V stroke LT0 ! .5095 g 2872 2480 M 153 89 V stroke LT0 ! .3547 g 2414 2038 M -117 113 V stroke LT0 ! .4036 g 2450 2329 M 2297 2151 L stroke ! LT1 ! .4851 g 5453 2475 M 5336 2351 L stroke ! LT1 ! .4705 g 5183 2426 M 153 -75 V stroke LT0 ! .5061 g 3412 2463 M -117 74 V stroke LT0 ! .5061 g 3142 2475 M 153 62 V stroke LT0 ! .4749 g 2720 2364 M -117 112 V stroke LT0 ! .4636 g 2450 2329 M 153 147 V stroke LT0 ! .4226 g 2567 2217 M -117 112 V stroke LT0 ! .4998 g 3681 2449 M -116 52 V stroke LT0 ! .5002 g 3412 2463 M 153 38 V stroke LT0 ! .2449 g 2379 1731 M -117 94 V stroke LT0 ! .2976 g 2414 2038 M 2262 1825 L stroke LT0 ! .4985 g 3681 2449 M 28 3 V stroke LT0 ! .0002 g 2308 1069 M -118 51 V stroke LT0 ! .0608 g 2343 1408 M 2190 1120 L stroke LT0 ! .1267 g 2343 1408 M -117 74 V stroke LT0 ! .1833 g 2379 1731 M 2226 1482 L stroke ! LT1 ! .4905 g 4221 2432 M -117 1 V stroke ! LT1 ! .482 g 4053 2434 M 51 -1 V stroke LT0 ! .4871 g 2990 2386 M -118 94 V stroke LT0 ! .4788 g 2720 2364 M 152 116 V stroke ! LT1 ! .4915 g 4491 2436 M -117 -27 V stroke ! LT1 ! .4875 g 4221 2432 M 153 -23 V stroke ! LT1 ! .5193 g 5723 2551 M 5606 2392 L stroke ! LT1 ! .4978 g 5453 2475 M 153 -83 V stroke LT0 ! .3293 g 2531 1944 M -117 94 V stroke LT0 ! .3738 g 2567 2217 M 2414 2038 L stroke LT0 ! .4495 g 2837 2270 M -117 94 V stroke LT0 ! .4338 g 2567 2217 M 153 147 V stroke LT0 ! .4949 g 3260 2401 M -118 74 V stroke LT0 ! .4885 g 2990 2386 M 152 89 V stroke ! LT1 ! .5325 g 6146 2567 M 153 -95 V stroke ! LT1 ! .4988 g 4761 2454 M -117 -57 V stroke ! LT1 ! .4915 g 4491 2436 M 153 -39 V stroke LT0 ! .3972 g 2684 2123 M -117 94 V stroke LT0 ! .2288 g 2496 1657 M -117 74 V stroke LT0 ! .2766 g 2531 1944 M 2379 1731 L stroke LT0 ! .5002 g 3529 2411 M -117 52 V stroke LT0 ! .4949 g 3260 2401 M 152 62 V stroke ! LT1 ! .5144 g 5031 2491 M -117 -89 V stroke ! LT1 ! .5027 g 4761 2454 M 153 -52 V stroke LT0 ! .4709 g 3107 2313 M -117 73 V stroke LT0 ! .4578 g 2837 2270 M 153 116 V stroke LT0 ! .5005 g 3702 2444 M -21 5 V stroke LT0 ! .4998 g 3529 2411 M 152 38 V stroke LT0 ! .1208 g 2460 1356 M -117 52 V stroke LT0 ! .1721 g 2496 1657 M 2343 1408 L stroke LT0 ! .0056 g 2425 1041 M -117 28 V stroke LT0 ! .0603 g 2460 1356 M 2308 1069 L stroke LT0 ! .3132 g 2649 1871 M -118 73 V stroke LT0 ! .3528 g 2684 2123 M 2531 1944 L stroke ! LT1 ! .5686 g 5993 2659 M 5876 2462 L stroke ! LT1 ! .5393 g 5723 2551 M 153 -89 V stroke LT0 ! .4333 g 2954 2196 M -117 74 V stroke LT0 ! .4128 g 2684 2123 M 153 147 V stroke LT0 ! .3811 g 2801 2049 M -117 74 V stroke ! LT1 ! .5403 g 5301 2549 M 5183 2426 L stroke ! LT1 ! .5232 g 5031 2491 M 152 -65 V stroke LT0 ! .489 g 3377 2349 M -117 52 V stroke LT0 ! .4773 g 3107 2313 M 153 88 V stroke ! LT1 ! .5212 g 4338 2458 M -117 -26 V stroke ! LT1 ! .5129 g 4068 2436 M 153 -4 V stroke LT0 ! .2229 g 2613 1606 M -117 51 V stroke LT0 ! .2654 g 2649 1871 M 2496 1657 L stroke LT0 ! .5056 g 3646 2384 M -117 27 V stroke LT0 ! .4944 g 3377 2349 M 152 62 V stroke LT0 ! .4651 g 3224 2261 M -117 52 V stroke LT0 ! .4465 g 2954 2196 M 153 117 V stroke ! LT1 ! .5364 g 4608 2493 M -117 -57 V stroke ! LT1 ! .5251 g 4338 2458 M 153 -22 V stroke LT0 ! .3074 g 2766 1819 M -117 52 V stroke LT0 ! .3416 g 2801 2049 M 2649 1871 L stroke LT0 ! .1262 g 2578 1329 M -118 27 V stroke LT0 ! .1716 g 2613 1606 M 2460 1356 L stroke ! LT1 ! .5784 g 5571 2633 M 5453 2475 L stroke ! LT1 ! .5549 g 5301 2549 M 152 -74 V stroke LT0 ! .4275 g 3071 2144 M -117 52 V stroke LT0 ! .4016 g 2801 2049 M 153 147 V stroke LT0 ! .511 g 3720 2402 M 1 0 V stroke LT0 ! .5112 g 3646 2384 M 16 4 V stroke LT0 ! .3752 g 2919 1998 M -118 51 V stroke ! LT1 ! .5969 g 5993 2659 M 153 -92 V stroke ! LT1 ! .5588 g 4878 2543 M -117 -89 V stroke ! LT1 ! .5437 g 4608 2493 M 153 -39 V stroke LT0 ! .0232 g 2542 1040 M -117 1 V stroke LT0 ! .0715 g 2578 1329 M 2425 1041 L stroke LT0 ! .4944 g 3494 2322 M -117 27 V stroke LT0 ! .4768 g 3224 2261 M 153 88 V stroke ! LT1 ! .5422 g 4185 2463 M -117 -27 V stroke ! LT1 ! .5285 g 3931 2422 M 137 14 V stroke LT0 ! .2283 g 2730 1578 M -117 28 V stroke LT0 ! .2649 g 2766 1819 M 2613 1606 L stroke ! LT1 ! .6306 g 5840 2748 M 5723 2551 L stroke ! LT1 ! .5999 g 5571 2633 M 152 -82 V stroke ! LT1 ! .5906 g 5148 2613 M 5031 2491 L stroke ! LT1 ! .5706 g 4878 2543 M 153 -52 V stroke LT0 ! .4705 g 3341 2233 M -117 28 V stroke LT0 ! .446 g 3071 2144 M 153 117 V stroke LT0 ! .5126 g 3659 2383 M -13 1 V stroke LT0 ! .5056 g 3494 2322 M 152 62 V stroke LT0 ! .3127 g 2883 1791 M -117 28 V stroke LT0 ! .3411 g 2919 1998 M 2766 1819 L stroke ! LT1 ! .5662 g 4455 2515 M -117 -57 V stroke ! LT1 ! .5505 g 4185 2463 M 153 -5 V stroke LT0 ! .4329 g 3188 2117 M -117 27 V stroke LT0 ! .4011 g 2919 1998 M 152 146 V stroke LT0 ! .3806 g 3036 1970 M -117 28 V stroke LT0 ! .1438 g 2695 1327 M -117 2 V stroke LT0 ! .1829 g 2730 1578 M 2578 1329 L stroke ! LT1 ! .6335 g 5418 2708 M 5301 2549 L stroke ! LT1 ! .6077 g 5148 2613 M 153 -64 V stroke LT0 ! .512 g 3610 2320 M -116 2 V stroke LT0 ! .488 g 3341 2233 M 153 89 V stroke ! LT1 ! .5964 g 4725 2582 M -117 -89 V stroke ! LT1 ! .5774 g 4455 2515 M 153 -22 V stroke LT0 ! .054 g 2659 1066 M -117 -26 V stroke LT0 ! .0955 g 2695 1327 M 2542 1040 L stroke LT0 ! .2458 g 2847 1577 M -117 1 V stroke LT0 ! .2761 g 2883 1791 M 2730 1578 L stroke ! LT1 ! .6599 g 5840 2748 M 153 -89 V stroke LT0 ! .488 g 3458 2232 M -117 1 V stroke LT0 ! .4573 g 3188 2117 M 153 116 V stroke ! LT1 ! .5872 g 4303 2520 M -118 -57 V stroke ! LT1 ! .5667 g 4033 2447 M 152 16 V stroke LT0 ! .3303 g 3000 1790 M -117 1 V stroke LT0 ! .3523 g 3036 1970 M 2883 1791 L stroke ! LT1 ! .635 g 4995 2666 M 4878 2543 L stroke ! LT1 ! .6116 g 4725 2582 M 153 -39 V stroke LT0 ! .4504 g 3306 2115 M -118 2 V stroke LT0 ! .4124 g 3036 1970 M 152 147 V stroke LT0 ! .5241 g 3610 2320 M 5 2 V stroke LT0 ! .3982 g 3153 1969 M -117 1 V stroke ! LT1 ! .6897 g 5688 2831 M 5571 2633 L stroke ! LT1 ! .657 g 5418 2708 M 153 -75 V stroke LT0 ! .1746 g 2812 1354 M -117 -27 V stroke LT0 ! .2068 g 2847 1577 M 2695 1327 L stroke ! LT1 ! .6262 g 4573 2604 M -118 -89 V stroke ! LT1 ! .6028 g 4303 2520 M 152 -5 V stroke LT0 ! .5246 g 3614 2321 M -4 -1 V stroke LT0 ! .512 g 3458 2232 M 152 88 V stroke ! LT1 ! .6838 g 5265 2773 M 5148 2613 L stroke ! LT1 ! .655 g 4995 2666 M 153 -53 V stroke ! LT1 ! .5984 g 4150 2504 M -117 -57 V stroke ! LT1 ! .5725 g 3880 2409 M 153 38 V stroke LT0 ! .2766 g 2965 1603 M -118 -26 V stroke LT0 ! .3 g 3000 1790 M 2847 1577 L stroke LT0 ! .0989 g 2776 1123 M -117 -57 V stroke LT0 ! .1331 g 2812 1354 M 2659 1066 L stroke LT0 ! .5178 g 3570 2257 M -112 -25 V stroke LT0 ! .4812 g 3306 2115 M 152 117 V stroke ! LT1 ! .7205 g 5688 2831 M 152 -83 V stroke ! LT1 ! .6726 g 4842 2705 M 4725 2582 L stroke ! LT1 ! .6453 g 4573 2604 M 152 -22 V stroke LT0 ! .3611 g 3117 1817 M -117 -27 V stroke LT0 ! .3762 g 3153 1969 M 3000 1790 L stroke LT0 ! .4812 g 3423 2142 M -117 -27 V stroke LT0 ! .4363 g 3153 1969 M 153 146 V stroke LT0 ! .429 g 3270 1995 M -117 -26 V stroke ! LT1 ! .5989 g 3997 2466 M -117 -57 V stroke ! LT1 ! .5694 g 3790 2372 M 90 37 V stroke ! LT1 ! .6472 g 4420 2608 M -117 -88 V stroke ! LT1 ! .6189 g 4150 2504 M 153 16 V stroke ! LT1 ! .7449 g 5535 2906 M 5418 2708 L stroke ! LT1 ! .7097 g 5265 2773 M 153 -65 V stroke LT0 ! .2195 g 2929 1411 M -117 -57 V stroke LT0 ! .2444 g 2965 1603 M 2812 1354 L stroke ! LT1 ! .7283 g 5112 2826 M 4995 2666 L stroke ! LT1 ! .696 g 4842 2705 M 153 -39 V stroke LT0 ! .3215 g 3082 1660 M -117 -57 V stroke LT0 ! .3376 g 3117 1817 M 2965 1603 L stroke ! LT1 ! .7024 g 4690 2727 M 4573 2604 L stroke ! LT1 ! .6707 g 4420 2608 M 153 -4 V stroke ! LT1 ! .6584 g 4267 2592 M -117 -88 V stroke ! LT1 ! .6248 g 3997 2466 M 153 38 V stroke LT0 ! .5834 g 3681 2310 M -7 -3 V stroke LT0 ! .5174 g 3423 2142 M 141 108 V stroke LT0 ! .1589 g 2894 1213 M -118 -90 V stroke LT0 ! .1853 g 2929 1411 M 2776 1123 L stroke LT0 ! .406 g 3235 1874 M -118 -57 V stroke LT0 ! .4138 g 3270 1995 M 3117 1817 L stroke ! LT1 ! .7776 g 5535 2906 M 153 -75 V stroke LT0 ! .5233 g 3527 2193 M -104 -51 V stroke LT0 ! .4739 g 3270 1995 M 153 147 V stroke LT0 ! .4739 g 3387 2053 M -117 -58 V stroke ! LT1 ! .7952 g 5382 2971 M 5265 2773 L stroke ! LT1 ! .7571 g 5112 2826 M 153 -53 V stroke ! LT1 ! .6589 g 4114 2555 M -117 -89 V stroke ! LT1 ! .6194 g 3844 2404 M 153 62 V stroke ! LT1 ! .7659 g 4960 2864 M 4842 2705 L stroke ! LT1 ! .7297 g 4690 2727 M 152 -22 V stroke ! LT1 ! .7234 g 4537 2731 M 4420 2608 L stroke ! LT1 ! .6868 g 4267 2592 M 153 16 V stroke LT0 ! .2795 g 3046 1500 M -117 -89 V stroke LT0 ! .2966 g 3082 1660 M 2929 1411 L stroke ! LT1 ! .6477 g 3962 2493 M -118 -89 V stroke ! LT1 ! .6018 g 3692 2316 M 152 88 V stroke LT0 ! .3816 g 3199 1750 M -117 -90 V stroke LT0 ! .3899 g 3235 1874 M 3082 1660 L stroke LT0 ! .6238 g 3809 2405 M -117 -89 V stroke LT0 ! .5855 g 3657 2289 M 35 27 V stroke ! LT1 ! .8303 g 5382 2971 M 153 -65 V stroke ! LT1 ! .7346 g 4384 2716 M 4267 2592 L stroke ! LT1 ! .6926 g 4114 2555 M 153 37 V stroke LT0 ! .4661 g 3352 1963 M -117 -89 V stroke LT0 ! .4661 g 3387 2053 M 3235 1874 L stroke ! LT1 ! .8396 g 5230 3024 M 5112 2826 L stroke ! LT1 ! .7981 g 4960 2864 M 152 -38 V stroke LT0 ! .2351 g 3011 1336 M 2894 1213 L stroke LT0 ! .2532 g 3046 1500 M 2894 1213 L stroke LT0 ! .5225 g 3387 2053 M 132 126 V stroke ! LT1 ! .7957 g 4807 2887 M 4690 2727 L stroke ! LT1 ! .7551 g 4537 2731 M 153 -4 V stroke LT0 ! .5293 g 3489 2130 M -102 -77 V stroke ! LT1 ! .7351 g 4232 2678 M 4114 2555 L stroke ! LT1 ! .6873 g 3962 2493 M 152 62 V stroke LT0 ! .3557 g 3164 1624 M 3046 1500 L stroke LT0 ! .3645 g 3199 1750 M 3046 1500 L stroke ! LT1 ! .8167 g 4654 2891 M 4537 2731 L stroke ! LT1 ! .7712 g 4384 2716 M 153 15 V stroke ! LT1 ! .8777 g 5230 3024 M 152 -53 V stroke ! LT1 ! .8772 g 5077 3062 M 4960 2864 L stroke ! LT1 ! .8318 g 4807 2887 M 153 -23 V stroke ! LT1 ! .7239 g 4079 2616 M 3962 2493 L stroke ! LT1 ! .6697 g 3809 2405 M 153 88 V stroke LT0 ! .4578 g 3316 1873 M 3199 1750 L stroke LT0 ! .4578 g 3352 1963 M 3199 1750 L stroke ! LT1 ! .7 g 3926 2528 M 3809 2405 L stroke ! LT1 ! .6389 g 3656 2288 M 153 117 V stroke LT0 ! .5839 g 3469 2086 M -2 -1 V stroke LT0 ! .5352 g 3450 2066 M -98 -103 V stroke LT0 ! .5273 g 3475 2107 M 3352 1963 L stroke ! LT1 ! .6624 g 3773 2412 M 3656 2288 L stroke ! LT1 ! .6052 g 3570 2205 M 86 83 V stroke ! LT1 ! .8279 g 4501 2875 M 4384 2716 L stroke ! LT1 ! .7771 g 4232 2678 M 152 38 V stroke LT0 ! .3284 g 3128 1496 M 3011 1336 L stroke LT0 ! .3376 g 3164 1624 M 3011 1336 L stroke ! LT1 ! .907 g 4924 3085 M 4807 2887 L stroke ! LT1 ! .8572 g 4654 2891 M 153 -4 V stroke ! LT1 ! .9187 g 5077 3062 M 153 -38 V stroke ! LT1 ! .8284 g 4349 2837 M 4232 2678 L stroke ! LT1 ! .7717 g 4079 2616 M 153 62 V stroke LT0 ! .449 g 3281 1784 M 3164 1624 L stroke LT0 ! .449 g 3316 1873 M 3164 1624 L stroke ! LT1 ! .8171 g 4196 2775 M 4079 2616 L stroke ! LT1 ! .7542 g 3926 2528 M 153 88 V stroke ! LT1 ! .928 g 4771 3089 M 4654 2891 L stroke ! LT1 ! .8733 g 4501 2875 M 153 16 V stroke LT0 ! .5403 g 3409 1999 M -93 -126 V stroke LT0 ! .5782 g 3469 2086 M -23 -31 V stroke LT0 ! .5291 g 3422 2020 M 3316 1873 L stroke ! LT1 ! .7932 g 4043 2687 M 3926 2528 L stroke ! LT1 ! .7234 g 3773 2412 M 153 116 V stroke ! LT1 ! .9524 g 4924 3085 M 153 -23 V stroke ! LT1 ! .6222 g 3621 2265 M 3486 2106 L stroke ! LT1 ! .7556 g 3891 2572 M 3773 2412 L stroke ! LT1 ! .6785 g 3621 2265 M 152 147 V stroke ! LT1 ! .7034 g 3738 2425 M 3621 2265 L stroke ! LT1 ! .9392 g 4619 3073 M 4501 2875 L stroke ! LT1 ! .8792 g 4349 2837 M 152 38 V stroke LT0 ! .4397 g 3245 1694 M 3128 1496 L stroke LT0 ! .4397 g 3281 1784 M 3128 1496 L stroke ! LT1 ! .9778 g 4771 3089 M 153 -4 V stroke ! LT1 ! .9397 g 4466 3035 M 4349 2837 L stroke ! LT1 ! .8738 g 4196 2775 M 153 62 V stroke LT0 ! .5603 g 3398 1981 M 3281 1784 L stroke ! LT1 ! .5813 g 3433 2033 M -62 -101 V stroke ! LT1 ! .9285 g 4313 2973 M 4196 2775 L stroke ! LT1 ! .8562 g 4043 2687 M 153 88 V stroke ! LT1 ! .6624 g 3551 2231 M 3433 2033 L stroke ! LT1 ! .6443 g 3586 2246 M 3433 2033 L stroke ! LT1 ! .9939 g 4619 3073 M 152 16 V stroke ! LT1 ! .9045 g 4160 2885 M 4043 2687 L stroke ! LT1 ! .8254 g 3891 2572 M 152 115 V stroke ! LT1 ! .7468 g 3702 2444 M 3586 2246 L stroke ! LT1 ! .7205 g 3738 2425 M 3586 2246 L stroke ! LT1 ! .8669 g 4008 2769 M 3891 2572 L stroke ! LT1 ! .7805 g 3738 2425 M 153 147 V stroke ! LT1 ! .8147 g 3855 2622 M 3738 2425 L stroke ! LT1 ! .9998 g 4466 3035 M 153 38 V stroke LT0 ! .5603 g 3398 1981 M 3245 1694 L stroke ! LT1 ! .9944 g 4313 2973 M 153 62 V stroke ! LT1 ! .6716 g 3551 2231 M 3398 1981 L stroke ! LT1 ! .9768 g 4160 2885 M 153 88 V stroke ! LT1 ! .7649 g 3702 2444 M 3551 2231 L stroke ! LT1 ! .946 g 4008 2769 M 152 116 V stroke ! LT1 ! .8411 g 3855 2622 M 3702 2444 L stroke ! LT1 ! .9011 g 3855 2622 M 153 147 V stroke LT0 Files octave-3.0.1/doc/interpreter/interpn.pdf and octave-3.0.2/doc/interpreter/interpn.pdf differ diff -cNr octave-3.0.1/doc/interpreter/mesh.eps octave-3.0.2/doc/interpreter/mesh.eps *** octave-3.0.1/doc/interpreter/mesh.eps 2008-04-21 18:57:17.000000000 +0200 --- octave-3.0.2/doc/interpreter/mesh.eps 2008-08-14 13:43:25.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: mesh.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:17 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: mesh.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:25 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (mesh.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:17 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (mesh.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:25 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 534,9462 **** } ifelse 1.000 UP 1.000 UL ! LT0 ! .1784 g .1392 g 4225 2679 M 10 -4 V stroke ! LT0 ! .1784 g .157 g 3633 2723 M -1 -1 V stroke ! LT0 ! .1784 g .1663 g 4365 2691 M -14 -2 V stroke ! LT0 ! .1784 g .1695 g 4359 2694 M 6 -3 V stroke ! LT0 ! .1784 g .2 g 4301 2736 M -10 -3 V stroke ! LT0 ! .1784 g .1984 g 4284 2735 M 5 -3 V stroke ! LT0 ! .1784 g .2429 g 4042 2804 M stroke ! LT0 ! .1784 g .2298 g 4230 2776 M -13 -3 V stroke ! LT0 ! .1784 g .2267 g 4210 2774 M 2 -2 V stroke ! LT0 ! .1784 g .2443 g 4375 2771 M 2 0 V stroke ! LT0 ! .1784 g .2683 g 3098 2822 M 37 0 V stroke ! LT0 ! .1784 g .2654 g 3140 2822 M 2 0 V stroke LT0 ! .1784 g .2756 g 4118 2820 M -54 5 V stroke LT0 ! .1784 g .2706 g 4060 2825 M stroke ! LT0 ! .1784 g .2557 g 4502 2764 M -14 0 V stroke ! LT0 ! .1784 g .2501 g 4460 2765 M 4 -1 V stroke LT0 ! .1784 g .2743 g 3135 2822 M -37 0 V stroke LT0 ! .1784 g .2794 g 3142 2822 M -2 0 V stroke LT0 ! .1784 g .2716 g 3136 2825 M -38 -3 V stroke LT0 ! .1784 g .2737 g 3022 2815 M 76 7 V stroke ! LT0 ! .1784 g .2682 g 4253 2807 M 76 -16 V stroke LT0 ! .1784 g .2727 g 3022 2815 M -94 -13 V stroke LT0 ! .1784 g .2804 g 3080 2805 M -58 10 V stroke LT0 ! .1784 g .2788 g 2945 2804 M 77 11 V stroke LT0 ! .1784 g .2819 g 4177 2802 M -59 18 V stroke LT0 ! .1784 g .2784 g 4253 2807 M -135 13 V stroke LT0 ! .1784 g .2813 g 4068 2812 M 50 8 V stroke ! LT0 ! .1784 g .255 g 4717 2723 M -27 3 V stroke LT0 ! .1784 g .2797 g 4312 2794 M -59 13 V stroke LT0 ! .1784 g .2739 g 4388 2789 M -135 18 V stroke LT0 ! .1784 g .2803 g 4177 2802 M 76 5 V stroke LT0 ! .1784 g .2767 g 2869 2789 M -59 0 V stroke LT0 ! .1784 g .2757 g 2945 2804 M -135 -15 V stroke LT0 ! .1784 g .2725 g 2734 2778 M 76 11 V stroke LT0 ! .1784 g .2835 g 3080 2805 M 53 11 V stroke LT0 ! .1784 g .2829 g 3139 2818 M 1 0 V stroke LT0 ! .1784 g .2748 g 4447 2779 M -59 10 V stroke LT0 ! .1784 g .2767 g 4312 2794 M 76 -5 V stroke LT0 ! .1784 g .2819 g 3004 2783 M -59 21 V stroke LT0 ! .1784 g .2819 g 2869 2789 M 76 15 V stroke LT0 ! .1784 g .2804 g 4100 2774 M -24 14 V stroke LT0 ! .1784 g .2814 g 3120 2777 M -40 28 V stroke LT0 ! .1784 g .2834 g 3004 2783 M 76 22 V stroke LT0 ! .1784 g .2792 g 2793 2771 M -59 7 V stroke LT0 ! .1784 g .2758 g 2658 2764 M 76 14 V stroke LT0 ! .1784 g .283 g 4235 2773 M -58 29 V stroke LT0 ! .1784 g .2817 g 4100 2774 M 77 28 V stroke LT0 ! .1784 g .2832 g 4370 2771 M -58 23 V stroke LT0 ! .1784 g .2824 g 4235 2773 M 77 21 V stroke ! LT0 ! .1784 g .261 g 4775 2714 M -58 9 V stroke ! LT0 ! .1784 g .267 g 4640 2745 M 77 -22 V stroke LT0 ! .1784 g .2806 g 4505 2763 M -58 16 V stroke LT0 ! .1784 g .2745 g 4582 2757 M -135 22 V stroke LT0 ! .1784 g .2812 g 4370 2771 M 77 8 V stroke LT0 ! .1784 g .2737 g 4640 2745 M -58 12 V stroke LT0 ! .1784 g .2766 g 4505 2763 M 77 -6 V stroke LT0 ! .1784 g .2817 g 2928 2759 M -59 30 V stroke LT0 ! .1784 g .2834 g 2793 2771 M 76 18 V stroke LT0 ! .1784 g .2123 g 3601 2590 M -1 -3 V stroke LT0 ! .1784 g .2763 g 3063 2730 M -59 53 V stroke LT0 ! .1784 g .2817 g 2928 2759 M 76 24 V stroke LT0 ! .1784 g .2746 g 4159 2728 M -59 46 V stroke LT0 ! .1784 g .2779 g 4084 2763 M 16 11 V stroke LT0 ! .1784 g .2718 g 3063 2730 M 49 22 V stroke LT0 ! .1784 g .2005 g 3391 2549 M 6 5 V stroke LT0 ! .1784 g .2805 g 2716 2752 M -58 12 V stroke LT0 ! .1784 g .278 g 2581 2748 M 77 16 V stroke LT0 ! .1784 g .2791 g 4294 2735 M -59 38 V stroke LT0 ! .1784 g .2759 g 4159 2728 M 76 45 V stroke LT0 ! .1784 g .2806 g 2851 2733 M -58 38 V stroke LT0 ! .1784 g .2838 g 2716 2752 M 77 19 V stroke LT0 ! .1784 g .2827 g 4429 2741 M -59 30 V stroke LT0 ! .1784 g .2799 g 4294 2735 M 76 36 V stroke LT0 ! .1784 g .2416 g 3121 2646 M 0 1 V stroke LT0 ! .1784 g .2627 g 3091 2689 M -28 41 V stroke LT0 ! .1784 g .2658 g 2986 2695 M 77 35 V stroke LT0 ! .1784 g .2712 g 2986 2695 M -58 64 V stroke LT0 ! .1784 g .2789 g 2851 2733 M 77 26 V stroke LT0 ! .1784 g .2625 g 4218 2673 M -59 55 V stroke LT0 ! .1784 g .262 g 4110 2684 M 49 44 V stroke LT0 ! .1784 g .2677 g 4834 2700 M -59 14 V stroke LT0 ! .1784 g .2728 g 4699 2727 M 76 -13 V stroke LT0 ! .1784 g .2708 g 4640 2745 M 135 -31 V stroke LT0 ! .1784 g .2833 g 4564 2740 M -59 23 V stroke LT0 ! .1784 g .2821 g 4429 2741 M 76 22 V stroke LT0 ! .1784 g .2788 g 4699 2727 M -59 18 V stroke LT0 ! .1784 g .2804 g 4564 2740 M 76 5 V stroke LT0 ! .1784 g .2414 g 3120 2646 M 1 0 V stroke LT0 ! .1784 g .2304 g 3045 2600 M 21 13 V stroke LT0 ! .1784 g .2812 g 2640 2732 M -59 16 V stroke LT0 ! .1784 g .2793 g 2505 2730 M 76 18 V stroke LT0 ! .1784 g .2248 g 3045 2600 M 10 -19 V stroke LT0 ! .1784 g .1934 g 4200 2513 M -21 -31 V stroke LT0 ! .1784 g .2712 g 4353 2690 M -59 45 V stroke LT0 ! .1784 g .2657 g 4218 2673 M 76 62 V stroke LT0 ! .1784 g .2453 g 3045 2600 M -59 95 V stroke LT0 ! .1784 g .2582 g 2910 2660 M 76 35 V stroke LT0 ! .1784 g .2112 g 4200 2513 M -57 73 V stroke LT0 ! .1784 g .2396 g 4218 2673 M -76 -84 V stroke LT0 ! .1784 g .2227 g 2968 2558 M 77 42 V stroke LT0 ! .1784 g .279 g 2775 2707 M -59 45 V stroke LT0 ! .1784 g .2837 g 2640 2732 M 76 20 V stroke LT0 ! .1784 g .2467 g 4276 2612 M -58 61 V stroke LT0 ! .1784 g .2659 g 2910 2660 M -59 73 V stroke LT0 ! .1784 g .2757 g 2775 2707 M 76 26 V stroke LT0 ! .1784 g .1624 g 4258 2438 M -41 -65 V stroke LT0 ! .1784 g .1461 g 4212 2366 M 0 -1 V stroke LT0 ! .1784 g .1471 g 2951 2387 M 20 -47 V stroke LT0 ! .1784 g .1984 g 2968 2558 M 45 -97 V stroke LT0 ! .1784 g .1602 g 2951 2387 M 46 28 V stroke LT0 ! .1784 g .1654 g 3006 2420 M 1 1 V stroke LT0 ! .1784 g .279 g 4487 2705 M -58 36 V stroke LT0 ! .1784 g .2739 g 4353 2690 M 76 51 V stroke LT0 ! .1784 g .1875 g 4258 2438 M -58 75 V stroke LT0 ! .1784 g .2188 g 4276 2612 M -76 -99 V stroke LT0 ! .1784 g .0848 g 4299 2174 M -15 18 V stroke LT0 ! .1784 g .1024 g 4242 2240 M -1 2 V stroke LT0 ! .1784 g .1325 g 4317 2366 M -62 -101 V stroke LT0 ! .1784 g .1029 g 4241 2243 M 0 -1 V stroke LT0 ! .1784 g .2356 g 2910 2660 M 58 -102 V stroke LT0 ! .1784 g .2119 g 2892 2518 M 76 40 V stroke LT0 ! .1784 g .0807 g 4299 2174 M -5 -7 V stroke LT0 ! .1784 g .2815 g 2564 2712 M -59 18 V stroke LT0 ! .1784 g .2799 g 2429 2711 M 76 19 V stroke LT0 ! .1784 g .2511 g 2833 2626 M 77 34 V stroke LT0 ! .1784 g .2834 g 4622 2712 M -58 28 V stroke LT0 ! .1784 g .2802 g 4487 2705 M 77 35 V stroke LT0 ! .1784 g .1817 g 2892 2518 M 59 -131 V stroke LT0 ! .1784 g .152 g 2874 2349 M 77 38 V stroke LT0 ! .1784 g .2289 g 4335 2549 M -59 63 V stroke LT0 ! .1784 g .2522 g 4353 2690 M -77 -78 V stroke LT0 ! .1784 g .2604 g 4411 2640 M -58 50 V stroke LT0 ! .1784 g .1221 g 2874 2349 M 55 -129 V stroke LT0 ! .1784 g .0902 g 2857 2180 M 67 28 V stroke LT0 ! .1784 g .2725 g 4892 2683 M -58 17 V stroke LT0 ! .1784 g .2767 g 4757 2707 M 77 -7 V stroke LT0 ! .1784 g .1642 g 4317 2366 M -59 72 V stroke LT0 ! .1784 g .1975 g 4335 2549 M -77 -111 V stroke LT0 ! .1784 g .2819 g 4757 2707 M -58 20 V stroke LT0 ! .1784 g .2819 g 4622 2712 M 77 15 V stroke LT0 ! .1784 g .2609 g 2833 2626 M -58 81 V stroke LT0 ! .1784 g .2728 g 2699 2681 M 76 26 V stroke LT0 ! .1784 g .2775 g 2699 2681 M -59 51 V stroke LT0 ! .1784 g .2834 g 2564 2712 M 76 20 V stroke LT0 ! .1784 g .0739 g 4358 2115 M -59 59 V stroke LT0 ! .1784 g .1074 g 4376 2299 M -77 -125 V stroke LT0 ! .1784 g .0759 g 2857 2180 M 29 -61 V stroke LT0 ! .1784 g .039 g 2839 2034 M 11 4 V stroke LT0 ! .1784 g .2274 g 2833 2626 M 59 -108 V stroke LT0 ! .1784 g .2033 g 2816 2483 M 76 35 V stroke LT0 ! .1784 g .1428 g 4376 2299 M -59 67 V stroke LT0 ! .1784 g .177 g 4393 2485 M -76 -119 V stroke LT0 ! .1784 g .2451 g 2757 2596 M 76 30 V stroke ! LT0 ! .1784 g .005 g 3186 1950 M -9 -1 V stroke LT0 ! .1784 g .2103 g 4393 2485 M -58 64 V stroke LT0 ! .1784 g .237 g 4411 2640 M -76 -91 V stroke LT0 ! .1784 g .1735 g 2816 2483 M 58 -134 V stroke LT0 ! .1784 g .1447 g 2798 2319 M 76 30 V stroke LT0 ! .1784 g .273 g 4546 2665 M -59 40 V stroke LT0 ! .1784 g .2654 g 4411 2640 M 76 65 V stroke LT0 ! .1784 g .0585 g 4358 2115 M -28 -37 V stroke LT0 ! .1784 g .1148 g 2798 2319 M 59 -139 V stroke LT0 ! .1784 g .0868 g 2780 2157 M 77 23 V stroke LT0 ! .1784 g .2815 g 2487 2692 M -58 19 V stroke LT0 ! .1784 g .2799 g 2352 2691 M 77 20 V stroke LT0 ! .1784 g .2479 g 4470 2588 M -59 52 V stroke LT0 ! .1784 g .0596 g 4416 2064 M -58 51 V stroke LT0 ! .1784 g .0908 g 4434 2238 M -76 -123 V stroke LT0 ! .1784 g .257 g 2757 2596 M -58 85 V stroke LT0 ! .1784 g .2705 g 2622 2658 M 77 23 V stroke LT0 ! .1784 g .1243 g 4434 2238 M -58 61 V stroke LT0 ! .1784 g .1583 g 4452 2424 M -76 -125 V stroke LT0 ! .1784 g .2817 g 4681 2682 M -59 30 V stroke LT0 ! .1784 g .2763 g 4546 2665 M 76 47 V stroke LT0 ! .1784 g .2211 g 2757 2596 M 59 -113 V stroke LT0 ! .1784 g .1973 g 2739 2454 M 77 29 V stroke LT0 ! .1784 g .2764 g 2622 2658 M -58 54 V stroke LT0 ! .1784 g .2831 g 2487 2692 M 77 20 V stroke LT0 ! .1784 g .1924 g 4452 2424 M -59 61 V stroke LT0 ! .1784 g .2213 g 4470 2588 M -77 -103 V stroke LT0 ! .1784 g .0373 g 2845 2026 M -6 8 V stroke LT0 ! .1784 g .0623 g 2780 2157 M 59 -123 V stroke LT0 ! .1784 g .0396 g 2762 2018 M 77 16 V stroke LT0 ! .1784 g .2409 g 2681 2571 M 76 25 V stroke LT0 ! .1784 g .1685 g 2739 2454 M 59 -135 V stroke LT0 ! .1784 g .1411 g 2722 2295 M 76 24 V stroke LT0 ! .1784 g .2834 g 4816 2683 M -59 24 V stroke LT0 ! .1784 g .2817 g 4681 2682 M 76 25 V stroke LT0 ! .1784 g .2758 g 4951 2663 M -59 20 V stroke LT0 ! .1784 g .2792 g 4816 2683 M 76 0 V stroke LT0 ! .1784 g .0086 g 2837 1931 M 1 0 V stroke LT0 ! .1784 g .0129 g 4385 1941 M -2 1 V stroke LT0 ! .1784 g .0413 g 4416 2064 M -51 -64 V stroke LT0 ! .1784 g .2658 g 4605 2624 M -59 41 V stroke LT0 ! .1784 g .235 g 4528 2536 M -58 52 V stroke LT0 ! .1784 g .2555 g 4546 2665 M -76 -77 V stroke LT0 ! .1784 g .113 g 2722 2295 M 58 -138 V stroke LT0 ! .1784 g .0868 g 2704 2142 M 76 15 V stroke LT0 ! .1784 g .2815 g 2411 2673 M -59 18 V stroke LT0 ! .1784 g .2793 g 2276 2670 M 76 21 V stroke LT0 ! .1784 g .1093 g 4493 2186 M -59 52 V stroke LT0 ! .1784 g .1423 g 4511 2367 M -77 -129 V stroke LT0 ! .1784 g .0494 g 4475 2022 M -59 42 V stroke LT0 ! .1784 g .0781 g 4493 2186 M -77 -122 V stroke ! LT0 ! .1784 g .0495 g 3917 2010 M -1 -1 V stroke LT0 ! .1784 g .1763 g 4511 2367 M -59 57 V stroke LT0 ! .1784 g .2062 g 4528 2536 M -76 -112 V stroke LT0 ! .1784 g .2171 g 2681 2571 M 58 -117 V stroke LT0 ! .1784 g .1942 g 2663 2431 M 76 23 V stroke LT0 ! .1784 g .2544 g 2681 2571 M -59 87 V stroke LT0 ! .1784 g .2693 g 2546 2638 M 76 20 V stroke LT0 ! .1784 g .276 g 2546 2638 M -59 54 V stroke LT0 ! .1784 g .2831 g 2411 2673 M 76 19 V stroke LT0 ! .1784 g .2387 g 2604 2549 M 77 22 V stroke LT0 ! .1784 g .1668 g 2663 2431 M 59 -136 V stroke LT0 ! .1784 g .1411 g 2645 2280 M 77 15 V stroke LT0 ! .1784 g .2789 g 4740 2650 M -59 32 V stroke LT0 ! .1784 g .2712 g 4605 2624 M 76 58 V stroke LT0 ! .1784 g .0285 g 2807 1949 M -45 69 V stroke LT0 ! .1784 g .064 g 2704 2142 M 58 -124 V stroke LT0 ! .1784 g .0428 g 2686 2009 M 76 9 V stroke LT0 ! .1784 g .2227 g 4587 2487 M -59 49 V stroke LT0 ! .1784 g .2453 g 4605 2624 M -77 -88 V stroke LT0 ! .1784 g .0107 g 2745 1914 M 46 8 V stroke LT0 ! .1784 g .098 g 4551 2141 M -58 45 V stroke LT0 ! .1784 g .1296 g 4569 2317 M -76 -131 V stroke LT0 ! .1784 g .1626 g 4569 2317 M -58 50 V stroke LT0 ! .1784 g .1928 g 4587 2487 M -76 -120 V stroke LT0 ! .1784 g .2582 g 4663 2584 M -58 40 V stroke LT0 ! .1784 g .0101 g 4457 1901 M -56 30 V stroke LT0 ! .1784 g .0287 g 4475 2022 M -75 -88 V stroke LT0 ! .1784 g .2812 g 2335 2654 M -59 16 V stroke LT0 ! .1784 g .278 g 2200 2647 M 76 23 V stroke LT0 ! .1784 g .2838 g 4875 2658 M -59 25 V stroke LT0 ! .1784 g .2806 g 4740 2650 M 76 33 V stroke LT0 ! .1784 g .1148 g 2645 2280 M 59 -138 V stroke LT0 ! .1784 g .0905 g 2627 2134 M 77 8 V stroke LT0 ! .1784 g .278 g 5010 2641 M -59 22 V stroke LT0 ! .1784 g .2805 g 4875 2658 M 76 5 V stroke LT0 ! .1784 g .0428 g 4534 1986 M -59 36 V stroke LT0 ! .1784 g .0693 g 4551 2141 M -76 -119 V stroke LT0 ! .1784 g .2158 g 2604 2549 M 59 -118 V stroke LT0 ! .1784 g .1942 g 2587 2415 M 76 16 V stroke LT0 ! .1784 g .2536 g 2604 2549 M -58 89 V stroke LT0 ! .1784 g .2693 g 2469 2619 M 77 19 V stroke LT0 ! .1784 g .2764 g 2469 2619 M -58 54 V stroke LT0 ! .1784 g .2834 g 2335 2654 M 76 19 V stroke LT0 ! .1784 g .2387 g 2528 2532 M 76 17 V stroke LT0 ! .1784 g .2119 g 4645 2441 M -58 46 V stroke LT0 ! .1784 g .2356 g 4663 2584 M -76 -97 V stroke LT0 ! .1784 g .1685 g 2587 2415 M 58 -135 V stroke LT0 ! .1784 g .1447 g 2569 2271 M 76 9 V stroke LT0 ! .1784 g .2757 g 4798 2618 M -58 32 V stroke LT0 ! .1784 g .2659 g 4663 2584 M 77 66 V stroke LT0 ! .1784 g .152 g 4628 2273 M -59 44 V stroke LT0 ! .1784 g .1817 g 4645 2441 M -76 -124 V stroke LT0 ! .1784 g .0284 g 2745 1914 M -59 95 V stroke LT0 ! .1784 g .0693 g 2627 2134 M 59 -125 V stroke LT0 ! .1784 g .0494 g 2610 2006 M 76 3 V stroke LT0 ! .1784 g .0905 g 4610 2104 M -59 37 V stroke LT0 ! .1784 g .1204 g 4628 2273 M -77 -132 V stroke LT0 ! .1784 g .0087 g 2773 1889 M -28 25 V stroke LT0 ! .1784 g .0143 g 2668 1905 M 77 9 V stroke LT0 ! .1784 g .2805 g 2258 2635 M -58 12 V stroke LT0 ! .1784 g .2758 g 2123 2622 M 77 25 V stroke ! LT0 ! .1784 g .0468 g 4111 1972 M -1 0 V stroke LT0 ! .1784 g .2511 g 4722 2545 M -59 39 V stroke LT0 ! .1784 g .0084 g 4516 1874 M -59 27 V stroke LT0 ! .1784 g .0246 g 4534 1986 M -77 -85 V stroke LT0 ! .1784 g .0071 g 4427 1886 M 30 15 V stroke LT0 ! .1784 g .1204 g 2569 2271 M 58 -137 V stroke LT0 ! .1784 g .098 g 2551 2134 M 76 0 V stroke LT0 ! .1784 g .2171 g 2528 2532 M 59 -117 V stroke LT0 ! .1784 g .1973 g 2510 2405 M 77 10 V stroke LT0 ! .1784 g .2544 g 2528 2532 M -59 87 V stroke LT0 ! .1784 g .2705 g 2393 2604 M 76 15 V stroke LT0 ! .1784 g .0396 g 4592 1958 M -58 28 V stroke LT0 ! .1784 g .064 g 4610 2104 M -76 -118 V stroke LT0 ! .1784 g .2837 g 4933 2632 M -58 26 V stroke LT0 ! .1784 g .279 g 4798 2618 M 77 40 V stroke ! LT0 ! .1784 g .055 g 3904 2028 M 13 -18 V stroke LT0 ! .1784 g .2793 g 5068 2618 M -58 23 V stroke LT0 ! .1784 g .2812 g 4933 2632 M 77 9 V stroke LT0 ! .1784 g .2775 g 2393 2604 M -58 50 V stroke LT0 ! .1784 g .2837 g 2258 2635 M 77 19 V stroke LT0 ! .1784 g .2409 g 2452 2519 M 76 13 V stroke LT0 ! .1784 g .2033 g 4704 2400 M -59 41 V stroke LT0 ! .1784 g .2274 g 4722 2545 M -77 -104 V stroke LT0 ! .1784 g .1447 g 4686 2236 M -58 37 V stroke LT0 ! .1784 g .1735 g 4704 2400 M -76 -127 V stroke LT0 ! .1784 g .0003 g 2727 1845 M 20 5 V stroke LT0 ! .1784 g .2792 g 2182 2616 M -59 6 V stroke LT0 ! .1784 g .2725 g 2047 2594 M 76 28 V stroke LT0 ! .1784 g .1735 g 2510 2405 M 59 -134 V stroke LT0 ! .1784 g .152 g 2493 2271 M 76 0 V stroke LT0 ! .1784 g .0868 g 4669 2074 M -59 30 V stroke LT0 ! .1784 g .1148 g 4686 2236 M -76 -132 V stroke LT0 ! .1784 g .2728 g 4857 2588 M -59 30 V stroke LT0 ! .1784 g .2609 g 4722 2545 M 76 73 V stroke LT0 ! .1784 g .2451 g 4780 2509 M -58 36 V stroke LT0 ! .1784 g .0352 g 2668 1905 M -58 101 V stroke LT0 ! .1784 g .0781 g 2551 2134 M 59 -128 V stroke LT0 ! .1784 g .0596 g 2533 2012 M 77 -6 V stroke LT0 ! .1784 g .0087 g 2727 1845 M -59 60 V stroke LT0 ! .1784 g .0214 g 2592 1904 M 76 1 V stroke LT0 ! .1784 g .257 g 2452 2519 M -59 85 V stroke LT0 ! .1784 g .2728 g 2317 2590 M 76 14 V stroke LT0 ! .1784 g .2211 g 2452 2519 M 58 -114 V stroke LT0 ! .1784 g .2033 g 2434 2401 M 76 4 V stroke LT0 ! .1784 g .0084 g 4574 1850 M -58 24 V stroke LT0 ! .1784 g .0234 g 4592 1958 M -76 -84 V stroke LT0 ! .1784 g .0051 g 4455 1847 M 61 27 V stroke LT0 ! .1784 g .279 g 2317 2590 M -59 45 V stroke LT0 ! .1784 g .2838 g 2182 2616 M 76 19 V stroke LT0 ! .1784 g .0396 g 4651 1935 M -59 23 V stroke LT0 ! .1784 g .0623 g 4669 2074 M -77 -116 V stroke LT0 ! .1784 g .1296 g 2493 2271 M 58 -137 V stroke LT0 ! .1784 g .1093 g 2475 2142 M 76 -8 V stroke LT0 ! .1784 g .2451 g 2375 2511 M 77 8 V stroke LT0 ! .1784 g .2834 g 4992 2606 M -59 26 V stroke LT0 ! .1784 g .2775 g 4857 2588 M 76 44 V stroke LT0 ! .1784 g .1973 g 4763 2365 M -59 35 V stroke LT0 ! .1784 g .2211 g 4780 2509 M -76 -109 V stroke LT0 ! .1784 g .2767 g 2105 2595 M -58 -1 V stroke LT0 ! .1784 g .2677 g 1970 2564 M 77 30 V stroke LT0 ! .1784 g .2799 g 5127 2593 M -59 25 V stroke LT0 ! .1784 g .2815 g 4992 2606 M 76 12 V stroke LT0 ! .1784 g .0015 g 2742 1844 M -15 1 V stroke LT0 ! .1784 g .0017 g 2651 1831 M 76 14 V stroke LT0 ! .1784 g .1411 g 4745 2207 M -59 29 V stroke LT0 ! .1784 g .1685 g 4763 2365 M -77 -129 V stroke ! LT0 ! .1784 g .0623 g 4170 1980 M -3 0 V stroke LT0 ! .1784 g .2409 g 4839 2477 M -59 32 V stroke LT0 ! .1784 g .257 g 4857 2588 M -77 -79 V stroke LT0 ! .1784 g .1817 g 2434 2401 M 59 -130 V stroke LT0 ! .1784 g .1626 g 2416 2277 M 77 -6 V stroke LT0 ! .1784 g .0005 g 4498 1814 M -28 12 V stroke LT0 ! .1784 g .2705 g 4915 2559 M -58 29 V stroke LT0 ! .1784 g .0868 g 4727 2053 M -58 21 V stroke LT0 ! .1784 g .113 g 4745 2207 M -76 -133 V stroke LT0 ! .1784 g .0144 g 2651 1831 M -59 73 V stroke LT0 ! .1784 g .0457 g 2533 2012 M 59 -108 V stroke LT0 ! .1784 g .0323 g 2516 1912 M 76 -8 V stroke LT0 ! .1784 g .2609 g 2375 2511 M -58 79 V stroke LT0 ! .1784 g .2757 g 2240 2578 M 77 12 V stroke LT0 ! .1784 g .2806 g 2240 2578 M -58 38 V stroke LT0 ! .1784 g .2834 g 2105 2595 M 77 21 V stroke LT0 ! .1784 g .2728 g 2029 2572 M -59 -8 V stroke LT0 ! .1784 g .261 g 1894 2529 M 76 35 V stroke LT0 ! .1784 g .0908 g 2475 2142 M 58 -130 V stroke LT0 ! .1784 g .0739 g 2457 2027 M 76 -15 V stroke ! LT0 ! .1784 g .0211 g 4305 1888 M stroke LT0 ! .1784 g .2274 g 2375 2511 M 59 -110 V stroke LT0 ! .1784 g .2119 g 2358 2402 M 76 -1 V stroke LT0 ! .1784 g .0102 g 4633 1831 M -59 19 V stroke LT0 ! .1784 g .0246 g 4651 1935 M -77 -85 V stroke LT0 ! .1784 g .0046 g 4498 1814 M 76 36 V stroke LT0 ! .1784 g .1942 g 4821 2337 M -58 28 V stroke LT0 ! .1784 g .2171 g 4839 2477 M -76 -112 V stroke LT0 ! .1784 g .2511 g 2299 2505 M 76 6 V stroke ! LT0 ! .1784 g .1416 g 3609 2208 M -23 -54 V stroke LT0 ! .1784 g .0428 g 4709 1920 M -58 15 V stroke LT0 ! .1784 g .064 g 4727 2053 M -76 -118 V stroke LT0 ! .1784 g .2831 g 5050 2581 M -58 25 V stroke LT0 ! .1784 g .2764 g 4915 2559 M 77 47 V stroke LT0 ! .1784 g .0031 g 2703 1809 M -52 22 V stroke LT0 ! .1784 g .0064 g 2574 1826 M 77 5 V stroke LT0 ! .1784 g .1423 g 2416 2277 M 59 -135 V stroke LT0 ! .1784 g .1243 g 2398 2157 M 77 -15 V stroke ! LT0 ! .1784 g .0749 g 3122 2020 M 5 1 V stroke LT0 ! .1784 g .2799 g 5185 2568 M -58 25 V stroke LT0 ! .1784 g .2815 g 5050 2581 M 77 12 V stroke LT0 ! .1784 g .1411 g 4803 2185 M -58 22 V stroke LT0 ! .1784 g .1668 g 4821 2337 M -76 -130 V stroke LT0 ! .1784 g .267 g 1953 2544 M -59 -15 V stroke LT0 ! .1784 g .2523 g 1818 2489 M 76 40 V stroke LT0 ! .1784 g .2387 g 4898 2449 M -59 28 V stroke LT0 ! .1784 g .2544 g 4915 2559 M -76 -82 V stroke LT0 ! .1784 g .2693 g 4974 2532 M -59 27 V stroke LT0 ! .1784 g .2817 g 2164 2565 M -59 30 V stroke LT0 ! .1784 g .2819 g 2029 2572 M 76 23 V stroke LT0 ! .1784 g .0002 g 4557 1787 M -59 27 V stroke LT0 ! .1784 g .0038 g 4474 1821 M 24 -7 V stroke ! LT0 ! .1784 g .1514 g 3795 2194 M 4 -8 V stroke LT0 ! .1784 g .2659 g 2299 2505 M -59 73 V stroke LT0 ! .1784 g .2789 g 2164 2565 M 76 13 V stroke LT0 ! .1784 g .0905 g 4786 2039 M -59 14 V stroke LT0 ! .1784 g .1148 g 4803 2185 M -76 -132 V stroke LT0 ! .1784 g .1928 g 2358 2402 M 58 -125 V stroke LT0 ! .1784 g .1763 g 2340 2288 M 76 -11 V stroke ! LT0 ! .1784 g .0745 g 4155 2007 M 6 -11 V stroke LT0 ! .1784 g .2589 g 1876 2511 M -58 -22 V stroke LT0 ! .1784 g .2413 g 1741 2444 M 77 45 V stroke LT0 ! .1784 g .0243 g 2574 1826 M -58 86 V stroke LT0 ! .1784 g .0605 g 2457 2027 M 59 -115 V stroke LT0 ! .1784 g .0479 g 2439 1930 M 77 -18 V stroke ! LT0 ! .1784 g .0218 g 4405 1846 M -6 2 V stroke LT0 ! .1784 g .2356 g 2299 2505 M 59 -103 V stroke LT0 ! .1784 g .2227 g 2281 2407 M 77 -5 V stroke LT0 ! .1784 g .1942 g 4880 2314 M -59 23 V stroke LT0 ! .1784 g .2158 g 4898 2449 M -77 -112 V stroke LT0 ! .1784 g .2582 g 2223 2501 M 76 4 V stroke LT0 ! .1784 g .1074 g 2398 2157 M 59 -130 V stroke LT0 ! .1784 g .0924 g 2381 2050 M 76 -23 V stroke LT0 ! .1784 g .0048 g 2633 1780 M -59 46 V stroke LT0 ! .1784 g .0157 g 2498 1831 M 76 -5 V stroke LT0 ! .1784 g .0143 g 4692 1817 M -59 14 V stroke LT0 ! .1784 g .0284 g 4709 1920 M -76 -89 V stroke LT0 ! .1784 g .0058 g 4557 1787 M 76 44 V stroke LT0 ! .1784 g .2831 g 5109 2556 M -59 25 V stroke LT0 ! .1784 g .276 g 4974 2532 M 76 49 V stroke LT0 ! .1784 g .0494 g 4768 1912 M -59 8 V stroke LT0 ! .1784 g .0693 g 4786 2039 M -77 -119 V stroke LT0 ! .1784 g .2819 g 2088 2551 M -59 21 V stroke LT0 ! .1784 g .2788 g 1953 2544 M 76 28 V stroke LT0 ! .1784 g .2793 g 5244 2541 M -59 27 V stroke LT0 ! .1784 g .2815 g 5109 2556 M 76 12 V stroke LT0 ! .1784 g .2483 g 1800 2473 M -59 -29 V stroke LT0 ! .1784 g .2281 g 1665 2395 M 76 49 V stroke LT0 ! .1784 g .1447 g 4862 2171 M -59 14 V stroke LT0 ! .1784 g .1685 g 4880 2314 M -77 -129 V stroke LT0 ! .1784 g .2387 g 4956 2426 M -58 23 V stroke LT0 ! .1784 g .2536 g 4974 2532 M -76 -83 V stroke LT0 ! .1784 g .1583 g 2340 2288 M 58 -131 V stroke LT0 ! .1784 g .1428 g 2322 2179 M 76 -22 V stroke LT0 ! .1784 g .2712 g 2223 2501 M -59 64 V stroke LT0 ! .1784 g .2817 g 2088 2551 M 76 14 V stroke LT0 ! .1784 g .2693 g 5033 2508 M -59 24 V stroke LT0 ! .1784 g .0002 g 4615 1763 M -58 24 V stroke LT0 ! .1784 g .0063 g 4497 1798 M 60 -11 V stroke LT0 ! .1784 g .2352 g 1724 2429 M -59 -34 V stroke LT0 ! .1784 g .2127 g 1589 2342 M 76 53 V stroke LT0 ! .1784 g .098 g 4844 2033 M -58 6 V stroke LT0 ! .1784 g .1204 g 4862 2171 M -76 -132 V stroke LT0 ! .1784 g .0047 g 2675 1782 M -42 -2 V stroke LT0 ! .1784 g .0093 g 2719 1815 M -86 -35 V stroke LT0 ! .1784 g .0013 g 2556 1766 M 77 14 V stroke LT0 ! .1784 g .2062 g 2281 2407 M 59 -119 V stroke LT0 ! .1784 g .1924 g 2263 2305 M 77 -17 V stroke ! LT0 ! .1784 g .0391 g 4394 1870 M 3 -5 V stroke LT0 ! .1784 g .2804 g 2011 2533 M -58 11 V stroke LT0 ! .1784 g .2737 g 1876 2511 M 77 33 V stroke LT0 ! .1784 g .2453 g 2281 2407 M -58 94 V stroke LT0 ! .1784 g .2658 g 2146 2498 M 77 3 V stroke LT0 ! .1784 g .2195 g 1647 2378 M -58 -36 V stroke LT0 ! .1784 g .1957 g 1512 2285 M 77 57 V stroke LT0 ! .1784 g .1973 g 4938 2299 M -58 15 V stroke LT0 ! .1784 g .2171 g 4956 2426 M -76 -112 V stroke LT0 ! .1784 g .235 g 2205 2414 M 76 -7 V stroke LT0 ! .1784 g .2834 g 5168 2531 M -59 25 V stroke LT0 ! .1784 g .2764 g 5033 2508 M 76 48 V stroke LT0 ! .1784 g .0394 g 2498 1831 M -59 99 V stroke LT0 ! .1784 g .0798 g 2381 2050 M 58 -120 V stroke LT0 ! .1784 g .0686 g 2363 1959 M 76 -29 V stroke LT0 ! .1784 g .0122 g 2556 1766 M -58 65 V stroke LT0 ! .1784 g .0311 g 2421 1851 M 77 -20 V stroke LT0 ! .1784 g .278 g 5302 2512 M -58 29 V stroke LT0 ! .1784 g .2812 g 5168 2531 M 76 10 V stroke LT0 ! .1784 g .0214 g 4750 1809 M -58 8 V stroke LT0 ! .1784 g .0352 g 4768 1912 M -76 -95 V stroke LT0 ! .1784 g .0087 g 4615 1763 M 77 54 V stroke LT0 ! .1784 g .2019 g 1571 2323 M -59 -38 V stroke LT0 ! .1784 g .1776 g 1436 2228 M 76 57 V stroke LT0 ! .1784 g .2763 g 2146 2498 M -58 53 V stroke LT0 ! .1784 g .2834 g 2011 2533 M 77 18 V stroke LT0 ! .1784 g .1278 g 2322 2179 M 59 -129 V stroke LT0 ! .1784 g .1149 g 2304 2081 M 77 -31 V stroke LT0 ! .1784 g .2409 g 5015 2407 M -59 19 V stroke LT0 ! .1784 g .2544 g 5033 2508 M -77 -82 V stroke LT0 ! .1784 g .0596 g 4827 1912 M -59 0 V stroke LT0 ! .1784 g .0781 g 4844 2033 M -76 -121 V stroke LT0 ! .1784 g .152 g 4921 2164 M -59 7 V stroke LT0 ! .1784 g .1735 g 4938 2299 M -76 -128 V stroke LT0 ! .1784 g .2766 g 1935 2511 M -59 0 V stroke LT0 ! .1784 g .266 g 1800 2473 M 76 38 V stroke LT0 ! .1784 g .2705 g 5091 2487 M -58 21 V stroke LT0 ! .1784 g .183 g 1495 2263 M -59 -35 V stroke LT0 ! .1784 g .1594 g 1360 2171 M 76 57 V stroke LT0 ! .1784 g .0017 g 4674 1743 M -59 20 V stroke LT0 ! .1784 g .0045 g 4544 1762 M 71 1 V stroke LT0 ! .1784 g .0025 g 2615 1741 M -59 25 V stroke LT0 ! .1784 g .0076 g 2480 1768 M 76 -2 V stroke LT0 ! .1784 g .177 g 2263 2305 M 59 -126 V stroke LT0 ! .1784 g .1642 g 2246 2207 M 76 -28 V stroke LT0 ! .1784 g .1637 g 1418 2201 M -58 -30 V stroke LT0 ! .1784 g .142 g 1283 2117 M 77 54 V stroke LT0 ! .1784 g .2555 g 2205 2414 M -59 84 V stroke LT0 ! .1784 g .273 g 2070 2492 M 76 6 V stroke LT0 ! .1784 g .27 g 1859 2483 M -59 -10 V stroke LT0 ! .1784 g .2554 g 1724 2429 M 76 44 V stroke LT0 ! .1784 g .1093 g 4903 2035 M -59 -2 V stroke LT0 ! .1784 g .1296 g 4921 2164 M -77 -131 V stroke LT0 ! .1784 g .2213 g 2205 2414 M 58 -109 V stroke LT0 ! .1784 g .2103 g 2187 2324 M 76 -19 V stroke LT0 ! .1784 g .2802 g 2070 2492 M -59 41 V stroke LT0 ! .1784 g .2833 g 1935 2511 M 76 22 V stroke LT0 ! .1784 g .2837 g 5226 2506 M -58 25 V stroke LT0 ! .1784 g .2775 g 5091 2487 M 77 44 V stroke ! LT0 ! .1784 g .2228 g 3663 2339 M -12 -31 V stroke LT0 ! .1784 g .1453 g 1342 2139 M -59 -22 V stroke LT0 ! .1784 g .1268 g 1207 2068 M 76 49 V stroke LT0 ! .1784 g .2033 g 4997 2289 M -59 10 V stroke LT0 ! .1784 g .2211 g 5015 2407 M -77 -108 V stroke LT0 ! .1784 g .2479 g 2128 2421 M 77 -7 V stroke ! LT0 ! .1784 g .0736 g 4345 1926 M -1 1 V stroke LT0 ! .1784 g .2758 g 5361 2481 M -59 31 V stroke LT0 ! .1784 g .2805 g 5226 2506 M 76 6 V stroke LT0 ! .1784 g .2602 g 1782 2448 M -58 -19 V stroke LT0 ! .1784 g .242 g 1647 2378 M 77 51 V stroke LT0 ! .1784 g .0265 g 2480 1768 M -59 83 V stroke LT0 ! .1784 g .0603 g 2363 1959 M 58 -108 V stroke LT0 ! .1784 g .0531 g 2345 1884 M 76 -33 V stroke LT0 ! .1784 g .0323 g 4809 1811 M -59 -2 V stroke LT0 ! .1784 g .0457 g 4827 1912 M -77 -103 V stroke LT0 ! .1784 g .0144 g 4674 1743 M 76 66 V stroke LT0 ! .1784 g .1289 g 1265 2081 M -58 -13 V stroke LT0 ! .1784 g .1147 g 1131 2028 M 76 40 V stroke LT0 ! .1784 g .1037 g 2304 2081 M 59 -122 V stroke LT0 ! .1784 g .0943 g 2286 1997 M 77 -38 V stroke LT0 ! .1784 g .2451 g 5073 2393 M -58 14 V stroke LT0 ! .1784 g .257 g 5091 2487 M -76 -80 V stroke LT0 ! .1784 g .0259 g 4480 1813 M 34 -29 V stroke LT0 ! .1784 g .2728 g 5150 2467 M -59 20 V stroke LT0 ! .1784 g .0045 g 4700 1738 M -26 5 V stroke LT0 ! .1784 g .0031 g 4597 1724 M 77 19 V stroke LT0 ! .1784 g .0102 g 2659 1754 M -44 -13 V stroke LT0 ! .1784 g .0197 g 2713 1808 M -98 -67 V stroke LT0 ! .1784 g .0016 g 2553 1721 M 62 20 V stroke LT0 ! .1784 g .0007 g 2539 1717 M -4 3 V stroke LT0 ! .1784 g .008 g 2524 1730 M -44 38 V stroke LT0 ! .1784 g .022 g 2404 1787 M 76 -19 V stroke LT0 ! .1784 g .1626 g 4979 2164 M -58 0 V stroke LT0 ! .1784 g .1817 g 4997 2289 M -76 -125 V stroke LT0 ! .1784 g .0739 g 4885 1920 M -58 -8 V stroke LT0 ! .1784 g .0908 g 4903 2035 M -76 -123 V stroke LT0 ! .1784 g .2471 g 1706 2405 M -59 -27 V stroke LT0 ! .1784 g .2258 g 1571 2323 M 76 55 V stroke LT0 ! .1784 g .1514 g 2246 2207 M 58 -126 V stroke LT0 ! .1784 g .1409 g 2228 2119 M 76 -38 V stroke LT0 ! .1784 g .2821 g 1994 2483 M -59 28 V stroke LT0 ! .1784 g .2806 g 1859 2483 M 76 28 V stroke LT0 ! .1784 g .2654 g 2128 2421 M -58 71 V stroke LT0 ! .1784 g .279 g 1994 2483 M 76 9 V stroke LT0 ! .1784 g .1159 g 1189 2028 M -58 0 V stroke LT0 ! .1784 g .1069 g 1054 1997 M 77 31 V stroke ! LT0 ! .1784 g .0907 g 4329 1960 M 2 -4 V stroke LT0 ! .1784 g .2308 g 1629 2354 M -58 -31 V stroke LT0 ! .1784 g .2073 g 1495 2263 M 76 60 V stroke LT0 ! .1784 g .2725 g 5420 2447 M -59 34 V stroke LT0 ! .1784 g .2792 g 5285 2481 M 76 0 V stroke LT0 ! .1784 g .1975 g 2187 2324 M 59 -117 V stroke LT0 ! .1784 g .1875 g 2169 2237 M 77 -30 V stroke LT0 ! .1784 g .2838 g 5285 2481 M -59 25 V stroke LT0 ! .1784 g .279 g 5150 2467 M 76 39 V stroke LT0 ! .1784 g .237 g 2187 2324 M -59 97 V stroke LT0 ! .1784 g .2604 g 2052 2427 M 76 -6 V stroke LT0 ! .1784 g .2289 g 2111 2343 M 76 -19 V stroke LT0 ! .1784 g .2119 g 1553 2297 M -58 -34 V stroke LT0 ! .1784 g .1873 g 1418 2201 M 77 62 V stroke LT0 ! .1784 g .2119 g 5056 2284 M -59 5 V stroke LT0 ! .1784 g .2274 g 5073 2393 M -76 -104 V stroke LT0 ! .1784 g .0027 g 4613 1715 M -16 9 V stroke LT0 ! .1784 g .0147 g 4530 1754 M 67 -30 V stroke LT0 ! .1784 g .0208 g 4488 1802 M 109 -78 V stroke LT0 ! .1784 g .1243 g 4962 2045 M -59 -10 V stroke LT0 ! .1784 g .1423 g 4979 2164 M -76 -129 V stroke LT0 ! .1784 g .2812 g 1917 2469 M -58 14 V stroke LT0 ! .1784 g .2748 g 1782 2448 M 77 35 V stroke LT0 ! .1784 g .1912 g 1477 2234 M -59 -33 V stroke LT0 ! .1784 g .1669 g 1342 2139 M 76 62 V stroke LT0 ! .1784 g .1074 g 1113 1985 M -59 12 V stroke LT0 ! .1784 g .1041 g 978 1977 M 76 20 V stroke LT0 ! .1784 g .2757 g 5208 2448 M -58 19 V stroke LT0 ! .1784 g .2609 g 5073 2393 M 77 74 V stroke LT0 ! .1784 g .2511 g 5132 2381 M -59 12 V stroke LT0 ! .1784 g .1699 g 1400 2168 M -58 -29 V stroke LT0 ! .1784 g .1474 g 1265 2081 M 77 58 V stroke LT0 ! .1784 g .2739 g 2052 2427 M -58 56 V stroke LT0 ! .1784 g .2827 g 1917 2469 M 77 14 V stroke LT0 ! .1784 g .0282 g 4809 1811 M -56 -58 V stroke LT0 ! .1784 g .0089 g 4720 1725 M 12 6 V stroke LT0 ! .1784 g .0479 g 4867 1823 M -58 -12 V stroke LT0 ! .1784 g .0605 g 4885 1920 M -76 -109 V stroke LT0 ! .1784 g .0485 g 2404 1787 M -59 97 V stroke LT0 ! .1784 g .087 g 2286 1997 M 59 -113 V stroke LT0 ! .1784 g .0814 g 2269 1929 M 76 -45 V stroke LT0 ! .1784 g .0267 g 2428 1757 M -24 30 V stroke LT0 ! .1784 g .045 g 2327 1824 M 77 -37 V stroke LT0 ! .1784 g .2677 g 5478 2410 M -58 37 V stroke LT0 ! .1784 g .2767 g 5343 2454 M 77 -7 V stroke LT0 ! .1784 g .1494 g 1324 2103 M -59 -22 V stroke LT0 ! .1784 g .1301 g 1189 2028 M 76 53 V stroke LT0 ! .1784 g .2767 g 1841 2447 M -59 1 V stroke LT0 ! .1784 g .2653 g 1706 2405 M 76 43 V stroke LT0 ! .1784 g .1763 g 5038 2170 M -59 -6 V stroke LT0 ! .1784 g .1928 g 5056 2284 M -77 -120 V stroke LT0 ! .1784 g .1315 g 2228 2119 M 58 -122 V stroke LT0 ! .1784 g .1243 g 2210 2044 M 76 -47 V stroke LT0 ! .1784 g .2834 g 5343 2454 M -58 27 V stroke LT0 ! .1784 g .2806 g 5208 2448 M 77 33 V stroke ! LT0 ! .1784 g .0669 g 2792 1880 M -2 -3 V stroke LT0 ! .1784 g .0572 g 2764 1871 M -72 -90 V stroke LT0 ! .1784 g .0924 g 4944 1938 M -59 -18 V stroke LT0 ! .1784 g .1074 g 4962 2045 M -77 -125 V stroke ! LT0 ! .1784 g .0861 g 2838 1931 M -1 -2 V stroke ! LT0 ! .1784 g .1302 g 2951 2050 M 2 2 V stroke LT0 ! .1784 g .1771 g 2169 2237 M 59 -118 V stroke LT0 ! .1784 g .1692 g 2152 2160 M 76 -41 V stroke LT0 ! .1784 g .1312 g 1248 2041 M -59 -13 V stroke LT0 ! .1784 g .1164 g 1113 1985 M 76 43 V stroke LT0 ! .1784 g .2522 g 2111 2343 M -59 84 V stroke LT0 ! .1784 g .2712 g 1976 2427 M 76 0 V stroke LT0 ! .1784 g .1042 g 1036 1953 M -58 24 V stroke LT0 ! .1784 g .1067 g 901 1969 M 77 8 V stroke LT0 ! .1784 g .0197 g 2656 1721 M -40 -13 V stroke LT0 ! .1784 g .032 g 2713 1799 M -106 -89 V stroke LT0 ! .1784 g .0012 g 2535 1677 M 4 2 V stroke LT0 ! .1784 g .2682 g 1764 2415 M -58 -10 V stroke LT0 ! .1784 g .2521 g 1629 2354 M 77 51 V stroke LT0 ! .1784 g .2188 g 2111 2343 M 58 -106 V stroke LT0 ! .1784 g .2115 g 2093 2268 M 76 -31 V stroke LT0 ! .1784 g .2467 g 2034 2359 M 77 -16 V stroke LT0 ! .1784 g .2227 g 5114 2283 M -58 1 V stroke LT0 ! .1784 g .2356 g 5132 2381 M -76 -97 V stroke LT0 ! .1784 g .2799 g 1976 2427 M -59 42 V stroke LT0 ! .1784 g .2832 g 1841 2447 M 76 22 V stroke LT0 ! .1784 g .2789 g 5267 2429 M -59 19 V stroke LT0 ! .1784 g .2659 g 5132 2381 M 76 67 V stroke LT0 ! .1784 g .1168 g 1171 1985 M -58 0 V stroke LT0 ! .1784 g .1075 g 1036 1953 M 77 32 V stroke LT0 ! .1784 g .261 g 5537 2369 M -59 41 V stroke LT0 ! .1784 g .2728 g 5402 2424 M 76 -14 V stroke LT0 ! .1784 g .2555 g 1688 2374 M -59 -20 V stroke LT0 ! .1784 g .2354 g 1553 2297 M 76 57 V stroke LT0 ! .1784 g .1428 g 5020 2061 M -58 -16 V stroke LT0 ! .1784 g .1583 g 5038 2170 M -76 -125 V stroke LT0 ! .1784 g .0637 g 4433 1876 M 65 -87 V stroke LT0 ! .1784 g .2582 g 5191 2371 M -59 10 V stroke LT0 ! .1784 g .2819 g 5402 2424 M -59 30 V stroke LT0 ! .1784 g .2817 g 5267 2429 M 76 25 V stroke LT0 ! .1784 g .2388 g 1612 2324 M -59 -27 V stroke LT0 ! .1784 g .2158 g 1477 2234 M 76 63 V stroke LT0 ! .1784 g .048 g 4867 1823 M -39 -47 V stroke ! LT0 ! .1784 g .1593 g 4251 2092 M -3 2 V stroke LT0 ! .1784 g .1067 g 960 1932 M -59 37 V stroke LT0 ! .1784 g .2188 g 1535 2265 M -58 -31 V stroke LT0 ! .1784 g .1942 g 1400 2168 M 77 66 V stroke LT0 ! .1784 g .0686 g 4926 1846 M -59 -23 V stroke LT0 ! .1784 g .0798 g 4944 1938 M -77 -115 V stroke LT0 ! .1784 g .2824 g 1899 2421 M -58 26 V stroke LT0 ! .1784 g .2797 g 1764 2415 M 77 32 V stroke LT0 ! .1784 g .1075 g 1095 1940 M -59 13 V stroke LT0 ! .1784 g .1042 g 960 1932 M 76 21 V stroke LT0 ! .1784 g .2657 g 2034 2359 M -58 68 V stroke LT0 ! .1784 g .2791 g 1899 2421 M 77 6 V stroke LT0 ! .1784 g .0333 g 4503 1756 M 69 -51 V stroke LT0 ! .1784 g .0452 g 4459 1832 M 115 -126 V stroke LT0 ! .1784 g .1965 g 1459 2199 M -59 -31 V stroke LT0 ! .1784 g .1719 g 1324 2103 M 76 65 V stroke LT0 ! .1784 g .1924 g 5096 2181 M -58 -11 V stroke LT0 ! .1784 g .2062 g 5114 2283 M -76 -113 V stroke LT0 ! .1784 g .0512 g 2356 1780 M -29 44 V stroke LT0 ! .1784 g .0779 g 2269 1929 M 58 -105 V stroke LT0 ! .1784 g .076 g 2251 1877 M 76 -53 V stroke LT0 ! .1784 g .1186 g 2210 2044 M 59 -115 V stroke LT0 ! .1784 g .1149 g 2192 1984 M 77 -55 V stroke LT0 ! .1784 g .1734 g 1383 2130 M -59 -27 V stroke LT0 ! .1784 g .1505 g 1248 2041 M 76 62 V stroke LT0 ! .1784 g .2523 g 5595 2323 M -58 46 V stroke LT0 ! .1784 g .267 g 5460 2390 M 77 -21 V stroke LT0 ! .1784 g .162 g 2152 2160 M 58 -116 V stroke LT0 ! .1784 g .157 g 2134 2094 M 76 -50 V stroke LT0 ! .1784 g .1149 g 5002 1963 M -58 -25 V stroke LT0 ! .1784 g .1278 g 5020 2061 M -76 -123 V stroke LT0 ! .1784 g .2817 g 5326 2409 M -59 20 V stroke LT0 ! .1784 g .2712 g 5191 2371 M 76 58 V stroke LT0 ! .1784 g .2394 g 2093 2268 M -59 91 V stroke LT0 ! .1784 g .2625 g 1958 2369 M 76 -10 V stroke LT0 ! .1784 g .1512 g 1306 2061 M -58 -20 V stroke LT0 ! .1784 g .1316 g 1171 1985 M 77 56 V stroke LT0 ! .1784 g .2037 g 2093 2268 M 59 -108 V stroke LT0 ! .1784 g .1983 g 2075 2200 M 77 -40 V stroke LT0 ! .1784 g .235 g 5173 2284 M -59 -1 V stroke LT0 ! .1784 g .2453 g 5191 2371 M -77 -88 V stroke LT0 ! .1784 g .2803 g 1823 2404 M -59 11 V stroke LT0 ! .1784 g .2716 g 1688 2374 M 76 41 V stroke LT0 ! .1784 g .2346 g 2017 2294 M 76 -26 V stroke LT0 ! .1784 g .2788 g 5460 2390 M -58 34 V stroke LT0 ! .1784 g .2819 g 5326 2409 M 76 15 V stroke LT0 ! .1784 g .2658 g 5249 2362 M -58 9 V stroke LT0 ! .1784 g .0448 g 2714 1770 M -58 -49 V stroke LT0 ! .1784 g .0696 g 2782 1893 M 2656 1721 L stroke LT0 ! .1784 g .0102 g 2595 1670 M 3 2 V stroke LT0 ! .1784 g .0241 g 2635 1704 M 21 17 V stroke LT0 ! .1784 g .1316 g 1230 1996 M -59 -11 V stroke LT0 ! .1784 g .1168 g 1095 1940 M 76 45 V stroke LT0 ! .1784 g .1041 g 1019 1907 M -59 25 V stroke ! LT0 ! .1784 g .2463 g 4027 2319 M -4 -2 V stroke LT0 ! .1784 g .1148 g 2827 1986 M -73 -132 V stroke LT0 ! .1784 g .2759 g 1958 2369 M -59 52 V stroke LT0 ! .1784 g .283 g 1823 2404 M 76 17 V stroke LT0 ! .1784 g .2413 g 5654 2273 M -59 50 V stroke LT0 ! .1784 g .2589 g 5519 2352 M 76 -29 V stroke LT0 ! .1784 g .1642 g 5079 2083 M -59 -22 V stroke LT0 ! .1784 g .177 g 5096 2181 M -76 -120 V stroke LT0 ! .1784 g .2732 g 1747 2377 M -59 -3 V stroke LT0 ! .1784 g .2589 g 1612 2324 M 76 50 V stroke LT0 ! .1784 g .1164 g 1154 1939 M -59 1 V stroke LT0 ! .1784 g .1074 g 1019 1907 M 76 33 V stroke LT0 ! .1784 g .0704 g 4926 1846 M -38 -50 V stroke ! LT0 ! .1784 g .2205 g 4265 2178 M 5 -14 V stroke LT0 ! .1784 g .0018 g 4697 1622 M 18 11 V stroke LT0 ! .1784 g .261 g 1670 2338 M -58 -14 V stroke LT0 ! .1784 g .2419 g 1535 2265 M 77 59 V stroke LT0 ! .1784 g .2834 g 5384 2386 M -58 23 V stroke LT0 ! .1784 g .2763 g 5249 2362 M 77 47 V stroke LT0 ! .1784 g .0094 g 2445 1632 M 3 -1 V stroke ! LT0 ! .1784 g .2023 g 4310 2107 M 3 -6 V stroke LT0 ! .1784 g .2737 g 5519 2352 M -59 38 V stroke LT0 ! .1784 g .2804 g 5384 2386 M 76 4 V stroke LT0 ! .1784 g .2103 g 5155 2194 M -59 -13 V stroke LT0 ! .1784 g .2213 g 5173 2284 M -77 -103 V stroke LT0 ! .1784 g .0943 g 4985 1879 M -59 -33 V stroke LT0 ! .1784 g .1037 g 5002 1963 M -76 -117 V stroke LT0 ! .1784 g .2577 g 2017 2294 M -59 75 V stroke LT0 ! .1784 g .2746 g 1882 2370 M 76 -1 V stroke LT0 ! .1784 g .2281 g 5713 2218 M -59 55 V stroke LT0 ! .1784 g .2483 g 5578 2308 M 76 -35 V stroke LT0 ! .1784 g .2438 g 1594 2287 M -59 -22 V stroke LT0 ! .1784 g .2212 g 1459 2199 M 76 66 V stroke LT0 ! .1784 g .1408 g 4350 2030 M 59 -114 V stroke LT0 ! .1784 g .2032 g 4310 2107 M 2 -3 V stroke LT0 ! .1784 g .0009 g 4704 1621 M -7 1 V stroke LT0 ! .1784 g .2817 g 1882 2370 M -59 34 V stroke LT0 ! .1784 g .2819 g 1747 2377 M 76 27 V stroke LT0 ! .1784 g .1069 g 1077 1893 M -58 14 V stroke LT0 ! .1784 g .0801 g 2296 1802 M -45 75 V stroke LT0 ! .1784 g .113 g 2192 1984 M 59 -107 V stroke LT0 ! .1784 g .113 g 2175 1939 M 76 -62 V stroke LT0 ! .1784 g .0405 g 4544 1700 M -41 56 V stroke LT0 ! .1784 g .0789 g 4427 1857 M 76 -101 V stroke LT0 ! .1784 g .1008 g 4375 1973 M 128 -217 V stroke LT0 ! .1784 g .2226 g 1518 2226 M -59 -27 V stroke LT0 ! .1784 g .198 g 1383 2130 M 76 69 V stroke LT0 ! .1784 g .0898 g 2233 1839 M 29 -22 V stroke LT0 ! .1784 g .1533 g 2134 2094 M 58 -110 V stroke LT0 ! .1784 g .1516 g 2116 2042 M 76 -58 V stroke LT0 ! .1784 g .273 g 5308 2351 M -59 11 V stroke LT0 ! .1784 g .2479 g 5231 2286 M -58 -2 V stroke LT0 ! .1784 g .2555 g 5249 2362 M -76 -78 V stroke LT0 ! .1784 g .1988 g 1441 2157 M -58 -27 V stroke LT0 ! .1784 g .1741 g 1306 2061 M 77 69 V stroke LT0 ! .1784 g .2292 g 2075 2200 M -58 94 V stroke LT0 ! .1784 g .255 g 1940 2313 M 77 -19 V stroke LT0 ! .1784 g .1933 g 2075 2200 M 59 -106 V stroke LT0 ! .1784 g .1904 g 2057 2144 M 77 -50 V stroke LT0 ! .1784 g .1741 g 1365 2085 M -59 -24 V stroke LT0 ! .1784 g .1512 g 1230 1996 M 76 65 V stroke LT0 ! .1784 g .226 g 1999 2236 M 76 -36 V stroke LT0 ! .1784 g .0501 g 4486 1738 M 48 -40 V stroke LT0 ! .1784 g .1409 g 5061 1995 M -59 -32 V stroke LT0 ! .1784 g .1514 g 5079 2083 M -77 -120 V stroke LT0 ! .1784 g .1505 g 1289 2013 M -59 -17 V stroke LT0 ! .1784 g .1312 g 1154 1939 M 76 57 V stroke LT0 ! .1784 g .2127 g 5771 2159 M -58 59 V stroke LT0 ! .1784 g .2352 g 5636 2258 M 77 -40 V stroke LT0 ! .1784 g .0477 g 2697 1698 M -9 -4 V stroke LT0 ! .1784 g .0487 g 2714 1770 M -53 -72 V stroke LT0 ! .1784 g .266 g 5578 2308 M -59 44 V stroke LT0 ! .1784 g .2766 g 5443 2358 M 76 -6 V stroke LT0 ! .1784 g .2819 g 1805 2360 M -58 17 V stroke LT0 ! .1784 g .2753 g 1670 2338 M 77 39 V stroke LT0 ! .1784 g .1301 g 1212 1946 M -58 -7 V stroke LT0 ! .1784 g .1159 g 1077 1893 M 77 46 V stroke LT0 ! .1784 g .2833 g 5443 2358 M -59 28 V stroke LT0 ! .1784 g .2802 g 5308 2351 M 76 35 V stroke LT0 ! .1784 g .0399 g 2350 1671 M 3 -1 V stroke LT0 ! .1784 g .0164 g 2406 1644 M 21 -11 V stroke LT0 ! .1784 g .1875 g 5137 2107 M -58 -24 V stroke LT0 ! .1784 g .1975 g 5155 2194 M -76 -111 V stroke LT0 ! .1784 g .2719 g 1940 2313 M -58 57 V stroke LT0 ! .1784 g .2817 g 1805 2360 M 77 10 V stroke LT0 ! .1784 g .0854 g 2773 1839 M -59 -69 V stroke LT0 ! .1784 g .1229 g 2849 2014 M 2714 1770 L stroke LT0 ! .1784 g .1957 g 5830 2096 M -59 63 V stroke LT0 ! .1784 g .2195 g 5695 2201 M 76 -42 V stroke LT0 ! .1784 g .1147 g 1136 1889 M -59 4 V stroke LT0 ! .1784 g .276 g 1729 2335 M -59 3 V stroke LT0 ! .1784 g .2629 g 1594 2287 M 76 51 V stroke LT0 ! .1784 g .0959 g 4985 1879 M -45 -63 V stroke LT0 ! .1784 g .2289 g 5214 2207 M -59 -13 V stroke LT0 ! .1784 g .237 g 5231 2286 M -76 -92 V stroke LT0 ! .1784 g .279 g 5366 2336 M -58 15 V stroke LT0 ! .1784 g .2654 g 5231 2286 M 77 65 V stroke LT0 ! .1784 g .2554 g 5636 2258 M -58 50 V stroke LT0 ! .1784 g .27 g 5501 2324 M 77 -16 V stroke LT0 ! .1784 g .2517 g 1999 2236 M -59 77 V stroke LT0 ! .1784 g .2708 g 1864 2321 M 76 -8 V stroke LT0 ! .1784 g .2604 g 5290 2285 M -59 1 V stroke LT0 ! .1784 g .2638 g 1653 2297 M -59 -10 V stroke LT0 ! .1784 g .2453 g 1518 2226 M 76 61 V stroke LT0 ! .1784 g .1776 g 5888 2033 M -58 63 V stroke LT0 ! .1784 g .2019 g 5753 2140 M 77 -44 V stroke LT0 ! .1784 g .1243 g 5043 1920 M -58 -41 V stroke LT0 ! .1784 g .1315 g 5061 1995 M -76 -116 V stroke LT0 ! .1784 g .1939 g 2919 2194 M 2799 1923 L stroke LT0 ! .1784 g .2806 g 5501 2324 M -58 34 V stroke LT0 ! .1784 g .2821 g 5366 2336 M 77 22 V stroke LT0 ! .1784 g .2459 g 1576 2245 M -58 -19 V stroke LT0 ! .1784 g .2234 g 1441 2157 M 77 69 V stroke LT0 ! .1784 g .2806 g 1864 2321 M -59 39 V stroke LT0 ! .1784 g .2827 g 1729 2335 M 76 25 V stroke LT0 ! .1784 g .2231 g 2057 2144 M -58 92 V stroke LT0 ! .1784 g .2502 g 1922 2262 M 77 -26 V stroke LT0 ! .1784 g .2234 g 1500 2181 M -59 -24 V stroke LT0 ! .1784 g .1988 g 1365 2085 M 76 72 V stroke LT0 ! .1784 g .1149 g 2233 1839 M -58 100 V stroke LT0 ! .1784 g .1516 g 2116 2042 M 59 -103 V stroke LT0 ! .1784 g .1533 g 2098 2005 M 77 -66 V stroke LT0 ! .1784 g .1887 g 2116 2042 M -59 102 V stroke LT0 ! .1784 g .222 g 1981 2186 M 76 -42 V stroke LT0 ! .1784 g .0941 g 2244 1822 M -11 17 V stroke LT0 ! .1784 g .1186 g 2157 1909 M 76 -70 V stroke LT0 ! .1784 g .1887 g 2040 2099 M 76 -57 V stroke LT0 ! .1784 g .198 g 1423 2109 M -58 -24 V stroke LT0 ! .1784 g .1734 g 1289 2013 M 76 72 V stroke LT0 ! .1784 g .1719 g 1347 2034 M -58 -21 V stroke LT0 ! .1784 g .1494 g 1212 1946 M 77 67 V stroke LT0 ! .1784 g .242 g 5695 2201 M -59 57 V stroke LT0 ! .1784 g .2602 g 5560 2283 M 76 -25 V stroke LT0 ! .1784 g .1692 g 5120 2030 M -59 -35 V stroke LT0 ! .1784 g .1771 g 5137 2107 M -76 -112 V stroke LT0 ! .1784 g .1594 g 5947 1970 M -59 63 V stroke LT0 ! .1784 g .183 g 5812 2074 M 76 -41 V stroke LT0 ! .1784 g .0487 g 2697 1698 M -5 -5 V stroke LT0 ! .1784 g .0547 g 4512 1694 M -26 44 V stroke LT0 ! .1784 g .0854 g 4427 1857 M 59 -119 V stroke LT0 ! .1784 g .0903 g 4409 1833 M 77 -95 V stroke LT0 ! .1784 g .1474 g 1271 1960 M -59 -14 V stroke LT0 ! .1784 g .1289 g 1136 1889 M 76 57 V stroke LT0 ! .1784 g .0606 g 4468 1693 M 9 -6 V stroke LT0 ! .1784 g .0656 g 2755 1739 M -58 -41 V stroke LT0 ! .1784 g .0789 g 2773 1839 M -76 -141 V stroke LT0 ! .1784 g .0376 g 2368 1652 M -18 19 V stroke LT0 ! .1784 g .1455 g 4351 1994 M 76 -137 V stroke LT0 ! .1784 g .1794 g 4292 2160 M 135 -303 V stroke LT0 ! .1784 g .1268 g 1194 1893 M -58 -4 V stroke LT0 ! .1784 g .2827 g 5425 2315 M -59 21 V stroke LT0 ! .1784 g .2739 g 5290 2285 M 76 51 V stroke LT0 ! .1784 g .2825 g 1788 2314 M -59 21 V stroke LT0 ! .1784 g .2769 g 1653 2297 M 76 38 V stroke LT0 ! .1784 g .2115 g 5196 2132 M -59 -25 V stroke LT0 ! .1784 g .2188 g 5214 2207 M -77 -100 V stroke LT0 ! .1784 g .142 g 6006 1910 M -59 60 V stroke LT0 ! .1784 g .1637 g 5871 2006 M 76 -36 V stroke LT0 ! .1784 g .2693 g 1922 2262 M -58 59 V stroke LT0 ! .1784 g .2804 g 1788 2314 M 76 7 V stroke LT0 ! .1784 g .2748 g 5560 2283 M -59 41 V stroke LT0 ! .1784 g .2812 g 5425 2315 M 76 9 V stroke LT0 ! .1784 g .2258 g 5753 2140 M -58 61 V stroke LT0 ! .1784 g .2471 g 5619 2234 M 76 -33 V stroke LT0 ! .1784 g .296 g 2990 2375 M -67 -173 V stroke ! LT0 ! .1784 g .2031 g 4310 2107 M 2 -5 V stroke LT0 ! .1784 g .2301 g 4261 2249 M 90 -221 V stroke LT0 ! .1784 g .2467 g 5272 2217 M -58 -10 V stroke LT0 ! .1784 g .2522 g 5290 2285 M -76 -78 V stroke LT0 ! .1784 g .2712 g 5349 2280 M -59 5 V stroke LT0 ! .1784 g .0507 g 2345 1652 M 3 -2 V stroke LT0 ! .1784 g .0286 g 2389 1621 M 10 -7 V stroke LT0 ! .1784 g .2771 g 1711 2291 M -58 6 V stroke LT0 ! .1784 g .2645 g 1576 2245 M 77 52 V stroke LT0 ! .1784 g .1293 g 5025 1860 M -11 -10 V stroke LT0 ! .1784 g .1237 g 5043 1920 M -58 -83 V stroke LT0 ! .1784 g .1268 g 6064 1856 M -58 54 V stroke LT0 ! .1784 g .1453 g 5929 1938 M 77 -28 V stroke LT0 ! .1784 g .1326 g 2832 1915 M -59 -76 V stroke LT0 ! .1784 g .1455 g 2849 2014 M -76 -175 V stroke LT0 ! .1784 g .2491 g 1981 2186 M -59 76 V stroke LT0 ! .1784 g .2688 g 1846 2274 M 76 -12 V stroke LT0 ! .1784 g .2073 g 5812 2074 M -59 66 V stroke LT0 ! .1784 g .2308 g 5677 2177 M 76 -37 V stroke LT0 ! .1784 g .2645 g 1635 2252 M -59 -7 V stroke LT0 ! .1784 g .2459 g 1500 2181 M 76 64 V stroke LT0 ! .1784 g .2653 g 5619 2234 M -59 49 V stroke LT0 ! .1784 g .2767 g 5484 2287 M 76 -4 V stroke LT0 ! .1784 g .157 g 5102 1964 M -59 -44 V stroke LT0 ! .1784 g .162 g 5120 2030 M -77 -110 V stroke LT0 ! .1784 g .0024 g 4585 1518 M 7 1 V stroke LT0 ! .1784 g .222 g 2040 2099 M -59 87 V stroke LT0 ! .1784 g .2491 g 1905 2217 M 76 -31 V stroke LT0 ! .1784 g .2453 g 1558 2197 M -58 -16 V stroke LT0 ! .1784 g .2226 g 1423 2109 M 77 72 V stroke LT0 ! .1784 g .2832 g 5484 2287 M -59 28 V stroke LT0 ! .1784 g .2799 g 5349 2280 M 76 35 V stroke LT0 ! .1784 g .0708 g 2755 1739 M -31 -52 V stroke LT0 ! .1784 g .28 g 1846 2274 M -58 40 V stroke LT0 ! .1784 g .2827 g 1711 2291 M 77 23 V stroke LT0 ! .1784 g .2212 g 1482 2130 M -59 -21 V stroke LT0 ! .1784 g .1965 g 1347 2034 M 76 75 V stroke LT0 ! .1784 g .1942 g 1406 2055 M -59 -21 V stroke LT0 ! .1784 g .1699 g 1271 1960 M 76 74 V stroke LT0 ! .1784 g .1873 g 5871 2006 M -59 68 V stroke LT0 ! .1784 g .2119 g 5736 2114 M 76 -40 V stroke LT0 ! .1784 g .1904 g 2098 2005 M -58 94 V stroke LT0 ! .1784 g .2231 g 1963 2146 M 77 -47 V stroke LT0 ! .1784 g .1669 g 1329 1977 M -58 -17 V stroke LT0 ! .1784 g .1453 g 1194 1893 M 77 67 V stroke ! LT0 ! .1784 g .3514 g 3002 2408 M -3 -11 V stroke LT0 ! .1784 g .1147 g 6123 1809 M -59 47 V stroke LT0 ! .1784 g .1289 g 5988 1874 M 76 -18 V stroke LT0 ! .1784 g .157 g 2157 1909 M -59 96 V stroke LT0 ! .1784 g .1933 g 2022 2066 M 76 -61 V stroke LT0 ! .1784 g .142 g 1253 1902 M -59 -9 V stroke LT0 ! .1784 g .0614 g 4468 1693 M 4 -7 V stroke LT0 ! .1784 g .1288 g 2199 1844 M -42 65 V stroke LT0 ! .1784 g .162 g 2080 1980 M 77 -71 V stroke LT0 ! .1784 g .1983 g 5178 2065 M -58 -35 V stroke LT0 ! .1784 g .2037 g 5196 2132 M -76 -102 V stroke ! LT0 ! .1784 g .4059 g 3269 2624 M 10 -1 V stroke LT0 ! .1784 g .0903 g 4409 1833 M 59 -140 V stroke LT0 ! .1784 g .0854 g 4391 1768 M 77 -75 V stroke LT0 ! .1784 g .1232 g 2190 1844 M 2 -2 V stroke LT0 ! .1784 g .1409 g 2139 1895 M 45 -46 V stroke LT0 ! .1784 g .2791 g 5407 2267 M -58 13 V stroke LT0 ! .1784 g .2657 g 5272 2217 M 77 63 V stroke LT0 ! .1784 g .1669 g 5929 1938 M -58 68 V stroke LT0 ! .1784 g .1912 g 5794 2045 M 77 -39 V stroke LT0 ! .1784 g .2521 g 5677 2177 M -58 57 V stroke LT0 ! .1784 g .2682 g 5542 2250 M 77 -16 V stroke LT0 ! .1784 g .2346 g 5254 2152 M -58 -20 V stroke LT0 ! .1784 g .2394 g 5272 2217 M -76 -85 V stroke LT0 ! .1784 g .0972 g 2814 1779 M -59 -40 V stroke LT0 ! .1784 g .1193 g 2832 1915 M -77 -176 V stroke LT0 ! .1784 g .2827 g 1770 2269 M -59 22 V stroke LT0 ! .1784 g .2771 g 1635 2252 M 76 39 V stroke LT0 ! .1784 g .2625 g 5331 2222 M -59 -5 V stroke LT0 ! .1784 g .0025 g 4589 1516 M -4 2 V stroke LT0 ! .1784 g .2688 g 1905 2217 M -59 57 V stroke LT0 ! .1784 g .28 g 1770 2269 M 76 5 V stroke LT0 ! .1784 g .0208 g 2464 1540 M 5 -2 V stroke LT0 ! .1784 g .0035 g 2523 1519 M 3 -1 V stroke LT0 ! .1784 g .217 g 2908 2129 M -59 -115 V stroke LT0 ! .1784 g .2687 g 2984 2363 M 2849 2014 L stroke LT0 ! .1784 g .1505 g 4351 1994 M 58 -161 V stroke LT0 ! .1784 g .1505 g 4333 1949 M 76 -116 V stroke LT0 ! .1784 g .1069 g 6181 1773 M -58 36 V stroke LT0 ! .1784 g .1159 g 6046 1816 M 77 -7 V stroke LT0 ! .1784 g .2797 g 5542 2250 M -58 37 V stroke LT0 ! .1784 g .2824 g 5407 2267 M 77 20 V stroke LT0 ! .1784 g .1474 g 5988 1874 M -59 64 V stroke LT0 ! .1784 g .1699 g 5853 1973 M 76 -35 V stroke ! LT0 ! .1784 g .0143 g 4723 1535 M 8 6 V stroke LT0 ! .1784 g .0896 g 2272 1720 M 12 -11 V stroke LT0 ! .1784 g .2354 g 5736 2114 M -59 63 V stroke LT0 ! .1784 g .2555 g 5601 2203 M 76 -26 V stroke LT0 ! .1784 g .1315 g 5025 1860 M -4 -7 V stroke LT0 ! .1784 g .2769 g 1693 2246 M -58 6 V stroke LT0 ! .1784 g .2638 g 1558 2197 M 77 55 V stroke LT0 ! .1784 g .0155 g 4731 1542 M -8 -7 V stroke LT0 ! .1784 g .2502 g 1963 2146 M -58 71 V stroke LT0 ! .1784 g .2693 g 1828 2231 M 77 -14 V stroke LT0 ! .1784 g .1516 g 5084 1913 M -59 -53 V stroke LT0 ! .1784 g .1533 g 5102 1964 M -77 -104 V stroke LT0 ! .1784 g .1301 g 6046 1816 M -58 58 V stroke LT0 ! .1784 g .1494 g 5911 1902 M 77 -28 V stroke LT0 ! .1784 g .0676 g 2762 1672 M -1 -2 V stroke LT0 ! .1784 g .0918 g 2814 1779 M -49 -101 V stroke LT0 ! .1784 g .2629 g 1617 2203 M -59 -6 V stroke LT0 ! .1784 g .2438 g 1482 2130 M 76 67 V stroke ! LT0 ! .1784 g .4059 g 4040 2590 M -4 0 V stroke ! LT0 ! .1784 g .0342 g 2422 1570 M -20 18 V stroke LT0 ! .1784 g .2158 g 5794 2045 M -58 69 V stroke LT0 ! .1784 g .2388 g 5659 2147 M 77 -33 V stroke LT0 ! .1784 g .2419 g 1541 2144 M -59 -14 V stroke LT0 ! .1784 g .2188 g 1406 2055 M 76 75 V stroke LT0 ! .1784 g .217 g 4292 2160 M 59 -166 V stroke LT0 ! .1784 g .2255 g 4274 2150 M 77 -156 V stroke LT0 ! .1784 g .1873 g 1388 1994 M -59 -17 V stroke LT0 ! .1784 g .1912 g 1406 2055 M -77 -78 V stroke LT0 ! .1784 g .1637 g 1253 1902 M 76 75 V stroke LT0 ! .1784 g .2158 g 1464 2073 M -58 -18 V stroke LT0 ! .1784 g .283 g 5466 2245 M -59 22 V stroke LT0 ! .1784 g .2759 g 5331 2222 M 76 45 V stroke ! LT0 ! .1784 g .4747 g 3681 2783 M 0 -1 V stroke ! LT0 ! .1784 g .4588 g 3669 2755 M 2 -3 V stroke LT0 ! .1784 g .1594 g 1312 1914 M -59 -12 V stroke LT0 ! .1784 g .0121 g 2529 1498 M 4 -1 V stroke LT0 ! .1784 g .004 g 4653 1495 M -9 -3 V stroke LT0 ! .1784 g .0046 g 4658 1500 M -14 -8 V stroke LT0 ! .1784 g .2804 g 1828 2231 M -58 38 V stroke LT0 ! .1784 g .2825 g 1693 2246 M 77 23 V stroke LT0 ! .1784 g .1041 g 6240 1747 M -59 26 V stroke LT0 ! .1784 g .1074 g 6105 1767 M 76 6 V stroke LT0 ! .1784 g .226 g 2022 2066 M -59 80 V stroke LT0 ! .1784 g .2517 g 1887 2179 M 76 -33 V stroke LT0 ! .1784 g .2716 g 5601 2203 M -59 47 V stroke LT0 ! .1784 g .2803 g 5466 2245 M 76 5 V stroke LT0 ! .1784 g .0901 g 4391 1768 M 36 -90 V stroke LT0 ! .1784 g .1904 g 5160 2008 M -58 -44 V stroke LT0 ! .1784 g .1933 g 5178 2065 M -76 -101 V stroke LT0 ! .1784 g .1807 g 2890 1987 M -58 -72 V stroke LT0 ! .1784 g .2041 g 2908 2129 M -76 -214 V stroke LT0 ! .1784 g .1164 g 6105 1767 M -59 49 V stroke LT0 ! .1784 g .1312 g 5970 1834 M 76 -18 V stroke LT0 ! .1784 g .1983 g 2080 1980 M -58 86 V stroke LT0 ! .1784 g .2292 g 1946 2115 M 76 -49 V stroke LT0 ! .1784 g .1942 g 5853 1973 M -59 72 V stroke LT0 ! .1784 g .2188 g 5718 2082 M 76 -37 V stroke LT0 ! .1784 g .226 g 5237 2094 M -59 -29 V stroke LT0 ! .1784 g .2292 g 5254 2152 M -76 -87 V stroke LT0 ! .1784 g .2746 g 5389 2217 M -58 5 V stroke LT0 ! .1784 g .2577 g 5254 2152 M 77 70 V stroke ! LT0 ! .1784 g .0214 g 2508 1502 M -58 43 V stroke LT0 ! .1784 g .0716 g 2337 1648 M 6 -6 V stroke LT0 ! .1784 g .0449 g 2395 1595 M 17 -16 V stroke LT0 ! .1784 g .255 g 5313 2165 M -59 -13 V stroke LT0 ! .1784 g .1692 g 2139 1895 M -59 85 V stroke LT0 ! .1784 g .2037 g 2004 2043 M 76 -63 V stroke LT0 ! .1784 g .1455 g 4333 1949 M 58 -181 V stroke LT0 ! .1784 g .1326 g 4315 1850 M 76 -82 V stroke LT0 ! .1784 g .0113 g 2696 1497 M 3 2 V stroke ! LT0 ! .1784 g .3358 g 2990 2377 M -9 -23 V stroke LT0 ! .1784 g .3682 g 3061 2597 M 2933 2231 L stroke LT0 ! .1784 g .0042 g 4593 1465 M -1 0 V stroke LT0 ! .1784 g .1719 g 5911 1902 M -58 71 V stroke LT0 ! .1784 g .1965 g 5777 2010 M 76 -37 V stroke LT0 ! .1784 g .2827 g 1752 2225 M -59 21 V stroke LT0 ! .1784 g .276 g 1617 2203 M 76 43 V stroke LT0 ! .1784 g .1489 g 2164 1860 M -25 35 V stroke LT0 ! .1784 g .1771 g 2063 1968 M 76 -73 V stroke LT0 ! .1784 g .1262 g 2872 1808 M -58 -29 V stroke LT0 ! .1784 g .1585 g 2890 1987 M -76 -208 V stroke LT0 ! .1784 g .2589 g 5659 2147 M -58 56 V stroke LT0 ! .1784 g .2732 g 5524 2212 M 77 -9 V stroke LT0 ! .1784 g .3026 g 4216 2355 M 76 -195 V stroke LT0 ! .1784 g .3421 g 4157 2544 M 135 -384 V stroke LT0 ! .1784 g .2708 g 1887 2179 M -59 52 V stroke LT0 ! .1784 g .2806 g 1752 2225 M 76 6 V stroke LT0 ! .1784 g .1075 g 6164 1728 M -59 39 V stroke LT0 ! .1784 g .1168 g 6029 1773 M 76 -6 V stroke LT0 ! .1784 g .0074 g 2593 1464 M 3 -1 V stroke LT0 ! .1784 g .1706 g 2121 1893 M 16 -16 V stroke LT0 ! .1784 g .2819 g 5524 2212 M -58 33 V stroke LT0 ! .1784 g .2817 g 5389 2217 M 77 28 V stroke LT0 ! .1784 g .1067 g 6299 1733 M -59 14 V stroke LT0 ! .1784 g .1042 g 6164 1728 M 76 19 V stroke LT0 ! .1784 g .1505 g 5970 1834 M -59 68 V stroke LT0 ! .1784 g .1734 g 5835 1935 M 76 -33 V stroke LT0 ! .1784 g .1096 g 2872 1808 M -59 -139 V stroke LT0 ! .1784 g .2753 g 1676 2198 M -59 5 V stroke LT0 ! .1784 g .261 g 1541 2144 M 76 59 V stroke ! LT0 ! .1784 g .087 g 4914 1700 M -59 -63 V stroke LT0 ! .1784 g .0901 g 4931 1721 M -34 -37 V stroke ! LT0 ! .1784 g .0531 g 4779 1565 M 76 72 V stroke ! LT0 ! .1784 g .0143 g 2567 1465 M -59 37 V stroke ! LT0 ! .1784 g .0352 g 2432 1558 M 76 -56 V stroke LT0 ! .1784 g .0508 g 2412 1578 M 5 -4 V stroke ! LT0 ! .1784 g .0603 g 4837 1622 M -58 -57 V stroke LT0 ! .1784 g .0907 g 4914 1700 M -71 -70 V stroke ! LT0 ! .1784 g .0311 g 4702 1507 M 77 58 V stroke LT0 ! .1784 g .1003 g 4945 1738 M -14 -17 V stroke LT0 ! .1784 g .1303 g 5005 1811 M -5 -5 V stroke LT0 ! .1784 g .0978 g 2274 1716 M -8 8 V stroke LT0 ! .1784 g .2419 g 5718 2082 M -59 65 V stroke LT0 ! .1784 g .261 g 5583 2167 M 76 -20 V stroke LT0 ! .1784 g .2589 g 1599 2150 M -58 -6 V stroke LT0 ! .1784 g .2388 g 1464 2073 M 77 71 V stroke LT0 ! .1784 g .1776 g 1370 1927 M -58 -13 V stroke LT0 ! .1784 g .183 g 1388 1994 M -76 -80 V stroke LT0 ! .1784 g .255 g 1946 2115 M -59 64 V stroke LT0 ! .1784 g .2719 g 1811 2191 M 76 -12 V stroke LT0 ! .1784 g .162 g 5084 1913 M -34 -44 V stroke LT0 ! .1784 g .2073 g 1447 2009 M -59 -15 V stroke LT0 ! .1784 g .2119 g 1464 2073 M -76 -79 V stroke LT0 ! .1784 g .2354 g 1523 2085 M -59 -12 V stroke ! LT0 ! .1784 g .0394 g 4761 1554 M -59 -47 V stroke LT0 ! .1784 g .047 g 4775 1569 M -29 -25 V stroke ! LT0 ! .1784 g .0157 g 4626 1462 M 76 45 V stroke LT0 ! .1784 g .1316 g 6029 1773 M -59 61 V stroke LT0 ! .1784 g .1512 g 5894 1860 M 76 -26 V stroke LT0 ! .1784 g .0085 g 4421 1449 M 6 0 V stroke LT0 ! .1784 g .2817 g 5448 2200 M -59 17 V stroke LT0 ! .1784 g .2719 g 5313 2165 M 76 52 V stroke LT0 ! .1784 g .1193 g 4315 1850 M 59 -182 V stroke LT0 ! .1784 g .0972 g 4297 1714 M 77 -46 V stroke LT0 ! .1784 g .2255 g 4274 2150 M 59 -201 V stroke LT0 ! .1784 g .217 g 4257 2070 M 76 -121 V stroke LT0 ! .1784 g .1887 g 5143 1963 M -59 -50 V stroke LT0 ! .1784 g .1887 g 5160 2008 M -76 -95 V stroke ! LT0 ! .1784 g .0739 g 2373 1609 M -58 59 V stroke ! LT0 ! .1784 g .0993 g 2263 1726 M 52 -58 V stroke LT0 ! .1784 g .2817 g 1811 2191 M -59 34 V stroke LT0 ! .1784 g .2819 g 1676 2198 M 76 27 V stroke ! LT0 ! .1784 g .3654 g 4175 2447 M -2 2 V stroke LT0 ! .1784 g .0006 g 2702 1436 M 1 1 V stroke LT0 ! .1784 g .1042 g 6222 1702 M -58 26 V stroke LT0 ! .1784 g .1075 g 6087 1722 M 77 6 V stroke LT0 ! .1784 g .2212 g 5777 2010 M -59 72 V stroke LT0 ! .1784 g .2438 g 5642 2110 M 76 -28 V stroke ! LT0 ! .1784 g .4911 g 4098 2700 M 7 -22 V stroke LT0 ! .1784 g .2753 g 5583 2167 M -59 45 V stroke LT0 ! .1784 g .2819 g 5448 2200 M 76 12 V stroke ! LT0 ! .1784 g .0243 g 4684 1497 M -58 -35 V stroke LT0 ! .1784 g .222 g 5219 2045 M -59 -37 V stroke LT0 ! .1784 g .2231 g 5237 2094 M -77 -86 V stroke LT0 ! .1784 g .2346 g 2004 2043 M -58 72 V stroke LT0 ! .1784 g .2577 g 1869 2145 M 77 -30 V stroke LT0 ! .1784 g .2824 g 2967 2234 M -59 -105 V stroke LT0 ! .1784 g .3026 g 2984 2363 M -76 -234 V stroke LT0 ! .1784 g .005 g 2659 1435 M 2 0 V stroke LT0 ! .1784 g .2708 g 5372 2167 M -59 -2 V stroke LT0 ! .1784 g .2517 g 5237 2094 M 76 71 V stroke ! LT0 ! .1784 g .0102 g 2626 1434 M -59 31 V stroke ! LT0 ! .1784 g .0284 g 2491 1515 M 76 -50 V stroke LT0 ! .1784 g .0326 g 2481 1524 M 37 -25 V stroke LT0 ! .1784 g .1168 g 6087 1722 M -58 51 V stroke LT0 ! .1784 g .1316 g 5952 1789 M 77 -16 V stroke LT0 ! .1784 g .2502 g 5295 2114 M -58 -20 V stroke LT0 ! .1784 g .1067 g 6222 1702 M 77 31 V stroke LT0 ! .1784 g .198 g 5835 1935 M -58 75 V stroke LT0 ! .1784 g .2226 g 5700 2043 M 77 -33 V stroke ! LT0 ! .1784 g .4029 g 3051 2526 M -4 -10 V stroke ! LT0 ! .1784 g .0596 g 2432 1558 M -59 51 V stroke ! LT0 ! .1784 g .0908 g 2297 1693 M 76 -84 V stroke LT0 ! .1784 g .2115 g 2063 1968 M -59 75 V stroke LT0 ! .1784 g .2394 g 1928 2090 M 76 -47 V stroke LT0 ! .1784 g .2819 g 1734 2180 M -58 18 V stroke LT0 ! .1784 g .2732 g 1599 2150 M 77 48 V stroke LT0 ! .1784 g .123 g 2931 1820 M -63 -158 V stroke LT0 ! .1784 g .2234 g 2949 2042 M -59 -55 V stroke LT0 ! .1784 g .259 g 2967 2234 M -77 -247 V stroke LT0 ! .1784 g .1484 g 2931 1820 M -59 -12 V stroke LT0 ! .1784 g .1911 g 2949 2042 M -77 -234 V stroke LT0 ! .1784 g .0088 g 4418 1445 M -1 1 V stroke LT0 ! .1784 g .1017 g 4297 1714 M 20 -55 V stroke LT0 ! .1784 g .0065 g 4567 1438 M -9 -4 V stroke LT0 ! .1784 g .1741 g 5894 1860 M -59 75 V stroke LT0 ! .1784 g .1988 g 5759 1968 M 76 -33 V stroke LT0 ! .1784 g .2629 g 5642 2110 M -59 57 V stroke LT0 ! .1784 g .276 g 5507 2170 M 76 -3 V stroke LT0 ! .1784 g .2746 g 1869 2145 M -58 46 V stroke LT0 ! .1784 g .2817 g 1734 2180 M 77 11 V stroke LT0 ! .1784 g .1875 g 2121 1893 M -58 75 V stroke LT0 ! .1784 g .2188 g 1986 2029 M 77 -61 V stroke LT0 ! .1784 g .1074 g 6146 1683 M -59 39 V stroke LT0 ! .1784 g .1164 g 6011 1726 M 76 -4 V stroke LT0 ! .1784 g .2041 g 4257 2070 M 58 -220 V stroke LT0 ! .1784 g .1807 g 4239 1928 M 76 -78 V stroke LT0 ! .1784 g .2827 g 5507 2170 M -59 30 V stroke LT0 ! .1784 g .2806 g 5372 2167 M 76 33 V stroke LT0 ! .1784 g .1041 g 6146 1683 M 76 19 V stroke LT0 ! .1784 g .0031 g 2767 1417 M 4 3 V stroke LT0 ! .1784 g .2716 g 1658 2146 M -59 4 V stroke LT0 ! .1784 g .2555 g 1523 2085 M 76 65 V stroke LT0 ! .1784 g .1512 g 5952 1789 M -58 71 V stroke LT0 ! .1784 g .1741 g 5817 1890 M 77 -30 V stroke ! LT0 ! .1784 g .0494 g 2491 1515 M -59 43 V stroke ! LT0 ! .1784 g .0781 g 2356 1641 M 76 -83 V stroke LT0 ! .1784 g .1957 g 1429 1938 M -59 -11 V stroke LT0 ! .1784 g .2019 g 1447 2009 M -77 -82 V stroke ! LT0 ! .1784 g .0084 g 2684 1407 M -58 27 V stroke ! LT0 ! .1784 g .0246 g 2549 1480 M 77 -46 V stroke LT0 ! .1784 g .3111 g 4216 2355 M 58 -205 V stroke LT0 ! .1784 g .3111 g 4198 2310 M 76 -160 V stroke LT0 ! .1784 g .2521 g 1581 2091 M -58 -6 V stroke LT0 ! .1784 g .2308 g 1447 2009 M 76 76 V stroke LT0 ! .1784 g .2258 g 1505 2020 M -58 -11 V stroke LT0 ! .1784 g .1734 g 2132 1880 M -11 13 V stroke LT0 ! .1784 g .1975 g 2045 1965 M 76 -72 V stroke LT0 ! .1784 g .2453 g 5700 2043 M -58 67 V stroke LT0 ! .1784 g .2638 g 5565 2126 M 77 -16 V stroke LT0 ! .1784 g .0001 g 4397 1384 M 34 9 V stroke LT0 ! .1784 g .1585 g 4239 1928 M 58 -214 V stroke LT0 ! .1784 g .1262 g 4221 1749 M 76 -35 V stroke LT0 ! .1784 g .1312 g 6011 1726 M -59 63 V stroke LT0 ! .1784 g .1505 g 5876 1812 M 76 -23 V stroke ! LT0 ! .1784 g .1209 g 4945 1738 M -31 -38 V stroke LT0 ! .1784 g .1156 g 4948 1739 M -34 -39 V stroke ! LT0 ! .1784 g .1181 g 4948 1739 M -34 -39 V stroke ! LT0 ! .1784 g .0943 g 4837 1622 M 77 78 V stroke LT0 ! .1784 g .2804 g 5430 2155 M -58 12 V stroke LT0 ! .1784 g .2693 g 5295 2114 M 77 53 V stroke ! LT0 ! .1784 g .1037 g 4896 1694 M -59 -72 V stroke ! LT0 ! .1784 g .0686 g 4761 1554 M 76 68 V stroke LT0 ! .1784 g .2625 g 1928 2090 M -59 55 V stroke LT0 ! .1784 g .2759 g 1793 2152 M 76 -7 V stroke LT0 ! .1784 g .0136 g 4348 1432 M -2 3 V stroke LT0 ! .1784 g .1988 g 2104 1901 M 7 -7 V stroke ! LT0 ! .1784 g .0798 g 4819 1624 M -58 -70 V stroke ! LT0 ! .1784 g .0479 g 4684 1497 M 77 57 V stroke LT0 ! .1784 g .283 g 1793 2152 M -59 28 V stroke LT0 ! .1784 g .2803 g 1658 2146 M 76 34 V stroke LT0 ! .1784 g .13 g 2990 1807 M -60 -154 V stroke LT0 ! .1784 g .1069 g 6069 1675 M 77 8 V stroke LT0 ! .1784 g .1971 g 5125 1930 M -47 -44 V stroke LT0 ! .1784 g .192 g 5143 1963 M -69 -80 V stroke ! LT0 ! .1784 g .5484 g 3137 2811 M -3 -13 V stroke LT0 ! .1784 g .2234 g 5759 1968 M -59 75 V stroke LT0 ! .1784 g .2459 g 5624 2068 M 76 -25 V stroke LT0 ! .1784 g .2688 g 5354 2121 M -59 -7 V stroke LT0 ! .1784 g .2491 g 5219 2045 M 76 69 V stroke LT0 ! .1784 g .2769 g 5565 2126 M -58 44 V stroke LT0 ! .1784 g .2825 g 5430 2155 M 77 15 V stroke LT0 ! .1784 g .1187 g 4221 1749 M 32 -100 V stroke LT0 ! .1784 g .2231 g 5201 2005 M -58 -42 V stroke LT0 ! .1784 g .222 g 5219 2045 M -76 -82 V stroke ! LT0 ! .1784 g .0428 g 2549 1480 M -58 35 V stroke ! LT0 ! .1784 g .0693 g 2414 1596 M 77 -81 V stroke ! LT0 ! .1784 g .0605 g 4743 1562 M -59 -65 V stroke ! LT0 ! .1784 g .0323 g 4608 1451 M 76 46 V stroke LT0 ! .1784 g .2491 g 5278 2070 M -59 -25 V stroke LT0 ! .1784 g .1159 g 6069 1675 M -58 51 V stroke LT0 ! .1784 g .1301 g 5935 1740 M 76 -14 V stroke ! LT0 ! .1784 g .1202 g 2297 1693 M -29 31 V stroke LT0 ! .1784 g .1603 g 2990 1807 M -59 13 V stroke LT0 ! .1784 g .2126 g 3007 2069 M -76 -249 V stroke ! LT0 ! .1784 g .008 g 2696 1402 M -12 5 V stroke ! LT0 ! .1784 g .0234 g 2608 1452 M 76 -45 V stroke LT0 ! .1784 g .0003 g 4320 1365 M 50 12 V stroke LT0 ! .1784 g .2467 g 1986 2029 M -58 61 V stroke LT0 ! .1784 g .2657 g 1851 2113 M 77 -23 V stroke LT0 ! .1784 g .1988 g 5817 1890 M -58 78 V stroke LT0 ! .1784 g .2234 g 5682 1998 M 77 -30 V stroke LT0 ! .1784 g .3938 g 3043 2502 M -59 -139 V stroke LT0 ! .1784 g .4062 g 3061 2597 M -77 -234 V stroke LT0 ! .1784 g .2797 g 1716 2133 M -58 13 V stroke LT0 ! .1784 g .2682 g 1581 2091 M 77 55 V stroke ! LT0 ! .1784 g .0457 g 4667 1508 M -59 -57 V stroke ! LT0 ! .1784 g .0214 g 4532 1413 M 76 38 V stroke LT0 ! .1784 g .3026 g 4198 2310 M 59 -240 V stroke LT0 ! .1784 g .2824 g 4180 2181 M 77 -111 V stroke LT0 ! .1784 g .1734 g 5876 1812 M -59 78 V stroke LT0 ! .1784 g .198 g 5741 1920 M 76 -30 V stroke LT0 ! .1784 g .0184 g 4270 1424 M -1 2 V stroke LT0 ! .1784 g .3938 g 4157 2544 M 59 -189 V stroke LT0 ! .1784 g .4062 g 4139 2550 M 77 -195 V stroke LT0 ! .1784 g .2653 g 1640 2089 M -59 2 V stroke LT0 ! .1784 g .2471 g 1505 2020 M 76 71 V stroke ! LT0 ! .1784 g .1093 g 2356 1641 M -59 52 V stroke ! LT0 ! .1784 g .1238 g 2274 1720 M 23 -27 V stroke LT0 ! .1784 g .0729 g 2980 1570 M -8 6 V stroke LT0 ! .1784 g .13 g 3048 1769 M -49 -125 V stroke LT0 ! .1784 g .2645 g 5624 2068 M -59 58 V stroke LT0 ! .1784 g .2771 g 5489 2126 M 76 0 V stroke LT0 ! .1784 g .2127 g 1487 1947 M -58 -9 V stroke LT0 ! .1784 g .2195 g 1505 2020 M -76 -82 V stroke LT0 ! .1784 g .1147 g 5993 1677 M 76 -2 V stroke LT0 ! .1784 g .2791 g 1851 2113 M -58 39 V stroke LT0 ! .1784 g .2824 g 1716 2133 M 77 19 V stroke LT0 ! .1784 g .242 g 1564 2025 M -59 -5 V stroke LT0 ! .1784 g .2553 g 3007 2069 M -58 -27 V stroke LT0 ! .1784 g .3038 g 3025 2315 M -76 -273 V stroke LT0 ! .1784 g .2827 g 5489 2126 M -59 29 V stroke LT0 ! .1784 g .28 g 5354 2121 M 76 34 V stroke LT0 ! .1784 g .2289 g 2045 1965 M -59 64 V stroke LT0 ! .1784 g .2522 g 1910 2068 M 76 -39 V stroke ! LT0 ! .1784 g .0396 g 2608 1452 M -59 28 V stroke ! LT0 ! .1784 g .064 g 2473 1559 M 76 -79 V stroke LT0 ! .1784 g .1494 g 5935 1740 M -59 72 V stroke LT0 ! .1784 g .1719 g 5800 1839 M 76 -27 V stroke LT0 ! .1784 g .3394 g 3025 2315 M -58 -81 V stroke LT0 ! .1784 g .3736 g 3043 2502 M -76 -268 V stroke ! LT0 ! .1784 g .0352 g 4590 1464 M -58 -51 V stroke ! LT0 ! .1784 g .0143 g 4455 1383 M 77 30 V stroke LT0 ! .1784 g .1307 g 4145 1767 M 37 -126 V stroke LT0 ! .1784 g .0006 g 4272 1353 M 8 2 V stroke LT0 ! .1784 g .259 g 4180 2181 M 59 -253 V stroke LT0 ! .1784 g .2234 g 4162 1989 M 77 -61 V stroke LT0 ! .1784 g .1911 g 4162 1989 M 59 -240 V stroke LT0 ! .1784 g .1484 g 4145 1767 M 76 -18 V stroke ! LT0 ! .1784 g .0391 g 2666 1429 M 7 -3 V stroke LT0 ! .1784 g .1289 g 5993 1677 M -58 63 V stroke LT0 ! .1784 g .1474 g 5858 1759 M 77 -19 V stroke LT0 ! .1784 g .2459 g 5682 1998 M -58 70 V stroke LT0 ! .1784 g .2645 g 5547 2081 M 77 -13 V stroke LT0 ! .1784 g .2103 g 2104 1901 M -59 64 V stroke LT0 ! .1784 g .237 g 1969 2018 M 76 -53 V stroke ! LT0 ! .1784 g .098 g 2414 1596 M -58 45 V stroke ! LT0 ! .1784 g .1217 g 2302 1706 M 54 -65 V stroke LT0 ! .1784 g .28 g 5412 2110 M -58 11 V stroke LT0 ! .1784 g .2688 g 5278 2070 M 76 51 V stroke LT0 ! .1784 g .1603 g 3048 1769 M -58 38 V stroke LT0 ! .1784 g .2201 g 3066 2062 M -76 -255 V stroke LT0 ! .1784 g .124 g 3107 1707 M -31 -72 V stroke LT0 ! .1784 g .2832 g 1775 2110 M -59 23 V stroke LT0 ! .1784 g .2767 g 1640 2089 M 76 44 V stroke ! LT0 ! .1784 g .0284 g 4514 1427 M -59 -44 V stroke ! LT0 ! .1784 g .0102 g 4379 1357 M 76 26 V stroke LT0 ! .1784 g .2712 g 1910 2068 M -59 45 V stroke LT0 ! .1784 g .2799 g 1775 2110 M 76 3 V stroke LT0 ! .1784 g .2226 g 5741 1920 M -59 78 V stroke LT0 ! .1784 g .2453 g 5606 2020 M 76 -22 V stroke LT0 ! .1784 g .2693 g 5336 2078 M -58 -8 V stroke LT0 ! .1784 g .2502 g 5201 2005 M 77 65 V stroke LT0 ! .1784 g .0069 g 3039 1355 M -7 5 V stroke LT0 ! .1784 g .0005 g 2936 1335 M 2 0 V stroke LT0 ! .1784 g .2771 g 5547 2081 M -58 45 V stroke LT0 ! .1784 g .2827 g 5412 2110 M 77 16 V stroke ! LT0 ! .1784 g .4954 g 4098 2700 M 3 -7 V stroke LT0 ! .1784 g .4927 g 4081 2770 M 76 -226 V stroke LT0 ! .1784 g .5301 g 4022 2950 M 135 -406 V stroke LT0 ! .1784 g .1268 g 5917 1686 M 76 -9 V stroke LT0 ! .1784 g .2 g 2111 1894 M -7 7 V stroke LT0 ! .1784 g .2213 g 2027 1966 M 77 -65 V stroke ! LT0 ! .1784 g .0396 g 2666 1429 M -58 23 V stroke ! LT0 ! .1784 g .0623 g 2531 1529 M 77 -77 V stroke ! LT0 ! .1784 g .1777 g 5003 1807 M -2 -3 V stroke ! LT0 ! .1784 g .1727 g 5008 1807 M -2 -1 V stroke ! LT0 ! .1784 g .1349 g 4896 1694 M 42 43 V stroke LT0 ! .1784 g .2517 g 5260 2031 M -59 -26 V stroke LT0 ! .1784 g .226 g 5125 1930 M 76 75 V stroke ! LT0 ! .1784 g .1402 g 4927 1735 M -31 -41 V stroke ! LT0 ! .1784 g .1149 g 4819 1624 M 77 70 V stroke LT0 ! .1784 g .206 g 5125 1930 M -36 -37 V stroke LT0 ! .1784 g .1366 g 4068 1760 M 37 -127 V stroke LT0 ! .1784 g .2292 g 5183 1973 M -58 -43 V stroke ! LT0 ! .1784 g .1278 g 4878 1703 M -59 -79 V stroke ! LT0 ! .1784 g .0924 g 4743 1562 M 76 62 V stroke LT0 ! .1784 g .2748 g 1699 2080 M -59 9 V stroke LT0 ! .1784 g .2602 g 1564 2025 M 76 64 V stroke ! LT0 ! .1784 g .5513 g 3987 2860 M -6 5 V stroke LT0 ! .1784 g .1965 g 5800 1839 M -59 81 V stroke LT0 ! .1784 g .2212 g 5665 1947 M 76 -27 V stroke ! LT0 ! .1784 g .0905 g 2473 1559 M -59 37 V stroke ! LT0 ! .1784 g .1185 g 2343 1682 M 71 -86 V stroke LT0 ! .1784 g .2281 g 1546 1951 M -59 -4 V stroke LT0 ! .1784 g .2352 g 1564 2025 M -77 -78 V stroke LT0 ! .1784 g .2554 g 1622 2025 M -58 0 V stroke ! LT0 ! .1784 g .1074 g 4802 1642 M -59 -80 V stroke ! LT0 ! .1784 g .0739 g 4667 1508 M 76 54 V stroke LT0 ! .1784 g .1484 g 3107 1707 M -59 62 V stroke LT0 ! .1784 g .2126 g 3125 2018 M -77 -249 V stroke ! LT0 ! .1784 g .0246 g 4438 1397 M -59 -40 V stroke ! LT0 ! .1784 g .0084 g 4303 1336 M 76 21 V stroke LT0 ! .1784 g .1699 g 5858 1759 M -58 80 V stroke LT0 ! .1784 g .1942 g 5723 1866 M 77 -27 V stroke LT0 ! .1784 g .2126 g 4086 2022 M 59 -255 V stroke LT0 ! .1784 g .1603 g 4068 1760 M 77 7 V stroke LT0 ! .1784 g .2604 g 1969 2018 M -59 50 V stroke LT0 ! .1784 g .2739 g 1834 2080 M 76 -12 V stroke LT0 ! .1784 g .505 g 3119 2766 M -58 -169 V stroke LT0 ! .1784 g .5584 g 3196 3007 M 3061 2597 L stroke LT0 ! .1784 g .4062 g 4139 2550 M 59 -240 V stroke LT0 ! .1784 g .3938 g 4122 2454 M 76 -144 V stroke LT0 ! .1784 g .2723 g 3066 2062 M -59 7 V stroke LT0 ! .1784 g .333 g 3084 2358 M -77 -289 V stroke LT0 ! .1784 g .2638 g 5606 2020 M -59 61 V stroke LT0 ! .1784 g .2769 g 5471 2080 M 76 1 V stroke LT0 ! .1784 g .0315 g 3151 1414 M 0 -1 V stroke LT0 ! .1784 g .0812 g 3224 1536 M -1 -1 V stroke ! LT0 ! .1784 g .0908 g 4725 1587 M -58 -79 V stroke ! LT0 ! .1784 g .0596 g 4590 1464 M 77 44 V stroke LT0 ! .1784 g .2825 g 5471 2080 M -59 30 V stroke LT0 ! .1784 g .2804 g 5336 2078 M 76 32 V stroke LT0 ! .1784 g .1453 g 5917 1686 M -59 73 V stroke LT0 ! .1784 g .1669 g 5782 1782 M 76 -23 V stroke LT0 ! .1784 g .1357 g 3992 1728 M 30 -102 V stroke LT0 ! .1784 g .0629 g 3974 1487 M 3 1 V stroke LT0 ! .1784 g .2827 g 1834 2080 M -59 30 V stroke LT0 ! .1784 g .2812 g 1699 2080 M 76 30 V stroke LT0 ! .1784 g .1264 g 3164 1628 M -57 79 V stroke LT0 ! .1784 g .1911 g 3183 1940 M -76 -233 V stroke LT0 ! .1784 g .0625 g 3974 1487 M 1 -1 V stroke ! LT0 ! .1784 g .0405 g 2670 1429 M -4 0 V stroke ! LT0 ! .1784 g .08 g 2602 1496 M 1 -1 V stroke ! LT0 ! .1784 g .0511 g 2632 1465 M 34 -36 V stroke LT0 ! .1784 g .3038 g 4104 2268 M 58 -279 V stroke LT0 ! .1784 g .2553 g 4086 2022 M 76 -33 V stroke ! LT0 ! .1784 g .1568 g 2279 1733 M -3 2 V stroke ! LT0 ! .1784 g .2159 g 2144 1864 M 4 -4 V stroke ! LT0 ! .1784 g .0868 g 2531 1529 M -58 30 V stroke ! LT0 ! .1784 g .1135 g 2400 1647 M 73 -88 V stroke LT0 ! .1784 g .142 g 5840 1701 M 77 -15 V stroke ! LT0 ! .1784 g .0781 g 4649 1540 M -59 -76 V stroke ! LT0 ! .1784 g .0494 g 4514 1427 M 76 37 V stroke LT0 ! .1784 g .2479 g 2027 1966 M -58 52 V stroke LT0 ! .1784 g .2654 g 1892 2044 M 77 -26 V stroke LT0 ! .1784 g .2438 g 5665 1947 M -59 73 V stroke LT0 ! .1784 g .2629 g 5530 2032 M 76 -12 V stroke ! LT0 ! .1784 g .0234 g 4361 1375 M -58 -39 V stroke ! LT0 ! .1784 g .0084 g 4226 1318 M 77 18 V stroke LT0 ! .1784 g .1588 g 3242 1835 M -76 -207 V stroke LT0 ! .1784 g .1286 g 3916 1671 M 16 -52 V stroke LT0 ! .1784 g .3736 g 4122 2454 M 58 -273 V stroke LT0 ! .1784 g .3394 g 4104 2268 M 76 -87 V stroke LT0 ! .1784 g .0053 g 3158 1320 M 5 3 V stroke LT0 ! .1784 g .2806 g 5395 2066 M -59 12 V stroke LT0 ! .1784 g .2708 g 5260 2031 M 76 47 V stroke LT0 ! .1784 g .1376 g 3300 1712 M -39 -91 V stroke LT0 ! .1784 g .2806 g 1757 2063 M -58 17 V stroke LT0 ! .1784 g .27 g 1622 2025 M 77 55 V stroke LT0 ! .1784 g .2201 g 4010 2020 M 58 -260 V stroke LT0 ! .1784 g .1603 g 3992 1728 M 76 32 V stroke ! LT0 ! .1784 g .0112 g 2913 1336 M 5 -1 V stroke LT0 ! .1784 g .0007 g 4098 1306 M -7 0 V stroke LT0 ! .1784 g .3815 g 3084 2358 M -59 -43 V stroke LT0 ! .1784 g .4309 g 3102 2607 M -77 -292 V stroke LT0 ! .1784 g .2188 g 5723 1866 M -58 81 V stroke LT0 ! .1784 g .2419 g 5588 1967 M 77 -20 V stroke LT0 ! .1784 g .4651 g 3102 2607 M -59 -105 V stroke LT0 ! .1784 g .4927 g 3119 2766 M -76 -264 V stroke LT0 ! .1784 g .276 g 5530 2032 M -59 48 V stroke LT0 ! .1784 g .2827 g 5395 2066 M 76 14 V stroke ! LT0 ! .1784 g .0693 g 4573 1501 M -59 -74 V stroke ! LT0 ! .1784 g .0428 g 4438 1397 M 76 30 V stroke LT0 ! .1784 g .266 g 1681 2018 M -59 7 V stroke LT0 ! .1784 g .2483 g 1546 1951 M 76 74 V stroke LT0 ! .1784 g .279 g 1892 2044 M -58 36 V stroke LT0 ! .1784 g .2821 g 1757 2063 M 77 17 V stroke LT0 ! .1784 g .2413 g 1605 1951 M -59 0 V stroke LT0 ! .1784 g .2719 g 5318 2037 M -58 -6 V stroke LT0 ! .1784 g .255 g 5183 1973 M 77 58 V stroke ! LT0 ! .1784 g .1572 g 2277 1735 M 2 -2 V stroke LT0 ! .1784 g .1912 g 5782 1782 M -59 84 V stroke LT0 ! .1784 g .2158 g 5647 1890 M 76 -24 V stroke LT0 ! .1784 g .235 g 2086 1914 M -59 52 V stroke LT0 ! .1784 g .2555 g 1951 2005 M 76 -39 V stroke LT0 ! .1784 g .2723 g 3125 2018 M -59 44 V stroke LT0 ! .1784 g .3432 g 3142 2357 M -76 -295 V stroke ! LT0 ! .1784 g .0246 g 4285 1359 M -59 -41 V stroke ! LT0 ! .1784 g .0102 g 4150 1305 M 76 13 V stroke LT0 ! .1784 g .2577 g 5242 1997 M -59 -24 V stroke LT0 ! .1784 g .2346 g 5107 1908 M 76 65 V stroke LT0 ! .1784 g .2126 g 3933 1983 M 59 -255 V stroke LT0 ! .1784 g .1484 g 3916 1671 M 76 57 V stroke ! LT0 ! .1784 g .0866 g 2581 1511 M -50 18 V stroke ! LT0 ! .1784 g .1046 g 2479 1594 M 52 -65 V stroke LT0 ! .1784 g .1637 g 5840 1701 M -58 81 V stroke LT0 ! .1784 g .1873 g 5705 1805 M 77 -23 V stroke LT0 ! .1784 g .2394 g 5166 1948 M -59 -40 V stroke LT0 ! .1784 g .2221 g 5098 1899 M 9 9 V stroke LT0 ! .1784 g .1394 g 3704 1695 M 28 -86 V stroke ! LT0 ! .1784 g .2055 g 5041 1848 M -3 -2 V stroke ! LT0 ! .1784 g .2039 g 5043 1849 M -4 -4 V stroke ! LT0 ! .1784 g .1875 g 4990 1801 M 5 5 V stroke ! LT0 ! .1784 g .0069 g 4150 1305 M -113 -15 V stroke LT0 ! .1784 g .1518 g 3435 1760 M -63 -146 V stroke LT0 ! .1784 g .1386 g 3300 1712 M 45 -96 V stroke ! LT0 ! .1784 g .064 g 4496 1470 M -58 -73 V stroke ! LT0 ! .1784 g .0396 g 4361 1375 M 77 22 V stroke LT0 ! .1784 g .1911 g 3857 1911 M 59 -240 V stroke LT0 ! .1784 g .1295 g 3858 1615 M 58 56 V stroke LT0 ! .1784 g .1594 g 5764 1719 M 76 -18 V stroke LT0 ! .1784 g .1623 g 3781 1811 M 53 -196 V stroke LT0 ! .1784 g .261 g 5588 1967 M -58 65 V stroke LT0 ! .1784 g .2753 g 5453 2033 M 77 -1 V stroke ! LT0 ! .1784 g .1577 g 4878 1703 M 32 28 V stroke LT0 ! .1784 g .505 g 4081 2770 M 58 -220 V stroke LT0 ! .1784 g .505 g 4063 2725 M 76 -175 V stroke LT0 ! .1784 g .2268 g 2104 1898 M -18 16 V stroke LT0 ! .1784 g .2453 g 2009 1963 M 77 -49 V stroke LT0 ! .1784 g .2833 g 1816 2040 M -59 23 V stroke LT0 ! .1784 g .2766 g 1681 2018 M 76 45 V stroke LT0 ! .1784 g .2819 g 5453 2033 M -58 33 V stroke LT0 ! .1784 g .2817 g 5318 2037 M 77 29 V stroke ! LT0 ! .1784 g .1433 g 2397 1652 M -29 18 V stroke LT0 ! .1784 g .333 g 4027 2317 M 59 -295 V stroke LT0 ! .1784 g .2723 g 4010 2020 M 76 2 V stroke ! LT0 ! .1784 g .161 g 4898 1728 M -20 -25 V stroke ! LT0 ! .1784 g .1428 g 4802 1642 M 76 61 V stroke LT0 ! .1784 g .273 g 1951 2005 M -59 39 V stroke LT0 ! .1784 g .2802 g 1816 2040 M 76 4 V stroke LT0 ! .1784 g .2041 g 3377 1926 M -77 -214 V stroke LT0 ! .1784 g .1807 g 3242 1835 M 58 -123 V stroke LT0 ! .1784 g .2553 g 3183 1940 M -58 78 V stroke LT0 ! .1784 g .333 g 3201 2308 M -76 -290 V stroke ! LT0 ! .1784 g .0124 g 3247 1278 M -2 0 V stroke ! LT0 ! .1784 g .0016 g 3249 1278 M -4 0 V stroke LT0 ! .1784 g .1399 g 3704 1695 M -54 -86 V stroke LT0 ! .1784 g .153 g 3570 1754 M 46 -145 V stroke ! LT0 ! .1784 g .1572 g 4858 1719 M -56 -77 V stroke ! LT0 ! .1784 g .1243 g 4725 1587 M 77 55 V stroke LT0 ! .1784 g .1528 g 3570 1754 M -71 -143 V stroke LT0 ! .1784 g .1528 g 3435 1760 M 55 -149 V stroke LT0 ! .1784 g .0089 g 3862 1268 M -10 1 V stroke ! LT0 ! .1784 g .0284 g 4208 1349 M -58 -44 V stroke ! LT0 ! .1784 g .0143 g 4074 1296 M 76 9 V stroke LT0 ! .1784 g .2388 g 5647 1890 M -59 77 V stroke LT0 ! .1784 g .2589 g 5512 1979 M 76 -12 V stroke LT0 ! .1784 g .259 g 3318 2082 M -76 -247 V stroke LT0 ! .1784 g .2234 g 3183 1940 M 59 -105 V stroke LT0 ! .1784 g .2737 g 1740 2006 M -59 12 V stroke LT0 ! .1784 g .2589 g 1605 1951 M 76 67 V stroke LT0 ! .1784 g .3038 g 3260 2213 M -77 -273 V stroke ! LT0 ! .1784 g .0623 g 4420 1447 M -59 -72 V stroke ! LT0 ! .1784 g .0396 g 4285 1359 M 76 16 V stroke LT0 ! .1784 g .2523 g 1663 1946 M -58 5 V stroke ! LT0 ! .1784 g .1423 g 4784 1671 M -59 -84 V stroke ! LT0 ! .1784 g .1093 g 4649 1540 M 76 47 V stroke ! LT0 ! .1784 g .0144 g 3997 1295 M -58 -22 V stroke ! LT0 ! .1784 g .01 g 4074 1296 M -135 -23 V stroke ! LT0 ! .1784 g .0064 g 3862 1268 M 77 5 V stroke LT0 ! .1784 g .2817 g 5377 2021 M -59 16 V stroke LT0 ! .1784 g .2746 g 5242 1997 M 76 40 V stroke LT0 ! .1784 g .2165 g 2149 1860 M -5 4 V stroke LT0 ! .1784 g .2119 g 5705 1805 M -58 85 V stroke LT0 ! .1784 g .2354 g 5571 1908 M 76 -18 V stroke LT0 ! .1784 g .1807 g 3781 1811 M -77 -116 V stroke LT0 ! .1784 g .2041 g 3646 1914 M 58 -219 V stroke ! LT0 ! .1784 g .0009 g 3628 1260 M -2 0 V stroke LT0 ! .1784 g .2658 g 2009 1963 M -58 42 V stroke LT0 ! .1784 g .2763 g 1874 2013 M 77 -8 V stroke LT0 ! .1784 g .183 g 5764 1719 M -59 86 V stroke LT0 ! .1784 g .2073 g 5629 1826 M 76 -21 V stroke LT0 ! .1784 g .4309 g 4045 2566 M 59 -298 V stroke LT0 ! .1784 g .3815 g 4027 2317 M 77 -49 V stroke LT0 ! .1784 g .2732 g 5512 1979 M -59 54 V stroke LT0 ! .1784 g .2819 g 5377 2021 M 76 12 V stroke LT0 ! .1784 g .4039 g 3142 2357 M -58 1 V stroke LT0 ! .1784 g .468 g 3160 2666 M -76 -308 V stroke ! LT0 ! .1784 g .1296 g 4707 1626 M -58 -86 V stroke ! LT0 ! .1784 g .098 g 4573 1501 M 76 39 V stroke LT0 ! .1784 g .4927 g 4063 2725 M 59 -271 V stroke LT0 ! .1784 g .4651 g 4045 2566 M 77 -112 V stroke LT0 ! .1784 g .3432 g 3951 2321 M 59 -301 V stroke LT0 ! .1784 g .2723 g 3933 1983 M 77 37 V stroke LT0 ! .1784 g .2834 g 1874 2013 M -58 27 V stroke LT0 ! .1784 g .2804 g 1740 2006 M 76 34 V stroke LT0 ! .1784 g .2255 g 3512 1956 M -77 -196 V stroke LT0 ! .1784 g .217 g 3377 1926 M 58 -166 V stroke LT0 ! .1784 g .1776 g 5688 1738 M 76 -19 V stroke ! LT0 ! .1784 g .7404 g 3272 3202 M -3 -11 V stroke ! LT0 ! .1784 g .0094 g 3862 1268 M -12 -1 V stroke LT0 ! .1784 g .2759 g 5301 1998 M -59 -1 V stroke LT0 ! .1784 g .2625 g 5166 1948 M 76 49 V stroke ! LT0 ! .1784 g .0352 g 4132 1347 M -58 -51 V stroke ! LT0 ! .1784 g .0214 g 3997 1295 M 77 1 V stroke LT0 ! .1784 g .217 g 3646 1914 M -76 -160 V stroke LT0 ! .1784 g .2255 g 3512 1956 M 58 -202 V stroke LT0 ! .1784 g .2234 g 3857 1911 M -76 -100 V stroke LT0 ! .1784 g .259 g 3722 2064 M 59 -253 V stroke ! LT0 ! .1784 g .064 g 4343 1431 M -58 -72 V stroke ! LT0 ! .1784 g .0428 g 4208 1349 M 77 10 V stroke ! LT0 ! .1784 g .234 g 2151 1863 M 3 -3 V stroke ! LT0 ! .1784 g .2272 g 2143 1865 M 5 -5 V stroke LT0 ! .1784 g .5894 g 4022 2950 M 59 -180 V stroke LT0 ! .1784 g .6053 g 4004 2972 M 77 -202 V stroke ! LT0 ! .1784 g .1204 g 4631 1588 M -58 -87 V stroke ! LT0 ! .1784 g .0905 g 4496 1470 M 77 31 V stroke ! LT0 ! .1784 g .0089 g 3382 1264 M -10 1 V stroke ! LT0 ! .1784 g .0129 g 3246 1279 M 1 -1 V stroke LT0 ! .1784 g .2657 g 5224 1966 M -58 -18 V stroke LT0 ! .1784 g .2467 g 5089 1893 M 77 55 V stroke LT0 ! .1784 g .2555 g 5571 1908 M -59 71 V stroke LT0 ! .1784 g .2716 g 5436 1981 M 76 -2 V stroke LT0 ! .1784 g .333 g 3875 2278 M 58 -295 V stroke LT0 ! .1784 g .2553 g 3857 1911 M 76 72 V stroke ! LT0 ! .1784 g .0243 g 3921 1303 M -59 -35 V stroke ! LT0 ! .1784 g .0105 g 3852 1268 M 10 0 V stroke LT0 ! .1784 g .5894 g 3178 2896 M -59 -130 V stroke LT0 ! .1784 g .6053 g 3196 3007 M -77 -241 V stroke LT0 ! .1784 g .2788 g 1798 1989 M -58 17 V stroke LT0 ! .1784 g .267 g 1663 1946 M 77 60 V stroke ! LT0 ! .1784 g .01 g 3389 1266 M -7 -2 V stroke ! LT0 ! .1784 g .0088 g 3517 1258 M -3 0 V stroke ! LT0 ! .1784 g .0111 g 3373 1267 M 2 -1 V stroke LT0 ! .1784 g .3038 g 3798 2190 M 59 -279 V stroke LT0 ! .1784 g .2582 g 2068 1922 M -59 41 V stroke LT0 ! .1784 g .2712 g 1933 1982 M 76 -19 V stroke LT0 ! .1784 g .2803 g 5436 1981 M -59 40 V stroke LT0 ! .1784 g .283 g 5301 1998 M 76 23 V stroke LT0 ! .1784 g .2522 g 5148 1926 M -59 -33 V stroke LT0 ! .1784 g .261 g 1722 1936 M -59 10 V stroke LT0 ! .1784 g .5173 g 3160 2666 M -58 -59 V stroke LT0 ! .1784 g .5618 g 3178 2896 M -76 -289 V stroke ! LT0 ! .1784 g .0091 g 3514 1259 M 3 -1 V stroke LT0 ! .1784 g .3026 g 3453 2160 M -76 -234 V stroke LT0 ! .1784 g .2824 g 3318 2082 M 59 -156 V stroke LT0 ! .1784 g .2308 g 5629 1826 M -58 82 V stroke LT0 ! .1784 g .2521 g 5494 1920 M 77 -12 V stroke LT0 ! .1784 g .2817 g 1933 1982 M -59 31 V stroke LT0 ! .1784 g .2819 g 1798 1989 M 76 24 V stroke ! LT0 ! .1784 g .225 g 5024 1844 M -4 -3 V stroke ! LT0 ! .1784 g .1148 g 4555 1557 M -59 -87 V stroke ! LT0 ! .1784 g .0868 g 4420 1447 M 76 23 V stroke LT0 ! .1784 g .2019 g 5688 1738 M -59 88 V stroke LT0 ! .1784 g .2258 g 5553 1843 M 76 -17 V stroke ! LT0 ! .1784 g .0693 g 4267 1423 M -59 -74 V stroke ! LT0 ! .1784 g .0494 g 4132 1347 M 76 2 V stroke ! LT0 ! .1784 g .0663 g 2847 1406 M -5 0 V stroke ! LT0 ! .1784 g .1073 g 2766 1490 M 26 -29 V stroke LT0 ! .1784 g .4039 g 3201 2308 M -59 49 V stroke LT0 ! .1784 g .4808 g 3219 2671 M -77 -314 V stroke ! LT0 ! .1784 g .0457 g 4056 1353 M -59 -58 V stroke ! LT0 ! .1784 g .0323 g 3921 1303 M 76 -8 V stroke ! LT0 ! .1784 g .208 g 4947 1788 M -1 -1 V stroke LT0 ! .1784 g .1957 g 5611 1755 M 77 -17 V stroke LT0 ! .1784 g .2824 g 3722 2064 M -76 -150 V stroke LT0 ! .1784 g .3026 g 3588 2154 M 58 -240 V stroke LT0 ! .1784 g .2511 g 2127 1883 M -59 39 V stroke LT0 ! .1784 g .2659 g 1992 1950 M 76 -28 V stroke LT0 ! .1784 g .6851 g 3946 3173 M 76 -223 V stroke LT0 ! .1784 g .2824 g 5359 1973 M -58 25 V stroke LT0 ! .1784 g .2791 g 5224 1966 M 77 32 V stroke LT0 ! .1784 g .468 g 3969 2631 M 58 -314 V stroke LT0 ! .1784 g .4039 g 3951 2321 M 76 -4 V stroke LT0 ! .1784 g .2682 g 5494 1920 M -58 61 V stroke LT0 ! .1784 g .2797 g 5359 1973 M 77 8 V stroke LT0 ! .1784 g .3111 g 3588 2154 M -76 -198 V stroke LT0 ! .1784 g .3111 g 3453 2160 M 59 -204 V stroke LT0 ! .1784 g .3736 g 3394 2349 M -76 -267 V stroke LT0 ! .1784 g .3394 g 3260 2213 M 58 -131 V stroke ! LT0 ! .1784 g .1756 g 4784 1671 M 70 47 V stroke ! LT0 ! .1784 g .0401 g 3710 1293 M 2 -1 V stroke LT0 ! .1784 g .2819 g 1857 1968 M -59 21 V stroke LT0 ! .1784 g .2728 g 1722 1936 M 76 53 V stroke ! LT0 ! .1784 g .113 g 4478 1534 M -58 -87 V stroke ! LT0 ! .1784 g .0868 g 4343 1431 M 77 16 V stroke LT0 ! .1784 g .3815 g 3260 2213 M -59 95 V stroke LT0 ! .1784 g .468 g 3277 2616 M -76 -308 V stroke LT0 ! .1784 g .2789 g 1992 1950 M -59 32 V stroke LT0 ! .1784 g .2817 g 1857 1968 M 76 14 V stroke ! LT0 ! .1784 g .1805 g 4812 1708 M -28 -37 V stroke ! LT0 ! .1784 g .1626 g 4707 1626 M 77 45 V stroke LT0 ! .1784 g .4309 g 3336 2506 M -76 -293 V stroke LT0 ! .1784 g .2677 g 1780 1923 M -58 13 V stroke ! LT0 ! .1784 g .2384 g 2244 1815 M 3 -3 V stroke LT0 ! .1784 g .2799 g 5283 1957 M -59 9 V stroke LT0 ! .1784 g .2712 g 5148 1926 M 76 40 V stroke LT0 ! .1784 g .2471 g 5553 1843 M -59 77 V stroke LT0 ! .1784 g .2653 g 5418 1924 M 76 -4 V stroke LT0 ! .1784 g .6053 g 4004 2972 M 59 -247 V stroke LT0 ! .1784 g .5894 g 3987 2861 M 76 -136 V stroke ! LT0 ! .1784 g .0781 g 4191 1423 M -59 -76 V stroke ! LT0 ! .1784 g .0596 g 4056 1353 M 76 -6 V stroke LT0 ! .1784 g .246 g 2167 1858 M -40 25 V stroke LT0 ! .1784 g .2609 g 2050 1918 M 77 -35 V stroke LT0 ! .1784 g .3394 g 3798 2190 M -76 -126 V stroke LT0 ! .1784 g .3736 g 3663 2338 M 59 -274 V stroke ! LT0 ! .1784 g .0542 g 3962 1348 M -41 -45 V stroke ! LT0 ! .1784 g .0408 g 3904 1307 M 17 -4 V stroke LT0 ! .1784 g .2195 g 5611 1755 M -58 88 V stroke LT0 ! .1784 g .242 g 5476 1854 M 77 -11 V stroke ! LT0 ! .1784 g .1779 g 4757 1694 M -50 -68 V stroke ! LT0 ! .1784 g .152 g 4631 1588 M 76 38 V stroke LT0 ! .1784 g .5618 g 3987 2861 M 58 -295 V stroke LT0 ! .1784 g .5173 g 3969 2631 M 76 -65 V stroke LT0 ! .1784 g .2767 g 5418 1924 M -59 49 V stroke LT0 ! .1784 g .2832 g 5283 1957 M 76 16 V stroke LT0 ! .1784 g .2739 g 5206 1932 M -58 -6 V stroke LT0 ! .1784 g .2604 g 5072 1882 M 76 44 V stroke LT0 ! .1784 g .2127 g 5535 1769 M 76 -14 V stroke ! LT0 ! .1784 g .1148 g 4402 1519 M -59 -88 V stroke ! LT0 ! .1784 g .0905 g 4267 1423 M 76 8 V stroke LT0 ! .1784 g .4808 g 3892 2641 M 59 -320 V stroke LT0 ! .1784 g .4039 g 3875 2278 M 76 43 V stroke LT0 ! .1784 g .701 g 3254 3157 M -58 -150 V stroke ! LT0 ! .1784 g .6923 g 3256 3162 M -60 -155 V stroke LT0 ! .1784 g .7472 g 3331 3368 M 3196 3007 L stroke LT0 ! .1784 g .2834 g 1915 1944 M -58 24 V stroke LT0 ! .1784 g .2767 g 1780 1923 M 77 45 V stroke LT0 ! .1784 g .2757 g 2050 1918 M -58 32 V stroke LT0 ! .1784 g .2806 g 1915 1944 M 77 6 V stroke ! LT0 ! .1784 g .0434 g 3718 1301 M -8 -8 V stroke LT0 ! .1784 g .3815 g 3875 2278 M -77 -88 V stroke LT0 ! .1784 g .4309 g 3740 2489 M 58 -299 V stroke ! LT0 ! .1784 g .1735 g 4690 1671 M -59 -83 V stroke ! LT0 ! .1784 g .1447 g 4555 1557 M 76 31 V stroke LT0 ! .1784 g .4062 g 3529 2395 M -76 -235 V stroke LT0 ! .1784 g .3938 g 3394 2349 M 59 -189 V stroke LT0 ! .1784 g .5449 g 3219 2671 M -59 -5 V stroke LT0 ! .1784 g .6064 g 3236 2971 M -76 -305 V stroke LT0 ! .1784 g .2654 g 5130 1902 M -58 -20 V stroke LT0 ! .1784 g .2514 g 5036 1861 M 36 21 V stroke LT0 ! .1784 g .468 g 3816 2592 M 59 -314 V stroke LT0 ! .1784 g .2414 g 2209 1834 M -8 4 V stroke ! LT0 ! .1784 g .2673 g 2050 1918 M 59 -31 V stroke LT0 ! .1784 g .2602 g 5476 1854 M -58 70 V stroke LT0 ! .1784 g .2748 g 5341 1920 M 77 4 V stroke LT0 ! .1784 g .2725 g 1839 1906 M -59 17 V stroke LT0 ! .1784 g .3938 g 3663 2338 M -75 -184 V stroke LT0 ! .1784 g .4062 g 3529 2395 M 59 -241 V stroke LT0 ! .1784 g .2812 g 5341 1920 M -58 37 V stroke LT0 ! .1784 g .2827 g 5206 1932 M 77 25 V stroke ! LT0 ! .1784 g .0908 g 4114 1431 M -58 -78 V stroke ! LT0 ! .1784 g .0731 g 3987 1366 M 69 -13 V stroke ! LT0 ! .1784 g .1204 g 4326 1510 M -59 -87 V stroke ! LT0 ! .1784 g .098 g 4191 1423 M 76 0 V stroke ! LT0 ! .1784 g .1685 g 4613 1642 M -58 -85 V stroke ! LT0 ! .1784 g .1411 g 4478 1534 M 77 23 V stroke LT0 ! .1784 g .2352 g 5535 1769 M -59 85 V stroke LT0 ! .1784 g .2554 g 5400 1859 M 76 -5 V stroke LT0 ! .1784 g .6509 g 3236 2971 M -58 -75 V stroke LT0 ! .1784 g .6851 g 3254 3157 M -76 -261 V stroke LT0 ! .1784 g .2728 g 2109 1887 M -59 31 V stroke LT0 ! .1784 g .279 g 1974 1919 M 76 -1 V stroke LT0 ! .1784 g .2838 g 1974 1919 M -59 25 V stroke LT0 ! .1784 g .2792 g 1839 1906 M 76 38 V stroke LT0 ! .1784 g .2281 g 5459 1780 M 76 -11 V stroke LT0 ! .1784 g .2821 g 5265 1909 M -59 23 V stroke LT0 ! .1784 g .279 g 5130 1902 M 76 30 V stroke ! LT0 ! .1784 g .2392 g 2251 1811 M -7 4 V stroke ! LT0 ! .1784 g .2537 g 2204 1837 M 7 -4 V stroke ! LT0 ! .1784 g .2488 g 2200 1838 M 8 -4 V stroke ! LT0 ! .1784 g .1994 g 2496 1676 M -5 1 V stroke LT0 ! .1784 g .4927 g 3471 2614 M -77 -265 V stroke LT0 ! .1784 g .4651 g 3336 2506 M 58 -157 V stroke LT0 ! .1784 g .701 g 3946 3173 M 58 -201 V stroke LT0 ! .1784 g .701 g 3928 3128 M 76 -156 V stroke LT0 ! .1784 g .27 g 5400 1859 M -59 61 V stroke LT0 ! .1784 g .2806 g 5265 1909 M 76 11 V stroke ! LT0 ! .1784 g .1668 g 4537 1619 M -59 -85 V stroke ! LT0 ! .1784 g .1411 g 4402 1519 M 76 15 V stroke LT0 ! .1784 g .2758 g 1898 1886 M -59 20 V stroke ! LT0 ! .1784 g .2335 g 4870 1770 M -3 -2 V stroke LT0 ! .1784 g .5449 g 3277 2616 M -58 55 V stroke LT0 ! .1784 g .6218 g 3295 2980 M -76 -309 V stroke LT0 ! .1784 g .6064 g 3910 2941 M 59 -310 V stroke LT0 ! .1784 g .5449 g 3892 2641 M 77 -10 V stroke ! LT0 ! .1784 g .1296 g 4249 1510 M -58 -87 V stroke ! LT0 ! .1784 g .1093 g 4114 1431 M 77 -8 V stroke LT0 ! .1784 g .4651 g 3740 2489 M -77 -151 V stroke LT0 ! .1784 g .4927 g 3605 2608 M 58 -270 V stroke LT0 ! .1784 g .2802 g 5189 1892 M -59 10 V stroke LT0 ! .1784 g .273 g 5054 1869 M 76 33 V stroke LT0 ! .1784 g .2705 g 2167 1858 M -58 29 V stroke LT0 ! .1784 g .2775 g 2032 1893 M 77 -6 V stroke LT0 ! .1784 g .2483 g 5459 1780 M -59 79 V stroke LT0 ! .1784 g .266 g 5324 1859 M 76 0 V stroke LT0 ! .1784 g .2837 g 2032 1893 M -58 26 V stroke LT0 ! .1784 g .2805 g 1898 1886 M 76 33 V stroke ! LT0 ! .1784 g .2008 g 4690 1671 M 26 12 V stroke LT0 ! .1784 g .5618 g 3412 2795 M -76 -289 V stroke LT0 ! .1784 g .5173 g 3277 2616 M 59 -110 V stroke LT0 ! .1784 g .6064 g 3354 2920 M -77 -304 V stroke LT0 ! .1784 g .2413 g 5382 1785 M 77 -5 V stroke ! LT0 ! .1784 g .8746 g 3397 3481 M -5 -15 V stroke ! LT0 ! .1784 g .2392 g 2361 1764 M -7 3 V stroke ! LT0 ! .1784 g .2558 g 2254 1815 M 9 -5 V stroke LT0 ! .1784 g .6851 g 3928 3128 M 59 -267 V stroke LT0 ! .1784 g .6509 g 3910 2941 M 77 -80 V stroke LT0 ! .1784 g .505 g 3605 2608 M -76 -213 V stroke LT0 ! .1784 g .505 g 3471 2614 M 58 -219 V stroke LT0 ! .1784 g .2766 g 5324 1859 M -59 50 V stroke LT0 ! .1784 g .2833 g 5189 1892 M 76 17 V stroke ! LT0 ! .1784 g .1685 g 4461 1603 M -59 -84 V stroke ! LT0 ! .1784 g .1447 g 4326 1510 M 76 9 V stroke LT0 ! .1784 g .2763 g 5112 1871 M -58 -2 V stroke LT0 ! .1784 g .2658 g 4977 1833 M 77 36 V stroke LT0 ! .1784 g .278 g 1956 1864 M -58 22 V stroke ! LT0 ! .1784 g .2018 g 4696 1678 M -6 -7 V stroke ! LT0 ! .1784 g .1973 g 4613 1642 M 77 29 V stroke ! LT0 ! .1784 g .7706 g 3887 3311 M 59 -138 V stroke LT0 ! .1784 g .7895 g 3869 3344 M 77 -171 V stroke LT0 ! .1784 g .8191 g 3811 3492 M 135 -319 V stroke LT0 ! .1784 g .6218 g 3834 2956 M 58 -315 V stroke LT0 ! .1784 g .5449 g 3816 2592 M 76 49 V stroke LT0 ! .1784 g .5173 g 3816 2592 M -76 -103 V stroke LT0 ! .1784 g .5618 g 3681 2783 M 59 -294 V stroke LT0 ! .1784 g .2693 g 2226 1832 M -59 26 V stroke LT0 ! .1784 g .2764 g 2091 1867 M 76 -9 V stroke ! LT0 ! .1784 g .1242 g 4133 1458 M -19 -27 V stroke ! LT0 ! .1784 g .1181 g 4094 1435 M 20 -4 V stroke LT0 ! .1784 g .2589 g 5382 1785 M -58 74 V stroke LT0 ! .1784 g .2737 g 5247 1852 M 77 7 V stroke LT0 ! .1784 g .2712 g 5036 1846 M -59 -13 V stroke LT0 ! .1784 g .2591 g 4919 1806 M 58 27 V stroke LT0 ! .1784 g .2834 g 2091 1867 M -59 26 V stroke LT0 ! .1784 g .2812 g 1956 1864 M 76 29 V stroke LT0 ! .1784 g .2804 g 5247 1852 M -58 40 V stroke LT0 ! .1784 g .2834 g 5112 1871 M 77 21 V stroke LT0 ! .1784 g .6064 g 3758 2902 M 58 -310 V stroke ! LT0 ! .1784 g .8463 g 3811 3492 M 76 -181 V stroke ! LT0 ! .1784 g .1484 g 3069 1485 M -12 -7 V stroke LT0 ! .1784 g .6834 g 3295 2980 M -59 -9 V stroke LT0 ! .1784 g .7364 g 3313 3245 M -77 -274 V stroke ! LT0 ! .1784 g .2006 g 4628 1659 M -15 -17 V stroke ! LT0 ! .1784 g .1942 g 4537 1619 M 76 23 V stroke ! LT0 ! .1784 g .1948 g 4381 1588 M -4 -5 V stroke ! LT0 ! .1784 g .1669 g 4369 1572 M -43 -62 V stroke ! LT0 ! .1784 g .152 g 4249 1510 M 77 0 V stroke LT0 ! .1784 g .7706 g 3313 3245 M -59 -88 V stroke LT0 ! .1784 g .7895 g 3331 3368 M -77 -211 V stroke ! LT0 ! .1784 g .2401 g 2357 1766 M 4 -2 V stroke LT0 ! .1784 g .2523 g 5306 1786 M 76 -1 V stroke ! LT0 ! .1784 g .2639 g 4964 1821 M -27 -10 V stroke ! LT0 ! .1784 g .1536 g 2887 1518 M -4 -2 V stroke ! LT0 ! .1784 g .1933 g 2818 1585 M 2 -3 V stroke ! LT0 ! .1784 g .1623 g 2867 1533 M 2 -2 V stroke LT0 ! .1784 g .2793 g 2015 1840 M -59 24 V stroke ! LT0 ! .1784 g .1412 g 3736 1442 M -5 -6 V stroke LT0 ! .1784 g .2819 g 5171 1841 M -59 30 V stroke LT0 ! .1784 g .2817 g 5036 1846 M 76 25 V stroke LT0 ! .1784 g .6053 g 3547 2855 M -76 -241 V stroke LT0 ! .1784 g .5894 g 3412 2795 M 59 -181 V stroke LT0 ! .1784 g .2693 g 2285 1807 M -59 25 V stroke LT0 ! .1784 g .276 g 2150 1841 M 76 -9 V stroke LT0 ! .1784 g .267 g 5306 1786 M -59 66 V stroke LT0 ! .1784 g .2788 g 5171 1841 M 76 11 V stroke ! LT0 ! .1784 g .1989 g 4552 1636 M -15 -17 V stroke ! LT0 ! .1784 g .1942 g 4461 1603 M 76 16 V stroke LT0 ! .1784 g .2831 g 2150 1841 M -59 26 V stroke LT0 ! .1784 g .2815 g 2015 1840 M 76 27 V stroke LT0 ! .1784 g .5894 g 3681 2783 M -76 -175 V stroke LT0 ! .1784 g .6053 g 3547 2855 M 58 -247 V stroke ! LT0 ! .1784 g .1613 g 4261 1525 M -12 -15 V stroke ! LT0 ! .1784 g .1579 g 4231 1511 M 18 -1 V stroke LT0 ! .1784 g .7364 g 3852 3221 M 58 -280 V stroke LT0 ! .1784 g .6834 g 3834 2956 M 76 -15 V stroke LT0 ! .1784 g .261 g 5230 1783 M 76 3 V stroke ! LT0 ! .1784 g .2473 g 2478 1731 M -10 2 V stroke LT0 ! .1784 g .7895 g 3869 3344 M 59 -216 V stroke LT0 ! .1784 g .7706 g 3852 3221 M 76 -93 V stroke LT0 ! .1784 g .2817 g 5095 1826 M -59 20 V stroke LT0 ! .1784 g .2789 g 4960 1820 M 76 26 V stroke ! LT0 ! .1784 g .1277 g 3828 1423 M -1 -1 V stroke ! LT0 ! .1784 g .1283 g 3821 1425 M 6 -3 V stroke LT0 ! .1784 g .6834 g 3354 2920 M -59 60 V stroke LT0 ! .1784 g .7541 g 3371 3258 M -76 -278 V stroke LT0 ! .1784 g .2799 g 2073 1816 M -58 24 V stroke LT0 ! .1784 g .2728 g 5230 1783 M -59 58 V stroke LT0 ! .1784 g .2819 g 5095 1826 M 76 15 V stroke ! LT0 ! .1784 g .1968 g 4465 1608 M -4 -5 V stroke ! LT0 ! .1784 g .1954 g 4447 1601 M 14 2 V stroke LT0 ! .1784 g .6851 g 3489 3056 M -77 -261 V stroke LT0 ! .1784 g .6509 g 3354 2920 M 58 -125 V stroke LT0 ! .1784 g .2705 g 2343 1786 M -58 21 V stroke LT0 ! .1784 g .2764 g 2208 1816 M 77 -9 V stroke ! LT0 ! .1784 g .1556 g 3073 1492 M 4 -3 V stroke LT0 ! .1784 g .2831 g 2208 1816 M -58 25 V stroke LT0 ! .1784 g .2815 g 2073 1816 M 77 25 V stroke LT0 ! .1784 g .8652 g 3389 3465 M -58 -97 V stroke LT0 ! .1784 g .8652 g 3407 3510 M -76 -142 V stroke LT0 ! .1784 g .7364 g 3430 3194 M -76 -274 V stroke LT0 ! .1784 g .2806 g 5018 1809 M -58 11 V stroke LT0 ! .1784 g .2757 g 4883 1794 M 77 26 V stroke LT0 ! .1784 g .2677 g 5153 1775 M 77 8 V stroke LT0 ! .1784 g .6509 g 3758 2902 M -77 -119 V stroke LT0 ! .1784 g .6851 g 3623 3050 M 58 -267 V stroke ! LT0 ! .1784 g .2381 g 4596 1687 M 2 0 V stroke ! LT0 ! .1784 g .2485 g 2474 1733 M 4 -2 V stroke LT0 ! .1784 g .7541 g 3775 3241 M 59 -285 V stroke LT0 ! .1784 g .6834 g 3758 2902 M 76 54 V stroke LT0 ! .1784 g .2767 g 5153 1775 M -58 51 V stroke LT0 ! .1784 g .2834 g 5018 1809 M 77 17 V stroke LT0 ! .1784 g .2799 g 2132 1790 M -59 26 V stroke ! LT0 ! .1784 g .2185 g 2865 1610 M -7 -2 V stroke LT0 ! .1784 g .8072 g 3371 3258 M -58 -13 V stroke LT0 ! .1784 g .8463 g 3389 3465 M -76 -220 V stroke LT0 ! .1784 g .9258 g 3466 3614 M -59 -104 V stroke LT0 ! .1784 g .7364 g 3699 3182 M 59 -280 V stroke LT0 ! .1784 g .279 g 4942 1789 M -59 5 V stroke LT0 ! .1784 g .2728 g 4807 1769 M 76 25 V stroke LT0 ! .1784 g .2728 g 2402 1766 M -59 20 V stroke LT0 ! .1784 g .2775 g 2267 1791 M 76 -5 V stroke LT0 ! .1784 g .8652 g 3811 3492 M 58 -148 V stroke LT0 ! .1784 g .8652 g 3793 3448 M 76 -104 V stroke LT0 ! .1784 g .701 g 3623 3050 M -76 -195 V stroke LT0 ! .1784 g .701 g 3489 3056 M 58 -201 V stroke LT0 ! .1784 g .2834 g 2267 1791 M -59 25 V stroke LT0 ! .1784 g .2815 g 2132 1790 M 76 26 V stroke ! LT0 ! .1784 g .2384 g 4597 1687 M -1 0 V stroke ! LT0 ! .1784 g .2461 g 2629 1688 M 5 -4 V stroke LT0 ! .1784 g .2725 g 5077 1764 M 76 11 V stroke LT0 ! .1784 g .2792 g 5077 1764 M -59 45 V stroke LT0 ! .1784 g .2838 g 4942 1789 M 76 20 V stroke LT0 ! .1784 g .9258 g 3734 3602 M 77 -110 V stroke LT0 ! .1784 g .2775 g 4865 1769 M -58 0 V stroke LT0 ! .1784 g .2705 g 4731 1746 M 76 23 V stroke LT0 ! .1784 g .2793 g 2190 1762 M -58 28 V stroke LT0 ! .1784 g .8463 g 3793 3448 M 59 -227 V stroke LT0 ! .1784 g .8072 g 3775 3241 M 77 -20 V stroke ! LT0 ! .1784 g .262 g 2509 1729 M 5 -1 V stroke ! LT0 ! .1784 g .2177 g 3944 1563 M -5 -6 V stroke LT0 ! .1784 g .2757 g 2460 1747 M -58 19 V stroke LT0 ! .1784 g .279 g 2325 1767 M 77 -1 V stroke LT0 ! .1784 g .2837 g 2325 1767 M -58 24 V stroke LT0 ! .1784 g .2812 g 2190 1762 M 77 29 V stroke LT0 ! .1784 g .2758 g 5000 1750 M 77 14 V stroke LT0 ! .1784 g .2805 g 5000 1750 M -58 39 V stroke LT0 ! .1784 g .2837 g 4865 1769 M 77 20 V stroke ! LT0 ! .1784 g .22 g 2863 1611 M 2 -1 V stroke LT0 ! .1784 g .8072 g 3430 3194 M -59 64 V stroke LT0 ! .1784 g .8658 g 3448 3482 M -77 -224 V stroke LT0 ! .1784 g .7895 g 3565 3267 M -76 -211 V stroke LT0 ! .1784 g .7706 g 3430 3194 M 59 -138 V stroke LT0 ! .1784 g .2764 g 4789 1749 M -58 -3 V stroke LT0 ! .1784 g .2693 g 4654 1725 M 77 21 V stroke LT0 ! .1784 g .7706 g 3699 3182 M -76 -132 V stroke LT0 ! .1784 g .7895 g 3565 3267 M 58 -217 V stroke ! LT0 ! .1784 g .1903 g 3685 1511 M -3 -3 V stroke ! LT0 ! .1784 g .1851 g 3667 1504 M 7 -4 V stroke LT0 ! .1784 g .9049 g 3448 3482 M -59 -17 V stroke LT0 ! .1784 g .9258 g 3466 3614 M -77 -149 V stroke LT0 ! .1784 g .278 g 2249 1734 M -59 28 V stroke ! LT0 ! .1784 g .2291 g 4252 1609 M -3 -3 V stroke LT0 ! .1784 g .8463 g 3506 3415 M -76 -221 V stroke ! LT0 ! .1784 g .219 g 3944 1563 M 5 -2 V stroke LT0 ! .1784 g .272 g 2460 1747 M 94 -26 V stroke LT0 ! .1784 g .2812 g 4924 1734 M -59 35 V stroke LT0 ! .1784 g .2834 g 4789 1749 M 76 20 V stroke LT0 ! .1784 g .278 g 4924 1734 M 76 16 V stroke LT0 ! .1784 g .8658 g 3717 3470 M 58 -229 V stroke LT0 ! .1784 g .8072 g 3699 3182 M 76 59 V stroke LT0 ! .1784 g .2838 g 2384 1741 M -59 26 V stroke LT0 ! .1784 g .2805 g 2249 1734 M 76 33 V stroke LT0 ! .1784 g .276 g 4713 1729 M -59 -4 V stroke LT0 ! .1784 g .2693 g 4578 1707 M 76 18 V stroke LT0 ! .1784 g .2789 g 2519 1729 M -59 18 V stroke LT0 ! .1784 g .2806 g 2384 1741 M 76 6 V stroke LT0 ! .1784 g .8463 g 3640 3409 M 59 -227 V stroke ! LT0 ! .1784 g .2377 g 3868 1582 M -2 -2 V stroke ! LT0 ! .1784 g .2159 g 3751 1550 M 12 -5 V stroke LT0 ! .1784 g .9258 g 3734 3602 M 59 -154 V stroke LT0 ! .1784 g .9049 g 3717 3470 M 76 -22 V stroke LT0 ! .1784 g .9891 g 3600 3697 M -58 -20 V stroke LT0 ! .1784 g .9676 g 3466 3614 M 76 63 V stroke ! LT0 ! .1784 g .2379 g 3252 1588 M -6 -3 V stroke ! LT0 ! .1784 g .2242 g 3055 1589 M 4 -2 V stroke LT0 ! .1784 g .9676 g 3524 3633 M -58 -19 V stroke LT0 ! .1784 g .9676 g 3734 3602 M -58 70 V stroke LT0 ! .1784 g .9891 g 3600 3697 M 76 -25 V stroke LT0 ! .1784 g .2758 g 2308 1703 M -59 31 V stroke LT0 ! .1784 g .2815 g 4848 1716 M -59 33 V stroke LT0 ! .1784 g .2831 g 4713 1729 M 76 20 V stroke ! LT0 ! .1784 g .2393 g 2932 1624 M -8 -1 V stroke ! LT0 ! .1784 g .2387 g 2921 1625 M 3 -2 V stroke ! LT0 ! .1784 g .2541 g 4290 1643 M 8 0 V stroke LT0 ! .1784 g .2793 g 4848 1716 M 76 18 V stroke LT0 ! .1784 g .2764 g 4636 1710 M -58 -3 V stroke LT0 ! .1784 g .2705 g 4501 1691 M 77 16 V stroke LT0 ! .1784 g .8652 g 3640 3409 M -75 -142 V stroke LT0 ! .1784 g .8652 g 3506 3415 M 59 -148 V stroke LT0 ! .1784 g .9676 g 3658 3627 M 76 -25 V stroke LT0 ! .1784 g .2834 g 2443 1714 M -59 27 V stroke LT0 ! .1784 g .2792 g 2308 1703 M 76 38 V stroke ! LT0 ! .1784 g .2273 g 3959 1575 M -4 -4 V stroke ! LT0 ! .1784 g .237 g 3868 1582 M 9 -3 V stroke LT0 ! .1784 g .273 g 2713 1689 M -59 11 V stroke LT0 ! .1784 g .2763 g 2578 1708 M 76 -8 V stroke LT0 ! .1784 g .275 g 2519 1729 M 135 -29 V stroke LT0 ! .1784 g .2817 g 2578 1708 M -59 21 V stroke LT0 ! .1784 g .2817 g 2443 1714 M 76 15 V stroke ! LT0 ! .1784 g .2296 g 3630 1564 M -5 -3 V stroke LT0 ! .1784 g .9049 g 3506 3415 M -58 67 V stroke LT0 ! .1784 g .9467 g 3524 3633 M -76 -151 V stroke LT0 ! .1784 g .2815 g 4771 1697 M -58 32 V stroke LT0 ! .1784 g .2831 g 4636 1710 M 77 19 V stroke LT0 ! .1784 g .2725 g 2366 1669 M -58 34 V stroke LT0 ! .1784 g .2799 g 4771 1697 M 77 19 V stroke LT0 ! .1784 g .9258 g 3583 3563 M -77 -148 V stroke LT0 ! .1784 g .2775 g 4560 1691 M -59 0 V stroke LT0 ! .1784 g .2728 g 4425 1678 M 76 13 V stroke LT0 ! .1784 g .9467 g 3658 3627 M 59 -157 V stroke LT0 ! .1784 g .9049 g 3640 3409 M 77 61 V stroke LT0 ! .1784 g .9258 g 3583 3563 M 57 -154 V stroke LT0 ! .1784 g .9891 g 3658 3627 M -58 70 V stroke LT0 ! .1784 g .9891 g 3524 3633 M 76 64 V stroke LT0 ! .1784 g .2819 g 2501 1684 M -58 30 V stroke LT0 ! .1784 g .2767 g 2366 1669 M 77 45 V stroke LT0 ! .1784 g .9676 g 3583 3563 M -59 70 V stroke LT0 ! .1784 g .2815 g 4695 1677 M -59 33 V stroke LT0 ! .1784 g .2834 g 4560 1691 M 76 19 V stroke LT0 ! .1784 g .2834 g 2636 1685 M -58 23 V stroke LT0 ! .1784 g .2819 g 2501 1684 M 77 24 V stroke LT0 ! .1784 g .2726 g 2713 1689 M 103 -21 V stroke LT0 ! .1784 g .279 g 2771 1674 M -58 15 V stroke LT0 ! .1784 g .2802 g 2636 1685 M 77 4 V stroke ! LT0 ! .1784 g .2591 g 3912 1607 M -2 -1 V stroke LT0 ! .1784 g .2799 g 4695 1677 M 76 20 V stroke LT0 ! .1784 g .9676 g 3583 3563 M 75 64 V stroke ! LT0 ! .1784 g .2378 g 3391 1579 M -4 -1 V stroke LT0 ! .1784 g .2677 g 2425 1632 M -59 37 V stroke LT0 ! .1784 g .279 g 4484 1672 M -59 6 V stroke LT0 ! .1784 g .2757 g 4349 1665 M 76 13 V stroke ! LT0 ! .1784 g .2665 g 4137 1635 M 63 3 V stroke LT0 ! .1784 g .2788 g 2560 1651 M -59 33 V stroke LT0 ! .1784 g .2728 g 2425 1632 M 76 52 V stroke LT0 ! .1784 g .2812 g 4619 1656 M -59 35 V stroke LT0 ! .1784 g .2837 g 4484 1672 M 76 19 V stroke LT0 ! .1784 g .2793 g 4619 1656 M 76 21 V stroke LT0 ! .1784 g .2833 g 2695 1657 M -59 28 V stroke LT0 ! .1784 g .2804 g 2560 1651 M 76 34 V stroke LT0 ! .1784 g .261 g 2483 1591 M -58 41 V stroke LT0 ! .1784 g .2806 g 4407 1653 M -58 12 V stroke LT0 ! .1784 g .2789 g 4272 1652 M 77 13 V stroke LT0 ! .1784 g .2827 g 2830 1654 M -59 20 V stroke LT0 ! .1784 g .2788 g 2906 1657 M -135 17 V stroke LT0 ! .1784 g .2821 g 2695 1657 M 76 17 V stroke LT0 ! .1784 g .2791 g 2965 1644 M -59 13 V stroke LT0 ! .1784 g .2728 g 3041 1638 M -135 19 V stroke LT0 ! .1784 g .2799 g 2830 1654 M 76 3 V stroke ! LT0 ! .1784 g .2746 g 3100 1633 M -59 5 V stroke ! LT0 ! .1784 g .2759 g 2965 1644 M 76 -6 V stroke LT0 ! .1784 g .2763 g 4196 1637 M -59 -2 V stroke LT0 ! .1784 g .275 g 4272 1652 M -135 -17 V stroke LT0 ! .1784 g .273 g 4061 1630 M 76 5 V stroke LT0 ! .1784 g .2805 g 4542 1633 M -58 39 V stroke LT0 ! .1784 g .2838 g 4407 1653 M 77 19 V stroke ! LT0 ! .1784 g .2618 g 3316 1609 M -5 -1 V stroke ! LT0 ! .1784 g .2629 g 3300 1610 M 6 -1 V stroke LT0 ! .1784 g .2737 g 2618 1612 M -58 39 V stroke LT0 ! .1784 g .267 g 2483 1591 M 77 60 V stroke LT0 ! .1784 g .278 g 4542 1633 M 77 23 V stroke ! LT0 ! .1784 g .2618 g 3450 1603 M -4 -1 V stroke LT0 ! .1784 g .2523 g 2542 1545 M -59 46 V stroke LT0 ! .1784 g .2734 g 4061 1630 M -82 -9 V stroke LT0 ! .1784 g .2817 g 4331 1632 M -59 20 V stroke LT0 ! .1784 g .2817 g 4196 1637 M 76 15 V stroke LT0 ! .1784 g .2806 g 2753 1623 M -58 34 V stroke LT0 ! .1784 g .2766 g 2618 1612 M 77 45 V stroke LT0 ! .1784 g .2832 g 2888 1625 M -58 29 V stroke LT0 ! .1784 g .2812 g 2753 1623 M 77 31 V stroke LT0 ! .1784 g .2792 g 4466 1608 M -59 45 V stroke LT0 ! .1784 g .2834 g 4331 1632 M 76 21 V stroke LT0 ! .1784 g .2758 g 4466 1608 M 76 25 V stroke LT0 ! .1784 g .2802 g 4120 1620 M -59 10 V stroke LT0 ! .1784 g .279 g 3985 1621 M 76 9 V stroke LT0 ! .1784 g .266 g 2677 1568 M -59 44 V stroke LT0 ! .1784 g .2589 g 2542 1545 M 76 67 V stroke LT0 ! .1784 g .283 g 3023 1622 M -58 22 V stroke LT0 ! .1784 g .2809 g 3100 1633 M -135 11 V stroke LT0 ! .1784 g .2824 g 2888 1625 M 77 19 V stroke LT0 ! .1784 g .2732 g 3850 1615 M -119 -6 V stroke LT0 ! .1784 g .2413 g 2601 1494 M -59 51 V stroke LT0 ! .1784 g .2817 g 3158 1616 M -58 17 V stroke LT0 ! .1784 g .2784 g 3235 1622 M -135 11 V stroke LT0 ! .1784 g .2817 g 3023 1622 M 77 11 V stroke LT0 ! .1784 g .2804 g 3293 1610 M -58 12 V stroke LT0 ! .1784 g .2769 g 3370 1615 M -135 7 V stroke LT0 ! .1784 g .2806 g 3158 1616 M 77 6 V stroke LT0 ! .1784 g .2819 g 4255 1608 M -59 29 V stroke LT0 ! .1784 g .2834 g 4120 1620 M 76 17 V stroke LT0 ! .1784 g .2748 g 2812 1582 M -59 41 V stroke LT0 ! .1784 g .27 g 2677 1568 M 76 55 V stroke LT0 ! .1784 g .2799 g 3908 1606 M -58 9 V stroke LT0 ! .1784 g .2788 g 3985 1621 M -135 -6 V stroke LT0 ! .1784 g .2791 g 3773 1609 M 77 6 V stroke LT0 ! .1784 g .28 g 3428 1604 M -58 11 V stroke LT0 ! .1784 g .2769 g 3504 1610 M -134 5 V stroke LT0 ! .1784 g .28 g 3293 1610 M 77 5 V stroke LT0 ! .1784 g .2767 g 4390 1580 M -59 52 V stroke LT0 ! .1784 g .2819 g 4255 1608 M 76 24 V stroke LT0 ! .1784 g .2725 g 4390 1580 M 76 28 V stroke LT0 ! .1784 g .2554 g 2736 1518 M -59 50 V stroke LT0 ! .1784 g .2483 g 2601 1494 M 76 74 V stroke LT0 ! .1784 g .2797 g 2947 1588 M -59 37 V stroke LT0 ! .1784 g .2767 g 2812 1582 M 76 43 V stroke LT0 ! .1784 g .2281 g 2659 1439 M -58 55 V stroke LT0 ! .1784 g .2806 g 3563 1599 M -59 11 V stroke LT0 ! .1784 g .2784 g 3638 1609 M -134 1 V stroke LT0 ! .1784 g .2804 g 3428 1604 M 76 6 V stroke LT0 ! .1784 g .2821 g 4043 1598 M -58 23 V stroke LT0 ! .1784 g .2827 g 3908 1606 M 77 15 V stroke LT0 ! .1784 g .2819 g 3082 1589 M -59 33 V stroke LT0 ! .1784 g .2803 g 2947 1588 M 76 34 V stroke LT0 ! .1784 g .2817 g 3697 1593 M -59 16 V stroke LT0 ! .1784 g .2809 g 3773 1609 M -135 0 V stroke LT0 ! .1784 g .2817 g 3563 1599 M 75 10 V stroke LT0 ! .1784 g .2804 g 4178 1580 M -58 40 V stroke LT0 ! .1784 g .2833 g 4043 1598 M 77 22 V stroke LT0 ! .1784 g .2653 g 2871 1533 M -59 49 V stroke LT0 ! .1784 g .2602 g 2736 1518 M 76 64 V stroke LT0 ! .1784 g .2677 g 4313 1549 M 77 31 V stroke LT0 ! .1784 g .2827 g 3217 1586 M -59 30 V stroke LT0 ! .1784 g .2819 g 3082 1589 M 76 27 V stroke LT0 ! .1784 g .2728 g 4313 1549 M -58 59 V stroke LT0 ! .1784 g .2788 g 4178 1580 M 77 28 V stroke LT0 ! .1784 g .2824 g 3832 1584 M -59 25 V stroke LT0 ! .1784 g .283 g 3697 1593 M 76 16 V stroke LT0 ! .1784 g .2127 g 2718 1380 M -59 59 V stroke LT0 ! .1784 g .2352 g 2736 1518 M -77 -79 V stroke LT0 ! .1784 g .242 g 2794 1462 M -58 56 V stroke LT0 ! .1784 g .2827 g 3352 1581 M -59 29 V stroke LT0 ! .1784 g .2825 g 3217 1586 M 76 24 V stroke LT0 ! .1784 g .2716 g 3005 1541 M -58 47 V stroke LT0 ! .1784 g .2682 g 2871 1533 M 76 55 V stroke LT0 ! .1784 g .2812 g 3967 1570 M -59 36 V stroke LT0 ! .1784 g .2832 g 3832 1584 M 76 22 V stroke LT0 ! .1784 g .2825 g 3487 1574 M -59 30 V stroke LT0 ! .1784 g .2827 g 3352 1581 M 76 23 V stroke LT0 ! .1784 g .261 g 4237 1514 M 76 35 V stroke LT0 ! .1784 g .2766 g 4102 1547 M -59 51 V stroke LT0 ! .1784 g .2806 g 3967 1570 M 76 28 V stroke LT0 ! .1784 g .2521 g 2929 1477 M -58 56 V stroke LT0 ! .1784 g .2471 g 2794 1462 M 77 71 V stroke LT0 ! .1784 g .2753 g 3140 1544 M -58 45 V stroke LT0 ! .1784 g .2732 g 3005 1541 M 77 48 V stroke LT0 ! .1784 g .267 g 4237 1514 M -59 66 V stroke LT0 ! .1784 g .2737 g 4102 1547 M 76 33 V stroke LT0 ! .1784 g .1957 g 2776 1318 M -58 62 V stroke LT0 ! .1784 g .2195 g 2794 1462 M -76 -82 V stroke LT0 ! .1784 g .2819 g 3621 1565 M -58 34 V stroke LT0 ! .1784 g .2827 g 3487 1574 M 76 25 V stroke LT0 ! .1784 g .2258 g 2853 1400 M -59 62 V stroke LT0 ! .1784 g .2803 g 3756 1553 M -59 40 V stroke LT0 ! .1784 g .2819 g 3621 1565 M 76 28 V stroke LT0 ! .1784 g .2769 g 3275 1542 M -58 44 V stroke LT0 ! .1784 g .276 g 3140 1544 M 77 42 V stroke LT0 ! .1784 g .2589 g 3064 1485 M -59 56 V stroke LT0 ! .1784 g .2555 g 2929 1477 M 76 64 V stroke LT0 ! .1784 g .2767 g 3891 1535 M -59 49 V stroke LT0 ! .1784 g .2797 g 3756 1553 M 76 31 V stroke LT0 ! .1784 g .2523 g 4160 1474 M 77 40 V stroke LT0 ! .1784 g .2771 g 3410 1536 M -58 45 V stroke LT0 ! .1784 g .2771 g 3275 1542 M 77 39 V stroke LT0 ! .1784 g .1776 g 2835 1254 M -59 64 V stroke LT0 ! .1784 g .2019 g 2853 1400 M -77 -82 V stroke LT0 ! .1784 g .2354 g 2988 1413 M -59 64 V stroke LT0 ! .1784 g .2308 g 2853 1400 M 76 77 V stroke LT0 ! .1784 g .2073 g 2911 1334 M -58 66 V stroke LT0 ! .1784 g .27 g 4026 1509 M -59 61 V stroke LT0 ! .1784 g .2748 g 3891 1535 M 76 35 V stroke LT0 ! .1784 g .2589 g 4160 1474 M -58 73 V stroke LT0 ! .1784 g .266 g 4026 1509 M 76 38 V stroke LT0 ! .1784 g .276 g 3545 1526 M -58 48 V stroke LT0 ! .1784 g .2769 g 3410 1536 M 77 38 V stroke LT0 ! .1784 g .2629 g 3199 1487 M -59 57 V stroke LT0 ! .1784 g .261 g 3064 1485 M 76 59 V stroke LT0 ! .1784 g .2732 g 3679 1512 M -58 53 V stroke LT0 ! .1784 g .2753 g 3545 1526 M 76 39 V stroke LT0 ! .1784 g .2413 g 4084 1429 M 76 45 V stroke LT0 ! .1784 g .2419 g 3123 1420 M -59 65 V stroke LT0 ! .1784 g .2388 g 2988 1413 M 76 72 V stroke LT0 ! .1784 g .2645 g 3334 1484 M -59 58 V stroke LT0 ! .1784 g .2638 g 3199 1487 M 76 55 V stroke LT0 ! .1784 g .1594 g 2894 1191 M -59 63 V stroke LT0 ! .1784 g .183 g 2911 1334 M -76 -80 V stroke LT0 ! .1784 g .1873 g 2970 1266 M -59 68 V stroke LT0 ! .1784 g .2119 g 2988 1413 M -77 -79 V stroke LT0 ! .1784 g .2158 g 3046 1344 M -58 69 V stroke LT0 ! .1784 g .2682 g 3814 1492 M -58 61 V stroke LT0 ! .1784 g .2716 g 3679 1512 M 77 41 V stroke LT0 ! .1784 g .2483 g 4084 1429 M -58 80 V stroke LT0 ! .1784 g .2554 g 3949 1465 M 77 44 V stroke LT0 ! .1784 g .2602 g 3949 1465 M -58 70 V stroke LT0 ! .1784 g .2653 g 3814 1492 M 77 43 V stroke LT0 ! .1784 g .2638 g 3469 1475 M -59 61 V stroke LT0 ! .1784 g .2645 g 3334 1484 M 76 52 V stroke LT0 ! .1784 g .2453 g 3258 1420 M -59 67 V stroke LT0 ! .1784 g .2438 g 3123 1420 M 76 67 V stroke LT0 ! .1784 g .2281 g 4008 1380 M 76 49 V stroke LT0 ! .1784 g .261 g 3603 1461 M -58 65 V stroke LT0 ! .1784 g .2629 g 3469 1475 M 76 51 V stroke LT0 ! .1784 g .2212 g 3181 1348 M -58 72 V stroke LT0 ! .1784 g .2188 g 3046 1344 M 77 76 V stroke LT0 ! .1784 g .1669 g 3029 1199 M -59 67 V stroke LT0 ! .1784 g .1912 g 3046 1344 M -76 -78 V stroke LT0 ! .1784 g .1637 g 2894 1191 M 76 75 V stroke LT0 ! .1784 g .1942 g 3105 1273 M -59 71 V stroke LT0 ! .1784 g .142 g 2952 1132 M -58 59 V stroke LT0 ! .1784 g .2555 g 3738 1441 M -59 71 V stroke LT0 ! .1784 g .2589 g 3603 1461 M 76 51 V stroke LT0 ! .1784 g .2352 g 4008 1380 M -59 85 V stroke LT0 ! .1784 g .242 g 3873 1414 M 76 51 V stroke LT0 ! .1784 g .2459 g 3393 1414 M -59 70 V stroke LT0 ! .1784 g .2459 g 3258 1420 M 76 64 V stroke LT0 ! .1784 g .2471 g 3873 1414 M -59 78 V stroke LT0 ! .1784 g .2521 g 3738 1441 M 76 51 V stroke LT0 ! .1784 g .2234 g 3316 1346 M -58 74 V stroke LT0 ! .1784 g .2226 g 3181 1348 M 77 72 V stroke LT0 ! .1784 g .2127 g 3931 1327 M 77 53 V stroke LT0 ! .1784 g .2438 g 3528 1402 M -59 73 V stroke LT0 ! .1784 g .2453 g 3393 1414 M 76 61 V stroke LT0 ! .1784 g .198 g 3240 1273 M -59 75 V stroke LT0 ! .1784 g .1965 g 3105 1273 M 76 75 V stroke LT0 ! .1784 g .1719 g 3164 1201 M -59 72 V stroke LT0 ! .1784 g .1699 g 3029 1199 M 76 74 V stroke LT0 ! .1784 g .2388 g 3661 1384 M -58 77 V stroke LT0 ! .1784 g .2419 g 3528 1402 M 75 59 V stroke LT0 ! .1784 g .2195 g 3931 1327 M -58 87 V stroke LT0 ! .1784 g .2258 g 3796 1359 M 77 55 V stroke LT0 ! .1784 g .1474 g 3087 1134 M -58 65 V stroke LT0 ! .1784 g .1453 g 2952 1132 M 77 67 V stroke LT0 ! .1784 g .2308 g 3796 1359 M -58 82 V stroke LT0 ! .1784 g .2354 g 3661 1384 M 77 57 V stroke LT0 ! .1784 g .2226 g 3451 1336 M -58 78 V stroke LT0 ! .1784 g .2234 g 3316 1346 M 77 68 V stroke LT0 ! .1784 g .1268 g 3011 1077 M -59 55 V stroke LT0 ! .1784 g .1957 g 3855 1271 M 76 56 V stroke LT0 ! .1784 g .1988 g 3375 1267 M -59 79 V stroke LT0 ! .1784 g .1988 g 3240 1273 M 76 73 V stroke LT0 ! .1784 g .2188 g 3586 1321 M -58 81 V stroke LT0 ! .1784 g .2212 g 3451 1336 M 77 66 V stroke LT0 ! .1784 g .1741 g 3298 1198 M -58 75 V stroke LT0 ! .1784 g .1734 g 3164 1201 M 76 72 V stroke LT0 ! .1784 g .2019 g 3855 1271 M -59 88 V stroke LT0 ! .1784 g .2073 g 3720 1299 M 76 60 V stroke LT0 ! .1784 g .2119 g 3720 1299 M -59 85 V stroke LT0 ! .1784 g .2158 g 3586 1321 M 75 63 V stroke LT0 ! .1784 g .1505 g 3222 1133 M -58 68 V stroke LT0 ! .1784 g .1494 g 3087 1134 M 77 67 V stroke LT0 ! .1784 g .1965 g 3510 1255 M -59 81 V stroke LT0 ! .1784 g .198 g 3375 1267 M 76 69 V stroke LT0 ! .1784 g .1776 g 3779 1213 M 76 58 V stroke LT0 ! .1784 g .1912 g 3644 1237 M -58 84 V stroke LT0 ! .1784 g .1942 g 3510 1255 M 76 66 V stroke LT0 ! .1784 g .1301 g 3146 1076 M -59 58 V stroke LT0 ! .1784 g .1289 g 3011 1077 M 76 57 V stroke LT0 ! .1784 g .1734 g 3433 1189 M -58 78 V stroke LT0 ! .1784 g .1741 g 3298 1198 M 77 69 V stroke LT0 ! .1784 g .183 g 3779 1213 M -59 86 V stroke LT0 ! .1784 g .1873 g 3644 1237 M 76 62 V stroke LT0 ! .1784 g .1512 g 3357 1127 M -59 71 V stroke LT0 ! .1784 g .1512 g 3222 1133 M 76 65 V stroke LT0 ! .1784 g .1699 g 3568 1175 M -58 80 V stroke LT0 ! .1784 g .1719 g 3433 1189 M 77 66 V stroke LT0 ! .1784 g .1594 g 3702 1156 M 77 57 V stroke LT0 ! .1784 g .1637 g 3702 1156 M -58 81 V stroke LT0 ! .1784 g .1669 g 3568 1175 M 76 62 V stroke LT0 ! .1784 g .1147 g 3069 1031 M -58 46 V stroke LT0 ! .1784 g .1316 g 3281 1072 M -59 61 V stroke LT0 ! .1784 g .1312 g 3146 1076 M 76 57 V stroke LT0 ! .1784 g .1494 g 3492 1117 M -59 72 V stroke LT0 ! .1784 g .1505 g 3357 1127 M 76 62 V stroke LT0 ! .1784 g .1453 g 3626 1102 M -58 73 V stroke LT0 ! .1784 g .1474 g 3492 1117 M 76 58 V stroke LT0 ! .1784 g .142 g 3626 1102 M 76 54 V stroke LT0 ! .1784 g .1312 g 3416 1064 M -59 63 V stroke LT0 ! .1784 g .1316 g 3281 1072 M 76 55 V stroke LT0 ! .1784 g .1164 g 3204 1027 M -58 49 V stroke LT0 ! .1784 g .1159 g 3069 1031 M 77 45 V stroke LT0 ! .1784 g .1289 g 3551 1054 M -59 63 V stroke LT0 ! .1784 g .1301 g 3416 1064 M 76 53 V stroke LT0 ! .1784 g .1268 g 3551 1054 M 75 48 V stroke LT0 ! .1784 g .1168 g 3339 1021 M -58 51 V stroke LT0 ! .1784 g .1168 g 3204 1027 M 77 45 V stroke LT0 ! .1784 g .1069 g 3128 994 M -59 37 V stroke LT0 ! .1784 g .1159 g 3474 1013 M -58 51 V stroke LT0 ! .1784 g .1164 g 3339 1021 M 77 43 V stroke LT0 ! .1784 g .1147 g 3474 1013 M 77 41 V stroke LT0 ! .1784 g .1075 g 3263 989 M -59 38 V stroke LT0 ! .1784 g .1074 g 3128 994 M 76 33 V stroke LT0 ! .1784 g .1074 g 3398 982 M -59 39 V stroke LT0 ! .1784 g .1075 g 3263 989 M 76 32 V stroke LT0 ! .1784 g .1069 g 3398 982 M 76 31 V stroke LT0 ! .1784 g .1041 g 3187 968 M -59 26 V stroke LT0 ! .1784 g .1042 g 3322 963 M -59 26 V stroke LT0 ! .1784 g .1042 g 3187 968 M 76 21 V stroke LT0 ! .1784 g .1041 g 3322 963 M 76 19 V stroke LT0 ! .1784 g .1067 g 3245 954 M -58 14 V stroke LT0 ! .1784 g .1067 g 3245 954 M 77 9 V stroke LT0 --- 534,9462 ---- } ifelse 1.000 UP 1.000 UL ! LT1 ! .1392 g 4225 2679 M 10 -4 V stroke ! LT1 ! .157 g 3633 2723 M -1 -1 V stroke ! LT1 ! .1663 g 4365 2691 M -14 -2 V stroke ! LT1 ! .1695 g 4359 2694 M 6 -3 V stroke ! LT1 ! .2 g 4301 2736 M -10 -3 V stroke ! LT1 ! .1984 g 4284 2735 M 5 -3 V stroke ! LT1 ! .2429 g 4042 2804 M stroke ! LT1 ! .2298 g 4230 2776 M -13 -3 V stroke ! LT1 ! .2267 g 4210 2774 M 2 -2 V stroke ! LT1 ! .2443 g 4375 2771 M 2 0 V stroke ! LT1 ! .2683 g 3098 2822 M 37 0 V stroke ! LT1 ! .2654 g 3140 2822 M 2 0 V stroke LT0 ! .2756 g 4118 2820 M -54 5 V stroke LT0 ! .2706 g 4060 2825 M stroke ! LT1 ! .2557 g 4502 2764 M -14 0 V stroke ! LT1 ! .2501 g 4460 2765 M 4 -1 V stroke LT0 ! .2743 g 3135 2822 M -37 0 V stroke LT0 ! .2794 g 3142 2822 M -2 0 V stroke LT0 ! .2716 g 3136 2825 M -38 -3 V stroke LT0 ! .2737 g 3022 2815 M 76 7 V stroke ! LT1 ! .2682 g 4253 2807 M 76 -16 V stroke LT0 ! .2727 g 3022 2815 M -94 -13 V stroke LT0 ! .2804 g 3080 2805 M -58 10 V stroke LT0 ! .2788 g 2945 2804 M 77 11 V stroke LT0 ! .2819 g 4177 2802 M -59 18 V stroke LT0 ! .2784 g 4253 2807 M -135 13 V stroke LT0 ! .2813 g 4068 2812 M 50 8 V stroke ! LT1 ! .255 g 4717 2723 M -27 3 V stroke LT0 ! .2797 g 4312 2794 M -59 13 V stroke LT0 ! .2739 g 4388 2789 M -135 18 V stroke LT0 ! .2803 g 4177 2802 M 76 5 V stroke LT0 ! .2767 g 2869 2789 M -59 0 V stroke LT0 ! .2757 g 2945 2804 M -135 -15 V stroke LT0 ! .2725 g 2734 2778 M 76 11 V stroke LT0 ! .2835 g 3080 2805 M 53 11 V stroke LT0 ! .2829 g 3139 2818 M 1 0 V stroke LT0 ! .2748 g 4447 2779 M -59 10 V stroke LT0 ! .2767 g 4312 2794 M 76 -5 V stroke LT0 ! .2819 g 3004 2783 M -59 21 V stroke LT0 ! .2819 g 2869 2789 M 76 15 V stroke LT0 ! .2804 g 4100 2774 M -24 14 V stroke LT0 ! .2814 g 3120 2777 M -40 28 V stroke LT0 ! .2834 g 3004 2783 M 76 22 V stroke LT0 ! .2792 g 2793 2771 M -59 7 V stroke LT0 ! .2758 g 2658 2764 M 76 14 V stroke LT0 ! .283 g 4235 2773 M -58 29 V stroke LT0 ! .2817 g 4100 2774 M 77 28 V stroke LT0 ! .2832 g 4370 2771 M -58 23 V stroke LT0 ! .2824 g 4235 2773 M 77 21 V stroke ! LT1 ! .261 g 4775 2714 M -58 9 V stroke ! LT1 ! .267 g 4640 2745 M 77 -22 V stroke LT0 ! .2806 g 4505 2763 M -58 16 V stroke LT0 ! .2745 g 4582 2757 M -135 22 V stroke LT0 ! .2812 g 4370 2771 M 77 8 V stroke LT0 ! .2737 g 4640 2745 M -58 12 V stroke LT0 ! .2766 g 4505 2763 M 77 -6 V stroke LT0 ! .2817 g 2928 2759 M -59 30 V stroke LT0 ! .2834 g 2793 2771 M 76 18 V stroke LT0 ! .2123 g 3601 2590 M -1 -3 V stroke LT0 ! .2763 g 3063 2730 M -59 53 V stroke LT0 ! .2817 g 2928 2759 M 76 24 V stroke LT0 ! .2746 g 4159 2728 M -59 46 V stroke LT0 ! .2779 g 4084 2763 M 16 11 V stroke LT0 ! .2718 g 3063 2730 M 49 22 V stroke LT0 ! .2005 g 3391 2549 M 6 5 V stroke LT0 ! .2805 g 2716 2752 M -58 12 V stroke LT0 ! .278 g 2581 2748 M 77 16 V stroke LT0 ! .2791 g 4294 2735 M -59 38 V stroke LT0 ! .2759 g 4159 2728 M 76 45 V stroke LT0 ! .2806 g 2851 2733 M -58 38 V stroke LT0 ! .2838 g 2716 2752 M 77 19 V stroke LT0 ! .2827 g 4429 2741 M -59 30 V stroke LT0 ! .2799 g 4294 2735 M 76 36 V stroke LT0 ! .2416 g 3121 2646 M 0 1 V stroke LT0 ! .2627 g 3091 2689 M -28 41 V stroke LT0 ! .2658 g 2986 2695 M 77 35 V stroke LT0 ! .2712 g 2986 2695 M -58 64 V stroke LT0 ! .2789 g 2851 2733 M 77 26 V stroke LT0 ! .2625 g 4218 2673 M -59 55 V stroke LT0 ! .262 g 4110 2684 M 49 44 V stroke LT0 ! .2677 g 4834 2700 M -59 14 V stroke LT0 ! .2728 g 4699 2727 M 76 -13 V stroke LT0 ! .2708 g 4640 2745 M 135 -31 V stroke LT0 ! .2833 g 4564 2740 M -59 23 V stroke LT0 ! .2821 g 4429 2741 M 76 22 V stroke LT0 ! .2788 g 4699 2727 M -59 18 V stroke LT0 ! .2804 g 4564 2740 M 76 5 V stroke LT0 ! .2414 g 3120 2646 M 1 0 V stroke LT0 ! .2304 g 3045 2600 M 21 13 V stroke LT0 ! .2812 g 2640 2732 M -59 16 V stroke LT0 ! .2793 g 2505 2730 M 76 18 V stroke LT0 ! .2248 g 3045 2600 M 10 -19 V stroke LT0 ! .1934 g 4200 2513 M -21 -31 V stroke LT0 ! .2712 g 4353 2690 M -59 45 V stroke LT0 ! .2657 g 4218 2673 M 76 62 V stroke LT0 ! .2453 g 3045 2600 M -59 95 V stroke LT0 ! .2582 g 2910 2660 M 76 35 V stroke LT0 ! .2112 g 4200 2513 M -57 73 V stroke LT0 ! .2396 g 4218 2673 M -76 -84 V stroke LT0 ! .2227 g 2968 2558 M 77 42 V stroke LT0 ! .279 g 2775 2707 M -59 45 V stroke LT0 ! .2837 g 2640 2732 M 76 20 V stroke LT0 ! .2467 g 4276 2612 M -58 61 V stroke LT0 ! .2659 g 2910 2660 M -59 73 V stroke LT0 ! .2757 g 2775 2707 M 76 26 V stroke LT0 ! .1624 g 4258 2438 M -41 -65 V stroke LT0 ! .1461 g 4212 2366 M 0 -1 V stroke LT0 ! .1471 g 2951 2387 M 20 -47 V stroke LT0 ! .1984 g 2968 2558 M 45 -97 V stroke LT0 ! .1602 g 2951 2387 M 46 28 V stroke LT0 ! .1654 g 3006 2420 M 1 1 V stroke LT0 ! .279 g 4487 2705 M -58 36 V stroke LT0 ! .2739 g 4353 2690 M 76 51 V stroke LT0 ! .1875 g 4258 2438 M -58 75 V stroke LT0 ! .2188 g 4276 2612 M -76 -99 V stroke LT0 ! .0848 g 4299 2174 M -15 18 V stroke LT0 ! .1024 g 4242 2240 M -1 2 V stroke LT0 ! .1325 g 4317 2366 M -62 -101 V stroke LT0 ! .1029 g 4241 2243 M 0 -1 V stroke LT0 ! .2356 g 2910 2660 M 58 -102 V stroke LT0 ! .2119 g 2892 2518 M 76 40 V stroke LT0 ! .0807 g 4299 2174 M -5 -7 V stroke LT0 ! .2815 g 2564 2712 M -59 18 V stroke LT0 ! .2799 g 2429 2711 M 76 19 V stroke LT0 ! .2511 g 2833 2626 M 77 34 V stroke LT0 ! .2834 g 4622 2712 M -58 28 V stroke LT0 ! .2802 g 4487 2705 M 77 35 V stroke LT0 ! .1817 g 2892 2518 M 59 -131 V stroke LT0 ! .152 g 2874 2349 M 77 38 V stroke LT0 ! .2289 g 4335 2549 M -59 63 V stroke LT0 ! .2522 g 4353 2690 M -77 -78 V stroke LT0 ! .2604 g 4411 2640 M -58 50 V stroke LT0 ! .1221 g 2874 2349 M 55 -129 V stroke LT0 ! .0902 g 2857 2180 M 67 28 V stroke LT0 ! .2725 g 4892 2683 M -58 17 V stroke LT0 ! .2767 g 4757 2707 M 77 -7 V stroke LT0 ! .1642 g 4317 2366 M -59 72 V stroke LT0 ! .1975 g 4335 2549 M -77 -111 V stroke LT0 ! .2819 g 4757 2707 M -58 20 V stroke LT0 ! .2819 g 4622 2712 M 77 15 V stroke LT0 ! .2609 g 2833 2626 M -58 81 V stroke LT0 ! .2728 g 2699 2681 M 76 26 V stroke LT0 ! .2775 g 2699 2681 M -59 51 V stroke LT0 ! .2834 g 2564 2712 M 76 20 V stroke LT0 ! .0739 g 4358 2115 M -59 59 V stroke LT0 ! .1074 g 4376 2299 M -77 -125 V stroke LT0 ! .0759 g 2857 2180 M 29 -61 V stroke LT0 ! .039 g 2839 2034 M 11 4 V stroke LT0 ! .2274 g 2833 2626 M 59 -108 V stroke LT0 ! .2033 g 2816 2483 M 76 35 V stroke LT0 ! .1428 g 4376 2299 M -59 67 V stroke LT0 ! .177 g 4393 2485 M -76 -119 V stroke LT0 ! .2451 g 2757 2596 M 76 30 V stroke ! LT1 ! .005 g 3186 1950 M -9 -1 V stroke LT0 ! .2103 g 4393 2485 M -58 64 V stroke LT0 ! .237 g 4411 2640 M -76 -91 V stroke LT0 ! .1735 g 2816 2483 M 58 -134 V stroke LT0 ! .1447 g 2798 2319 M 76 30 V stroke LT0 ! .273 g 4546 2665 M -59 40 V stroke LT0 ! .2654 g 4411 2640 M 76 65 V stroke LT0 ! .0585 g 4358 2115 M -28 -37 V stroke LT0 ! .1148 g 2798 2319 M 59 -139 V stroke LT0 ! .0868 g 2780 2157 M 77 23 V stroke LT0 ! .2815 g 2487 2692 M -58 19 V stroke LT0 ! .2799 g 2352 2691 M 77 20 V stroke LT0 ! .2479 g 4470 2588 M -59 52 V stroke LT0 ! .0596 g 4416 2064 M -58 51 V stroke LT0 ! .0908 g 4434 2238 M -76 -123 V stroke LT0 ! .257 g 2757 2596 M -58 85 V stroke LT0 ! .2705 g 2622 2658 M 77 23 V stroke LT0 ! .1243 g 4434 2238 M -58 61 V stroke LT0 ! .1583 g 4452 2424 M -76 -125 V stroke LT0 ! .2817 g 4681 2682 M -59 30 V stroke LT0 ! .2763 g 4546 2665 M 76 47 V stroke LT0 ! .2211 g 2757 2596 M 59 -113 V stroke LT0 ! .1973 g 2739 2454 M 77 29 V stroke LT0 ! .2764 g 2622 2658 M -58 54 V stroke LT0 ! .2831 g 2487 2692 M 77 20 V stroke LT0 ! .1924 g 4452 2424 M -59 61 V stroke LT0 ! .2213 g 4470 2588 M -77 -103 V stroke LT0 ! .0373 g 2845 2026 M -6 8 V stroke LT0 ! .0623 g 2780 2157 M 59 -123 V stroke LT0 ! .0396 g 2762 2018 M 77 16 V stroke LT0 ! .2409 g 2681 2571 M 76 25 V stroke LT0 ! .1685 g 2739 2454 M 59 -135 V stroke LT0 ! .1411 g 2722 2295 M 76 24 V stroke LT0 ! .2834 g 4816 2683 M -59 24 V stroke LT0 ! .2817 g 4681 2682 M 76 25 V stroke LT0 ! .2758 g 4951 2663 M -59 20 V stroke LT0 ! .2792 g 4816 2683 M 76 0 V stroke LT0 ! .0086 g 2837 1931 M 1 0 V stroke LT0 ! .0129 g 4385 1941 M -2 1 V stroke LT0 ! .0413 g 4416 2064 M -51 -64 V stroke LT0 ! .2658 g 4605 2624 M -59 41 V stroke LT0 ! .235 g 4528 2536 M -58 52 V stroke LT0 ! .2555 g 4546 2665 M -76 -77 V stroke LT0 ! .113 g 2722 2295 M 58 -138 V stroke LT0 ! .0868 g 2704 2142 M 76 15 V stroke LT0 ! .2815 g 2411 2673 M -59 18 V stroke LT0 ! .2793 g 2276 2670 M 76 21 V stroke LT0 ! .1093 g 4493 2186 M -59 52 V stroke LT0 ! .1423 g 4511 2367 M -77 -129 V stroke LT0 ! .0494 g 4475 2022 M -59 42 V stroke LT0 ! .0781 g 4493 2186 M -77 -122 V stroke ! LT1 ! .0495 g 3917 2010 M -1 -1 V stroke LT0 ! .1763 g 4511 2367 M -59 57 V stroke LT0 ! .2062 g 4528 2536 M -76 -112 V stroke LT0 ! .2171 g 2681 2571 M 58 -117 V stroke LT0 ! .1942 g 2663 2431 M 76 23 V stroke LT0 ! .2544 g 2681 2571 M -59 87 V stroke LT0 ! .2693 g 2546 2638 M 76 20 V stroke LT0 ! .276 g 2546 2638 M -59 54 V stroke LT0 ! .2831 g 2411 2673 M 76 19 V stroke LT0 ! .2387 g 2604 2549 M 77 22 V stroke LT0 ! .1668 g 2663 2431 M 59 -136 V stroke LT0 ! .1411 g 2645 2280 M 77 15 V stroke LT0 ! .2789 g 4740 2650 M -59 32 V stroke LT0 ! .2712 g 4605 2624 M 76 58 V stroke LT0 ! .0285 g 2807 1949 M -45 69 V stroke LT0 ! .064 g 2704 2142 M 58 -124 V stroke LT0 ! .0428 g 2686 2009 M 76 9 V stroke LT0 ! .2227 g 4587 2487 M -59 49 V stroke LT0 ! .2453 g 4605 2624 M -77 -88 V stroke LT0 ! .0107 g 2745 1914 M 46 8 V stroke LT0 ! .098 g 4551 2141 M -58 45 V stroke LT0 ! .1296 g 4569 2317 M -76 -131 V stroke LT0 ! .1626 g 4569 2317 M -58 50 V stroke LT0 ! .1928 g 4587 2487 M -76 -120 V stroke LT0 ! .2582 g 4663 2584 M -58 40 V stroke LT0 ! .0101 g 4457 1901 M -56 30 V stroke LT0 ! .0287 g 4475 2022 M -75 -88 V stroke LT0 ! .2812 g 2335 2654 M -59 16 V stroke LT0 ! .278 g 2200 2647 M 76 23 V stroke LT0 ! .2838 g 4875 2658 M -59 25 V stroke LT0 ! .2806 g 4740 2650 M 76 33 V stroke LT0 ! .1148 g 2645 2280 M 59 -138 V stroke LT0 ! .0905 g 2627 2134 M 77 8 V stroke LT0 ! .278 g 5010 2641 M -59 22 V stroke LT0 ! .2805 g 4875 2658 M 76 5 V stroke LT0 ! .0428 g 4534 1986 M -59 36 V stroke LT0 ! .0693 g 4551 2141 M -76 -119 V stroke LT0 ! .2158 g 2604 2549 M 59 -118 V stroke LT0 ! .1942 g 2587 2415 M 76 16 V stroke LT0 ! .2536 g 2604 2549 M -58 89 V stroke LT0 ! .2693 g 2469 2619 M 77 19 V stroke LT0 ! .2764 g 2469 2619 M -58 54 V stroke LT0 ! .2834 g 2335 2654 M 76 19 V stroke LT0 ! .2387 g 2528 2532 M 76 17 V stroke LT0 ! .2119 g 4645 2441 M -58 46 V stroke LT0 ! .2356 g 4663 2584 M -76 -97 V stroke LT0 ! .1685 g 2587 2415 M 58 -135 V stroke LT0 ! .1447 g 2569 2271 M 76 9 V stroke LT0 ! .2757 g 4798 2618 M -58 32 V stroke LT0 ! .2659 g 4663 2584 M 77 66 V stroke LT0 ! .152 g 4628 2273 M -59 44 V stroke LT0 ! .1817 g 4645 2441 M -76 -124 V stroke LT0 ! .0284 g 2745 1914 M -59 95 V stroke LT0 ! .0693 g 2627 2134 M 59 -125 V stroke LT0 ! .0494 g 2610 2006 M 76 3 V stroke LT0 ! .0905 g 4610 2104 M -59 37 V stroke LT0 ! .1204 g 4628 2273 M -77 -132 V stroke LT0 ! .0087 g 2773 1889 M -28 25 V stroke LT0 ! .0143 g 2668 1905 M 77 9 V stroke LT0 ! .2805 g 2258 2635 M -58 12 V stroke LT0 ! .2758 g 2123 2622 M 77 25 V stroke ! LT1 ! .0468 g 4111 1972 M -1 0 V stroke LT0 ! .2511 g 4722 2545 M -59 39 V stroke LT0 ! .0084 g 4516 1874 M -59 27 V stroke LT0 ! .0246 g 4534 1986 M -77 -85 V stroke LT0 ! .0071 g 4427 1886 M 30 15 V stroke LT0 ! .1204 g 2569 2271 M 58 -137 V stroke LT0 ! .098 g 2551 2134 M 76 0 V stroke LT0 ! .2171 g 2528 2532 M 59 -117 V stroke LT0 ! .1973 g 2510 2405 M 77 10 V stroke LT0 ! .2544 g 2528 2532 M -59 87 V stroke LT0 ! .2705 g 2393 2604 M 76 15 V stroke LT0 ! .0396 g 4592 1958 M -58 28 V stroke LT0 ! .064 g 4610 2104 M -76 -118 V stroke LT0 ! .2837 g 4933 2632 M -58 26 V stroke LT0 ! .279 g 4798 2618 M 77 40 V stroke ! LT1 ! .055 g 3904 2028 M 13 -18 V stroke LT0 ! .2793 g 5068 2618 M -58 23 V stroke LT0 ! .2812 g 4933 2632 M 77 9 V stroke LT0 ! .2775 g 2393 2604 M -58 50 V stroke LT0 ! .2837 g 2258 2635 M 77 19 V stroke LT0 ! .2409 g 2452 2519 M 76 13 V stroke LT0 ! .2033 g 4704 2400 M -59 41 V stroke LT0 ! .2274 g 4722 2545 M -77 -104 V stroke LT0 ! .1447 g 4686 2236 M -58 37 V stroke LT0 ! .1735 g 4704 2400 M -76 -127 V stroke LT0 ! .0003 g 2727 1845 M 20 5 V stroke LT0 ! .2792 g 2182 2616 M -59 6 V stroke LT0 ! .2725 g 2047 2594 M 76 28 V stroke LT0 ! .1735 g 2510 2405 M 59 -134 V stroke LT0 ! .152 g 2493 2271 M 76 0 V stroke LT0 ! .0868 g 4669 2074 M -59 30 V stroke LT0 ! .1148 g 4686 2236 M -76 -132 V stroke LT0 ! .2728 g 4857 2588 M -59 30 V stroke LT0 ! .2609 g 4722 2545 M 76 73 V stroke LT0 ! .2451 g 4780 2509 M -58 36 V stroke LT0 ! .0352 g 2668 1905 M -58 101 V stroke LT0 ! .0781 g 2551 2134 M 59 -128 V stroke LT0 ! .0596 g 2533 2012 M 77 -6 V stroke LT0 ! .0087 g 2727 1845 M -59 60 V stroke LT0 ! .0214 g 2592 1904 M 76 1 V stroke LT0 ! .257 g 2452 2519 M -59 85 V stroke LT0 ! .2728 g 2317 2590 M 76 14 V stroke LT0 ! .2211 g 2452 2519 M 58 -114 V stroke LT0 ! .2033 g 2434 2401 M 76 4 V stroke LT0 ! .0084 g 4574 1850 M -58 24 V stroke LT0 ! .0234 g 4592 1958 M -76 -84 V stroke LT0 ! .0051 g 4455 1847 M 61 27 V stroke LT0 ! .279 g 2317 2590 M -59 45 V stroke LT0 ! .2838 g 2182 2616 M 76 19 V stroke LT0 ! .0396 g 4651 1935 M -59 23 V stroke LT0 ! .0623 g 4669 2074 M -77 -116 V stroke LT0 ! .1296 g 2493 2271 M 58 -137 V stroke LT0 ! .1093 g 2475 2142 M 76 -8 V stroke LT0 ! .2451 g 2375 2511 M 77 8 V stroke LT0 ! .2834 g 4992 2606 M -59 26 V stroke LT0 ! .2775 g 4857 2588 M 76 44 V stroke LT0 ! .1973 g 4763 2365 M -59 35 V stroke LT0 ! .2211 g 4780 2509 M -76 -109 V stroke LT0 ! .2767 g 2105 2595 M -58 -1 V stroke LT0 ! .2677 g 1970 2564 M 77 30 V stroke LT0 ! .2799 g 5127 2593 M -59 25 V stroke LT0 ! .2815 g 4992 2606 M 76 12 V stroke LT0 ! .0015 g 2742 1844 M -15 1 V stroke LT0 ! .0017 g 2651 1831 M 76 14 V stroke LT0 ! .1411 g 4745 2207 M -59 29 V stroke LT0 ! .1685 g 4763 2365 M -77 -129 V stroke ! LT1 ! .0623 g 4170 1980 M -3 0 V stroke LT0 ! .2409 g 4839 2477 M -59 32 V stroke LT0 ! .257 g 4857 2588 M -77 -79 V stroke LT0 ! .1817 g 2434 2401 M 59 -130 V stroke LT0 ! .1626 g 2416 2277 M 77 -6 V stroke LT0 ! .0005 g 4498 1814 M -28 12 V stroke LT0 ! .2705 g 4915 2559 M -58 29 V stroke LT0 ! .0868 g 4727 2053 M -58 21 V stroke LT0 ! .113 g 4745 2207 M -76 -133 V stroke LT0 ! .0144 g 2651 1831 M -59 73 V stroke LT0 ! .0457 g 2533 2012 M 59 -108 V stroke LT0 ! .0323 g 2516 1912 M 76 -8 V stroke LT0 ! .2609 g 2375 2511 M -58 79 V stroke LT0 ! .2757 g 2240 2578 M 77 12 V stroke LT0 ! .2806 g 2240 2578 M -58 38 V stroke LT0 ! .2834 g 2105 2595 M 77 21 V stroke LT0 ! .2728 g 2029 2572 M -59 -8 V stroke LT0 ! .261 g 1894 2529 M 76 35 V stroke LT0 ! .0908 g 2475 2142 M 58 -130 V stroke LT0 ! .0739 g 2457 2027 M 76 -15 V stroke ! LT1 ! .0211 g 4305 1888 M stroke LT0 ! .2274 g 2375 2511 M 59 -110 V stroke LT0 ! .2119 g 2358 2402 M 76 -1 V stroke LT0 ! .0102 g 4633 1831 M -59 19 V stroke LT0 ! .0246 g 4651 1935 M -77 -85 V stroke LT0 ! .0046 g 4498 1814 M 76 36 V stroke LT0 ! .1942 g 4821 2337 M -58 28 V stroke LT0 ! .2171 g 4839 2477 M -76 -112 V stroke LT0 ! .2511 g 2299 2505 M 76 6 V stroke ! LT1 ! .1416 g 3609 2208 M -23 -54 V stroke LT0 ! .0428 g 4709 1920 M -58 15 V stroke LT0 ! .064 g 4727 2053 M -76 -118 V stroke LT0 ! .2831 g 5050 2581 M -58 25 V stroke LT0 ! .2764 g 4915 2559 M 77 47 V stroke LT0 ! .0031 g 2703 1809 M -52 22 V stroke LT0 ! .0064 g 2574 1826 M 77 5 V stroke LT0 ! .1423 g 2416 2277 M 59 -135 V stroke LT0 ! .1243 g 2398 2157 M 77 -15 V stroke ! LT1 ! .0749 g 3122 2020 M 5 1 V stroke LT0 ! .2799 g 5185 2568 M -58 25 V stroke LT0 ! .2815 g 5050 2581 M 77 12 V stroke LT0 ! .1411 g 4803 2185 M -58 22 V stroke LT0 ! .1668 g 4821 2337 M -76 -130 V stroke LT0 ! .267 g 1953 2544 M -59 -15 V stroke LT0 ! .2523 g 1818 2489 M 76 40 V stroke LT0 ! .2387 g 4898 2449 M -59 28 V stroke LT0 ! .2544 g 4915 2559 M -76 -82 V stroke LT0 ! .2693 g 4974 2532 M -59 27 V stroke LT0 ! .2817 g 2164 2565 M -59 30 V stroke LT0 ! .2819 g 2029 2572 M 76 23 V stroke LT0 ! .0002 g 4557 1787 M -59 27 V stroke LT0 ! .0038 g 4474 1821 M 24 -7 V stroke ! LT1 ! .1514 g 3795 2194 M 4 -8 V stroke LT0 ! .2659 g 2299 2505 M -59 73 V stroke LT0 ! .2789 g 2164 2565 M 76 13 V stroke LT0 ! .0905 g 4786 2039 M -59 14 V stroke LT0 ! .1148 g 4803 2185 M -76 -132 V stroke LT0 ! .1928 g 2358 2402 M 58 -125 V stroke LT0 ! .1763 g 2340 2288 M 76 -11 V stroke ! LT1 ! .0745 g 4155 2007 M 6 -11 V stroke LT0 ! .2589 g 1876 2511 M -58 -22 V stroke LT0 ! .2413 g 1741 2444 M 77 45 V stroke LT0 ! .0243 g 2574 1826 M -58 86 V stroke LT0 ! .0605 g 2457 2027 M 59 -115 V stroke LT0 ! .0479 g 2439 1930 M 77 -18 V stroke ! LT1 ! .0218 g 4405 1846 M -6 2 V stroke LT0 ! .2356 g 2299 2505 M 59 -103 V stroke LT0 ! .2227 g 2281 2407 M 77 -5 V stroke LT0 ! .1942 g 4880 2314 M -59 23 V stroke LT0 ! .2158 g 4898 2449 M -77 -112 V stroke LT0 ! .2582 g 2223 2501 M 76 4 V stroke LT0 ! .1074 g 2398 2157 M 59 -130 V stroke LT0 ! .0924 g 2381 2050 M 76 -23 V stroke LT0 ! .0048 g 2633 1780 M -59 46 V stroke LT0 ! .0157 g 2498 1831 M 76 -5 V stroke LT0 ! .0143 g 4692 1817 M -59 14 V stroke LT0 ! .0284 g 4709 1920 M -76 -89 V stroke LT0 ! .0058 g 4557 1787 M 76 44 V stroke LT0 ! .2831 g 5109 2556 M -59 25 V stroke LT0 ! .276 g 4974 2532 M 76 49 V stroke LT0 ! .0494 g 4768 1912 M -59 8 V stroke LT0 ! .0693 g 4786 2039 M -77 -119 V stroke LT0 ! .2819 g 2088 2551 M -59 21 V stroke LT0 ! .2788 g 1953 2544 M 76 28 V stroke LT0 ! .2793 g 5244 2541 M -59 27 V stroke LT0 ! .2815 g 5109 2556 M 76 12 V stroke LT0 ! .2483 g 1800 2473 M -59 -29 V stroke LT0 ! .2281 g 1665 2395 M 76 49 V stroke LT0 ! .1447 g 4862 2171 M -59 14 V stroke LT0 ! .1685 g 4880 2314 M -77 -129 V stroke LT0 ! .2387 g 4956 2426 M -58 23 V stroke LT0 ! .2536 g 4974 2532 M -76 -83 V stroke LT0 ! .1583 g 2340 2288 M 58 -131 V stroke LT0 ! .1428 g 2322 2179 M 76 -22 V stroke LT0 ! .2712 g 2223 2501 M -59 64 V stroke LT0 ! .2817 g 2088 2551 M 76 14 V stroke LT0 ! .2693 g 5033 2508 M -59 24 V stroke LT0 ! .0002 g 4615 1763 M -58 24 V stroke LT0 ! .0063 g 4497 1798 M 60 -11 V stroke LT0 ! .2352 g 1724 2429 M -59 -34 V stroke LT0 ! .2127 g 1589 2342 M 76 53 V stroke LT0 ! .098 g 4844 2033 M -58 6 V stroke LT0 ! .1204 g 4862 2171 M -76 -132 V stroke LT0 ! .0047 g 2675 1782 M -42 -2 V stroke LT0 ! .0093 g 2719 1815 M -86 -35 V stroke LT0 ! .0013 g 2556 1766 M 77 14 V stroke LT0 ! .2062 g 2281 2407 M 59 -119 V stroke LT0 ! .1924 g 2263 2305 M 77 -17 V stroke ! LT1 ! .0391 g 4394 1870 M 3 -5 V stroke LT0 ! .2804 g 2011 2533 M -58 11 V stroke LT0 ! .2737 g 1876 2511 M 77 33 V stroke LT0 ! .2453 g 2281 2407 M -58 94 V stroke LT0 ! .2658 g 2146 2498 M 77 3 V stroke LT0 ! .2195 g 1647 2378 M -58 -36 V stroke LT0 ! .1957 g 1512 2285 M 77 57 V stroke LT0 ! .1973 g 4938 2299 M -58 15 V stroke LT0 ! .2171 g 4956 2426 M -76 -112 V stroke LT0 ! .235 g 2205 2414 M 76 -7 V stroke LT0 ! .2834 g 5168 2531 M -59 25 V stroke LT0 ! .2764 g 5033 2508 M 76 48 V stroke LT0 ! .0394 g 2498 1831 M -59 99 V stroke LT0 ! .0798 g 2381 2050 M 58 -120 V stroke LT0 ! .0686 g 2363 1959 M 76 -29 V stroke LT0 ! .0122 g 2556 1766 M -58 65 V stroke LT0 ! .0311 g 2421 1851 M 77 -20 V stroke LT0 ! .278 g 5302 2512 M -58 29 V stroke LT0 ! .2812 g 5168 2531 M 76 10 V stroke LT0 ! .0214 g 4750 1809 M -58 8 V stroke LT0 ! .0352 g 4768 1912 M -76 -95 V stroke LT0 ! .0087 g 4615 1763 M 77 54 V stroke LT0 ! .2019 g 1571 2323 M -59 -38 V stroke LT0 ! .1776 g 1436 2228 M 76 57 V stroke LT0 ! .2763 g 2146 2498 M -58 53 V stroke LT0 ! .2834 g 2011 2533 M 77 18 V stroke LT0 ! .1278 g 2322 2179 M 59 -129 V stroke LT0 ! .1149 g 2304 2081 M 77 -31 V stroke LT0 ! .2409 g 5015 2407 M -59 19 V stroke LT0 ! .2544 g 5033 2508 M -77 -82 V stroke LT0 ! .0596 g 4827 1912 M -59 0 V stroke LT0 ! .0781 g 4844 2033 M -76 -121 V stroke LT0 ! .152 g 4921 2164 M -59 7 V stroke LT0 ! .1735 g 4938 2299 M -76 -128 V stroke LT0 ! .2766 g 1935 2511 M -59 0 V stroke LT0 ! .266 g 1800 2473 M 76 38 V stroke LT0 ! .2705 g 5091 2487 M -58 21 V stroke LT0 ! .183 g 1495 2263 M -59 -35 V stroke LT0 ! .1594 g 1360 2171 M 76 57 V stroke LT0 ! .0017 g 4674 1743 M -59 20 V stroke LT0 ! .0045 g 4544 1762 M 71 1 V stroke LT0 ! .0025 g 2615 1741 M -59 25 V stroke LT0 ! .0076 g 2480 1768 M 76 -2 V stroke LT0 ! .177 g 2263 2305 M 59 -126 V stroke LT0 ! .1642 g 2246 2207 M 76 -28 V stroke LT0 ! .1637 g 1418 2201 M -58 -30 V stroke LT0 ! .142 g 1283 2117 M 77 54 V stroke LT0 ! .2555 g 2205 2414 M -59 84 V stroke LT0 ! .273 g 2070 2492 M 76 6 V stroke LT0 ! .27 g 1859 2483 M -59 -10 V stroke LT0 ! .2554 g 1724 2429 M 76 44 V stroke LT0 ! .1093 g 4903 2035 M -59 -2 V stroke LT0 ! .1296 g 4921 2164 M -77 -131 V stroke LT0 ! .2213 g 2205 2414 M 58 -109 V stroke LT0 ! .2103 g 2187 2324 M 76 -19 V stroke LT0 ! .2802 g 2070 2492 M -59 41 V stroke LT0 ! .2833 g 1935 2511 M 76 22 V stroke LT0 ! .2837 g 5226 2506 M -58 25 V stroke LT0 ! .2775 g 5091 2487 M 77 44 V stroke ! LT1 ! .2228 g 3663 2339 M -12 -31 V stroke LT0 ! .1453 g 1342 2139 M -59 -22 V stroke LT0 ! .1268 g 1207 2068 M 76 49 V stroke LT0 ! .2033 g 4997 2289 M -59 10 V stroke LT0 ! .2211 g 5015 2407 M -77 -108 V stroke LT0 ! .2479 g 2128 2421 M 77 -7 V stroke ! LT1 ! .0736 g 4345 1926 M -1 1 V stroke LT0 ! .2758 g 5361 2481 M -59 31 V stroke LT0 ! .2805 g 5226 2506 M 76 6 V stroke LT0 ! .2602 g 1782 2448 M -58 -19 V stroke LT0 ! .242 g 1647 2378 M 77 51 V stroke LT0 ! .0265 g 2480 1768 M -59 83 V stroke LT0 ! .0603 g 2363 1959 M 58 -108 V stroke LT0 ! .0531 g 2345 1884 M 76 -33 V stroke LT0 ! .0323 g 4809 1811 M -59 -2 V stroke LT0 ! .0457 g 4827 1912 M -77 -103 V stroke LT0 ! .0144 g 4674 1743 M 76 66 V stroke LT0 ! .1289 g 1265 2081 M -58 -13 V stroke LT0 ! .1147 g 1131 2028 M 76 40 V stroke LT0 ! .1037 g 2304 2081 M 59 -122 V stroke LT0 ! .0943 g 2286 1997 M 77 -38 V stroke LT0 ! .2451 g 5073 2393 M -58 14 V stroke LT0 ! .257 g 5091 2487 M -76 -80 V stroke LT0 ! .0259 g 4480 1813 M 34 -29 V stroke LT0 ! .2728 g 5150 2467 M -59 20 V stroke LT0 ! .0045 g 4700 1738 M -26 5 V stroke LT0 ! .0031 g 4597 1724 M 77 19 V stroke LT0 ! .0102 g 2659 1754 M -44 -13 V stroke LT0 ! .0197 g 2713 1808 M -98 -67 V stroke LT0 ! .0016 g 2553 1721 M 62 20 V stroke LT0 ! .0007 g 2539 1717 M -4 3 V stroke LT0 ! .008 g 2524 1730 M -44 38 V stroke LT0 ! .022 g 2404 1787 M 76 -19 V stroke LT0 ! .1626 g 4979 2164 M -58 0 V stroke LT0 ! .1817 g 4997 2289 M -76 -125 V stroke LT0 ! .0739 g 4885 1920 M -58 -8 V stroke LT0 ! .0908 g 4903 2035 M -76 -123 V stroke LT0 ! .2471 g 1706 2405 M -59 -27 V stroke LT0 ! .2258 g 1571 2323 M 76 55 V stroke LT0 ! .1514 g 2246 2207 M 58 -126 V stroke LT0 ! .1409 g 2228 2119 M 76 -38 V stroke LT0 ! .2821 g 1994 2483 M -59 28 V stroke LT0 ! .2806 g 1859 2483 M 76 28 V stroke LT0 ! .2654 g 2128 2421 M -58 71 V stroke LT0 ! .279 g 1994 2483 M 76 9 V stroke LT0 ! .1159 g 1189 2028 M -58 0 V stroke LT0 ! .1069 g 1054 1997 M 77 31 V stroke ! LT1 ! .0907 g 4329 1960 M 2 -4 V stroke LT0 ! .2308 g 1629 2354 M -58 -31 V stroke LT0 ! .2073 g 1495 2263 M 76 60 V stroke LT0 ! .2725 g 5420 2447 M -59 34 V stroke LT0 ! .2792 g 5285 2481 M 76 0 V stroke LT0 ! .1975 g 2187 2324 M 59 -117 V stroke LT0 ! .1875 g 2169 2237 M 77 -30 V stroke LT0 ! .2838 g 5285 2481 M -59 25 V stroke LT0 ! .279 g 5150 2467 M 76 39 V stroke LT0 ! .237 g 2187 2324 M -59 97 V stroke LT0 ! .2604 g 2052 2427 M 76 -6 V stroke LT0 ! .2289 g 2111 2343 M 76 -19 V stroke LT0 ! .2119 g 1553 2297 M -58 -34 V stroke LT0 ! .1873 g 1418 2201 M 77 62 V stroke LT0 ! .2119 g 5056 2284 M -59 5 V stroke LT0 ! .2274 g 5073 2393 M -76 -104 V stroke LT0 ! .0027 g 4613 1715 M -16 9 V stroke LT0 ! .0147 g 4530 1754 M 67 -30 V stroke LT0 ! .0208 g 4488 1802 M 109 -78 V stroke LT0 ! .1243 g 4962 2045 M -59 -10 V stroke LT0 ! .1423 g 4979 2164 M -76 -129 V stroke LT0 ! .2812 g 1917 2469 M -58 14 V stroke LT0 ! .2748 g 1782 2448 M 77 35 V stroke LT0 ! .1912 g 1477 2234 M -59 -33 V stroke LT0 ! .1669 g 1342 2139 M 76 62 V stroke LT0 ! .1074 g 1113 1985 M -59 12 V stroke LT0 ! .1041 g 978 1977 M 76 20 V stroke LT0 ! .2757 g 5208 2448 M -58 19 V stroke LT0 ! .2609 g 5073 2393 M 77 74 V stroke LT0 ! .2511 g 5132 2381 M -59 12 V stroke LT0 ! .1699 g 1400 2168 M -58 -29 V stroke LT0 ! .1474 g 1265 2081 M 77 58 V stroke LT0 ! .2739 g 2052 2427 M -58 56 V stroke LT0 ! .2827 g 1917 2469 M 77 14 V stroke LT0 ! .0282 g 4809 1811 M -56 -58 V stroke LT0 ! .0089 g 4720 1725 M 12 6 V stroke LT0 ! .0479 g 4867 1823 M -58 -12 V stroke LT0 ! .0605 g 4885 1920 M -76 -109 V stroke LT0 ! .0485 g 2404 1787 M -59 97 V stroke LT0 ! .087 g 2286 1997 M 59 -113 V stroke LT0 ! .0814 g 2269 1929 M 76 -45 V stroke LT0 ! .0267 g 2428 1757 M -24 30 V stroke LT0 ! .045 g 2327 1824 M 77 -37 V stroke LT0 ! .2677 g 5478 2410 M -58 37 V stroke LT0 ! .2767 g 5343 2454 M 77 -7 V stroke LT0 ! .1494 g 1324 2103 M -59 -22 V stroke LT0 ! .1301 g 1189 2028 M 76 53 V stroke LT0 ! .2767 g 1841 2447 M -59 1 V stroke LT0 ! .2653 g 1706 2405 M 76 43 V stroke LT0 ! .1763 g 5038 2170 M -59 -6 V stroke LT0 ! .1928 g 5056 2284 M -77 -120 V stroke LT0 ! .1315 g 2228 2119 M 58 -122 V stroke LT0 ! .1243 g 2210 2044 M 76 -47 V stroke LT0 ! .2834 g 5343 2454 M -58 27 V stroke LT0 ! .2806 g 5208 2448 M 77 33 V stroke ! LT1 ! .0669 g 2792 1880 M -2 -3 V stroke LT0 ! .0572 g 2764 1871 M -72 -90 V stroke LT0 ! .0924 g 4944 1938 M -59 -18 V stroke LT0 ! .1074 g 4962 2045 M -77 -125 V stroke ! LT1 ! .0861 g 2838 1931 M -1 -2 V stroke ! LT1 ! .1302 g 2951 2050 M 2 2 V stroke LT0 ! .1771 g 2169 2237 M 59 -118 V stroke LT0 ! .1692 g 2152 2160 M 76 -41 V stroke LT0 ! .1312 g 1248 2041 M -59 -13 V stroke LT0 ! .1164 g 1113 1985 M 76 43 V stroke LT0 ! .2522 g 2111 2343 M -59 84 V stroke LT0 ! .2712 g 1976 2427 M 76 0 V stroke LT0 ! .1042 g 1036 1953 M -58 24 V stroke LT0 ! .1067 g 901 1969 M 77 8 V stroke LT0 ! .0197 g 2656 1721 M -40 -13 V stroke LT0 ! .032 g 2713 1799 M -106 -89 V stroke LT0 ! .0012 g 2535 1677 M 4 2 V stroke LT0 ! .2682 g 1764 2415 M -58 -10 V stroke LT0 ! .2521 g 1629 2354 M 77 51 V stroke LT0 ! .2188 g 2111 2343 M 58 -106 V stroke LT0 ! .2115 g 2093 2268 M 76 -31 V stroke LT0 ! .2467 g 2034 2359 M 77 -16 V stroke LT0 ! .2227 g 5114 2283 M -58 1 V stroke LT0 ! .2356 g 5132 2381 M -76 -97 V stroke LT0 ! .2799 g 1976 2427 M -59 42 V stroke LT0 ! .2832 g 1841 2447 M 76 22 V stroke LT0 ! .2789 g 5267 2429 M -59 19 V stroke LT0 ! .2659 g 5132 2381 M 76 67 V stroke LT0 ! .1168 g 1171 1985 M -58 0 V stroke LT0 ! .1075 g 1036 1953 M 77 32 V stroke LT0 ! .261 g 5537 2369 M -59 41 V stroke LT0 ! .2728 g 5402 2424 M 76 -14 V stroke LT0 ! .2555 g 1688 2374 M -59 -20 V stroke LT0 ! .2354 g 1553 2297 M 76 57 V stroke LT0 ! .1428 g 5020 2061 M -58 -16 V stroke LT0 ! .1583 g 5038 2170 M -76 -125 V stroke LT0 ! .0637 g 4433 1876 M 65 -87 V stroke LT0 ! .2582 g 5191 2371 M -59 10 V stroke LT0 ! .2819 g 5402 2424 M -59 30 V stroke LT0 ! .2817 g 5267 2429 M 76 25 V stroke LT0 ! .2388 g 1612 2324 M -59 -27 V stroke LT0 ! .2158 g 1477 2234 M 76 63 V stroke LT0 ! .048 g 4867 1823 M -39 -47 V stroke ! LT1 ! .1593 g 4251 2092 M -3 2 V stroke LT0 ! .1067 g 960 1932 M -59 37 V stroke LT0 ! .2188 g 1535 2265 M -58 -31 V stroke LT0 ! .1942 g 1400 2168 M 77 66 V stroke LT0 ! .0686 g 4926 1846 M -59 -23 V stroke LT0 ! .0798 g 4944 1938 M -77 -115 V stroke LT0 ! .2824 g 1899 2421 M -58 26 V stroke LT0 ! .2797 g 1764 2415 M 77 32 V stroke LT0 ! .1075 g 1095 1940 M -59 13 V stroke LT0 ! .1042 g 960 1932 M 76 21 V stroke LT0 ! .2657 g 2034 2359 M -58 68 V stroke LT0 ! .2791 g 1899 2421 M 77 6 V stroke LT0 ! .0333 g 4503 1756 M 69 -51 V stroke LT0 ! .0452 g 4459 1832 M 115 -126 V stroke LT0 ! .1965 g 1459 2199 M -59 -31 V stroke LT0 ! .1719 g 1324 2103 M 76 65 V stroke LT0 ! .1924 g 5096 2181 M -58 -11 V stroke LT0 ! .2062 g 5114 2283 M -76 -113 V stroke LT0 ! .0512 g 2356 1780 M -29 44 V stroke LT0 ! .0779 g 2269 1929 M 58 -105 V stroke LT0 ! .076 g 2251 1877 M 76 -53 V stroke LT0 ! .1186 g 2210 2044 M 59 -115 V stroke LT0 ! .1149 g 2192 1984 M 77 -55 V stroke LT0 ! .1734 g 1383 2130 M -59 -27 V stroke LT0 ! .1505 g 1248 2041 M 76 62 V stroke LT0 ! .2523 g 5595 2323 M -58 46 V stroke LT0 ! .267 g 5460 2390 M 77 -21 V stroke LT0 ! .162 g 2152 2160 M 58 -116 V stroke LT0 ! .157 g 2134 2094 M 76 -50 V stroke LT0 ! .1149 g 5002 1963 M -58 -25 V stroke LT0 ! .1278 g 5020 2061 M -76 -123 V stroke LT0 ! .2817 g 5326 2409 M -59 20 V stroke LT0 ! .2712 g 5191 2371 M 76 58 V stroke LT0 ! .2394 g 2093 2268 M -59 91 V stroke LT0 ! .2625 g 1958 2369 M 76 -10 V stroke LT0 ! .1512 g 1306 2061 M -58 -20 V stroke LT0 ! .1316 g 1171 1985 M 77 56 V stroke LT0 ! .2037 g 2093 2268 M 59 -108 V stroke LT0 ! .1983 g 2075 2200 M 77 -40 V stroke LT0 ! .235 g 5173 2284 M -59 -1 V stroke LT0 ! .2453 g 5191 2371 M -77 -88 V stroke LT0 ! .2803 g 1823 2404 M -59 11 V stroke LT0 ! .2716 g 1688 2374 M 76 41 V stroke LT0 ! .2346 g 2017 2294 M 76 -26 V stroke LT0 ! .2788 g 5460 2390 M -58 34 V stroke LT0 ! .2819 g 5326 2409 M 76 15 V stroke LT0 ! .2658 g 5249 2362 M -58 9 V stroke LT0 ! .0448 g 2714 1770 M -58 -49 V stroke LT0 ! .0696 g 2782 1893 M 2656 1721 L stroke LT0 ! .0102 g 2595 1670 M 3 2 V stroke LT0 ! .0241 g 2635 1704 M 21 17 V stroke LT0 ! .1316 g 1230 1996 M -59 -11 V stroke LT0 ! .1168 g 1095 1940 M 76 45 V stroke LT0 ! .1041 g 1019 1907 M -59 25 V stroke ! LT1 ! .2463 g 4027 2319 M -4 -2 V stroke LT0 ! .1148 g 2827 1986 M -73 -132 V stroke LT0 ! .2759 g 1958 2369 M -59 52 V stroke LT0 ! .283 g 1823 2404 M 76 17 V stroke LT0 ! .2413 g 5654 2273 M -59 50 V stroke LT0 ! .2589 g 5519 2352 M 76 -29 V stroke LT0 ! .1642 g 5079 2083 M -59 -22 V stroke LT0 ! .177 g 5096 2181 M -76 -120 V stroke LT0 ! .2732 g 1747 2377 M -59 -3 V stroke LT0 ! .2589 g 1612 2324 M 76 50 V stroke LT0 ! .1164 g 1154 1939 M -59 1 V stroke LT0 ! .1074 g 1019 1907 M 76 33 V stroke LT0 ! .0704 g 4926 1846 M -38 -50 V stroke ! LT1 ! .2205 g 4265 2178 M 5 -14 V stroke LT0 ! .0018 g 4697 1622 M 18 11 V stroke LT0 ! .261 g 1670 2338 M -58 -14 V stroke LT0 ! .2419 g 1535 2265 M 77 59 V stroke LT0 ! .2834 g 5384 2386 M -58 23 V stroke LT0 ! .2763 g 5249 2362 M 77 47 V stroke LT0 ! .0094 g 2445 1632 M 3 -1 V stroke ! LT1 ! .2023 g 4310 2107 M 3 -6 V stroke LT0 ! .2737 g 5519 2352 M -59 38 V stroke LT0 ! .2804 g 5384 2386 M 76 4 V stroke LT0 ! .2103 g 5155 2194 M -59 -13 V stroke LT0 ! .2213 g 5173 2284 M -77 -103 V stroke LT0 ! .0943 g 4985 1879 M -59 -33 V stroke LT0 ! .1037 g 5002 1963 M -76 -117 V stroke LT0 ! .2577 g 2017 2294 M -59 75 V stroke LT0 ! .2746 g 1882 2370 M 76 -1 V stroke LT0 ! .2281 g 5713 2218 M -59 55 V stroke LT0 ! .2483 g 5578 2308 M 76 -35 V stroke LT0 ! .2438 g 1594 2287 M -59 -22 V stroke LT0 ! .2212 g 1459 2199 M 76 66 V stroke LT0 ! .1408 g 4350 2030 M 59 -114 V stroke LT0 ! .2032 g 4310 2107 M 2 -3 V stroke LT0 ! .0009 g 4704 1621 M -7 1 V stroke LT0 ! .2817 g 1882 2370 M -59 34 V stroke LT0 ! .2819 g 1747 2377 M 76 27 V stroke LT0 ! .1069 g 1077 1893 M -58 14 V stroke LT0 ! .0801 g 2296 1802 M -45 75 V stroke LT0 ! .113 g 2192 1984 M 59 -107 V stroke LT0 ! .113 g 2175 1939 M 76 -62 V stroke LT0 ! .0405 g 4544 1700 M -41 56 V stroke LT0 ! .0789 g 4427 1857 M 76 -101 V stroke LT0 ! .1008 g 4375 1973 M 128 -217 V stroke LT0 ! .2226 g 1518 2226 M -59 -27 V stroke LT0 ! .198 g 1383 2130 M 76 69 V stroke LT0 ! .0898 g 2233 1839 M 29 -22 V stroke LT0 ! .1533 g 2134 2094 M 58 -110 V stroke LT0 ! .1516 g 2116 2042 M 76 -58 V stroke LT0 ! .273 g 5308 2351 M -59 11 V stroke LT0 ! .2479 g 5231 2286 M -58 -2 V stroke LT0 ! .2555 g 5249 2362 M -76 -78 V stroke LT0 ! .1988 g 1441 2157 M -58 -27 V stroke LT0 ! .1741 g 1306 2061 M 77 69 V stroke LT0 ! .2292 g 2075 2200 M -58 94 V stroke LT0 ! .255 g 1940 2313 M 77 -19 V stroke LT0 ! .1933 g 2075 2200 M 59 -106 V stroke LT0 ! .1904 g 2057 2144 M 77 -50 V stroke LT0 ! .1741 g 1365 2085 M -59 -24 V stroke LT0 ! .1512 g 1230 1996 M 76 65 V stroke LT0 ! .226 g 1999 2236 M 76 -36 V stroke LT0 ! .0501 g 4486 1738 M 48 -40 V stroke LT0 ! .1409 g 5061 1995 M -59 -32 V stroke LT0 ! .1514 g 5079 2083 M -77 -120 V stroke LT0 ! .1505 g 1289 2013 M -59 -17 V stroke LT0 ! .1312 g 1154 1939 M 76 57 V stroke LT0 ! .2127 g 5771 2159 M -58 59 V stroke LT0 ! .2352 g 5636 2258 M 77 -40 V stroke LT0 ! .0477 g 2697 1698 M -9 -4 V stroke LT0 ! .0487 g 2714 1770 M -53 -72 V stroke LT0 ! .266 g 5578 2308 M -59 44 V stroke LT0 ! .2766 g 5443 2358 M 76 -6 V stroke LT0 ! .2819 g 1805 2360 M -58 17 V stroke LT0 ! .2753 g 1670 2338 M 77 39 V stroke LT0 ! .1301 g 1212 1946 M -58 -7 V stroke LT0 ! .1159 g 1077 1893 M 77 46 V stroke LT0 ! .2833 g 5443 2358 M -59 28 V stroke LT0 ! .2802 g 5308 2351 M 76 35 V stroke LT0 ! .0399 g 2350 1671 M 3 -1 V stroke LT0 ! .0164 g 2406 1644 M 21 -11 V stroke LT0 ! .1875 g 5137 2107 M -58 -24 V stroke LT0 ! .1975 g 5155 2194 M -76 -111 V stroke LT0 ! .2719 g 1940 2313 M -58 57 V stroke LT0 ! .2817 g 1805 2360 M 77 10 V stroke LT0 ! .0854 g 2773 1839 M -59 -69 V stroke LT0 ! .1229 g 2849 2014 M 2714 1770 L stroke LT0 ! .1957 g 5830 2096 M -59 63 V stroke LT0 ! .2195 g 5695 2201 M 76 -42 V stroke LT0 ! .1147 g 1136 1889 M -59 4 V stroke LT0 ! .276 g 1729 2335 M -59 3 V stroke LT0 ! .2629 g 1594 2287 M 76 51 V stroke LT0 ! .0959 g 4985 1879 M -45 -63 V stroke LT0 ! .2289 g 5214 2207 M -59 -13 V stroke LT0 ! .237 g 5231 2286 M -76 -92 V stroke LT0 ! .279 g 5366 2336 M -58 15 V stroke LT0 ! .2654 g 5231 2286 M 77 65 V stroke LT0 ! .2554 g 5636 2258 M -58 50 V stroke LT0 ! .27 g 5501 2324 M 77 -16 V stroke LT0 ! .2517 g 1999 2236 M -59 77 V stroke LT0 ! .2708 g 1864 2321 M 76 -8 V stroke LT0 ! .2604 g 5290 2285 M -59 1 V stroke LT0 ! .2638 g 1653 2297 M -59 -10 V stroke LT0 ! .2453 g 1518 2226 M 76 61 V stroke LT0 ! .1776 g 5888 2033 M -58 63 V stroke LT0 ! .2019 g 5753 2140 M 77 -44 V stroke LT0 ! .1243 g 5043 1920 M -58 -41 V stroke LT0 ! .1315 g 5061 1995 M -76 -116 V stroke LT0 ! .1939 g 2919 2194 M 2799 1923 L stroke LT0 ! .2806 g 5501 2324 M -58 34 V stroke LT0 ! .2821 g 5366 2336 M 77 22 V stroke LT0 ! .2459 g 1576 2245 M -58 -19 V stroke LT0 ! .2234 g 1441 2157 M 77 69 V stroke LT0 ! .2806 g 1864 2321 M -59 39 V stroke LT0 ! .2827 g 1729 2335 M 76 25 V stroke LT0 ! .2231 g 2057 2144 M -58 92 V stroke LT0 ! .2502 g 1922 2262 M 77 -26 V stroke LT0 ! .2234 g 1500 2181 M -59 -24 V stroke LT0 ! .1988 g 1365 2085 M 76 72 V stroke LT0 ! .1149 g 2233 1839 M -58 100 V stroke LT0 ! .1516 g 2116 2042 M 59 -103 V stroke LT0 ! .1533 g 2098 2005 M 77 -66 V stroke LT0 ! .1887 g 2116 2042 M -59 102 V stroke LT0 ! .222 g 1981 2186 M 76 -42 V stroke LT0 ! .0941 g 2244 1822 M -11 17 V stroke LT0 ! .1186 g 2157 1909 M 76 -70 V stroke LT0 ! .1887 g 2040 2099 M 76 -57 V stroke LT0 ! .198 g 1423 2109 M -58 -24 V stroke LT0 ! .1734 g 1289 2013 M 76 72 V stroke LT0 ! .1719 g 1347 2034 M -58 -21 V stroke LT0 ! .1494 g 1212 1946 M 77 67 V stroke LT0 ! .242 g 5695 2201 M -59 57 V stroke LT0 ! .2602 g 5560 2283 M 76 -25 V stroke LT0 ! .1692 g 5120 2030 M -59 -35 V stroke LT0 ! .1771 g 5137 2107 M -76 -112 V stroke LT0 ! .1594 g 5947 1970 M -59 63 V stroke LT0 ! .183 g 5812 2074 M 76 -41 V stroke LT0 ! .0487 g 2697 1698 M -5 -5 V stroke LT0 ! .0547 g 4512 1694 M -26 44 V stroke LT0 ! .0854 g 4427 1857 M 59 -119 V stroke LT0 ! .0903 g 4409 1833 M 77 -95 V stroke LT0 ! .1474 g 1271 1960 M -59 -14 V stroke LT0 ! .1289 g 1136 1889 M 76 57 V stroke LT0 ! .0606 g 4468 1693 M 9 -6 V stroke LT0 ! .0656 g 2755 1739 M -58 -41 V stroke LT0 ! .0789 g 2773 1839 M -76 -141 V stroke LT0 ! .0376 g 2368 1652 M -18 19 V stroke LT0 ! .1455 g 4351 1994 M 76 -137 V stroke LT0 ! .1794 g 4292 2160 M 135 -303 V stroke LT0 ! .1268 g 1194 1893 M -58 -4 V stroke LT0 ! .2827 g 5425 2315 M -59 21 V stroke LT0 ! .2739 g 5290 2285 M 76 51 V stroke LT0 ! .2825 g 1788 2314 M -59 21 V stroke LT0 ! .2769 g 1653 2297 M 76 38 V stroke LT0 ! .2115 g 5196 2132 M -59 -25 V stroke LT0 ! .2188 g 5214 2207 M -77 -100 V stroke LT0 ! .142 g 6006 1910 M -59 60 V stroke LT0 ! .1637 g 5871 2006 M 76 -36 V stroke LT0 ! .2693 g 1922 2262 M -58 59 V stroke LT0 ! .2804 g 1788 2314 M 76 7 V stroke LT0 ! .2748 g 5560 2283 M -59 41 V stroke LT0 ! .2812 g 5425 2315 M 76 9 V stroke LT0 ! .2258 g 5753 2140 M -58 61 V stroke LT0 ! .2471 g 5619 2234 M 76 -33 V stroke LT0 ! .296 g 2990 2375 M -67 -173 V stroke ! LT1 ! .2031 g 4310 2107 M 2 -5 V stroke LT0 ! .2301 g 4261 2249 M 90 -221 V stroke LT0 ! .2467 g 5272 2217 M -58 -10 V stroke LT0 ! .2522 g 5290 2285 M -76 -78 V stroke LT0 ! .2712 g 5349 2280 M -59 5 V stroke LT0 ! .0507 g 2345 1652 M 3 -2 V stroke LT0 ! .0286 g 2389 1621 M 10 -7 V stroke LT0 ! .2771 g 1711 2291 M -58 6 V stroke LT0 ! .2645 g 1576 2245 M 77 52 V stroke LT0 ! .1293 g 5025 1860 M -11 -10 V stroke LT0 ! .1237 g 5043 1920 M -58 -83 V stroke LT0 ! .1268 g 6064 1856 M -58 54 V stroke LT0 ! .1453 g 5929 1938 M 77 -28 V stroke LT0 ! .1326 g 2832 1915 M -59 -76 V stroke LT0 ! .1455 g 2849 2014 M -76 -175 V stroke LT0 ! .2491 g 1981 2186 M -59 76 V stroke LT0 ! .2688 g 1846 2274 M 76 -12 V stroke LT0 ! .2073 g 5812 2074 M -59 66 V stroke LT0 ! .2308 g 5677 2177 M 76 -37 V stroke LT0 ! .2645 g 1635 2252 M -59 -7 V stroke LT0 ! .2459 g 1500 2181 M 76 64 V stroke LT0 ! .2653 g 5619 2234 M -59 49 V stroke LT0 ! .2767 g 5484 2287 M 76 -4 V stroke LT0 ! .157 g 5102 1964 M -59 -44 V stroke LT0 ! .162 g 5120 2030 M -77 -110 V stroke LT0 ! .0024 g 4585 1518 M 7 1 V stroke LT0 ! .222 g 2040 2099 M -59 87 V stroke LT0 ! .2491 g 1905 2217 M 76 -31 V stroke LT0 ! .2453 g 1558 2197 M -58 -16 V stroke LT0 ! .2226 g 1423 2109 M 77 72 V stroke LT0 ! .2832 g 5484 2287 M -59 28 V stroke LT0 ! .2799 g 5349 2280 M 76 35 V stroke LT0 ! .0708 g 2755 1739 M -31 -52 V stroke LT0 ! .28 g 1846 2274 M -58 40 V stroke LT0 ! .2827 g 1711 2291 M 77 23 V stroke LT0 ! .2212 g 1482 2130 M -59 -21 V stroke LT0 ! .1965 g 1347 2034 M 76 75 V stroke LT0 ! .1942 g 1406 2055 M -59 -21 V stroke LT0 ! .1699 g 1271 1960 M 76 74 V stroke LT0 ! .1873 g 5871 2006 M -59 68 V stroke LT0 ! .2119 g 5736 2114 M 76 -40 V stroke LT0 ! .1904 g 2098 2005 M -58 94 V stroke LT0 ! .2231 g 1963 2146 M 77 -47 V stroke LT0 ! .1669 g 1329 1977 M -58 -17 V stroke LT0 ! .1453 g 1194 1893 M 77 67 V stroke ! LT1 ! .3514 g 3002 2408 M -3 -11 V stroke LT0 ! .1147 g 6123 1809 M -59 47 V stroke LT0 ! .1289 g 5988 1874 M 76 -18 V stroke LT0 ! .157 g 2157 1909 M -59 96 V stroke LT0 ! .1933 g 2022 2066 M 76 -61 V stroke LT0 ! .142 g 1253 1902 M -59 -9 V stroke LT0 ! .0614 g 4468 1693 M 4 -7 V stroke LT0 ! .1288 g 2199 1844 M -42 65 V stroke LT0 ! .162 g 2080 1980 M 77 -71 V stroke LT0 ! .1983 g 5178 2065 M -58 -35 V stroke LT0 ! .2037 g 5196 2132 M -76 -102 V stroke ! LT1 ! .4059 g 3269 2624 M 10 -1 V stroke LT0 ! .0903 g 4409 1833 M 59 -140 V stroke LT0 ! .0854 g 4391 1768 M 77 -75 V stroke LT0 ! .1232 g 2190 1844 M 2 -2 V stroke LT0 ! .1409 g 2139 1895 M 45 -46 V stroke LT0 ! .2791 g 5407 2267 M -58 13 V stroke LT0 ! .2657 g 5272 2217 M 77 63 V stroke LT0 ! .1669 g 5929 1938 M -58 68 V stroke LT0 ! .1912 g 5794 2045 M 77 -39 V stroke LT0 ! .2521 g 5677 2177 M -58 57 V stroke LT0 ! .2682 g 5542 2250 M 77 -16 V stroke LT0 ! .2346 g 5254 2152 M -58 -20 V stroke LT0 ! .2394 g 5272 2217 M -76 -85 V stroke LT0 ! .0972 g 2814 1779 M -59 -40 V stroke LT0 ! .1193 g 2832 1915 M -77 -176 V stroke LT0 ! .2827 g 1770 2269 M -59 22 V stroke LT0 ! .2771 g 1635 2252 M 76 39 V stroke LT0 ! .2625 g 5331 2222 M -59 -5 V stroke LT0 ! .0025 g 4589 1516 M -4 2 V stroke LT0 ! .2688 g 1905 2217 M -59 57 V stroke LT0 ! .28 g 1770 2269 M 76 5 V stroke LT0 ! .0208 g 2464 1540 M 5 -2 V stroke LT0 ! .0035 g 2523 1519 M 3 -1 V stroke LT0 ! .217 g 2908 2129 M -59 -115 V stroke LT0 ! .2687 g 2984 2363 M 2849 2014 L stroke LT0 ! .1505 g 4351 1994 M 58 -161 V stroke LT0 ! .1505 g 4333 1949 M 76 -116 V stroke LT0 ! .1069 g 6181 1773 M -58 36 V stroke LT0 ! .1159 g 6046 1816 M 77 -7 V stroke LT0 ! .2797 g 5542 2250 M -58 37 V stroke LT0 ! .2824 g 5407 2267 M 77 20 V stroke LT0 ! .1474 g 5988 1874 M -59 64 V stroke LT0 ! .1699 g 5853 1973 M 76 -35 V stroke ! LT1 ! .0143 g 4723 1535 M 8 6 V stroke LT0 ! .0896 g 2272 1720 M 12 -11 V stroke LT0 ! .2354 g 5736 2114 M -59 63 V stroke LT0 ! .2555 g 5601 2203 M 76 -26 V stroke LT0 ! .1315 g 5025 1860 M -4 -7 V stroke LT0 ! .2769 g 1693 2246 M -58 6 V stroke LT0 ! .2638 g 1558 2197 M 77 55 V stroke LT0 ! .0155 g 4731 1542 M -8 -7 V stroke LT0 ! .2502 g 1963 2146 M -58 71 V stroke LT0 ! .2693 g 1828 2231 M 77 -14 V stroke LT0 ! .1516 g 5084 1913 M -59 -53 V stroke LT0 ! .1533 g 5102 1964 M -77 -104 V stroke LT0 ! .1301 g 6046 1816 M -58 58 V stroke LT0 ! .1494 g 5911 1902 M 77 -28 V stroke LT0 ! .0676 g 2762 1672 M -1 -2 V stroke LT0 ! .0918 g 2814 1779 M -49 -101 V stroke LT0 ! .2629 g 1617 2203 M -59 -6 V stroke LT0 ! .2438 g 1482 2130 M 76 67 V stroke ! LT1 ! .4059 g 4040 2590 M -4 0 V stroke ! LT1 ! .0342 g 2422 1570 M -20 18 V stroke LT0 ! .2158 g 5794 2045 M -58 69 V stroke LT0 ! .2388 g 5659 2147 M 77 -33 V stroke LT0 ! .2419 g 1541 2144 M -59 -14 V stroke LT0 ! .2188 g 1406 2055 M 76 75 V stroke LT0 ! .217 g 4292 2160 M 59 -166 V stroke LT0 ! .2255 g 4274 2150 M 77 -156 V stroke LT0 ! .1873 g 1388 1994 M -59 -17 V stroke LT0 ! .1912 g 1406 2055 M -77 -78 V stroke LT0 ! .1637 g 1253 1902 M 76 75 V stroke LT0 ! .2158 g 1464 2073 M -58 -18 V stroke LT0 ! .283 g 5466 2245 M -59 22 V stroke LT0 ! .2759 g 5331 2222 M 76 45 V stroke ! LT1 ! .4747 g 3681 2783 M 0 -1 V stroke ! LT1 ! .4588 g 3669 2755 M 2 -3 V stroke LT0 ! .1594 g 1312 1914 M -59 -12 V stroke LT0 ! .0121 g 2529 1498 M 4 -1 V stroke LT0 ! .004 g 4653 1495 M -9 -3 V stroke LT0 ! .0046 g 4658 1500 M -14 -8 V stroke LT0 ! .2804 g 1828 2231 M -58 38 V stroke LT0 ! .2825 g 1693 2246 M 77 23 V stroke LT0 ! .1041 g 6240 1747 M -59 26 V stroke LT0 ! .1074 g 6105 1767 M 76 6 V stroke LT0 ! .226 g 2022 2066 M -59 80 V stroke LT0 ! .2517 g 1887 2179 M 76 -33 V stroke LT0 ! .2716 g 5601 2203 M -59 47 V stroke LT0 ! .2803 g 5466 2245 M 76 5 V stroke LT0 ! .0901 g 4391 1768 M 36 -90 V stroke LT0 ! .1904 g 5160 2008 M -58 -44 V stroke LT0 ! .1933 g 5178 2065 M -76 -101 V stroke LT0 ! .1807 g 2890 1987 M -58 -72 V stroke LT0 ! .2041 g 2908 2129 M -76 -214 V stroke LT0 ! .1164 g 6105 1767 M -59 49 V stroke LT0 ! .1312 g 5970 1834 M 76 -18 V stroke LT0 ! .1983 g 2080 1980 M -58 86 V stroke LT0 ! .2292 g 1946 2115 M 76 -49 V stroke LT0 ! .1942 g 5853 1973 M -59 72 V stroke LT0 ! .2188 g 5718 2082 M 76 -37 V stroke LT0 ! .226 g 5237 2094 M -59 -29 V stroke LT0 ! .2292 g 5254 2152 M -76 -87 V stroke LT0 ! .2746 g 5389 2217 M -58 5 V stroke LT0 ! .2577 g 5254 2152 M 77 70 V stroke ! LT1 ! .0214 g 2508 1502 M -58 43 V stroke LT0 ! .0716 g 2337 1648 M 6 -6 V stroke LT0 ! .0449 g 2395 1595 M 17 -16 V stroke LT0 ! .255 g 5313 2165 M -59 -13 V stroke LT0 ! .1692 g 2139 1895 M -59 85 V stroke LT0 ! .2037 g 2004 2043 M 76 -63 V stroke LT0 ! .1455 g 4333 1949 M 58 -181 V stroke LT0 ! .1326 g 4315 1850 M 76 -82 V stroke LT0 ! .0113 g 2696 1497 M 3 2 V stroke ! LT1 ! .3358 g 2990 2377 M -9 -23 V stroke LT0 ! .3682 g 3061 2597 M 2933 2231 L stroke LT0 ! .0042 g 4593 1465 M -1 0 V stroke LT0 ! .1719 g 5911 1902 M -58 71 V stroke LT0 ! .1965 g 5777 2010 M 76 -37 V stroke LT0 ! .2827 g 1752 2225 M -59 21 V stroke LT0 ! .276 g 1617 2203 M 76 43 V stroke LT0 ! .1489 g 2164 1860 M -25 35 V stroke LT0 ! .1771 g 2063 1968 M 76 -73 V stroke LT0 ! .1262 g 2872 1808 M -58 -29 V stroke LT0 ! .1585 g 2890 1987 M -76 -208 V stroke LT0 ! .2589 g 5659 2147 M -58 56 V stroke LT0 ! .2732 g 5524 2212 M 77 -9 V stroke LT0 ! .3026 g 4216 2355 M 76 -195 V stroke LT0 ! .3421 g 4157 2544 M 135 -384 V stroke LT0 ! .2708 g 1887 2179 M -59 52 V stroke LT0 ! .2806 g 1752 2225 M 76 6 V stroke LT0 ! .1075 g 6164 1728 M -59 39 V stroke LT0 ! .1168 g 6029 1773 M 76 -6 V stroke LT0 ! .0074 g 2593 1464 M 3 -1 V stroke LT0 ! .1706 g 2121 1893 M 16 -16 V stroke LT0 ! .2819 g 5524 2212 M -58 33 V stroke LT0 ! .2817 g 5389 2217 M 77 28 V stroke LT0 ! .1067 g 6299 1733 M -59 14 V stroke LT0 ! .1042 g 6164 1728 M 76 19 V stroke LT0 ! .1505 g 5970 1834 M -59 68 V stroke LT0 ! .1734 g 5835 1935 M 76 -33 V stroke LT0 ! .1096 g 2872 1808 M -59 -139 V stroke LT0 ! .2753 g 1676 2198 M -59 5 V stroke LT0 ! .261 g 1541 2144 M 76 59 V stroke ! LT1 ! .087 g 4914 1700 M -59 -63 V stroke LT0 ! .0901 g 4931 1721 M -34 -37 V stroke ! LT1 ! .0531 g 4779 1565 M 76 72 V stroke ! LT1 ! .0143 g 2567 1465 M -59 37 V stroke ! LT1 ! .0352 g 2432 1558 M 76 -56 V stroke LT0 ! .0508 g 2412 1578 M 5 -4 V stroke ! LT1 ! .0603 g 4837 1622 M -58 -57 V stroke LT0 ! .0907 g 4914 1700 M -71 -70 V stroke ! LT1 ! .0311 g 4702 1507 M 77 58 V stroke LT0 ! .1003 g 4945 1738 M -14 -17 V stroke LT0 ! .1303 g 5005 1811 M -5 -5 V stroke LT0 ! .0978 g 2274 1716 M -8 8 V stroke LT0 ! .2419 g 5718 2082 M -59 65 V stroke LT0 ! .261 g 5583 2167 M 76 -20 V stroke LT0 ! .2589 g 1599 2150 M -58 -6 V stroke LT0 ! .2388 g 1464 2073 M 77 71 V stroke LT0 ! .1776 g 1370 1927 M -58 -13 V stroke LT0 ! .183 g 1388 1994 M -76 -80 V stroke LT0 ! .255 g 1946 2115 M -59 64 V stroke LT0 ! .2719 g 1811 2191 M 76 -12 V stroke LT0 ! .162 g 5084 1913 M -34 -44 V stroke LT0 ! .2073 g 1447 2009 M -59 -15 V stroke LT0 ! .2119 g 1464 2073 M -76 -79 V stroke LT0 ! .2354 g 1523 2085 M -59 -12 V stroke ! LT1 ! .0394 g 4761 1554 M -59 -47 V stroke LT0 ! .047 g 4775 1569 M -29 -25 V stroke ! LT1 ! .0157 g 4626 1462 M 76 45 V stroke LT0 ! .1316 g 6029 1773 M -59 61 V stroke LT0 ! .1512 g 5894 1860 M 76 -26 V stroke LT0 ! .0085 g 4421 1449 M 6 0 V stroke LT0 ! .2817 g 5448 2200 M -59 17 V stroke LT0 ! .2719 g 5313 2165 M 76 52 V stroke LT0 ! .1193 g 4315 1850 M 59 -182 V stroke LT0 ! .0972 g 4297 1714 M 77 -46 V stroke LT0 ! .2255 g 4274 2150 M 59 -201 V stroke LT0 ! .217 g 4257 2070 M 76 -121 V stroke LT0 ! .1887 g 5143 1963 M -59 -50 V stroke LT0 ! .1887 g 5160 2008 M -76 -95 V stroke ! LT1 ! .0739 g 2373 1609 M -58 59 V stroke ! LT1 ! .0993 g 2263 1726 M 52 -58 V stroke LT0 ! .2817 g 1811 2191 M -59 34 V stroke LT0 ! .2819 g 1676 2198 M 76 27 V stroke ! LT1 ! .3654 g 4175 2447 M -2 2 V stroke LT0 ! .0006 g 2702 1436 M 1 1 V stroke LT0 ! .1042 g 6222 1702 M -58 26 V stroke LT0 ! .1075 g 6087 1722 M 77 6 V stroke LT0 ! .2212 g 5777 2010 M -59 72 V stroke LT0 ! .2438 g 5642 2110 M 76 -28 V stroke ! LT1 ! .4911 g 4098 2700 M 7 -22 V stroke LT0 ! .2753 g 5583 2167 M -59 45 V stroke LT0 ! .2819 g 5448 2200 M 76 12 V stroke ! LT1 ! .0243 g 4684 1497 M -58 -35 V stroke LT0 ! .222 g 5219 2045 M -59 -37 V stroke LT0 ! .2231 g 5237 2094 M -77 -86 V stroke LT0 ! .2346 g 2004 2043 M -58 72 V stroke LT0 ! .2577 g 1869 2145 M 77 -30 V stroke LT0 ! .2824 g 2967 2234 M -59 -105 V stroke LT0 ! .3026 g 2984 2363 M -76 -234 V stroke LT0 ! .005 g 2659 1435 M 2 0 V stroke LT0 ! .2708 g 5372 2167 M -59 -2 V stroke LT0 ! .2517 g 5237 2094 M 76 71 V stroke ! LT1 ! .0102 g 2626 1434 M -59 31 V stroke ! LT1 ! .0284 g 2491 1515 M 76 -50 V stroke LT0 ! .0326 g 2481 1524 M 37 -25 V stroke LT0 ! .1168 g 6087 1722 M -58 51 V stroke LT0 ! .1316 g 5952 1789 M 77 -16 V stroke LT0 ! .2502 g 5295 2114 M -58 -20 V stroke LT0 ! .1067 g 6222 1702 M 77 31 V stroke LT0 ! .198 g 5835 1935 M -58 75 V stroke LT0 ! .2226 g 5700 2043 M 77 -33 V stroke ! LT1 ! .4029 g 3051 2526 M -4 -10 V stroke ! LT1 ! .0596 g 2432 1558 M -59 51 V stroke ! LT1 ! .0908 g 2297 1693 M 76 -84 V stroke LT0 ! .2115 g 2063 1968 M -59 75 V stroke LT0 ! .2394 g 1928 2090 M 76 -47 V stroke LT0 ! .2819 g 1734 2180 M -58 18 V stroke LT0 ! .2732 g 1599 2150 M 77 48 V stroke LT0 ! .123 g 2931 1820 M -63 -158 V stroke LT0 ! .2234 g 2949 2042 M -59 -55 V stroke LT0 ! .259 g 2967 2234 M -77 -247 V stroke LT0 ! .1484 g 2931 1820 M -59 -12 V stroke LT0 ! .1911 g 2949 2042 M -77 -234 V stroke LT0 ! .0088 g 4418 1445 M -1 1 V stroke LT0 ! .1017 g 4297 1714 M 20 -55 V stroke LT0 ! .0065 g 4567 1438 M -9 -4 V stroke LT0 ! .1741 g 5894 1860 M -59 75 V stroke LT0 ! .1988 g 5759 1968 M 76 -33 V stroke LT0 ! .2629 g 5642 2110 M -59 57 V stroke LT0 ! .276 g 5507 2170 M 76 -3 V stroke LT0 ! .2746 g 1869 2145 M -58 46 V stroke LT0 ! .2817 g 1734 2180 M 77 11 V stroke LT0 ! .1875 g 2121 1893 M -58 75 V stroke LT0 ! .2188 g 1986 2029 M 77 -61 V stroke LT0 ! .1074 g 6146 1683 M -59 39 V stroke LT0 ! .1164 g 6011 1726 M 76 -4 V stroke LT0 ! .2041 g 4257 2070 M 58 -220 V stroke LT0 ! .1807 g 4239 1928 M 76 -78 V stroke LT0 ! .2827 g 5507 2170 M -59 30 V stroke LT0 ! .2806 g 5372 2167 M 76 33 V stroke LT0 ! .1041 g 6146 1683 M 76 19 V stroke LT0 ! .0031 g 2767 1417 M 4 3 V stroke LT0 ! .2716 g 1658 2146 M -59 4 V stroke LT0 ! .2555 g 1523 2085 M 76 65 V stroke LT0 ! .1512 g 5952 1789 M -58 71 V stroke LT0 ! .1741 g 5817 1890 M 77 -30 V stroke ! LT1 ! .0494 g 2491 1515 M -59 43 V stroke ! LT1 ! .0781 g 2356 1641 M 76 -83 V stroke LT0 ! .1957 g 1429 1938 M -59 -11 V stroke LT0 ! .2019 g 1447 2009 M -77 -82 V stroke ! LT1 ! .0084 g 2684 1407 M -58 27 V stroke ! LT1 ! .0246 g 2549 1480 M 77 -46 V stroke LT0 ! .3111 g 4216 2355 M 58 -205 V stroke LT0 ! .3111 g 4198 2310 M 76 -160 V stroke LT0 ! .2521 g 1581 2091 M -58 -6 V stroke LT0 ! .2308 g 1447 2009 M 76 76 V stroke LT0 ! .2258 g 1505 2020 M -58 -11 V stroke LT0 ! .1734 g 2132 1880 M -11 13 V stroke LT0 ! .1975 g 2045 1965 M 76 -72 V stroke LT0 ! .2453 g 5700 2043 M -58 67 V stroke LT0 ! .2638 g 5565 2126 M 77 -16 V stroke LT0 ! .0001 g 4397 1384 M 34 9 V stroke LT0 ! .1585 g 4239 1928 M 58 -214 V stroke LT0 ! .1262 g 4221 1749 M 76 -35 V stroke LT0 ! .1312 g 6011 1726 M -59 63 V stroke LT0 ! .1505 g 5876 1812 M 76 -23 V stroke ! LT1 ! .1209 g 4945 1738 M -31 -38 V stroke LT0 ! .1156 g 4948 1739 M -34 -39 V stroke ! LT1 ! .1181 g 4948 1739 M -34 -39 V stroke ! LT1 ! .0943 g 4837 1622 M 77 78 V stroke LT0 ! .2804 g 5430 2155 M -58 12 V stroke LT0 ! .2693 g 5295 2114 M 77 53 V stroke ! LT1 ! .1037 g 4896 1694 M -59 -72 V stroke ! LT1 ! .0686 g 4761 1554 M 76 68 V stroke LT0 ! .2625 g 1928 2090 M -59 55 V stroke LT0 ! .2759 g 1793 2152 M 76 -7 V stroke LT0 ! .0136 g 4348 1432 M -2 3 V stroke LT0 ! .1988 g 2104 1901 M 7 -7 V stroke ! LT1 ! .0798 g 4819 1624 M -58 -70 V stroke ! LT1 ! .0479 g 4684 1497 M 77 57 V stroke LT0 ! .283 g 1793 2152 M -59 28 V stroke LT0 ! .2803 g 1658 2146 M 76 34 V stroke LT0 ! .13 g 2990 1807 M -60 -154 V stroke LT0 ! .1069 g 6069 1675 M 77 8 V stroke LT0 ! .1971 g 5125 1930 M -47 -44 V stroke LT0 ! .192 g 5143 1963 M -69 -80 V stroke ! LT1 ! .5484 g 3137 2811 M -3 -13 V stroke LT0 ! .2234 g 5759 1968 M -59 75 V stroke LT0 ! .2459 g 5624 2068 M 76 -25 V stroke LT0 ! .2688 g 5354 2121 M -59 -7 V stroke LT0 ! .2491 g 5219 2045 M 76 69 V stroke LT0 ! .2769 g 5565 2126 M -58 44 V stroke LT0 ! .2825 g 5430 2155 M 77 15 V stroke LT0 ! .1187 g 4221 1749 M 32 -100 V stroke LT0 ! .2231 g 5201 2005 M -58 -42 V stroke LT0 ! .222 g 5219 2045 M -76 -82 V stroke ! LT1 ! .0428 g 2549 1480 M -58 35 V stroke ! LT1 ! .0693 g 2414 1596 M 77 -81 V stroke ! LT1 ! .0605 g 4743 1562 M -59 -65 V stroke ! LT1 ! .0323 g 4608 1451 M 76 46 V stroke LT0 ! .2491 g 5278 2070 M -59 -25 V stroke LT0 ! .1159 g 6069 1675 M -58 51 V stroke LT0 ! .1301 g 5935 1740 M 76 -14 V stroke ! LT1 ! .1202 g 2297 1693 M -29 31 V stroke LT0 ! .1603 g 2990 1807 M -59 13 V stroke LT0 ! .2126 g 3007 2069 M -76 -249 V stroke ! LT1 ! .008 g 2696 1402 M -12 5 V stroke ! LT1 ! .0234 g 2608 1452 M 76 -45 V stroke LT0 ! .0003 g 4320 1365 M 50 12 V stroke LT0 ! .2467 g 1986 2029 M -58 61 V stroke LT0 ! .2657 g 1851 2113 M 77 -23 V stroke LT0 ! .1988 g 5817 1890 M -58 78 V stroke LT0 ! .2234 g 5682 1998 M 77 -30 V stroke LT0 ! .3938 g 3043 2502 M -59 -139 V stroke LT0 ! .4062 g 3061 2597 M -77 -234 V stroke LT0 ! .2797 g 1716 2133 M -58 13 V stroke LT0 ! .2682 g 1581 2091 M 77 55 V stroke ! LT1 ! .0457 g 4667 1508 M -59 -57 V stroke ! LT1 ! .0214 g 4532 1413 M 76 38 V stroke LT0 ! .3026 g 4198 2310 M 59 -240 V stroke LT0 ! .2824 g 4180 2181 M 77 -111 V stroke LT0 ! .1734 g 5876 1812 M -59 78 V stroke LT0 ! .198 g 5741 1920 M 76 -30 V stroke LT0 ! .0184 g 4270 1424 M -1 2 V stroke LT0 ! .3938 g 4157 2544 M 59 -189 V stroke LT0 ! .4062 g 4139 2550 M 77 -195 V stroke LT0 ! .2653 g 1640 2089 M -59 2 V stroke LT0 ! .2471 g 1505 2020 M 76 71 V stroke ! LT1 ! .1093 g 2356 1641 M -59 52 V stroke ! LT1 ! .1238 g 2274 1720 M 23 -27 V stroke LT0 ! .0729 g 2980 1570 M -8 6 V stroke LT0 ! .13 g 3048 1769 M -49 -125 V stroke LT0 ! .2645 g 5624 2068 M -59 58 V stroke LT0 ! .2771 g 5489 2126 M 76 0 V stroke LT0 ! .2127 g 1487 1947 M -58 -9 V stroke LT0 ! .2195 g 1505 2020 M -76 -82 V stroke LT0 ! .1147 g 5993 1677 M 76 -2 V stroke LT0 ! .2791 g 1851 2113 M -58 39 V stroke LT0 ! .2824 g 1716 2133 M 77 19 V stroke LT0 ! .242 g 1564 2025 M -59 -5 V stroke LT0 ! .2553 g 3007 2069 M -58 -27 V stroke LT0 ! .3038 g 3025 2315 M -76 -273 V stroke LT0 ! .2827 g 5489 2126 M -59 29 V stroke LT0 ! .28 g 5354 2121 M 76 34 V stroke LT0 ! .2289 g 2045 1965 M -59 64 V stroke LT0 ! .2522 g 1910 2068 M 76 -39 V stroke ! LT1 ! .0396 g 2608 1452 M -59 28 V stroke ! LT1 ! .064 g 2473 1559 M 76 -79 V stroke LT0 ! .1494 g 5935 1740 M -59 72 V stroke LT0 ! .1719 g 5800 1839 M 76 -27 V stroke LT0 ! .3394 g 3025 2315 M -58 -81 V stroke LT0 ! .3736 g 3043 2502 M -76 -268 V stroke ! LT1 ! .0352 g 4590 1464 M -58 -51 V stroke ! LT1 ! .0143 g 4455 1383 M 77 30 V stroke LT0 ! .1307 g 4145 1767 M 37 -126 V stroke LT0 ! .0006 g 4272 1353 M 8 2 V stroke LT0 ! .259 g 4180 2181 M 59 -253 V stroke LT0 ! .2234 g 4162 1989 M 77 -61 V stroke LT0 ! .1911 g 4162 1989 M 59 -240 V stroke LT0 ! .1484 g 4145 1767 M 76 -18 V stroke ! LT1 ! .0391 g 2666 1429 M 7 -3 V stroke LT0 ! .1289 g 5993 1677 M -58 63 V stroke LT0 ! .1474 g 5858 1759 M 77 -19 V stroke LT0 ! .2459 g 5682 1998 M -58 70 V stroke LT0 ! .2645 g 5547 2081 M 77 -13 V stroke LT0 ! .2103 g 2104 1901 M -59 64 V stroke LT0 ! .237 g 1969 2018 M 76 -53 V stroke ! LT1 ! .098 g 2414 1596 M -58 45 V stroke ! LT1 ! .1217 g 2302 1706 M 54 -65 V stroke LT0 ! .28 g 5412 2110 M -58 11 V stroke LT0 ! .2688 g 5278 2070 M 76 51 V stroke LT0 ! .1603 g 3048 1769 M -58 38 V stroke LT0 ! .2201 g 3066 2062 M -76 -255 V stroke LT0 ! .124 g 3107 1707 M -31 -72 V stroke LT0 ! .2832 g 1775 2110 M -59 23 V stroke LT0 ! .2767 g 1640 2089 M 76 44 V stroke ! LT1 ! .0284 g 4514 1427 M -59 -44 V stroke ! LT1 ! .0102 g 4379 1357 M 76 26 V stroke LT0 ! .2712 g 1910 2068 M -59 45 V stroke LT0 ! .2799 g 1775 2110 M 76 3 V stroke LT0 ! .2226 g 5741 1920 M -59 78 V stroke LT0 ! .2453 g 5606 2020 M 76 -22 V stroke LT0 ! .2693 g 5336 2078 M -58 -8 V stroke LT0 ! .2502 g 5201 2005 M 77 65 V stroke LT0 ! .0069 g 3039 1355 M -7 5 V stroke LT0 ! .0005 g 2936 1335 M 2 0 V stroke LT0 ! .2771 g 5547 2081 M -58 45 V stroke LT0 ! .2827 g 5412 2110 M 77 16 V stroke ! LT1 ! .4954 g 4098 2700 M 3 -7 V stroke LT0 ! .4927 g 4081 2770 M 76 -226 V stroke LT0 ! .5301 g 4022 2950 M 135 -406 V stroke LT0 ! .1268 g 5917 1686 M 76 -9 V stroke LT0 ! .2 g 2111 1894 M -7 7 V stroke LT0 ! .2213 g 2027 1966 M 77 -65 V stroke ! LT1 ! .0396 g 2666 1429 M -58 23 V stroke ! LT1 ! .0623 g 2531 1529 M 77 -77 V stroke ! LT1 ! .1777 g 5003 1807 M -2 -3 V stroke ! LT1 ! .1727 g 5008 1807 M -2 -1 V stroke ! LT1 ! .1349 g 4896 1694 M 42 43 V stroke LT0 ! .2517 g 5260 2031 M -59 -26 V stroke LT0 ! .226 g 5125 1930 M 76 75 V stroke ! LT1 ! .1402 g 4927 1735 M -31 -41 V stroke ! LT1 ! .1149 g 4819 1624 M 77 70 V stroke LT0 ! .206 g 5125 1930 M -36 -37 V stroke LT0 ! .1366 g 4068 1760 M 37 -127 V stroke LT0 ! .2292 g 5183 1973 M -58 -43 V stroke ! LT1 ! .1278 g 4878 1703 M -59 -79 V stroke ! LT1 ! .0924 g 4743 1562 M 76 62 V stroke LT0 ! .2748 g 1699 2080 M -59 9 V stroke LT0 ! .2602 g 1564 2025 M 76 64 V stroke ! LT1 ! .5513 g 3987 2860 M -6 5 V stroke LT0 ! .1965 g 5800 1839 M -59 81 V stroke LT0 ! .2212 g 5665 1947 M 76 -27 V stroke ! LT1 ! .0905 g 2473 1559 M -59 37 V stroke ! LT1 ! .1185 g 2343 1682 M 71 -86 V stroke LT0 ! .2281 g 1546 1951 M -59 -4 V stroke LT0 ! .2352 g 1564 2025 M -77 -78 V stroke LT0 ! .2554 g 1622 2025 M -58 0 V stroke ! LT1 ! .1074 g 4802 1642 M -59 -80 V stroke ! LT1 ! .0739 g 4667 1508 M 76 54 V stroke LT0 ! .1484 g 3107 1707 M -59 62 V stroke LT0 ! .2126 g 3125 2018 M -77 -249 V stroke ! LT1 ! .0246 g 4438 1397 M -59 -40 V stroke ! LT1 ! .0084 g 4303 1336 M 76 21 V stroke LT0 ! .1699 g 5858 1759 M -58 80 V stroke LT0 ! .1942 g 5723 1866 M 77 -27 V stroke LT0 ! .2126 g 4086 2022 M 59 -255 V stroke LT0 ! .1603 g 4068 1760 M 77 7 V stroke LT0 ! .2604 g 1969 2018 M -59 50 V stroke LT0 ! .2739 g 1834 2080 M 76 -12 V stroke LT0 ! .505 g 3119 2766 M -58 -169 V stroke LT0 ! .5584 g 3196 3007 M 3061 2597 L stroke LT0 ! .4062 g 4139 2550 M 59 -240 V stroke LT0 ! .3938 g 4122 2454 M 76 -144 V stroke LT0 ! .2723 g 3066 2062 M -59 7 V stroke LT0 ! .333 g 3084 2358 M -77 -289 V stroke LT0 ! .2638 g 5606 2020 M -59 61 V stroke LT0 ! .2769 g 5471 2080 M 76 1 V stroke LT0 ! .0315 g 3151 1414 M 0 -1 V stroke LT0 ! .0812 g 3224 1536 M -1 -1 V stroke ! LT1 ! .0908 g 4725 1587 M -58 -79 V stroke ! LT1 ! .0596 g 4590 1464 M 77 44 V stroke LT0 ! .2825 g 5471 2080 M -59 30 V stroke LT0 ! .2804 g 5336 2078 M 76 32 V stroke LT0 ! .1453 g 5917 1686 M -59 73 V stroke LT0 ! .1669 g 5782 1782 M 76 -23 V stroke LT0 ! .1357 g 3992 1728 M 30 -102 V stroke LT0 ! .0629 g 3974 1487 M 3 1 V stroke LT0 ! .2827 g 1834 2080 M -59 30 V stroke LT0 ! .2812 g 1699 2080 M 76 30 V stroke LT0 ! .1264 g 3164 1628 M -57 79 V stroke LT0 ! .1911 g 3183 1940 M -76 -233 V stroke LT0 ! .0625 g 3974 1487 M 1 -1 V stroke ! LT1 ! .0405 g 2670 1429 M -4 0 V stroke ! LT1 ! .08 g 2602 1496 M 1 -1 V stroke ! LT1 ! .0511 g 2632 1465 M 34 -36 V stroke LT0 ! .3038 g 4104 2268 M 58 -279 V stroke LT0 ! .2553 g 4086 2022 M 76 -33 V stroke ! LT1 ! .1568 g 2279 1733 M -3 2 V stroke ! LT1 ! .2159 g 2144 1864 M 4 -4 V stroke ! LT1 ! .0868 g 2531 1529 M -58 30 V stroke ! LT1 ! .1135 g 2400 1647 M 73 -88 V stroke LT0 ! .142 g 5840 1701 M 77 -15 V stroke ! LT1 ! .0781 g 4649 1540 M -59 -76 V stroke ! LT1 ! .0494 g 4514 1427 M 76 37 V stroke LT0 ! .2479 g 2027 1966 M -58 52 V stroke LT0 ! .2654 g 1892 2044 M 77 -26 V stroke LT0 ! .2438 g 5665 1947 M -59 73 V stroke LT0 ! .2629 g 5530 2032 M 76 -12 V stroke ! LT1 ! .0234 g 4361 1375 M -58 -39 V stroke ! LT1 ! .0084 g 4226 1318 M 77 18 V stroke LT0 ! .1588 g 3242 1835 M -76 -207 V stroke LT0 ! .1286 g 3916 1671 M 16 -52 V stroke LT0 ! .3736 g 4122 2454 M 58 -273 V stroke LT0 ! .3394 g 4104 2268 M 76 -87 V stroke LT0 ! .0053 g 3158 1320 M 5 3 V stroke LT0 ! .2806 g 5395 2066 M -59 12 V stroke LT0 ! .2708 g 5260 2031 M 76 47 V stroke LT0 ! .1376 g 3300 1712 M -39 -91 V stroke LT0 ! .2806 g 1757 2063 M -58 17 V stroke LT0 ! .27 g 1622 2025 M 77 55 V stroke LT0 ! .2201 g 4010 2020 M 58 -260 V stroke LT0 ! .1603 g 3992 1728 M 76 32 V stroke ! LT1 ! .0112 g 2913 1336 M 5 -1 V stroke LT0 ! .0007 g 4098 1306 M -7 0 V stroke LT0 ! .3815 g 3084 2358 M -59 -43 V stroke LT0 ! .4309 g 3102 2607 M -77 -292 V stroke LT0 ! .2188 g 5723 1866 M -58 81 V stroke LT0 ! .2419 g 5588 1967 M 77 -20 V stroke LT0 ! .4651 g 3102 2607 M -59 -105 V stroke LT0 ! .4927 g 3119 2766 M -76 -264 V stroke LT0 ! .276 g 5530 2032 M -59 48 V stroke LT0 ! .2827 g 5395 2066 M 76 14 V stroke ! LT1 ! .0693 g 4573 1501 M -59 -74 V stroke ! LT1 ! .0428 g 4438 1397 M 76 30 V stroke LT0 ! .266 g 1681 2018 M -59 7 V stroke LT0 ! .2483 g 1546 1951 M 76 74 V stroke LT0 ! .279 g 1892 2044 M -58 36 V stroke LT0 ! .2821 g 1757 2063 M 77 17 V stroke LT0 ! .2413 g 1605 1951 M -59 0 V stroke LT0 ! .2719 g 5318 2037 M -58 -6 V stroke LT0 ! .255 g 5183 1973 M 77 58 V stroke ! LT1 ! .1572 g 2277 1735 M 2 -2 V stroke LT0 ! .1912 g 5782 1782 M -59 84 V stroke LT0 ! .2158 g 5647 1890 M 76 -24 V stroke LT0 ! .235 g 2086 1914 M -59 52 V stroke LT0 ! .2555 g 1951 2005 M 76 -39 V stroke LT0 ! .2723 g 3125 2018 M -59 44 V stroke LT0 ! .3432 g 3142 2357 M -76 -295 V stroke ! LT1 ! .0246 g 4285 1359 M -59 -41 V stroke ! LT1 ! .0102 g 4150 1305 M 76 13 V stroke LT0 ! .2577 g 5242 1997 M -59 -24 V stroke LT0 ! .2346 g 5107 1908 M 76 65 V stroke LT0 ! .2126 g 3933 1983 M 59 -255 V stroke LT0 ! .1484 g 3916 1671 M 76 57 V stroke ! LT1 ! .0866 g 2581 1511 M -50 18 V stroke ! LT1 ! .1046 g 2479 1594 M 52 -65 V stroke LT0 ! .1637 g 5840 1701 M -58 81 V stroke LT0 ! .1873 g 5705 1805 M 77 -23 V stroke LT0 ! .2394 g 5166 1948 M -59 -40 V stroke LT0 ! .2221 g 5098 1899 M 9 9 V stroke LT0 ! .1394 g 3704 1695 M 28 -86 V stroke ! LT1 ! .2055 g 5041 1848 M -3 -2 V stroke ! LT1 ! .2039 g 5043 1849 M -4 -4 V stroke ! LT1 ! .1875 g 4990 1801 M 5 5 V stroke ! LT1 ! .0069 g 4150 1305 M -113 -15 V stroke LT0 ! .1518 g 3435 1760 M -63 -146 V stroke LT0 ! .1386 g 3300 1712 M 45 -96 V stroke ! LT1 ! .064 g 4496 1470 M -58 -73 V stroke ! LT1 ! .0396 g 4361 1375 M 77 22 V stroke LT0 ! .1911 g 3857 1911 M 59 -240 V stroke LT0 ! .1295 g 3858 1615 M 58 56 V stroke LT0 ! .1594 g 5764 1719 M 76 -18 V stroke LT0 ! .1623 g 3781 1811 M 53 -196 V stroke LT0 ! .261 g 5588 1967 M -58 65 V stroke LT0 ! .2753 g 5453 2033 M 77 -1 V stroke ! LT1 ! .1577 g 4878 1703 M 32 28 V stroke LT0 ! .505 g 4081 2770 M 58 -220 V stroke LT0 ! .505 g 4063 2725 M 76 -175 V stroke LT0 ! .2268 g 2104 1898 M -18 16 V stroke LT0 ! .2453 g 2009 1963 M 77 -49 V stroke LT0 ! .2833 g 1816 2040 M -59 23 V stroke LT0 ! .2766 g 1681 2018 M 76 45 V stroke LT0 ! .2819 g 5453 2033 M -58 33 V stroke LT0 ! .2817 g 5318 2037 M 77 29 V stroke ! LT1 ! .1433 g 2397 1652 M -29 18 V stroke LT0 ! .333 g 4027 2317 M 59 -295 V stroke LT0 ! .2723 g 4010 2020 M 76 2 V stroke ! LT1 ! .161 g 4898 1728 M -20 -25 V stroke ! LT1 ! .1428 g 4802 1642 M 76 61 V stroke LT0 ! .273 g 1951 2005 M -59 39 V stroke LT0 ! .2802 g 1816 2040 M 76 4 V stroke LT0 ! .2041 g 3377 1926 M -77 -214 V stroke LT0 ! .1807 g 3242 1835 M 58 -123 V stroke LT0 ! .2553 g 3183 1940 M -58 78 V stroke LT0 ! .333 g 3201 2308 M -76 -290 V stroke ! LT1 ! .0124 g 3247 1278 M -2 0 V stroke ! LT1 ! .0016 g 3249 1278 M -4 0 V stroke LT0 ! .1399 g 3704 1695 M -54 -86 V stroke LT0 ! .153 g 3570 1754 M 46 -145 V stroke ! LT1 ! .1572 g 4858 1719 M -56 -77 V stroke ! LT1 ! .1243 g 4725 1587 M 77 55 V stroke LT0 ! .1528 g 3570 1754 M -71 -143 V stroke LT0 ! .1528 g 3435 1760 M 55 -149 V stroke LT0 ! .0089 g 3862 1268 M -10 1 V stroke ! LT1 ! .0284 g 4208 1349 M -58 -44 V stroke ! LT1 ! .0143 g 4074 1296 M 76 9 V stroke LT0 ! .2388 g 5647 1890 M -59 77 V stroke LT0 ! .2589 g 5512 1979 M 76 -12 V stroke LT0 ! .259 g 3318 2082 M -76 -247 V stroke LT0 ! .2234 g 3183 1940 M 59 -105 V stroke LT0 ! .2737 g 1740 2006 M -59 12 V stroke LT0 ! .2589 g 1605 1951 M 76 67 V stroke LT0 ! .3038 g 3260 2213 M -77 -273 V stroke ! LT1 ! .0623 g 4420 1447 M -59 -72 V stroke ! LT1 ! .0396 g 4285 1359 M 76 16 V stroke LT0 ! .2523 g 1663 1946 M -58 5 V stroke ! LT1 ! .1423 g 4784 1671 M -59 -84 V stroke ! LT1 ! .1093 g 4649 1540 M 76 47 V stroke ! LT1 ! .0144 g 3997 1295 M -58 -22 V stroke ! LT1 ! .01 g 4074 1296 M -135 -23 V stroke ! LT1 ! .0064 g 3862 1268 M 77 5 V stroke LT0 ! .2817 g 5377 2021 M -59 16 V stroke LT0 ! .2746 g 5242 1997 M 76 40 V stroke LT0 ! .2165 g 2149 1860 M -5 4 V stroke LT0 ! .2119 g 5705 1805 M -58 85 V stroke LT0 ! .2354 g 5571 1908 M 76 -18 V stroke LT0 ! .1807 g 3781 1811 M -77 -116 V stroke LT0 ! .2041 g 3646 1914 M 58 -219 V stroke ! LT1 ! .0009 g 3628 1260 M -2 0 V stroke LT0 ! .2658 g 2009 1963 M -58 42 V stroke LT0 ! .2763 g 1874 2013 M 77 -8 V stroke LT0 ! .183 g 5764 1719 M -59 86 V stroke LT0 ! .2073 g 5629 1826 M 76 -21 V stroke LT0 ! .4309 g 4045 2566 M 59 -298 V stroke LT0 ! .3815 g 4027 2317 M 77 -49 V stroke LT0 ! .2732 g 5512 1979 M -59 54 V stroke LT0 ! .2819 g 5377 2021 M 76 12 V stroke LT0 ! .4039 g 3142 2357 M -58 1 V stroke LT0 ! .468 g 3160 2666 M -76 -308 V stroke ! LT1 ! .1296 g 4707 1626 M -58 -86 V stroke ! LT1 ! .098 g 4573 1501 M 76 39 V stroke LT0 ! .4927 g 4063 2725 M 59 -271 V stroke LT0 ! .4651 g 4045 2566 M 77 -112 V stroke LT0 ! .3432 g 3951 2321 M 59 -301 V stroke LT0 ! .2723 g 3933 1983 M 77 37 V stroke LT0 ! .2834 g 1874 2013 M -58 27 V stroke LT0 ! .2804 g 1740 2006 M 76 34 V stroke LT0 ! .2255 g 3512 1956 M -77 -196 V stroke LT0 ! .217 g 3377 1926 M 58 -166 V stroke LT0 ! .1776 g 5688 1738 M 76 -19 V stroke ! LT1 ! .7404 g 3272 3202 M -3 -11 V stroke ! LT1 ! .0094 g 3862 1268 M -12 -1 V stroke LT0 ! .2759 g 5301 1998 M -59 -1 V stroke LT0 ! .2625 g 5166 1948 M 76 49 V stroke ! LT1 ! .0352 g 4132 1347 M -58 -51 V stroke ! LT1 ! .0214 g 3997 1295 M 77 1 V stroke LT0 ! .217 g 3646 1914 M -76 -160 V stroke LT0 ! .2255 g 3512 1956 M 58 -202 V stroke LT0 ! .2234 g 3857 1911 M -76 -100 V stroke LT0 ! .259 g 3722 2064 M 59 -253 V stroke ! LT1 ! .064 g 4343 1431 M -58 -72 V stroke ! LT1 ! .0428 g 4208 1349 M 77 10 V stroke ! LT1 ! .234 g 2151 1863 M 3 -3 V stroke ! LT1 ! .2272 g 2143 1865 M 5 -5 V stroke LT0 ! .5894 g 4022 2950 M 59 -180 V stroke LT0 ! .6053 g 4004 2972 M 77 -202 V stroke ! LT1 ! .1204 g 4631 1588 M -58 -87 V stroke ! LT1 ! .0905 g 4496 1470 M 77 31 V stroke ! LT1 ! .0089 g 3382 1264 M -10 1 V stroke ! LT1 ! .0129 g 3246 1279 M 1 -1 V stroke LT0 ! .2657 g 5224 1966 M -58 -18 V stroke LT0 ! .2467 g 5089 1893 M 77 55 V stroke LT0 ! .2555 g 5571 1908 M -59 71 V stroke LT0 ! .2716 g 5436 1981 M 76 -2 V stroke LT0 ! .333 g 3875 2278 M 58 -295 V stroke LT0 ! .2553 g 3857 1911 M 76 72 V stroke ! LT1 ! .0243 g 3921 1303 M -59 -35 V stroke ! LT1 ! .0105 g 3852 1268 M 10 0 V stroke LT0 ! .5894 g 3178 2896 M -59 -130 V stroke LT0 ! .6053 g 3196 3007 M -77 -241 V stroke LT0 ! .2788 g 1798 1989 M -58 17 V stroke LT0 ! .267 g 1663 1946 M 77 60 V stroke ! LT1 ! .01 g 3389 1266 M -7 -2 V stroke ! LT1 ! .0088 g 3517 1258 M -3 0 V stroke ! LT1 ! .0111 g 3373 1267 M 2 -1 V stroke LT0 ! .3038 g 3798 2190 M 59 -279 V stroke LT0 ! .2582 g 2068 1922 M -59 41 V stroke LT0 ! .2712 g 1933 1982 M 76 -19 V stroke LT0 ! .2803 g 5436 1981 M -59 40 V stroke LT0 ! .283 g 5301 1998 M 76 23 V stroke LT0 ! .2522 g 5148 1926 M -59 -33 V stroke LT0 ! .261 g 1722 1936 M -59 10 V stroke LT0 ! .5173 g 3160 2666 M -58 -59 V stroke LT0 ! .5618 g 3178 2896 M -76 -289 V stroke ! LT1 ! .0091 g 3514 1259 M 3 -1 V stroke LT0 ! .3026 g 3453 2160 M -76 -234 V stroke LT0 ! .2824 g 3318 2082 M 59 -156 V stroke LT0 ! .2308 g 5629 1826 M -58 82 V stroke LT0 ! .2521 g 5494 1920 M 77 -12 V stroke LT0 ! .2817 g 1933 1982 M -59 31 V stroke LT0 ! .2819 g 1798 1989 M 76 24 V stroke ! LT1 ! .225 g 5024 1844 M -4 -3 V stroke ! LT1 ! .1148 g 4555 1557 M -59 -87 V stroke ! LT1 ! .0868 g 4420 1447 M 76 23 V stroke LT0 ! .2019 g 5688 1738 M -59 88 V stroke LT0 ! .2258 g 5553 1843 M 76 -17 V stroke ! LT1 ! .0693 g 4267 1423 M -59 -74 V stroke ! LT1 ! .0494 g 4132 1347 M 76 2 V stroke ! LT1 ! .0663 g 2847 1406 M -5 0 V stroke ! LT1 ! .1073 g 2766 1490 M 26 -29 V stroke LT0 ! .4039 g 3201 2308 M -59 49 V stroke LT0 ! .4808 g 3219 2671 M -77 -314 V stroke ! LT1 ! .0457 g 4056 1353 M -59 -58 V stroke ! LT1 ! .0323 g 3921 1303 M 76 -8 V stroke ! LT1 ! .208 g 4947 1788 M -1 -1 V stroke LT0 ! .1957 g 5611 1755 M 77 -17 V stroke LT0 ! .2824 g 3722 2064 M -76 -150 V stroke LT0 ! .3026 g 3588 2154 M 58 -240 V stroke LT0 ! .2511 g 2127 1883 M -59 39 V stroke LT0 ! .2659 g 1992 1950 M 76 -28 V stroke LT0 ! .6851 g 3946 3173 M 76 -223 V stroke LT0 ! .2824 g 5359 1973 M -58 25 V stroke LT0 ! .2791 g 5224 1966 M 77 32 V stroke LT0 ! .468 g 3969 2631 M 58 -314 V stroke LT0 ! .4039 g 3951 2321 M 76 -4 V stroke LT0 ! .2682 g 5494 1920 M -58 61 V stroke LT0 ! .2797 g 5359 1973 M 77 8 V stroke LT0 ! .3111 g 3588 2154 M -76 -198 V stroke LT0 ! .3111 g 3453 2160 M 59 -204 V stroke LT0 ! .3736 g 3394 2349 M -76 -267 V stroke LT0 ! .3394 g 3260 2213 M 58 -131 V stroke ! LT1 ! .1756 g 4784 1671 M 70 47 V stroke ! LT1 ! .0401 g 3710 1293 M 2 -1 V stroke LT0 ! .2819 g 1857 1968 M -59 21 V stroke LT0 ! .2728 g 1722 1936 M 76 53 V stroke ! LT1 ! .113 g 4478 1534 M -58 -87 V stroke ! LT1 ! .0868 g 4343 1431 M 77 16 V stroke LT0 ! .3815 g 3260 2213 M -59 95 V stroke LT0 ! .468 g 3277 2616 M -76 -308 V stroke LT0 ! .2789 g 1992 1950 M -59 32 V stroke LT0 ! .2817 g 1857 1968 M 76 14 V stroke ! LT1 ! .1805 g 4812 1708 M -28 -37 V stroke ! LT1 ! .1626 g 4707 1626 M 77 45 V stroke LT0 ! .4309 g 3336 2506 M -76 -293 V stroke LT0 ! .2677 g 1780 1923 M -58 13 V stroke ! LT1 ! .2384 g 2244 1815 M 3 -3 V stroke LT0 ! .2799 g 5283 1957 M -59 9 V stroke LT0 ! .2712 g 5148 1926 M 76 40 V stroke LT0 ! .2471 g 5553 1843 M -59 77 V stroke LT0 ! .2653 g 5418 1924 M 76 -4 V stroke LT0 ! .6053 g 4004 2972 M 59 -247 V stroke LT0 ! .5894 g 3987 2861 M 76 -136 V stroke ! LT1 ! .0781 g 4191 1423 M -59 -76 V stroke ! LT1 ! .0596 g 4056 1353 M 76 -6 V stroke LT0 ! .246 g 2167 1858 M -40 25 V stroke LT0 ! .2609 g 2050 1918 M 77 -35 V stroke LT0 ! .3394 g 3798 2190 M -76 -126 V stroke LT0 ! .3736 g 3663 2338 M 59 -274 V stroke ! LT1 ! .0542 g 3962 1348 M -41 -45 V stroke ! LT1 ! .0408 g 3904 1307 M 17 -4 V stroke LT0 ! .2195 g 5611 1755 M -58 88 V stroke LT0 ! .242 g 5476 1854 M 77 -11 V stroke ! LT1 ! .1779 g 4757 1694 M -50 -68 V stroke ! LT1 ! .152 g 4631 1588 M 76 38 V stroke LT0 ! .5618 g 3987 2861 M 58 -295 V stroke LT0 ! .5173 g 3969 2631 M 76 -65 V stroke LT0 ! .2767 g 5418 1924 M -59 49 V stroke LT0 ! .2832 g 5283 1957 M 76 16 V stroke LT0 ! .2739 g 5206 1932 M -58 -6 V stroke LT0 ! .2604 g 5072 1882 M 76 44 V stroke LT0 ! .2127 g 5535 1769 M 76 -14 V stroke ! LT1 ! .1148 g 4402 1519 M -59 -88 V stroke ! LT1 ! .0905 g 4267 1423 M 76 8 V stroke LT0 ! .4808 g 3892 2641 M 59 -320 V stroke LT0 ! .4039 g 3875 2278 M 76 43 V stroke LT0 ! .701 g 3254 3157 M -58 -150 V stroke ! LT1 ! .6923 g 3256 3162 M -60 -155 V stroke LT0 ! .7472 g 3331 3368 M 3196 3007 L stroke LT0 ! .2834 g 1915 1944 M -58 24 V stroke LT0 ! .2767 g 1780 1923 M 77 45 V stroke LT0 ! .2757 g 2050 1918 M -58 32 V stroke LT0 ! .2806 g 1915 1944 M 77 6 V stroke ! LT1 ! .0434 g 3718 1301 M -8 -8 V stroke LT0 ! .3815 g 3875 2278 M -77 -88 V stroke LT0 ! .4309 g 3740 2489 M 58 -299 V stroke ! LT1 ! .1735 g 4690 1671 M -59 -83 V stroke ! LT1 ! .1447 g 4555 1557 M 76 31 V stroke LT0 ! .4062 g 3529 2395 M -76 -235 V stroke LT0 ! .3938 g 3394 2349 M 59 -189 V stroke LT0 ! .5449 g 3219 2671 M -59 -5 V stroke LT0 ! .6064 g 3236 2971 M -76 -305 V stroke LT0 ! .2654 g 5130 1902 M -58 -20 V stroke LT0 ! .2514 g 5036 1861 M 36 21 V stroke LT0 ! .468 g 3816 2592 M 59 -314 V stroke LT0 ! .2414 g 2209 1834 M -8 4 V stroke ! LT1 ! .2673 g 2050 1918 M 59 -31 V stroke LT0 ! .2602 g 5476 1854 M -58 70 V stroke LT0 ! .2748 g 5341 1920 M 77 4 V stroke LT0 ! .2725 g 1839 1906 M -59 17 V stroke LT0 ! .3938 g 3663 2338 M -75 -184 V stroke LT0 ! .4062 g 3529 2395 M 59 -241 V stroke LT0 ! .2812 g 5341 1920 M -58 37 V stroke LT0 ! .2827 g 5206 1932 M 77 25 V stroke ! LT1 ! .0908 g 4114 1431 M -58 -78 V stroke ! LT1 ! .0731 g 3987 1366 M 69 -13 V stroke ! LT1 ! .1204 g 4326 1510 M -59 -87 V stroke ! LT1 ! .098 g 4191 1423 M 76 0 V stroke ! LT1 ! .1685 g 4613 1642 M -58 -85 V stroke ! LT1 ! .1411 g 4478 1534 M 77 23 V stroke LT0 ! .2352 g 5535 1769 M -59 85 V stroke LT0 ! .2554 g 5400 1859 M 76 -5 V stroke LT0 ! .6509 g 3236 2971 M -58 -75 V stroke LT0 ! .6851 g 3254 3157 M -76 -261 V stroke LT0 ! .2728 g 2109 1887 M -59 31 V stroke LT0 ! .279 g 1974 1919 M 76 -1 V stroke LT0 ! .2838 g 1974 1919 M -59 25 V stroke LT0 ! .2792 g 1839 1906 M 76 38 V stroke LT0 ! .2281 g 5459 1780 M 76 -11 V stroke LT0 ! .2821 g 5265 1909 M -59 23 V stroke LT0 ! .279 g 5130 1902 M 76 30 V stroke ! LT1 ! .2392 g 2251 1811 M -7 4 V stroke ! LT1 ! .2537 g 2204 1837 M 7 -4 V stroke ! LT1 ! .2488 g 2200 1838 M 8 -4 V stroke ! LT1 ! .1994 g 2496 1676 M -5 1 V stroke LT0 ! .4927 g 3471 2614 M -77 -265 V stroke LT0 ! .4651 g 3336 2506 M 58 -157 V stroke LT0 ! .701 g 3946 3173 M 58 -201 V stroke LT0 ! .701 g 3928 3128 M 76 -156 V stroke LT0 ! .27 g 5400 1859 M -59 61 V stroke LT0 ! .2806 g 5265 1909 M 76 11 V stroke ! LT1 ! .1668 g 4537 1619 M -59 -85 V stroke ! LT1 ! .1411 g 4402 1519 M 76 15 V stroke LT0 ! .2758 g 1898 1886 M -59 20 V stroke ! LT1 ! .2335 g 4870 1770 M -3 -2 V stroke LT0 ! .5449 g 3277 2616 M -58 55 V stroke LT0 ! .6218 g 3295 2980 M -76 -309 V stroke LT0 ! .6064 g 3910 2941 M 59 -310 V stroke LT0 ! .5449 g 3892 2641 M 77 -10 V stroke ! LT1 ! .1296 g 4249 1510 M -58 -87 V stroke ! LT1 ! .1093 g 4114 1431 M 77 -8 V stroke LT0 ! .4651 g 3740 2489 M -77 -151 V stroke LT0 ! .4927 g 3605 2608 M 58 -270 V stroke LT0 ! .2802 g 5189 1892 M -59 10 V stroke LT0 ! .273 g 5054 1869 M 76 33 V stroke LT0 ! .2705 g 2167 1858 M -58 29 V stroke LT0 ! .2775 g 2032 1893 M 77 -6 V stroke LT0 ! .2483 g 5459 1780 M -59 79 V stroke LT0 ! .266 g 5324 1859 M 76 0 V stroke LT0 ! .2837 g 2032 1893 M -58 26 V stroke LT0 ! .2805 g 1898 1886 M 76 33 V stroke ! LT1 ! .2008 g 4690 1671 M 26 12 V stroke LT0 ! .5618 g 3412 2795 M -76 -289 V stroke LT0 ! .5173 g 3277 2616 M 59 -110 V stroke LT0 ! .6064 g 3354 2920 M -77 -304 V stroke LT0 ! .2413 g 5382 1785 M 77 -5 V stroke ! LT1 ! .8746 g 3397 3481 M -5 -15 V stroke ! LT1 ! .2392 g 2361 1764 M -7 3 V stroke ! LT1 ! .2558 g 2254 1815 M 9 -5 V stroke LT0 ! .6851 g 3928 3128 M 59 -267 V stroke LT0 ! .6509 g 3910 2941 M 77 -80 V stroke LT0 ! .505 g 3605 2608 M -76 -213 V stroke LT0 ! .505 g 3471 2614 M 58 -219 V stroke LT0 ! .2766 g 5324 1859 M -59 50 V stroke LT0 ! .2833 g 5189 1892 M 76 17 V stroke ! LT1 ! .1685 g 4461 1603 M -59 -84 V stroke ! LT1 ! .1447 g 4326 1510 M 76 9 V stroke LT0 ! .2763 g 5112 1871 M -58 -2 V stroke LT0 ! .2658 g 4977 1833 M 77 36 V stroke LT0 ! .278 g 1956 1864 M -58 22 V stroke ! LT1 ! .2018 g 4696 1678 M -6 -7 V stroke ! LT1 ! .1973 g 4613 1642 M 77 29 V stroke ! LT1 ! .7706 g 3887 3311 M 59 -138 V stroke LT0 ! .7895 g 3869 3344 M 77 -171 V stroke LT0 ! .8191 g 3811 3492 M 135 -319 V stroke LT0 ! .6218 g 3834 2956 M 58 -315 V stroke LT0 ! .5449 g 3816 2592 M 76 49 V stroke LT0 ! .5173 g 3816 2592 M -76 -103 V stroke LT0 ! .5618 g 3681 2783 M 59 -294 V stroke LT0 ! .2693 g 2226 1832 M -59 26 V stroke LT0 ! .2764 g 2091 1867 M 76 -9 V stroke ! LT1 ! .1242 g 4133 1458 M -19 -27 V stroke ! LT1 ! .1181 g 4094 1435 M 20 -4 V stroke LT0 ! .2589 g 5382 1785 M -58 74 V stroke LT0 ! .2737 g 5247 1852 M 77 7 V stroke LT0 ! .2712 g 5036 1846 M -59 -13 V stroke LT0 ! .2591 g 4919 1806 M 58 27 V stroke LT0 ! .2834 g 2091 1867 M -59 26 V stroke LT0 ! .2812 g 1956 1864 M 76 29 V stroke LT0 ! .2804 g 5247 1852 M -58 40 V stroke LT0 ! .2834 g 5112 1871 M 77 21 V stroke LT0 ! .6064 g 3758 2902 M 58 -310 V stroke ! LT1 ! .8463 g 3811 3492 M 76 -181 V stroke ! LT1 ! .1484 g 3069 1485 M -12 -7 V stroke LT0 ! .6834 g 3295 2980 M -59 -9 V stroke LT0 ! .7364 g 3313 3245 M -77 -274 V stroke ! LT1 ! .2006 g 4628 1659 M -15 -17 V stroke ! LT1 ! .1942 g 4537 1619 M 76 23 V stroke ! LT1 ! .1948 g 4381 1588 M -4 -5 V stroke ! LT1 ! .1669 g 4369 1572 M -43 -62 V stroke ! LT1 ! .152 g 4249 1510 M 77 0 V stroke LT0 ! .7706 g 3313 3245 M -59 -88 V stroke LT0 ! .7895 g 3331 3368 M -77 -211 V stroke ! LT1 ! .2401 g 2357 1766 M 4 -2 V stroke LT0 ! .2523 g 5306 1786 M 76 -1 V stroke ! LT1 ! .2639 g 4964 1821 M -27 -10 V stroke ! LT1 ! .1536 g 2887 1518 M -4 -2 V stroke ! LT1 ! .1933 g 2818 1585 M 2 -3 V stroke ! LT1 ! .1623 g 2867 1533 M 2 -2 V stroke LT0 ! .2793 g 2015 1840 M -59 24 V stroke ! LT1 ! .1412 g 3736 1442 M -5 -6 V stroke LT0 ! .2819 g 5171 1841 M -59 30 V stroke LT0 ! .2817 g 5036 1846 M 76 25 V stroke LT0 ! .6053 g 3547 2855 M -76 -241 V stroke LT0 ! .5894 g 3412 2795 M 59 -181 V stroke LT0 ! .2693 g 2285 1807 M -59 25 V stroke LT0 ! .276 g 2150 1841 M 76 -9 V stroke LT0 ! .267 g 5306 1786 M -59 66 V stroke LT0 ! .2788 g 5171 1841 M 76 11 V stroke ! LT1 ! .1989 g 4552 1636 M -15 -17 V stroke ! LT1 ! .1942 g 4461 1603 M 76 16 V stroke LT0 ! .2831 g 2150 1841 M -59 26 V stroke LT0 ! .2815 g 2015 1840 M 76 27 V stroke LT0 ! .5894 g 3681 2783 M -76 -175 V stroke LT0 ! .6053 g 3547 2855 M 58 -247 V stroke ! LT1 ! .1613 g 4261 1525 M -12 -15 V stroke ! LT1 ! .1579 g 4231 1511 M 18 -1 V stroke LT0 ! .7364 g 3852 3221 M 58 -280 V stroke LT0 ! .6834 g 3834 2956 M 76 -15 V stroke LT0 ! .261 g 5230 1783 M 76 3 V stroke ! LT1 ! .2473 g 2478 1731 M -10 2 V stroke LT0 ! .7895 g 3869 3344 M 59 -216 V stroke LT0 ! .7706 g 3852 3221 M 76 -93 V stroke LT0 ! .2817 g 5095 1826 M -59 20 V stroke LT0 ! .2789 g 4960 1820 M 76 26 V stroke ! LT1 ! .1277 g 3828 1423 M -1 -1 V stroke ! LT1 ! .1283 g 3821 1425 M 6 -3 V stroke LT0 ! .6834 g 3354 2920 M -59 60 V stroke LT0 ! .7541 g 3371 3258 M -76 -278 V stroke LT0 ! .2799 g 2073 1816 M -58 24 V stroke LT0 ! .2728 g 5230 1783 M -59 58 V stroke LT0 ! .2819 g 5095 1826 M 76 15 V stroke ! LT1 ! .1968 g 4465 1608 M -4 -5 V stroke ! LT1 ! .1954 g 4447 1601 M 14 2 V stroke LT0 ! .6851 g 3489 3056 M -77 -261 V stroke LT0 ! .6509 g 3354 2920 M 58 -125 V stroke LT0 ! .2705 g 2343 1786 M -58 21 V stroke LT0 ! .2764 g 2208 1816 M 77 -9 V stroke ! LT1 ! .1556 g 3073 1492 M 4 -3 V stroke LT0 ! .2831 g 2208 1816 M -58 25 V stroke LT0 ! .2815 g 2073 1816 M 77 25 V stroke LT0 ! .8652 g 3389 3465 M -58 -97 V stroke LT0 ! .8652 g 3407 3510 M -76 -142 V stroke LT0 ! .7364 g 3430 3194 M -76 -274 V stroke LT0 ! .2806 g 5018 1809 M -58 11 V stroke LT0 ! .2757 g 4883 1794 M 77 26 V stroke LT0 ! .2677 g 5153 1775 M 77 8 V stroke LT0 ! .6509 g 3758 2902 M -77 -119 V stroke LT0 ! .6851 g 3623 3050 M 58 -267 V stroke ! LT1 ! .2381 g 4596 1687 M 2 0 V stroke ! LT1 ! .2485 g 2474 1733 M 4 -2 V stroke LT0 ! .7541 g 3775 3241 M 59 -285 V stroke LT0 ! .6834 g 3758 2902 M 76 54 V stroke LT0 ! .2767 g 5153 1775 M -58 51 V stroke LT0 ! .2834 g 5018 1809 M 77 17 V stroke LT0 ! .2799 g 2132 1790 M -59 26 V stroke ! LT1 ! .2185 g 2865 1610 M -7 -2 V stroke LT0 ! .8072 g 3371 3258 M -58 -13 V stroke LT0 ! .8463 g 3389 3465 M -76 -220 V stroke LT0 ! .9258 g 3466 3614 M -59 -104 V stroke LT0 ! .7364 g 3699 3182 M 59 -280 V stroke LT0 ! .279 g 4942 1789 M -59 5 V stroke LT0 ! .2728 g 4807 1769 M 76 25 V stroke LT0 ! .2728 g 2402 1766 M -59 20 V stroke LT0 ! .2775 g 2267 1791 M 76 -5 V stroke LT0 ! .8652 g 3811 3492 M 58 -148 V stroke LT0 ! .8652 g 3793 3448 M 76 -104 V stroke LT0 ! .701 g 3623 3050 M -76 -195 V stroke LT0 ! .701 g 3489 3056 M 58 -201 V stroke LT0 ! .2834 g 2267 1791 M -59 25 V stroke LT0 ! .2815 g 2132 1790 M 76 26 V stroke ! LT1 ! .2384 g 4597 1687 M -1 0 V stroke ! LT1 ! .2461 g 2629 1688 M 5 -4 V stroke LT0 ! .2725 g 5077 1764 M 76 11 V stroke LT0 ! .2792 g 5077 1764 M -59 45 V stroke LT0 ! .2838 g 4942 1789 M 76 20 V stroke LT0 ! .9258 g 3734 3602 M 77 -110 V stroke LT0 ! .2775 g 4865 1769 M -58 0 V stroke LT0 ! .2705 g 4731 1746 M 76 23 V stroke LT0 ! .2793 g 2190 1762 M -58 28 V stroke LT0 ! .8463 g 3793 3448 M 59 -227 V stroke LT0 ! .8072 g 3775 3241 M 77 -20 V stroke ! LT1 ! .262 g 2509 1729 M 5 -1 V stroke ! LT1 ! .2177 g 3944 1563 M -5 -6 V stroke LT0 ! .2757 g 2460 1747 M -58 19 V stroke LT0 ! .279 g 2325 1767 M 77 -1 V stroke LT0 ! .2837 g 2325 1767 M -58 24 V stroke LT0 ! .2812 g 2190 1762 M 77 29 V stroke LT0 ! .2758 g 5000 1750 M 77 14 V stroke LT0 ! .2805 g 5000 1750 M -58 39 V stroke LT0 ! .2837 g 4865 1769 M 77 20 V stroke ! LT1 ! .22 g 2863 1611 M 2 -1 V stroke LT0 ! .8072 g 3430 3194 M -59 64 V stroke LT0 ! .8658 g 3448 3482 M -77 -224 V stroke LT0 ! .7895 g 3565 3267 M -76 -211 V stroke LT0 ! .7706 g 3430 3194 M 59 -138 V stroke LT0 ! .2764 g 4789 1749 M -58 -3 V stroke LT0 ! .2693 g 4654 1725 M 77 21 V stroke LT0 ! .7706 g 3699 3182 M -76 -132 V stroke LT0 ! .7895 g 3565 3267 M 58 -217 V stroke ! LT1 ! .1903 g 3685 1511 M -3 -3 V stroke ! LT1 ! .1851 g 3667 1504 M 7 -4 V stroke LT0 ! .9049 g 3448 3482 M -59 -17 V stroke LT0 ! .9258 g 3466 3614 M -77 -149 V stroke LT0 ! .278 g 2249 1734 M -59 28 V stroke ! LT1 ! .2291 g 4252 1609 M -3 -3 V stroke LT0 ! .8463 g 3506 3415 M -76 -221 V stroke ! LT1 ! .219 g 3944 1563 M 5 -2 V stroke LT0 ! .272 g 2460 1747 M 94 -26 V stroke LT0 ! .2812 g 4924 1734 M -59 35 V stroke LT0 ! .2834 g 4789 1749 M 76 20 V stroke LT0 ! .278 g 4924 1734 M 76 16 V stroke LT0 ! .8658 g 3717 3470 M 58 -229 V stroke LT0 ! .8072 g 3699 3182 M 76 59 V stroke LT0 ! .2838 g 2384 1741 M -59 26 V stroke LT0 ! .2805 g 2249 1734 M 76 33 V stroke LT0 ! .276 g 4713 1729 M -59 -4 V stroke LT0 ! .2693 g 4578 1707 M 76 18 V stroke LT0 ! .2789 g 2519 1729 M -59 18 V stroke LT0 ! .2806 g 2384 1741 M 76 6 V stroke LT0 ! .8463 g 3640 3409 M 59 -227 V stroke ! LT1 ! .2377 g 3868 1582 M -2 -2 V stroke ! LT1 ! .2159 g 3751 1550 M 12 -5 V stroke LT0 ! .9258 g 3734 3602 M 59 -154 V stroke LT0 ! .9049 g 3717 3470 M 76 -22 V stroke LT0 ! .9891 g 3600 3697 M -58 -20 V stroke LT0 ! .9676 g 3466 3614 M 76 63 V stroke ! LT1 ! .2379 g 3252 1588 M -6 -3 V stroke ! LT1 ! .2242 g 3055 1589 M 4 -2 V stroke LT0 ! .9676 g 3524 3633 M -58 -19 V stroke LT0 ! .9676 g 3734 3602 M -58 70 V stroke LT0 ! .9891 g 3600 3697 M 76 -25 V stroke LT0 ! .2758 g 2308 1703 M -59 31 V stroke LT0 ! .2815 g 4848 1716 M -59 33 V stroke LT0 ! .2831 g 4713 1729 M 76 20 V stroke ! LT1 ! .2393 g 2932 1624 M -8 -1 V stroke ! LT1 ! .2387 g 2921 1625 M 3 -2 V stroke ! LT1 ! .2541 g 4290 1643 M 8 0 V stroke LT0 ! .2793 g 4848 1716 M 76 18 V stroke LT0 ! .2764 g 4636 1710 M -58 -3 V stroke LT0 ! .2705 g 4501 1691 M 77 16 V stroke LT0 ! .8652 g 3640 3409 M -75 -142 V stroke LT0 ! .8652 g 3506 3415 M 59 -148 V stroke LT0 ! .9676 g 3658 3627 M 76 -25 V stroke LT0 ! .2834 g 2443 1714 M -59 27 V stroke LT0 ! .2792 g 2308 1703 M 76 38 V stroke ! LT1 ! .2273 g 3959 1575 M -4 -4 V stroke ! LT1 ! .237 g 3868 1582 M 9 -3 V stroke LT0 ! .273 g 2713 1689 M -59 11 V stroke LT0 ! .2763 g 2578 1708 M 76 -8 V stroke LT0 ! .275 g 2519 1729 M 135 -29 V stroke LT0 ! .2817 g 2578 1708 M -59 21 V stroke LT0 ! .2817 g 2443 1714 M 76 15 V stroke ! LT1 ! .2296 g 3630 1564 M -5 -3 V stroke LT0 ! .9049 g 3506 3415 M -58 67 V stroke LT0 ! .9467 g 3524 3633 M -76 -151 V stroke LT0 ! .2815 g 4771 1697 M -58 32 V stroke LT0 ! .2831 g 4636 1710 M 77 19 V stroke LT0 ! .2725 g 2366 1669 M -58 34 V stroke LT0 ! .2799 g 4771 1697 M 77 19 V stroke LT0 ! .9258 g 3583 3563 M -77 -148 V stroke LT0 ! .2775 g 4560 1691 M -59 0 V stroke LT0 ! .2728 g 4425 1678 M 76 13 V stroke LT0 ! .9467 g 3658 3627 M 59 -157 V stroke LT0 ! .9049 g 3640 3409 M 77 61 V stroke LT0 ! .9258 g 3583 3563 M 57 -154 V stroke LT0 ! .9891 g 3658 3627 M -58 70 V stroke LT0 ! .9891 g 3524 3633 M 76 64 V stroke LT0 ! .2819 g 2501 1684 M -58 30 V stroke LT0 ! .2767 g 2366 1669 M 77 45 V stroke LT0 ! .9676 g 3583 3563 M -59 70 V stroke LT0 ! .2815 g 4695 1677 M -59 33 V stroke LT0 ! .2834 g 4560 1691 M 76 19 V stroke LT0 ! .2834 g 2636 1685 M -58 23 V stroke LT0 ! .2819 g 2501 1684 M 77 24 V stroke LT0 ! .2726 g 2713 1689 M 103 -21 V stroke LT0 ! .279 g 2771 1674 M -58 15 V stroke LT0 ! .2802 g 2636 1685 M 77 4 V stroke ! LT1 ! .2591 g 3912 1607 M -2 -1 V stroke LT0 ! .2799 g 4695 1677 M 76 20 V stroke LT0 ! .9676 g 3583 3563 M 75 64 V stroke ! LT1 ! .2378 g 3391 1579 M -4 -1 V stroke LT0 ! .2677 g 2425 1632 M -59 37 V stroke LT0 ! .279 g 4484 1672 M -59 6 V stroke LT0 ! .2757 g 4349 1665 M 76 13 V stroke ! LT1 ! .2665 g 4137 1635 M 63 3 V stroke LT0 ! .2788 g 2560 1651 M -59 33 V stroke LT0 ! .2728 g 2425 1632 M 76 52 V stroke LT0 ! .2812 g 4619 1656 M -59 35 V stroke LT0 ! .2837 g 4484 1672 M 76 19 V stroke LT0 ! .2793 g 4619 1656 M 76 21 V stroke LT0 ! .2833 g 2695 1657 M -59 28 V stroke LT0 ! .2804 g 2560 1651 M 76 34 V stroke LT0 ! .261 g 2483 1591 M -58 41 V stroke LT0 ! .2806 g 4407 1653 M -58 12 V stroke LT0 ! .2789 g 4272 1652 M 77 13 V stroke LT0 ! .2827 g 2830 1654 M -59 20 V stroke LT0 ! .2788 g 2906 1657 M -135 17 V stroke LT0 ! .2821 g 2695 1657 M 76 17 V stroke LT0 ! .2791 g 2965 1644 M -59 13 V stroke LT0 ! .2728 g 3041 1638 M -135 19 V stroke LT0 ! .2799 g 2830 1654 M 76 3 V stroke ! LT1 ! .2746 g 3100 1633 M -59 5 V stroke ! LT1 ! .2759 g 2965 1644 M 76 -6 V stroke LT0 ! .2763 g 4196 1637 M -59 -2 V stroke LT0 ! .275 g 4272 1652 M -135 -17 V stroke LT0 ! .273 g 4061 1630 M 76 5 V stroke LT0 ! .2805 g 4542 1633 M -58 39 V stroke LT0 ! .2838 g 4407 1653 M 77 19 V stroke ! LT1 ! .2618 g 3316 1609 M -5 -1 V stroke ! LT1 ! .2629 g 3300 1610 M 6 -1 V stroke LT0 ! .2737 g 2618 1612 M -58 39 V stroke LT0 ! .267 g 2483 1591 M 77 60 V stroke LT0 ! .278 g 4542 1633 M 77 23 V stroke ! LT1 ! .2618 g 3450 1603 M -4 -1 V stroke LT0 ! .2523 g 2542 1545 M -59 46 V stroke LT0 ! .2734 g 4061 1630 M -82 -9 V stroke LT0 ! .2817 g 4331 1632 M -59 20 V stroke LT0 ! .2817 g 4196 1637 M 76 15 V stroke LT0 ! .2806 g 2753 1623 M -58 34 V stroke LT0 ! .2766 g 2618 1612 M 77 45 V stroke LT0 ! .2832 g 2888 1625 M -58 29 V stroke LT0 ! .2812 g 2753 1623 M 77 31 V stroke LT0 ! .2792 g 4466 1608 M -59 45 V stroke LT0 ! .2834 g 4331 1632 M 76 21 V stroke LT0 ! .2758 g 4466 1608 M 76 25 V stroke LT0 ! .2802 g 4120 1620 M -59 10 V stroke LT0 ! .279 g 3985 1621 M 76 9 V stroke LT0 ! .266 g 2677 1568 M -59 44 V stroke LT0 ! .2589 g 2542 1545 M 76 67 V stroke LT0 ! .283 g 3023 1622 M -58 22 V stroke LT0 ! .2809 g 3100 1633 M -135 11 V stroke LT0 ! .2824 g 2888 1625 M 77 19 V stroke LT0 ! .2732 g 3850 1615 M -119 -6 V stroke LT0 ! .2413 g 2601 1494 M -59 51 V stroke LT0 ! .2817 g 3158 1616 M -58 17 V stroke LT0 ! .2784 g 3235 1622 M -135 11 V stroke LT0 ! .2817 g 3023 1622 M 77 11 V stroke LT0 ! .2804 g 3293 1610 M -58 12 V stroke LT0 ! .2769 g 3370 1615 M -135 7 V stroke LT0 ! .2806 g 3158 1616 M 77 6 V stroke LT0 ! .2819 g 4255 1608 M -59 29 V stroke LT0 ! .2834 g 4120 1620 M 76 17 V stroke LT0 ! .2748 g 2812 1582 M -59 41 V stroke LT0 ! .27 g 2677 1568 M 76 55 V stroke LT0 ! .2799 g 3908 1606 M -58 9 V stroke LT0 ! .2788 g 3985 1621 M -135 -6 V stroke LT0 ! .2791 g 3773 1609 M 77 6 V stroke LT0 ! .28 g 3428 1604 M -58 11 V stroke LT0 ! .2769 g 3504 1610 M -134 5 V stroke LT0 ! .28 g 3293 1610 M 77 5 V stroke LT0 ! .2767 g 4390 1580 M -59 52 V stroke LT0 ! .2819 g 4255 1608 M 76 24 V stroke LT0 ! .2725 g 4390 1580 M 76 28 V stroke LT0 ! .2554 g 2736 1518 M -59 50 V stroke LT0 ! .2483 g 2601 1494 M 76 74 V stroke LT0 ! .2797 g 2947 1588 M -59 37 V stroke LT0 ! .2767 g 2812 1582 M 76 43 V stroke LT0 ! .2281 g 2659 1439 M -58 55 V stroke LT0 ! .2806 g 3563 1599 M -59 11 V stroke LT0 ! .2784 g 3638 1609 M -134 1 V stroke LT0 ! .2804 g 3428 1604 M 76 6 V stroke LT0 ! .2821 g 4043 1598 M -58 23 V stroke LT0 ! .2827 g 3908 1606 M 77 15 V stroke LT0 ! .2819 g 3082 1589 M -59 33 V stroke LT0 ! .2803 g 2947 1588 M 76 34 V stroke LT0 ! .2817 g 3697 1593 M -59 16 V stroke LT0 ! .2809 g 3773 1609 M -135 0 V stroke LT0 ! .2817 g 3563 1599 M 75 10 V stroke LT0 ! .2804 g 4178 1580 M -58 40 V stroke LT0 ! .2833 g 4043 1598 M 77 22 V stroke LT0 ! .2653 g 2871 1533 M -59 49 V stroke LT0 ! .2602 g 2736 1518 M 76 64 V stroke LT0 ! .2677 g 4313 1549 M 77 31 V stroke LT0 ! .2827 g 3217 1586 M -59 30 V stroke LT0 ! .2819 g 3082 1589 M 76 27 V stroke LT0 ! .2728 g 4313 1549 M -58 59 V stroke LT0 ! .2788 g 4178 1580 M 77 28 V stroke LT0 ! .2824 g 3832 1584 M -59 25 V stroke LT0 ! .283 g 3697 1593 M 76 16 V stroke LT0 ! .2127 g 2718 1380 M -59 59 V stroke LT0 ! .2352 g 2736 1518 M -77 -79 V stroke LT0 ! .242 g 2794 1462 M -58 56 V stroke LT0 ! .2827 g 3352 1581 M -59 29 V stroke LT0 ! .2825 g 3217 1586 M 76 24 V stroke LT0 ! .2716 g 3005 1541 M -58 47 V stroke LT0 ! .2682 g 2871 1533 M 76 55 V stroke LT0 ! .2812 g 3967 1570 M -59 36 V stroke LT0 ! .2832 g 3832 1584 M 76 22 V stroke LT0 ! .2825 g 3487 1574 M -59 30 V stroke LT0 ! .2827 g 3352 1581 M 76 23 V stroke LT0 ! .261 g 4237 1514 M 76 35 V stroke LT0 ! .2766 g 4102 1547 M -59 51 V stroke LT0 ! .2806 g 3967 1570 M 76 28 V stroke LT0 ! .2521 g 2929 1477 M -58 56 V stroke LT0 ! .2471 g 2794 1462 M 77 71 V stroke LT0 ! .2753 g 3140 1544 M -58 45 V stroke LT0 ! .2732 g 3005 1541 M 77 48 V stroke LT0 ! .267 g 4237 1514 M -59 66 V stroke LT0 ! .2737 g 4102 1547 M 76 33 V stroke LT0 ! .1957 g 2776 1318 M -58 62 V stroke LT0 ! .2195 g 2794 1462 M -76 -82 V stroke LT0 ! .2819 g 3621 1565 M -58 34 V stroke LT0 ! .2827 g 3487 1574 M 76 25 V stroke LT0 ! .2258 g 2853 1400 M -59 62 V stroke LT0 ! .2803 g 3756 1553 M -59 40 V stroke LT0 ! .2819 g 3621 1565 M 76 28 V stroke LT0 ! .2769 g 3275 1542 M -58 44 V stroke LT0 ! .276 g 3140 1544 M 77 42 V stroke LT0 ! .2589 g 3064 1485 M -59 56 V stroke LT0 ! .2555 g 2929 1477 M 76 64 V stroke LT0 ! .2767 g 3891 1535 M -59 49 V stroke LT0 ! .2797 g 3756 1553 M 76 31 V stroke LT0 ! .2523 g 4160 1474 M 77 40 V stroke LT0 ! .2771 g 3410 1536 M -58 45 V stroke LT0 ! .2771 g 3275 1542 M 77 39 V stroke LT0 ! .1776 g 2835 1254 M -59 64 V stroke LT0 ! .2019 g 2853 1400 M -77 -82 V stroke LT0 ! .2354 g 2988 1413 M -59 64 V stroke LT0 ! .2308 g 2853 1400 M 76 77 V stroke LT0 ! .2073 g 2911 1334 M -58 66 V stroke LT0 ! .27 g 4026 1509 M -59 61 V stroke LT0 ! .2748 g 3891 1535 M 76 35 V stroke LT0 ! .2589 g 4160 1474 M -58 73 V stroke LT0 ! .266 g 4026 1509 M 76 38 V stroke LT0 ! .276 g 3545 1526 M -58 48 V stroke LT0 ! .2769 g 3410 1536 M 77 38 V stroke LT0 ! .2629 g 3199 1487 M -59 57 V stroke LT0 ! .261 g 3064 1485 M 76 59 V stroke LT0 ! .2732 g 3679 1512 M -58 53 V stroke LT0 ! .2753 g 3545 1526 M 76 39 V stroke LT0 ! .2413 g 4084 1429 M 76 45 V stroke LT0 ! .2419 g 3123 1420 M -59 65 V stroke LT0 ! .2388 g 2988 1413 M 76 72 V stroke LT0 ! .2645 g 3334 1484 M -59 58 V stroke LT0 ! .2638 g 3199 1487 M 76 55 V stroke LT0 ! .1594 g 2894 1191 M -59 63 V stroke LT0 ! .183 g 2911 1334 M -76 -80 V stroke LT0 ! .1873 g 2970 1266 M -59 68 V stroke LT0 ! .2119 g 2988 1413 M -77 -79 V stroke LT0 ! .2158 g 3046 1344 M -58 69 V stroke LT0 ! .2682 g 3814 1492 M -58 61 V stroke LT0 ! .2716 g 3679 1512 M 77 41 V stroke LT0 ! .2483 g 4084 1429 M -58 80 V stroke LT0 ! .2554 g 3949 1465 M 77 44 V stroke LT0 ! .2602 g 3949 1465 M -58 70 V stroke LT0 ! .2653 g 3814 1492 M 77 43 V stroke LT0 ! .2638 g 3469 1475 M -59 61 V stroke LT0 ! .2645 g 3334 1484 M 76 52 V stroke LT0 ! .2453 g 3258 1420 M -59 67 V stroke LT0 ! .2438 g 3123 1420 M 76 67 V stroke LT0 ! .2281 g 4008 1380 M 76 49 V stroke LT0 ! .261 g 3603 1461 M -58 65 V stroke LT0 ! .2629 g 3469 1475 M 76 51 V stroke LT0 ! .2212 g 3181 1348 M -58 72 V stroke LT0 ! .2188 g 3046 1344 M 77 76 V stroke LT0 ! .1669 g 3029 1199 M -59 67 V stroke LT0 ! .1912 g 3046 1344 M -76 -78 V stroke LT0 ! .1637 g 2894 1191 M 76 75 V stroke LT0 ! .1942 g 3105 1273 M -59 71 V stroke LT0 ! .142 g 2952 1132 M -58 59 V stroke LT0 ! .2555 g 3738 1441 M -59 71 V stroke LT0 ! .2589 g 3603 1461 M 76 51 V stroke LT0 ! .2352 g 4008 1380 M -59 85 V stroke LT0 ! .242 g 3873 1414 M 76 51 V stroke LT0 ! .2459 g 3393 1414 M -59 70 V stroke LT0 ! .2459 g 3258 1420 M 76 64 V stroke LT0 ! .2471 g 3873 1414 M -59 78 V stroke LT0 ! .2521 g 3738 1441 M 76 51 V stroke LT0 ! .2234 g 3316 1346 M -58 74 V stroke LT0 ! .2226 g 3181 1348 M 77 72 V stroke LT0 ! .2127 g 3931 1327 M 77 53 V stroke LT0 ! .2438 g 3528 1402 M -59 73 V stroke LT0 ! .2453 g 3393 1414 M 76 61 V stroke LT0 ! .198 g 3240 1273 M -59 75 V stroke LT0 ! .1965 g 3105 1273 M 76 75 V stroke LT0 ! .1719 g 3164 1201 M -59 72 V stroke LT0 ! .1699 g 3029 1199 M 76 74 V stroke LT0 ! .2388 g 3661 1384 M -58 77 V stroke LT0 ! .2419 g 3528 1402 M 75 59 V stroke LT0 ! .2195 g 3931 1327 M -58 87 V stroke LT0 ! .2258 g 3796 1359 M 77 55 V stroke LT0 ! .1474 g 3087 1134 M -58 65 V stroke LT0 ! .1453 g 2952 1132 M 77 67 V stroke LT0 ! .2308 g 3796 1359 M -58 82 V stroke LT0 ! .2354 g 3661 1384 M 77 57 V stroke LT0 ! .2226 g 3451 1336 M -58 78 V stroke LT0 ! .2234 g 3316 1346 M 77 68 V stroke LT0 ! .1268 g 3011 1077 M -59 55 V stroke LT0 ! .1957 g 3855 1271 M 76 56 V stroke LT0 ! .1988 g 3375 1267 M -59 79 V stroke LT0 ! .1988 g 3240 1273 M 76 73 V stroke LT0 ! .2188 g 3586 1321 M -58 81 V stroke LT0 ! .2212 g 3451 1336 M 77 66 V stroke LT0 ! .1741 g 3298 1198 M -58 75 V stroke LT0 ! .1734 g 3164 1201 M 76 72 V stroke LT0 ! .2019 g 3855 1271 M -59 88 V stroke LT0 ! .2073 g 3720 1299 M 76 60 V stroke LT0 ! .2119 g 3720 1299 M -59 85 V stroke LT0 ! .2158 g 3586 1321 M 75 63 V stroke LT0 ! .1505 g 3222 1133 M -58 68 V stroke LT0 ! .1494 g 3087 1134 M 77 67 V stroke LT0 ! .1965 g 3510 1255 M -59 81 V stroke LT0 ! .198 g 3375 1267 M 76 69 V stroke LT0 ! .1776 g 3779 1213 M 76 58 V stroke LT0 ! .1912 g 3644 1237 M -58 84 V stroke LT0 ! .1942 g 3510 1255 M 76 66 V stroke LT0 ! .1301 g 3146 1076 M -59 58 V stroke LT0 ! .1289 g 3011 1077 M 76 57 V stroke LT0 ! .1734 g 3433 1189 M -58 78 V stroke LT0 ! .1741 g 3298 1198 M 77 69 V stroke LT0 ! .183 g 3779 1213 M -59 86 V stroke LT0 ! .1873 g 3644 1237 M 76 62 V stroke LT0 ! .1512 g 3357 1127 M -59 71 V stroke LT0 ! .1512 g 3222 1133 M 76 65 V stroke LT0 ! .1699 g 3568 1175 M -58 80 V stroke LT0 ! .1719 g 3433 1189 M 77 66 V stroke LT0 ! .1594 g 3702 1156 M 77 57 V stroke LT0 ! .1637 g 3702 1156 M -58 81 V stroke LT0 ! .1669 g 3568 1175 M 76 62 V stroke LT0 ! .1147 g 3069 1031 M -58 46 V stroke LT0 ! .1316 g 3281 1072 M -59 61 V stroke LT0 ! .1312 g 3146 1076 M 76 57 V stroke LT0 ! .1494 g 3492 1117 M -59 72 V stroke LT0 ! .1505 g 3357 1127 M 76 62 V stroke LT0 ! .1453 g 3626 1102 M -58 73 V stroke LT0 ! .1474 g 3492 1117 M 76 58 V stroke LT0 ! .142 g 3626 1102 M 76 54 V stroke LT0 ! .1312 g 3416 1064 M -59 63 V stroke LT0 ! .1316 g 3281 1072 M 76 55 V stroke LT0 ! .1164 g 3204 1027 M -58 49 V stroke LT0 ! .1159 g 3069 1031 M 77 45 V stroke LT0 ! .1289 g 3551 1054 M -59 63 V stroke LT0 ! .1301 g 3416 1064 M 76 53 V stroke LT0 ! .1268 g 3551 1054 M 75 48 V stroke LT0 ! .1168 g 3339 1021 M -58 51 V stroke LT0 ! .1168 g 3204 1027 M 77 45 V stroke LT0 ! .1069 g 3128 994 M -59 37 V stroke LT0 ! .1159 g 3474 1013 M -58 51 V stroke LT0 ! .1164 g 3339 1021 M 77 43 V stroke LT0 ! .1147 g 3474 1013 M 77 41 V stroke LT0 ! .1075 g 3263 989 M -59 38 V stroke LT0 ! .1074 g 3128 994 M 76 33 V stroke LT0 ! .1074 g 3398 982 M -59 39 V stroke LT0 ! .1075 g 3263 989 M 76 32 V stroke LT0 ! .1069 g 3398 982 M 76 31 V stroke LT0 ! .1041 g 3187 968 M -59 26 V stroke LT0 ! .1042 g 3322 963 M -59 26 V stroke LT0 ! .1042 g 3187 968 M 76 21 V stroke LT0 ! .1041 g 3322 963 M 76 19 V stroke LT0 ! .1067 g 3245 954 M -58 14 V stroke LT0 ! .1067 g 3245 954 M 77 9 V stroke LT0 Files octave-3.0.1/doc/interpreter/mesh.pdf and octave-3.0.2/doc/interpreter/mesh.pdf differ Files octave-3.0.1/doc/interpreter/octave-a4.pdf and octave-3.0.2/doc/interpreter/octave-a4.pdf differ Files octave-3.0.1/doc/interpreter/octave.pdf and octave-3.0.2/doc/interpreter/octave.pdf differ diff -cNr octave-3.0.1/doc/interpreter/plot3.eps octave-3.0.2/doc/interpreter/plot3.eps *** octave-3.0.1/doc/interpreter/plot3.eps 2008-04-21 18:57:18.000000000 +0200 --- octave-3.0.2/doc/interpreter/plot3.eps 2008-08-14 13:43:27.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: plot3.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:18 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: plot3.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:27 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (plot3.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:18 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (plot3.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:27 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill Files octave-3.0.1/doc/interpreter/plot3.pdf and octave-3.0.2/doc/interpreter/plot3.pdf differ diff -cNr octave-3.0.1/doc/interpreter/plot.eps octave-3.0.2/doc/interpreter/plot.eps *** octave-3.0.1/doc/interpreter/plot.eps 2008-04-21 18:57:12.000000000 +0200 --- octave-3.0.2/doc/interpreter/plot.eps 2008-08-14 13:43:17.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: plot.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:12 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: plot.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:17 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (plot.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:12 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (plot.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:17 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 670,677 **** 32 1 V 32 24 V 32 47 V ! 32 68 V ! 31 91 V 32 110 V 32 131 V 32 148 V --- 670,677 ---- 32 1 V 32 24 V 32 47 V ! 31 68 V ! 32 91 V 32 110 V 32 131 V 32 148 V *************** *** 720,727 **** 32 -220 V 32 -212 V 32 -203 V ! 32 -190 V ! 31 -177 V 32 -161 V 32 -144 V 32 -126 V --- 720,727 ---- 32 -220 V 32 -212 V 32 -203 V ! 31 -190 V ! 32 -177 V 32 -161 V 32 -144 V 32 -126 V *************** *** 770,777 **** 32 -126 V 32 -144 V 32 -161 V ! 32 -177 V ! 31 -190 V 32 -203 V 32 -212 V 32 -220 V --- 770,777 ---- 32 -126 V 32 -144 V 32 -161 V ! 31 -177 V ! 32 -190 V 32 -203 V 32 -212 V 32 -220 V *************** *** 820,827 **** 32 148 V 32 131 V 32 110 V ! 32 91 V ! 31 68 V 32 47 V 32 24 V 32 1 V --- 820,827 ---- 32 148 V 32 131 V 32 110 V ! 31 91 V ! 32 68 V 32 47 V 32 24 V 32 1 V *************** *** 857,862 **** --- 857,863 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/plot.pdf and octave-3.0.2/doc/interpreter/plot.pdf differ diff -cNr octave-3.0.1/doc/interpreter/polar.eps octave-3.0.2/doc/interpreter/polar.eps *** octave-3.0.1/doc/interpreter/polar.eps 2008-04-21 18:57:16.000000000 +0200 --- octave-3.0.2/doc/interpreter/polar.eps 2008-08-14 13:43:23.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: polar.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:16 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: polar.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:23 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (polar.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:16 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (polar.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:23 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 1018,1023 **** --- 1018,1024 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/polar.pdf and octave-3.0.2/doc/interpreter/polar.pdf differ diff -cNr octave-3.0.1/doc/interpreter/spchol.eps octave-3.0.2/doc/interpreter/spchol.eps *** octave-3.0.1/doc/interpreter/spchol.eps 2008-04-21 18:56:54.000000000 +0200 --- octave-3.0.2/doc/interpreter/spchol.eps 2008-08-14 13:42:49.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: spchol.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:56:54 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: spchol.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:42:49 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (spchol.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:56:54 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (spchol.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:42:49 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 10857,10862 **** --- 10857,10863 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/spchol.pdf and octave-3.0.2/doc/interpreter/spchol.pdf differ diff -cNr octave-3.0.1/doc/interpreter/spcholperm.eps octave-3.0.2/doc/interpreter/spcholperm.eps *** octave-3.0.1/doc/interpreter/spcholperm.eps 2008-04-21 18:56:56.000000000 +0200 --- octave-3.0.2/doc/interpreter/spcholperm.eps 2008-08-14 13:42:52.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: spcholperm.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:56:56 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: spcholperm.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:42:52 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (spcholperm.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:56:56 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (spcholperm.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:42:52 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 1056,1061 **** --- 1056,1062 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/spcholperm.pdf and octave-3.0.2/doc/interpreter/spcholperm.pdf differ diff -cNr octave-3.0.1/doc/interpreter/spmatrix.eps octave-3.0.2/doc/interpreter/spmatrix.eps *** octave-3.0.1/doc/interpreter/spmatrix.eps 2008-04-21 18:56:53.000000000 +0200 --- octave-3.0.2/doc/interpreter/spmatrix.eps 2008-08-14 13:42:47.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: spmatrix.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:56:53 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: spmatrix.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:42:47 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (spmatrix.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:56:53 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (spmatrix.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:42:47 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 1255,1260 **** --- 1255,1261 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/spmatrix.pdf and octave-3.0.2/doc/interpreter/spmatrix.pdf differ diff -cNr octave-3.0.1/doc/interpreter/stats.texi octave-3.0.2/doc/interpreter/stats.texi *** octave-3.0.1/doc/interpreter/stats.texi 2008-04-21 18:58:27.000000000 +0200 --- octave-3.0.2/doc/interpreter/stats.texi 2008-08-20 07:51:21.000000000 +0200 *************** *** 2058,2074 **** @anchor{doc-tcdf} @deftypefn {Function File} {} tcdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the CDF at @var{x} of the ! t (Student) distribution with @var{n} degrees of freedom, i.e., ! PROB (t(@var{n}) <= @var{x}). @end deftypefn @anchor{doc-tinv} @deftypefn {Function File} {} tinv (@var{x}, @var{n}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the t (Student) distribution with parameter ! @var{n}. @end deftypefn --- 2058,2076 ---- @anchor{doc-tcdf} @deftypefn {Function File} {} tcdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the t (Student) distribution with ! @var{n} degrees of freedom, i.e., PROB (t(@var{n}) <= @var{x}). @end deftypefn @anchor{doc-tinv} @deftypefn {Function File} {} tinv (@var{x}, @var{n}) ! For each probability value @var{x}, compute the the inverse of the ! cumulative distribution function (CDF) of the t (Student) ! distribution with degrees of freedom @var{n}. This function is ! analagous to looking in a table for the t-value of a single-tailed ! distribution. @end deftypefn diff -cNr octave-3.0.1/doc/interpreter/system.texi octave-3.0.2/doc/interpreter/system.texi *** octave-3.0.1/doc/interpreter/system.texi 2008-04-21 18:58:27.000000000 +0200 --- octave-3.0.2/doc/interpreter/system.texi 2008-08-20 07:51:21.000000000 +0200 *************** *** 699,705 **** @anchor{doc-eomday} @deftypefn {Function File} {@var{e} =} eomday (@var{y}, @var{m}) Return the last day of the month @var{m} for the year @var{y}. ! @seealso{datenum, datevec, weekday} @end deftypefn --- 699,705 ---- @anchor{doc-eomday} @deftypefn {Function File} {@var{e} =} eomday (@var{y}, @var{m}) Return the last day of the month @var{m} for the year @var{y}. ! @seealso{datenum, datevec, weekday, eomdate} @end deftypefn *************** *** 1753,1758 **** --- 1753,1759 ---- @anchor{doc-putenv} @deftypefn {Built-in Function} {} putenv (@var{var}, @var{value}) + @deftypefnx {Built-in Function} {} setenv (@var{var}, @var{value}) Set the value of the environment variable @var{var} to @var{value}. @end deftypefn diff -cNr octave-3.0.1/doc/interpreter/triplot.eps octave-3.0.2/doc/interpreter/triplot.eps *** octave-3.0.1/doc/interpreter/triplot.eps 2008-04-21 18:57:05.000000000 +0200 --- octave-3.0.2/doc/interpreter/triplot.eps 2008-08-14 13:43:05.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: triplot.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:05 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: triplot.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:06 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (triplot.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:05 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (triplot.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:06 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 850,855 **** --- 850,856 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/triplot.pdf and octave-3.0.2/doc/interpreter/triplot.pdf differ diff -cNr octave-3.0.1/doc/interpreter/voronoi.eps octave-3.0.2/doc/interpreter/voronoi.eps *** octave-3.0.1/doc/interpreter/voronoi.eps 2008-04-21 18:57:03.000000000 +0200 --- octave-3.0.2/doc/interpreter/voronoi.eps 2008-08-14 13:43:03.000000000 +0200 *************** *** 1,7 **** %!PS-Adobe-2.0 EPSF-2.0 %%Title: voronoi.eps ! %%Creator: gnuplot 4.2 patchlevel 2 ! %%CreationDate: Mon Apr 21 12:57:03 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments --- 1,7 ---- %!PS-Adobe-2.0 EPSF-2.0 %%Title: voronoi.eps ! %%Creator: gnuplot 4.2 patchlevel 3 ! %%CreationDate: Thu Aug 14 13:43:04 2008 %%DocumentFonts: (atend) %%BoundingBox: 50 50 410 302 %%EndComments *************** *** 44,54 **** SDict begin [ /Title (voronoi.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 2 ) ! /Author (John W. Eaton,,,) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Mon Apr 21 12:57:03 2008) /DOCINFO pdfmark end } ifelse --- 44,54 ---- SDict begin [ /Title (voronoi.eps) /Subject (gnuplot plot) ! /Creator (gnuplot 4.2 patchlevel 3 ) ! /Author (Jaroslav Hajek) % /Producer (gnuplot) % /Keywords () ! /CreationDate (Thu Aug 14 13:43:04 2008) /DOCINFO pdfmark end } ifelse *************** *** 303,309 **** ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill --- 303,309 ---- ColR ColG ColB setrgbcolor} def /BoxColFill {gsave Rec PolyFill} def /PolyFill {gsave Density fill grestore grestore} def ! /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def % % PostScript Level 1 Pattern Fill routine for rectangles % Usage: x y w h s a XX PatternFill *************** *** 1017,1022 **** --- 1017,1023 ---- 1.000 UP 0.500 UL LTb + grestore % colour palette end stroke grestore end Files octave-3.0.1/doc/interpreter/voronoi.pdf and octave-3.0.2/doc/interpreter/voronoi.pdf differ Files octave-3.0.1/doc/liboctave/liboctave.pdf and octave-3.0.2/doc/liboctave/liboctave.pdf differ Files octave-3.0.1/doc/refcard/refcard-a4.pdf and octave-3.0.2/doc/refcard/refcard-a4.pdf differ Files octave-3.0.1/doc/refcard/refcard-legal.pdf and octave-3.0.2/doc/refcard/refcard-legal.pdf differ Files octave-3.0.1/doc/refcard/refcard-letter.pdf and octave-3.0.2/doc/refcard/refcard-letter.pdf differ diff -cNr octave-3.0.1/libcruft/ChangeLog octave-3.0.2/libcruft/ChangeLog *** octave-3.0.1/libcruft/ChangeLog 2008-04-21 18:02:47.000000000 +0200 --- octave-3.0.2/libcruft/ChangeLog 2008-08-20 07:28:21.000000000 +0200 *************** *** 1,3 **** --- 1,7 ---- + 2008-08-19 Jaroslav Hajek + + Version 3.0.2 released. + 2008-04-21 John W. Eaton Version 3.0.1 released. diff -cNr octave-3.0.1/liboctave/ChangeLog octave-3.0.2/liboctave/ChangeLog *** octave-3.0.1/liboctave/ChangeLog 2008-04-21 18:02:40.000000000 +0200 --- octave-3.0.2/liboctave/ChangeLog 2008-08-20 07:28:21.000000000 +0200 *************** *** 1,3 **** --- 1,41 ---- + 2008-08-14 Jaroslav Hajek + + Version 3.0.2 released. + + 2008-08-12 Jaroslav Hajek + + * lo-ieee.cc (octave_ieee_init): Try to ensure that octave_NaN is + classified as positive by lo_ieee_signbit. + + 2008-08-04 John W. Eaton + + * oct-env.cc (octave_env::instance_ok): Fix typo in error message. + + 2008-06-20 Jaroslav Hajek + + * MatrixType.h: Add missing include statement. + + 2008-05-19 David Bateman + + * dSparse.cc: Replace some DGBCON with GPBCON where they are + incorrectly used. + + * idx-vector.cc (IDX_VEC_REP::idx_vector_rep (const boolNDArray&)): + If len is zero size the index vector in the same manner as if len + is not zero. + + 2008-05-11 John W. Eaton + + * intNDArray.cc (intNDArray::any (int)): Use != for comparison. + + 2008-05-05 Rafael Laboissiere + + * oct-rl-edit.c (octave_read_init_file): Simply call rl_read_init_file. + + 2008-04-24 Michael Goffioul + + * lo-sysdep.cc (octave_popen2): Don't set PIPE_NOWAIT for parentWrite. + 2008-04-21 John W. Eaton Version 3.0.1 released. diff -cNr octave-3.0.1/liboctave/dSparse.cc octave-3.0.2/liboctave/dSparse.cc *** octave-3.0.1/liboctave/dSparse.cc 2008-04-21 18:00:19.000000000 +0200 --- octave-3.0.2/liboctave/dSparse.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 4514,4520 **** Array iz (nr); octave_idx_type *piz = iz.fortran_vec (); ! F77_XFCN (dpbcon, DGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), nr, n_lower, tmp_data, ldm, anorm, rcond, pz, piz, err --- 4514,4520 ---- Array iz (nr); octave_idx_type *piz = iz.fortran_vec (); ! F77_XFCN (dpbcon, DPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), nr, n_lower, tmp_data, ldm, anorm, rcond, pz, piz, err *************** *** 4790,4796 **** Array iz (nr); octave_idx_type *piz = iz.fortran_vec (); ! F77_XFCN (dpbcon, DGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), nr, n_lower, tmp_data, ldm, anorm, rcond, pz, piz, err --- 4790,4796 ---- Array iz (nr); octave_idx_type *piz = iz.fortran_vec (); ! F77_XFCN (dpbcon, DPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), nr, n_lower, tmp_data, ldm, anorm, rcond, pz, piz, err *************** *** 5145,5151 **** Array iz (nr); octave_idx_type *piz = iz.fortran_vec (); ! F77_XFCN (dpbcon, DGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), nr, n_lower, tmp_data, ldm, anorm, rcond, pz, piz, err --- 5145,5151 ---- Array iz (nr); octave_idx_type *piz = iz.fortran_vec (); ! F77_XFCN (dpbcon, DPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), nr, n_lower, tmp_data, ldm, anorm, rcond, pz, piz, err *************** *** 5322,5328 **** Array iz (nr); octave_idx_type *piz = iz.fortran_vec (); ! F77_XFCN (dpbcon, DGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), nr, n_lower, tmp_data, ldm, anorm, rcond, pz, piz, err --- 5322,5328 ---- Array iz (nr); octave_idx_type *piz = iz.fortran_vec (); ! F77_XFCN (dpbcon, DPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), nr, n_lower, tmp_data, ldm, anorm, rcond, pz, piz, err *************** *** 5495,5501 **** Array iz (nr); octave_idx_type *piz = iz.fortran_vec (); ! F77_XFCN (dpbcon, DGBCON, (F77_CONST_CHAR_ARG2 (&job, 1), nr, n_lower, tmp_data, ldm, anorm, rcond, pz, piz, err --- 5495,5501 ---- Array iz (nr); octave_idx_type *piz = iz.fortran_vec (); ! F77_XFCN (dpbcon, DPBCON, (F77_CONST_CHAR_ARG2 (&job, 1), nr, n_lower, tmp_data, ldm, anorm, rcond, pz, piz, err diff -cNr octave-3.0.1/liboctave/idx-vector.cc octave-3.0.2/liboctave/idx-vector.cc *** octave-3.0.1/liboctave/idx-vector.cc 2008-04-21 18:00:19.000000000 +0200 --- octave-3.0.2/liboctave/idx-vector.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 296,306 **** frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims () { if (len == 0) ! { ! orig_dims = dim_vector (0, 0); ! initialized = 1; ! } else { data = new octave_idx_type [len]; --- 296,308 ---- frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims () { + dim_vector dv = bnda.dims (); + + orig_dims = ((dv.length () == 2 && dv(0) == 1) + ? dim_vector (1, len) : orig_dims = dim_vector (len, 1)); + if (len == 0) ! initialized = 1; else { data = new octave_idx_type [len]; *************** *** 311,321 **** if (bnda.elem (i)) data[k++] = i; - dim_vector dv = bnda.dims (); - - orig_dims = ((dv.length () == 2 && dv(0) == 1) - ? dim_vector (1, len) : orig_dims = dim_vector (len, 1)); - init_state (); } } --- 313,318 ---- diff -cNr octave-3.0.1/liboctave/intNDArray.cc octave-3.0.2/liboctave/intNDArray.cc *** octave-3.0.1/liboctave/intNDArray.cc 2008-04-21 18:00:19.000000000 +0200 --- octave-3.0.2/liboctave/intNDArray.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 135,141 **** boolNDArray intNDArray::any (int dim) const { ! MX_ND_ANY_ALL_REDUCTION (MX_ND_ALL_EVAL (this->elem (iter_idx) == T (0)), false); } template --- 135,141 ---- boolNDArray intNDArray::any (int dim) const { ! MX_ND_ANY_ALL_REDUCTION (MX_ND_ANY_EVAL (this->elem (iter_idx) != T (0)), false); } template diff -cNr octave-3.0.1/liboctave/lo-ieee.cc octave-3.0.2/liboctave/lo-ieee.cc *** octave-3.0.1/liboctave/lo-ieee.cc 2008-04-21 17:58:39.000000000 +0200 --- octave-3.0.2/liboctave/lo-ieee.cc 2008-08-14 07:13:15.000000000 +0200 *************** *** 94,99 **** --- 94,103 ---- octave_NaN = (*(X_CAST(double *, DQNAN))); #else octave_NaN = tmp_inf / tmp_inf; + // try to ensure that lo_ieee_sign gives false for a NaN. + if (lo_ieee_signbit (octave_NaN)) + octave_NaN = -octave_NaN; + #endif octave_Inf = tmp_inf; diff -cNr octave-3.0.1/liboctave/lo-sysdep.cc octave-3.0.2/liboctave/lo-sysdep.cc *** octave-3.0.1/liboctave/lo-sysdep.cc 2008-04-21 18:00:19.000000000 +0200 --- octave-3.0.2/liboctave/lo-sysdep.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 141,147 **** { pipeMode = PIPE_NOWAIT; SetNamedPipeHandleState (parentRead, &pipeMode, 0, 0); - SetNamedPipeHandleState (parentWrite, &pipeMode, 0, 0); } fildes[1] = _open_osfhandle (reinterpret_cast (parentRead), _O_RDONLY | _O_BINARY); fildes[0] = _open_osfhandle (reinterpret_cast (parentWrite), _O_WRONLY | _O_BINARY); --- 141,146 ---- diff -cNr octave-3.0.1/liboctave/MatrixType.h octave-3.0.2/liboctave/MatrixType.h *** octave-3.0.1/liboctave/MatrixType.h 2008-04-21 17:58:39.000000000 +0200 --- octave-3.0.2/liboctave/MatrixType.h 2008-08-01 08:50:55.000000000 +0200 *************** *** 24,29 **** --- 24,31 ---- #if !defined (octave_MatrixType_h) #define octave_MatrixType_h + #include "oct-types.h" + class Matrix; class ComplexMatrix; class SparseMatrix; diff -cNr octave-3.0.1/liboctave/oct-env.cc octave-3.0.2/liboctave/oct-env.cc *** octave-3.0.1/liboctave/oct-env.cc 2008-04-21 18:00:19.000000000 +0200 --- octave-3.0.2/liboctave/oct-env.cc 2008-08-05 09:49:50.000000000 +0200 *************** *** 89,95 **** if (! instance) { (*current_liboctave_error_handler) ! ("unable to create current working directoy object!"); retval = false; } --- 89,95 ---- if (! instance) { (*current_liboctave_error_handler) ! ("unable to create current working directory object!"); retval = false; } diff -cNr octave-3.0.1/liboctave/oct-rl-edit.c octave-3.0.2/liboctave/oct-rl-edit.c *** octave-3.0.1/liboctave/oct-rl-edit.c 2008-04-21 17:58:39.000000000 +0200 --- octave-3.0.2/liboctave/oct-rl-edit.c 2008-08-01 08:50:56.000000000 +0200 *************** *** 194,203 **** void octave_rl_read_init_file (const char *f) { ! if (f && *f) ! rl_read_init_file (f); ! else ! rl_re_read_init_file (0, 0); } int --- 194,200 ---- void octave_rl_read_init_file (const char *f) { ! rl_read_init_file (f); } int diff -cNr octave-3.0.1/Makeconf.in octave-3.0.2/Makeconf.in *** octave-3.0.1/Makeconf.in 2008-04-21 18:00:19.000000000 +0200 --- octave-3.0.2/Makeconf.in 2008-08-05 09:48:21.000000000 +0200 *************** *** 586,591 **** --- 586,592 ---- $(SED) < $< \ -e "s|%AWK%|${AWK}|g" \ -e "s|%FIND%|${FIND}|g" \ + -e "s|%SED%|${SED}|g" \ -e "s|%library_path_var%|${library_path_var}|g" \ -e "s|%liboctinterp%|${LIBPRE}octinterp.${SHLEXT}|g" \ -e "s|%liboctave%|${LIBPRE}octave.${SHLEXT}|g" \ diff -cNr octave-3.0.1/Makefile octave-3.0.2/Makefile *** octave-3.0.1/Makefile 2008-04-21 18:14:46.000000000 +0200 --- octave-3.0.2/Makefile 2008-08-14 12:50:41.000000000 +0200 *************** *** 46,52 **** @echo "* To compile Octave, you will need a recent versions of" @echo "* the following software:" @echo "*" ! @echo "* g++ (3.2.x or a more recent version)" @echo "*" @echo "* flex (2.5.4 or a more recent version) -- required if" @echo "* you need to recreate lex.cc from lex.l" --- 46,55 ---- @echo "* To compile Octave, you will need a recent versions of" @echo "* the following software:" @echo "*" ! @echo "* GNU Make (a recent version)" ! @echo "*" ! @echo "* g++ (preferably a recent 4.x version, though later" ! @echo "* 3.x versions may also work)" @echo "*" @echo "* flex (2.5.4 or a more recent version) -- required if" @echo "* you need to recreate lex.cc from lex.l" diff -cNr octave-3.0.1/Makefile.in octave-3.0.2/Makefile.in *** octave-3.0.1/Makefile.in 2008-04-21 17:58:38.000000000 +0200 --- octave-3.0.2/Makefile.in 2008-08-05 09:44:54.000000000 +0200 *************** *** 46,52 **** @echo "* To compile Octave, you will need a recent versions of" @echo "* the following software:" @echo "*" ! @echo "* g++ (3.2.x or a more recent version)" @echo "*" @echo "* flex (2.5.4 or a more recent version) -- required if" @echo "* you need to recreate lex.cc from lex.l" --- 46,55 ---- @echo "* To compile Octave, you will need a recent versions of" @echo "* the following software:" @echo "*" ! @echo "* GNU Make (a recent version)" ! @echo "*" ! @echo "* g++ (preferably a recent 4.x version, though later" ! @echo "* 3.x versions may also work)" @echo "*" @echo "* flex (2.5.4 or a more recent version) -- required if" @echo "* you need to recreate lex.cc from lex.l" diff -cNr octave-3.0.1/missing octave-3.0.2/missing *** octave-3.0.1/missing 1970-01-01 01:00:00.000000000 +0100 --- octave-3.0.2/missing 2008-08-01 08:32:27.000000000 +0200 *************** *** 0 **** --- 1,163 ---- + #! /bin/sh + # Common stub for a few missing GNU programs while installing. + # Copyright (C) 1996, 1997 Free Software Foundation, Inc. + # Franc,ois Pinard , 1996. + + # This program is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by + # the Free Software Foundation; either version 2, or (at your option) + # any later version. + + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + + # You should have received a copy of the GNU General Public License + # along with this program; if not, write to the Free Software + # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + # 02110-1301, USA. + + if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + fi + + fail_missing=false + + case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ + $0 [OPTION]... PROGRAM [ARGUMENT]... + + Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an + error status if there is no known handling for PROGRAM. + + Options: + -h, --help display this help and exit + -v, --version output version information and exit + + Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + gperf + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing - GNU libit 0.0" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal) + echo 1>&2 "\ + WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`configure.in'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + fail_missing=true + ;; + + autoconf) + echo 1>&2 "\ + WARNING: \`$1' is missing on your system. You should only need it if + you modified \`configure.in'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + fail_missing=true + ;; + + autoheader) + echo 1>&2 "\ + WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`configure.in'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + fail_missing=true + ;; + + automake) + echo 1>&2 "\ + WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + fail_missing=true + ;; + + bison|yacc) + echo 1>&2 "\ + WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + fail_missing=true + ;; + + lex|flex) + echo 1>&2 "\ + WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + fail_missing=true + ;; + + gperf) + echo 1>&2 "\ + WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.gperf' file. You may need the \`gperf' package + in order for those modifications to take effect. You can get + \`gperf' from any GNU archive site." + fail_missing=true + ;; + + makeinfo) + echo 1>&2 "\ + WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + fail_missing=true + ;; + + *) + echo 1>&2 "\ + WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + fail_missing=true + ;; + esac + + if $fail_missing; then + echo 1>&2 "\ + + You may also need \`$1' if you obtained this package from the CVS + archive because files that can be automatically generated are not + considered source files and are not checked in to the CVS archive. + + You may also need \`$1' if you ran make maintainer-clean and + removed files that can be automatically generated but that are + normally distributed as part of the package for convenience." + exit 1 + fi + + exit 0 diff -cNr octave-3.0.1/octMakefile.in octave-3.0.2/octMakefile.in *** octave-3.0.1/octMakefile.in 2008-04-21 17:58:39.000000000 +0200 --- octave-3.0.2/octMakefile.in 2008-08-01 08:50:56.000000000 +0200 *************** *** 46,52 **** NEWS.[0-9] PROJECTS README README.Linux README.Windows \ README.Cygwin README.MSVC README.kpathsea ROADMAP SENDING-PATCHES \ THANKS move-if-change octave-sh octave-bug.in \ ! octave-config.in mk-opts.pl mkinstalldirs \ mkoctfile.in run-octave.in ChangeLog ChangeLog.[0-9] # Subdirectories in which to run `make all'. --- 46,52 ---- NEWS.[0-9] PROJECTS README README.Linux README.Windows \ README.Cygwin README.MSVC README.kpathsea ROADMAP SENDING-PATCHES \ THANKS move-if-change octave-sh octave-bug.in \ ! octave-config.in missing mk-opts.pl mkinstalldirs \ mkoctfile.in run-octave.in ChangeLog ChangeLog.[0-9] # Subdirectories in which to run `make all'. *************** *** 64,73 **** # Subdirectories in which to run clean targets. CLEANSUBDIRS = $(DISTSUBDIRS) ! DIRS_TO_MAKE = $(bindir) $(libdir) $(octincludedir)/octave $(fcnfiledir) \ ! $(octfiledir) $(archlibdir) $(localarchlibdir) $(localverarchlibdir) \ ! $(shell echo $(localfcnfilepath) | awk -F: '{for (i=1; i<=NF; i++) print $$i}') \ ! $(shell echo $(localoctfilepath) | awk -F: '{for (i=1; i<=NF; i++) print $$i}') SHELL_SCRIPTS = octave-bug octave-config mkoctfile run-octave --- 64,74 ---- # Subdirectories in which to run clean targets. CLEANSUBDIRS = $(DISTSUBDIRS) ! DIRS_TO_MAKE = $(bindir) $(datadir) $(libdir) $(octincludedir)/octave \ ! $(fcnfiledir) $(localfcnfiledir) $(localapifcnfiledir) \ ! $(localverfcnfiledir) $(octfiledir) $(localoctfiledir) \ ! $(localapioctfiledir) $(localveroctfiledir) $(imagedir) $(archlibdir) \ ! $(localarchlibdir) $(localapiarchlibdir) $(localverarchlibdir) SHELL_SCRIPTS = octave-bug octave-config mkoctfile run-octave diff -cNr octave-3.0.1/run-octave.in octave-3.0.2/run-octave.in *** octave-3.0.1/run-octave.in 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/run-octave.in 2008-08-05 09:48:21.000000000 +0200 *************** *** 22,27 **** --- 22,28 ---- AWK=%AWK% FIND=%FIND% + SED=%SED% # FIXME -- is there a better way to handle the possibility of spaces # in these names? *************** *** 38,47 **** d3="$builddir/scripts" d4="$builddir/src" ! d1_list=`$FIND "$d1" -type d -a ! \( \( -name CVS -o -name private \) -a -prune \) -exec echo '{}': ';'` ! d2_list=`$FIND "$d2" -type d -a ! \( \( -name CVS -o -name private \) -a -prune \) -exec echo '{}': ';'` ! d3_list=`$FIND "$d3" -type d -a ! \( \( -name CVS -o -name private \) -a -prune \) -exec echo '{}': ';'` ! d4_list=`$FIND "$d4" -type d -a ! \( \( -name CVS -o -name private \) -a -prune \) -exec echo '{}': ';'` d1_path=`echo "$d1_list" | $AWK '{ t = (s $0); s = t; } END { sub (/:$/, "", s); print s; }'` d2_path=`echo "$d2_list" | $AWK '{ t = (s $0); s = t; } END { sub (/:$/, "", s); print s; }'` --- 39,48 ---- d3="$builddir/scripts" d4="$builddir/src" ! d1_list=`$FIND "$d1" -type d -a ! \( \( -name CVS -o -name private \) -a -prune \) -exec echo '{}' ';' | $SED 's/$/:/'` ! d2_list=`$FIND "$d2" -type d -a ! \( \( -name CVS -o -name private \) -a -prune \) -exec echo '{}' ';' | $SED 's/$/:/'` ! d3_list=`$FIND "$d3" -type d -a ! \( \( -name CVS -o -name private \) -a -prune \) -exec echo '{}' ';' | $SED 's/$/:/'` ! d4_list=`$FIND "$d4" -type d -a ! \( \( -name CVS -o -name private \) -a -prune \) -exec echo '{}' ';' | $SED 's/$/:/'` d1_path=`echo "$d1_list" | $AWK '{ t = (s $0); s = t; } END { sub (/:$/, "", s); print s; }'` d2_path=`echo "$d2_list" | $AWK '{ t = (s $0); s = t; } END { sub (/:$/, "", s); print s; }'` diff -cNr octave-3.0.1/scripts/ChangeLog octave-3.0.2/scripts/ChangeLog *** octave-3.0.1/scripts/ChangeLog 2008-04-21 18:02:35.000000000 +0200 --- octave-3.0.2/scripts/ChangeLog 2008-08-20 07:28:21.000000000 +0200 *************** *** 1,3 **** --- 1,64 ---- + 2008-08-19 Jaroslav Hajek + + Version 3.0.2 released. + + 2008-08-08 Jaroslav Hajek + + * strings/strtok.m: replace cstrcat -> strcat in the tests. + + 2008-08-04 John W. Eaton + + * strings/strtok.m: Include TAB, LF, VT, FF, and CR in default + list of delim characters. Update tests. + + 2008-06-11 John W. Eaton + + * general/rat.m: Properly initialize steps when all elements of + input array are integers. Append spaces as necessary when + building character array. + + 2008-06-05 Jaroslav Hajek + + * plot/__go_draw_axes__.m: Use fprintf for formatted output. + + 2008-06-04 Bill Denney + + * time/weekday.m: Allow vector inputs and speed up. + * time/eomday.m: Return column vector for column vector inputs. + + 2008-06-02 John W. Eaton + + * general/mod.m: Delete bogus test. + + 2008-06-02 Jaroslav Hajek + + * strings/strcat.m: Add tests. + + 2008-06-02 Kim Hansen + + * strings/mat2str.m: Change is_complex to iscomplex, add tests, add + missing ; + + 2008-06-02 John W. Eaton + + * linear-algebra/cond.m, miscellaneous/news.m, + miscellaneous/unpack.m, plot/__bar__.m, plot/__quiver__.m, + plot/__scatter__.m, plot/compass.m, plot/feather.m: + Call ischar instead of isstr. + + 2008-05-22 David Bateman + + * general/rem.m, general/mod.m: Treat integer types correctly. + + 2008-04-29 David Bateman + + pkg/pkg.m: Also set archprefix with the -local and -global options. + + 2008-04-29 Jonathan Stickel + + * statistics/distributions/tcdf.m, statistics/distributions/tinv.m: + Doc fix. + 2008-04-21 John W. Eaton Version 3.0.1 released. *************** *** 1275,1281 **** * testfun/test.m: In error/warning blocks test for an error before a warning to avoid unexpected failures. ! 2007-10-15 Kim Hansen i * testfun/assert.m: Correct documentation of absolution versus relative error tolerance and add tests. --- 1336,1342 ---- * testfun/test.m: In error/warning blocks test for an error before a warning to avoid unexpected failures. ! 2007-10-15 Kim Hansen * testfun/assert.m: Correct documentation of absolution versus relative error tolerance and add tests. diff -cNr octave-3.0.1/scripts/DOCSTRINGS octave-3.0.2/scripts/DOCSTRINGS *** octave-3.0.1/scripts/DOCSTRINGS 2008-04-21 18:56:30.000000000 +0200 --- octave-3.0.2/scripts/DOCSTRINGS 2008-08-14 13:42:07.000000000 +0200 *************** *** 3,4927 **** ### This file is generated automatically from the Octave sources. ### Edit those files instead and run make to update this file. ! lin2mu ! -*- texinfo -*- ! @deftypefn {Function File} {} lin2mu (@var{x}, @var{n}) ! Converts audio data from linear to mu-law. Mu-law values use 8-bit ! unsigned integers. Linear values use @var{n}-bit signed integers or ! floating point values in the range -1<=@var{x}<=1 if @var{n} is 0. ! If @var{n} is not specified it defaults to 0, 8 or 16 depending on ! the range values in @var{x}. ! @seealso{mu2lin, loadaudio, saveaudio, playaudio, setaudio, record} ! @end deftypefn ! loadaudio -*- texinfo -*- ! @deftypefn {Function File} {} loadaudio (@var{name}, @var{ext}, @var{bps}) ! Loads audio data from the file @file{@var{name}.@var{ext}} into the ! vector @var{x}. ! The extension @var{ext} determines how the data in the audio file is ! interpreted; the extensions @file{lin} (default) and @file{raw} ! correspond to linear, the extensions @file{au}, @file{mu}, or @file{snd} ! to mu-law encoding. ! The argument @var{bps} can be either 8 (default) or 16, and specifies ! the number of bits per sample used in the audio file. ! @seealso{lin2mu, mu2lin, saveaudio, playaudio, setaudio, record} @end deftypefn ! mu2lin -*- texinfo -*- ! @deftypefn {Function File} {} mu2lin (@var{x}, @var{bps}) ! Converts audio data from linear to mu-law. Mu-law values are 8-bit ! unsigned integers. Linear values use @var{n}-bit signed integers ! or floating point values in the range -1<=y<=1 if @var{n} is 0. If ! @var{n} is not specified it defaults to 8. ! @seealso{lin2mu, loadaudio, saveaudio, playaudio, setaudio, record} @end deftypefn ! playaudio -*- texinfo -*- ! @deftypefn {Function File} {} playaudio (@var{name}, @var{ext}) ! @deftypefnx {Function File} {} playaudio (@var{x}) ! Plays the audio file @file{@var{name}.@var{ext}} or the audio data ! stored in the vector @var{x}. ! @seealso{lin2mu, mu2lin, loadaudio, saveaudio, setaudio, record} @end deftypefn ! record -*- texinfo -*- ! @deftypefn {Function File} {} record (@var{sec}, @var{sampling_rate}) ! Records @var{sec} seconds of audio input into the vector @var{x}. The ! default value for @var{sampling_rate} is 8000 samples per second, or ! 8kHz. The program waits until the user types @key{RET} and then ! immediately starts to record. ! @seealso{lin2mu, mu2lin, loadaudio, saveaudio, playaudio, setaudio} @end deftypefn ! saveaudio -*- texinfo -*- ! @deftypefn {Function File} {} saveaudio (@var{name}, @var{x}, @var{ext}, @var{bps}) ! Saves a vector @var{x} of audio data to the file ! @file{@var{name}.@var{ext}}. The optional parameters @var{ext} and ! @var{bps} determine the encoding and the number of bits per sample used ! in the audio file (see @code{loadaudio}); defaults are @file{lin} and ! 8, respectively. ! @seealso{lin2mu, mu2lin, loadaudio, playaudio, setaudio, record} @end deftypefn ! setaudio -*- texinfo -*- ! @deftypefn {Function File} {} setaudio ([@var{w_type} [, @var{value}]]) ! Execute the shell command @samp{mixer [@var{w_type} [, @var{value}]]} @end deftypefn ! wavread -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} wavread (@var{filename}) ! Load the RIFF/WAVE sound file @var{filename}, and return the samples ! in vector @var{y}. If the file contains multichannel data, then ! @var{y} is a matrix with the channels represented as columns. ! ! @deftypefnx {Function File} {[@var{y}, @var{Fs}, @var{bits}] =} wavread (@var{filename}) ! Additionally return the sample rate (@var{fs}) in Hz and the number of bits ! per sample (@var{bits}). ! @deftypefnx {Function File} {[@dots{}] =} wavread (@var{filename}, @var{n}) ! Read only the first @var{n} samples from each channel. ! @deftypefnx {Function File} {[@dots{}] =} wavread (@var{filename},[@var{n1} @var{n2}]) ! Read only samples @var{n1} through @var{n2} from each channel. - @deftypefnx {Function File} {[@var{samples}, @var{channels}] =} wavread (@var{filename}, "size") - Return the number of samples (@var{n}) and channels (@var{ch}) - instead of the audio data. - @seealso{wavwrite} @end deftypefn ! wavwrite -*- texinfo -*- ! @deftypefn {Function File} {} wavwrite (@var{y}, @var{filename}) ! @deftypefnx {Function File} {} wavwrite (@var{y}, @var{fs}, @var{filename}) ! @deftypefnx {Function File} {} wavwrite (@var{y}, @var{fs}, @var{bits}, @var{filename}) ! Write @var{y} to the canonical RIFF/WAVE sound file @var{filename} ! with sample rate @var{fs} and bits per sample @var{bits}. The ! default sample rate is 8000 Hz with 16-bits per sample. Each column ! of the data represents a separate channel. ! @seealso{wavread} @end deftypefn ! DEMOcontrol -*- texinfo -*- ! @deftypefn {Function File} {} DEMOcontrol ! Octave Control Systems Toolbox demo/tutorial program. The demo ! allows the user to select among several categories of @acronym{OCST} function: @example @group ! octave:1> DEMOcontrol ! Octave Controls System Toolbox Demo ! [ 1] System representation ! [ 2] Block diagram manipulations ! [ 3] Frequency response functions ! [ 4] State space analysis functions ! [ 5] Root locus functions ! [ 6] LQG/H2/Hinfinity functions ! [ 7] End @end group @end example ! Command examples are interactively run for users to observe the use ! of @acronym{OCST} functions. ! @seealso{Demo Programs: bddemo.m, frdemo.m, analdemo.m, ! moddmeo.m, rldemo.m} @end deftypefn ! __bodquist__ ! Undocumented internal function. ! __freqresp__ ! Undocumented internal function. ! __stepimp__ ! Undocumented internal function. ! analdemo -*- texinfo -*- ! @deftypefn {Function File} {} analdemo () ! Octave Controls toolbox demo: State Space analysis demo @end deftypefn ! are -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} are (@var{a}, @var{b}, @var{c}, @var{opt}) ! Solve the Algebraic Riccati Equation ! @iftex ! @tex ! $$ ! A^TX + XA - XBX + C = 0 ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! a' * x + x * a - x * b * x + c = 0 ! @end example ! @end ifinfo ! ! @strong{Inputs} ! @noindent ! for identically dimensioned square matrices ! @table @var ! @item a ! @var{n} by @var{n} matrix; ! @item b ! @var{n} by @var{n} matrix or @var{n} by @var{m} matrix; in the latter case ! @var{b} is replaced by @math{b:=b*b'}; ! @item c ! @var{n} by @var{n} matrix or @var{p} by @var{m} matrix; in the latter case ! @var{c} is replaced by @math{c:=c'*c}; ! @item opt ! (optional argument; default = @code{"B"}): ! String option passed to @code{balance} prior to ordered Schur decomposition. ! @end table ! ! @strong{Output} ! @table @var ! @item x ! solution of the @acronym{ARE}. ! @end table ! ! @strong{Method} ! Laub's Schur method (@acronym{IEEE} Transactions on ! Automatic Control, 1979) is applied to the appropriate Hamiltonian ! matrix. ! @seealso{balance, dare} @end deftypefn ! bddemo -*- texinfo -*- ! @deftypefn {Function File} {} bddemo (@var{inputs}) ! Octave Controls toolbox demo: Block Diagram Manipulations demo. @end deftypefn ! bode -*- texinfo -*- ! @deftypefn {Function File} {[@var{mag}, @var{phase}, @var{w}] =} bode (@var{sys}, @var{w}, @var{out_idx}, @var{in_idx}) ! If no output arguments are given: produce Bode plots of a system; otherwise, ! compute the frequency response of a system data structure ! @strong{Inputs} ! @table @var ! @item sys ! a system data structure (must be either purely continuous or discrete; ! see is_digital) ! @item w ! frequency values for evaluation. ! if @var{sys} is continuous, then bode evaluates @math{G(jw)} where ! @math{G(s)} is the system transfer function. ! if @var{sys} is discrete, then bode evaluates G(@code{exp}(jwT)), where ! @itemize @bullet ! @item @math{T} is the system sampling time ! @item @math{G(z)} is the system transfer function. ! @end itemize ! @strong{Default} the default frequency range is selected as follows: (These ! steps are @strong{not} performed if @var{w} is specified) ! @enumerate ! @item via routine __bodquist__, isolate all poles and zeros away from ! @var{w}=0 (@var{jw}=0 or @math{@code{exp}(jwT)}=1) and select the frequency ! range based on the breakpoint locations of the frequencies. ! @item if @var{sys} is discrete time, the frequency range is limited ! to @math{jwT} in ! @ifinfo ! [0,2 pi /T] ! @end ifinfo ! @iftex ! @tex ! $[0,2\pi/T]$ ! @end tex ! @end iftex ! @item A "smoothing" routine is used to ensure that the plot phase does ! not change excessively from point to point and that singular ! points (e.g., crossovers from +/- 180) are accurately shown. ! @end enumerate ! @item out_idx ! @itemx in_idx ! The names or indices of outputs and inputs to be used in the frequency ! response. See @code{sysprune}. - @strong{Example} @example ! bode(sys,[],"y_3", @{"u_1","u_4"@}); @end example ! @end table ! @strong{Outputs} ! @table @var ! @item mag ! @itemx phase ! the magnitude and phase of the frequency response @math{G(jw)} or ! @math{G(@code{exp}(jwT))} at the selected frequency values. ! @item w ! the vector of frequency values used @end table ! @enumerate ! @item If no output arguments are given, e.g., @example ! bode(sys); @end example - bode plots the results to the screen. Descriptive labels are - automatically placed. - - Failure to include a concluding semicolon will yield some garbage - being printed to the screen (@code{ans = []}). ! @item If the requested plot is for an @acronym{MIMO} system, mag is set to ! @math{||G(jw)||} or @math{||G(@code{exp}(jwT))||} ! and phase information is not computed. ! @end enumerate @end deftypefn ! bode_bounds -*- texinfo -*- ! @deftypefn {Function File} {[@var{wmin}, @var{wmax}] =} bode_bounds (@var{zer}, @var{pol}, @var{dflg}, @var{tsam}) ! Get default range of frequencies based on cutoff frequencies of system ! poles and zeros. ! Frequency range is the interval ! @iftex ! @tex ! $ [ 10^{w_{min}}, 10^{w_{max}} ] $ ! @end tex ! @end iftex ! @ifinfo ! [10^@var{wmin}, 10^@var{wmax}] ! @end ifinfo ! Used internally in @command{__freqresp__} (@command{bode}, @command{nyquist}) ! @end deftypefn ! controldemo ! -*- texinfo -*- ! @deftypefn {Function File} {} controldemo () ! Control Systems Toolbox demo. ! @seealso{Demo programs: bddemo, frdemo, analdemo, moddmeo, rldemo} @end deftypefn ! ctrb -*- texinfo -*- ! @deftypefn {Function File} {} ctrb (@var{sys}, @var{b}) ! @deftypefnx {Function File} {} ctrb (@var{a}, @var{b}) ! Build controllability matrix: ! @iftex ! @tex ! $$ Q_s = [ B AB A^2B \ldots A^{n-1}B ] $$ ! @end tex ! @end iftex ! @ifinfo @example ! 2 n-1 ! Qs = [ B AB A B ... A B ] @end example - @end ifinfo - - of a system data structure or the pair (@var{a}, @var{b}). ! @command{ctrb} forms the controllability matrix. ! The numerical properties of @command{is_controllable} ! are much better for controllability tests. ! @end deftypefn ! damp ! -*- texinfo -*- ! @deftypefn {Function File} {} damp (@var{p}, @var{tsam}) ! Displays eigenvalues, natural frequencies and damping ratios ! of the eigenvalues of a matrix @var{p} or the @math{A} matrix of a ! system @var{p}, respectively. ! If @var{p} is a system, @var{tsam} must not be specified. ! If @var{p} is a matrix and @var{tsam} is specified, eigenvalues ! of @var{p} are assumed to be in @var{z}-domain. ! @seealso{eig} @end deftypefn ! dare -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} dare (@var{a}, @var{b}, @var{q}, @var{r}, @var{opt}) - Return the solution, @var{x} of the discrete-time algebraic Riccati - equation - @iftex - @tex - $$ - A^TXA - X + A^TXB (R + B^TXB)^{-1} B^TXA + Q = 0 - $$ - @end tex - @end iftex - @ifinfo @example ! a' x a - x + a' x b (r + b' x b)^(-1) b' x a + q = 0 @end example ! @end ifinfo ! @noindent ! @strong{Inputs} ! @table @var ! @item a ! @var{n} by @var{n} matrix; ! @item b ! @var{n} by @var{m} matrix; ! @item q ! @var{n} by @var{n} matrix, symmetric positive semidefinite, or a @var{p} by @var{n} matrix, ! In the latter case @math{q:=q'*q} is used; ! @item r ! @var{m} by @var{m}, symmetric positive definite (invertible); ! @item opt ! (optional argument; default = @code{"B"}): ! String option passed to @code{balance} prior to ordered @var{QZ} decomposition. ! @end table ! @strong{Output} ! @table @var ! @item x ! solution of @acronym{DARE}. @end table ! @strong{Method} ! Generalized eigenvalue approach (Van Dooren; @acronym{SIAM} J. ! Sci. Stat. Comput., Vol 2) applied to the appropriate symplectic pencil. ! See also: Ran and Rodman, @cite{Stable Hermitian Solutions of Discrete ! Algebraic Riccati Equations}, Mathematics of Control, Signals and ! Systems, Vol 5, no 2 (1992), pp 165--194. ! @seealso{balance, are} @end deftypefn ! dcgain -*- texinfo -*- ! @deftypefn {Function File} {} dcgain (@var{sys}, @var{tol}) ! Returns dc-gain matrix. If dc-gain is infinite ! an empty matrix is returned. ! The argument @var{tol} is an optional tolerance for the condition ! number of the @math{A} Matrix in @var{sys} (default @var{tol} = 1.0e-10) @end deftypefn ! dgram -*- texinfo -*- ! @deftypefn {Function File} {} dgram (@var{a}, @var{b}) ! Return controllability gramian of discrete time system ! @iftex ! @tex ! $$ x_{k+1} = ax_k + bu_k $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! x(k+1) = a x(k) + b u(k) ! @end example ! @end ifinfo ! ! @strong{Inputs} ! @table @var ! @item a ! @var{n} by @var{n} matrix ! @item b ! @var{n} by @var{m} matrix ! @end table - @strong{Output} - @table @var - @item m - @var{n} by @var{n} matrix, satisfies - @iftex - @tex - $$ ama^T - m + bb^T = 0 $$ - @end tex - @end iftex - @ifinfo @example ! a m a' - m + b*b' = 0 @end example ! @end ifinfo ! @end table @end deftypefn ! dkalman -*- texinfo -*- ! @deftypefn {Function File} {[@var{Lp}, @var{Lf}, @var{P}, @var{Z}] =} dkalman (@var{A}, @var{G}, @var{C}, @var{Qw}, @var{Rv}, @var{S}) ! Construct the linear quadratic estimator (Kalman predictor) for the ! discrete time system ! @iftex ! @tex ! $$ ! x_{k+1} = A x_k + B u_k + G w_k ! $$ ! $$ ! y_k = C x_k + D u_k + v_k ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! x[k+1] = A x[k] + B u[k] + G w[k] ! y[k] = C x[k] + D u[k] + v[k] ! @end example ! @end ifinfo ! where @var{w}, @var{v} are zero-mean gaussian noise processes with ! respective intensities @code{@var{Qw} = cov (@var{w}, @var{w})} and ! @code{@var{Rv} = cov (@var{v}, @var{v})}. ! If specified, @var{S} is @code{cov (@var{w}, @var{v})}. Otherwise ! @code{cov (@var{w}, @var{v}) = 0}. ! The observer structure is ! @iftex ! @tex ! $x_{k+1|k} = A x_{k|k-1} + B u_k + L_p (y_k - C x_{k|k-1} - D u_k)$ ! $x_{k|k} = x_{k|k} + L_f (y_k - C x_{k|k-1} - D u_k)$ ! @end tex ! @end iftex ! @ifinfo @example ! x[k+1|k] = A x[k|k-1] + B u[k] + LP (y[k] - C x[k|k-1] - D u[k]) ! x[k|k] = x[k|k-1] + LF (y[k] - C x[k|k-1] - D u[k]) @end example ! @end ifinfo ! @noindent ! The following values are returned: ! @table @var ! @item Lp ! The predictor gain, ! @iftex ! @tex ! $(A - L_p C)$. ! @end tex ! @end iftex ! @ifinfo ! (@var{A} - @var{Lp} @var{C}) ! @end ifinfo ! is stable. ! @item Lf ! The filter gain. ! @item P ! The Riccati solution. ! @iftex ! @tex ! $P = E \{(x - x_{n|n-1})(x - x_{n|n-1})'\}$ ! @end tex ! @end iftex ! @ifinfo ! P = E [(x - x[n|n-1])(x - x[n|n-1])'] ! @end ifinfo ! @item Z ! The updated error covariance matrix. ! @iftex ! @tex ! $Z = E \{(x - x_{n|n})(x - x_{n|n})'\}$ ! @end tex ! @end iftex ! @ifinfo ! Z = E [(x - x[n|n])(x - x[n|n])'] ! @end ifinfo ! @end table @end deftypefn ! dlqe -*- texinfo -*- ! @deftypefn {Function File} {[@var{l}, @var{m}, @var{p}, @var{e}] =} dlqe (@var{a}, @var{g}, @var{c}, @var{sigw}, @var{sigv}, @var{z}) ! Construct the linear quadratic estimator (Kalman filter) for the ! discrete time system ! @iftex ! @tex ! $$ ! x_{k+1} = A x_k + B u_k + G w_k ! $$ ! $$ ! y_k = C x_k + D u_k + v_k ! $$ ! @end tex ! @end iftex ! @ifinfo @example ! x[k+1] = A x[k] + B u[k] + G w[k] ! y[k] = C x[k] + D u[k] + v[k] @end example ! @end ifinfo ! where @var{w}, @var{v} are zero-mean gaussian noise processes with ! respective intensities @code{@var{sigw} = cov (@var{w}, @var{w})} and ! @code{@var{sigv} = cov (@var{v}, @var{v})}. ! If specified, @var{z} is @code{cov (@var{w}, @var{v})}. Otherwise ! @code{cov (@var{w}, @var{v}) = 0}. ! The observer structure is ! @iftex ! @tex ! $$ ! z_{k|k} = z_{k|k-1} + l (y_k - C z_{k|k-1} - D u_k) ! $$ ! $$ ! z_{k+1|k} = A z_{k|k} + B u_k ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! z[k|k] = z[k|k-1] + L (y[k] - C z[k|k-1] - D u[k]) ! z[k+1|k] = A z[k|k] + B u[k] ! @end example ! @end ifinfo ! @noindent ! The following values are returned: ! @table @var ! @item l ! The observer gain, ! @iftex ! @tex ! $(A - ALC)$. ! @end tex ! @end iftex ! @ifinfo ! (@var{a} - @var{a}@var{l}@var{c}). ! @end ifinfo ! is stable. ! @item m ! The Riccati equation solution. ! @item p ! The estimate error covariance after the measurement update. ! @item e ! The closed loop poles of ! @iftex ! @tex ! $(A - ALC)$. ! @end tex ! @end iftex ! @ifinfo ! (@var{a} - @var{a}@var{l}@var{c}). ! @end ifinfo ! @end table @end deftypefn ! dlqr -*- texinfo -*- ! @deftypefn {Function File} {[@var{k}, @var{p}, @var{e}] =} dlqr (@var{a}, @var{b}, @var{q}, @var{r}, @var{z}) ! Construct the linear quadratic regulator for the discrete time system ! @iftex ! @tex ! $$ ! x_{k+1} = A x_k + B u_k ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! x[k+1] = A x[k] + B u[k] ! @end example ! @end ifinfo ! to minimize the cost functional ! @iftex ! @tex ! $$ ! J = \sum x^T Q x + u^T R u ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! J = Sum (x' Q x + u' R u) ! @end example ! @end ifinfo ! @noindent ! @var{z} omitted or ! @iftex ! @tex ! $$ ! J = \sum x^T Q x + u^T R u + 2 x^T Z u ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! J = Sum (x' Q x + u' R u + 2 x' Z u) ! @end example ! @end ifinfo ! @var{z} included. ! The following values are returned: ! @table @var ! @item k ! The state feedback gain, @iftex @tex ! $(A - B K)$ @end tex @end iftex @ifinfo ! (@var{a} - @var{b}@var{k}) @end ifinfo - is stable. ! @item p ! The solution of algebraic Riccati equation. ! ! @item e ! The closed loop poles of @iftex @tex ! $(A - B K)$. @end tex @end iftex @ifinfo ! (@var{a} - @var{b}@var{k}). @end ifinfo ! @end table @end deftypefn ! dlyap -*- texinfo -*- ! @deftypefn {Function File} {} dlyap (@var{a}, @var{b}) ! Solve the discrete-time Lyapunov equation ! @strong{Inputs} ! @table @var ! @item a ! @var{n} by @var{n} matrix; ! @item b ! Matrix: @var{n} by @var{n}, @var{n} by @var{m}, or @var{p} by @var{n}. ! @end table ! @strong{Output} ! @table @var ! @item x ! matrix satisfying appropriate discrete time Lyapunov equation. ! @end table - Options: - @itemize @bullet - @item @var{b} is square: solve - @iftex - @tex - $$ axa^T - x + b = 0 $$ - @end tex - @end iftex - @ifinfo - @code{a x a' - x + b = 0} - @end ifinfo - @item @var{b} is not square: @var{x} satisfies either - @iftex - @tex - $$ axa^T - x + bb^T = 0 $$ - @end tex - @end iftex - @ifinfo @example ! a x a' - x + b b' = 0 @end example ! @end ifinfo ! @noindent ! or ! @iftex ! @tex ! $$ a^Txa - x + b^Tb = 0, $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! a' x a - x + b' b = 0, ! @end example ! @end ifinfo ! @noindent ! whichever is appropriate. ! @end itemize ! @strong{Method} ! Uses Schur decomposition method as in Kitagawa, ! @cite{An Algorithm for Solving the Matrix Equation @math{X = F X F' + S}}, ! International Journal of Control, Volume 25, Number 5, pages 745--753 ! (1977). ! Column-by-column solution method as suggested in ! Hammarling, @cite{Numerical Solution of the Stable, Non-Negative ! Definite Lyapunov Equation}, @acronym{IMA} Journal of Numerical Analysis, Volume ! 2, pages 303--323 (1982). @end deftypefn ! dre -*- texinfo -*- ! @deftypefn {Function File} {[@var{tvals}, @var{plist}] =} dre (@var{sys}, @var{q}, @var{r}, @var{qf}, @var{t0}, @var{tf}, @var{ptol}, @var{maxits}) ! Solve the differential Riccati equation ! @ifinfo ! @example ! -d P/dt = A'P + P A - P B inv(R) B' P + Q ! P(tf) = Qf ! @end example ! @end ifinfo ! @iftex ! @tex ! $$ -{dP \over dt} = A^T P+PA-PBR^{-1}B^T P+Q $$ ! $$ P(t_f) = Q_f $$ ! @end tex ! @end iftex ! for the @acronym{LTI} system sys. Solution of ! standard @acronym{LTI} state feedback optimization ! @ifinfo ! @example ! min int(t0, tf) ( x' Q x + u' R u ) dt + x(tf)' Qf x(tf) ! @end example ! @end ifinfo ! @iftex ! @tex ! $$ \min \int_{t_0}^{t_f} x^T Q x + u^T R u dt + x(t_f)^T Q_f x(t_f) $$ ! @end tex ! @end iftex ! optimal input is ! @ifinfo ! @example ! u = - inv(R) B' P(t) x ! @end example ! @end ifinfo ! @iftex ! @tex ! $$ u = - R^{-1} B^T P(t) x $$ ! @end tex ! @end iftex ! @strong{Inputs} ! @table @var ! @item sys ! continuous time system data structure ! @item q ! state integral penalty ! @item r ! input integral penalty ! @item qf ! state terminal penalty ! @item t0 ! @itemx tf ! limits on the integral ! @item ptol ! tolerance (used to select time samples; see below); default = 0.1 ! @item maxits ! number of refinement iterations (default=10) ! @end table ! @strong{Outputs} ! @table @var ! @item tvals ! time values at which @var{p}(@var{t}) is computed ! @item plist ! list values of @var{p}(@var{t}); @var{plist} @{ @var{i} @} ! is @var{p}(@var{tvals}(@var{i})) ! @end table ! @var{tvals} is selected so that: ! @iftex ! @tex ! $$ \Vert plist_{i} - plist_{i-1} \Vert < ptol $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! || Plist@{i@} - Plist@{i-1@} || < Ptol ! @end example ! @end ifinfo ! for every @var{i} between 2 and length(@var{tvals}). @end deftypefn ! frdemo -*- texinfo -*- ! @deftypefn {Function File} {} frdemo () ! Octave Control Toolbox demo: Frequency Response demo. @end deftypefn ! freqchkw -*- texinfo -*- ! @deftypefn {Function File} {} freqchkw (@var{w}) ! Used by @command{__freqresp__} to check that input frequency vector @var{w} ! is valid. ! Returns boolean value. @end deftypefn ! gram -*- texinfo -*- ! @deftypefn {Function File} {} gram (@var{a}, @var{b}) ! Return controllability gramian @var{m} of the continuous time system ! @math{dx/dt = a x + b u}. ! ! @var{m} satisfies @math{a m + m a' + b b' = 0}. @end deftypefn ! impulse -*- texinfo -*- ! @deftypefn {Function File} {[@var{y}, @var{t}] =} impulse (@var{sys}, @var{inp}, @var{tstop}, @var{n}) ! Impulse response for a linear system. ! The system can be discrete or multivariable (or both). ! If no output arguments are specified, @code{impulse} ! produces a plot or the impulse response data for system @var{sys}. ! ! @strong{Inputs} ! @table @var ! @item sys ! System data structure. ! @item inp ! Index of input being excited ! @item tstop ! The argument @var{tstop} (scalar value) denotes the time when the ! simulation should end. ! @item n ! the number of data values. ! ! Both parameters @var{tstop} and @var{n} can be omitted and will be ! computed from the eigenvalues of the A Matrix. ! @end table ! @strong{Outputs} ! @table @var ! @item y ! Values of the impulse response. ! @item t ! Times of the impulse response. ! @end table ! @seealso{step} @end deftypefn ! lqe -*- texinfo -*- ! @deftypefn {Function File} {[@var{k}, @var{p}, @var{e}] =} lqe (@var{a}, @var{g}, @var{c}, @var{sigw}, @var{sigv}, @var{z}) ! Construct the linear quadratic estimator (Kalman filter) for the ! continuous time system ! @iftex ! @tex ! $$ ! {dx\over dt} = A x + G u ! $$ ! $$ ! y = C x + v ! $$ ! @end tex ! @end iftex ! @ifinfo @example ! dx ! -- = A x + G u ! dt ! ! y = C x + v @end example ! @end ifinfo ! where @var{w} and @var{v} are zero-mean gaussian noise processes with ! respective intensities @example ! sigw = cov (w, w) ! sigv = cov (v, v) ! @end example ! The optional argument @var{z} is the cross-covariance ! @code{cov (@var{w}, @var{v})}. If it is omitted, ! @code{cov (@var{w}, @var{v}) = 0} is assumed. ! Observer structure is @code{dz/dt = A z + B u + k (y - C z - D u)} ! The following values are returned: ! @table @var ! @item k ! The observer gain, ! @iftex ! @tex ! $(A - K C)$ ! @end tex ! @end iftex ! @ifinfo ! (@var{a} - @var{k}@var{c}) ! @end ifinfo ! is stable. ! @item p ! The solution of algebraic Riccati equation. ! @item e ! The vector of closed loop poles of ! @iftex ! @tex ! $(A - K C)$. ! @end tex ! @end iftex ! @ifinfo ! (@var{a} - @var{k}@var{c}). ! @end ifinfo ! @end table @end deftypefn ! lqg -*- texinfo -*- ! @deftypefn {Function File} {[@var{k}, @var{q1}, @var{p1}, @var{ee}, @var{er}] =} lqg (@var{sys}, @var{sigw}, @var{sigv}, @var{q}, @var{r}, @var{in_idx}) ! Design a linear-quadratic-gaussian optimal controller for the system @example ! dx/dt = A x + B u + G w [w]=N(0,[Sigw 0 ]) ! y = C x + v [v] ( 0 Sigv ]) @end example ! or @example ! x(k+1) = A x(k) + B u(k) + G w(k) [w]=N(0,[Sigw 0 ]) ! y(k) = C x(k) + v(k) [v] ( 0 Sigv ]) @end example ! @strong{Inputs} ! @table @var ! @item sys ! system data structure ! @item sigw ! @itemx sigv ! intensities of independent Gaussian noise processes (as above) ! @item q ! @itemx r ! state, control weighting respectively. Control @acronym{ARE} is ! @item in_idx ! names or indices of controlled inputs (see @command{sysidx}, @command{cellidx}) ! ! default: last dim(R) inputs are assumed to be controlled inputs, all ! others are assumed to be noise inputs. ! @end table ! @strong{Outputs} ! @table @var ! @item k ! system data structure format @acronym{LQG} optimal controller (Obtain A, B, C ! matrices with @command{sys2ss}, @command{sys2tf}, or @command{sys2zp} as ! appropriate). ! @item p1 ! Solution of control (state feedback) algebraic Riccati equation. ! @item q1 ! Solution of estimation algebraic Riccati equation. ! @item ee ! Estimator poles. ! @item es ! Controller poles. ! @end table ! @seealso{h2syn, lqe, lqr} @end deftypefn ! lqr -*- texinfo -*- ! @deftypefn {Function File} {[@var{k}, @var{p}, @var{e}] =} lqr (@var{a}, @var{b}, @var{q}, @var{r}, @var{z}) ! construct the linear quadratic regulator for the continuous time system @iftex @tex ! $$ ! {dx\over dt} = A x + B u ! $$ @end tex @end iftex ! @ifinfo ! @example ! dx ! -- = A x + B u ! dt @end example ! @end ifinfo ! to minimize the cost functional @iftex @tex ! $$ ! J = \int_0^\infty x^T Q x + u^T R u ! $$ @end tex @end iftex @ifinfo ! ! @example ! infinity ! / ! J = | x' Q x + u' R u ! / ! t=0 ! @end example @end ifinfo ! @noindent ! @var{z} omitted or @iftex @tex ! $$ ! J = \int_0^\infty x^T Q x + u^T R u + 2 x^T Z u ! $$ @end tex @end iftex @ifinfo ! ! @example ! infinity ! / ! J = | x' Q x + u' R u + 2 x' Z u ! / ! t=0 ! @end example ! @end ifinfo ! @var{z} included. ! ! The following values are returned: ! ! @table @var ! @item k ! The state feedback gain, @iftex @tex ! $(A - B K)$ @end tex @end iftex @ifinfo ! (@var{a} - @var{b}@var{k}) @end ifinfo ! is stable and minimizes the cost functional ! ! @item p ! The stabilizing solution of appropriate algebraic Riccati equation. ! ! @item e ! The vector of the closed loop poles of @iftex @tex ! $(A - B K)$. @end tex @end iftex @ifinfo ! (@var{a} - @var{b}@var{k}). @end ifinfo ! @end table ! @strong{Reference} ! Anderson and Moore, @cite{Optimal control: linear quadratic methods}, ! Prentice-Hall, 1990, pp. 56--58. @end deftypefn ! lsim -*- texinfo -*- ! @deftypefn {Function File} {[@var{y}, @var{x}] =} lsim (@var{sys}, @var{u}, @var{t}, @var{x0}) ! Produce output for a linear simulation of a system; produces ! a plot for the output of the system, @var{sys}. ! @var{u} is an array that contains the system's inputs. Each row in @var{u} ! corresponds to a different time step. Each column in @var{u} corresponds to a ! different input. @var{t} is an array that contains the time index of the ! system; @var{t} should be regularly spaced. If initial conditions are required ! on the system, the @var{x0} vector should be added to the argument list. - When the lsim function is invoked a plot is not displayed; - however, the data is returned in @var{y} (system output) - and @var{x} (system states). @end deftypefn ! ltifr -*- texinfo -*- ! @deftypefn {Function File} {@var{out} =} ltifr (@var{a}, @var{b}, @var{w}) ! @deftypefnx {Function File} {@var{out} =} ltifr (@var{sys}, @var{w}) ! Linear time invariant frequency response of single-input systems. ! ! @strong{Inputs} ! @table @var ! @item a ! @itemx b ! coefficient matrices of @math{dx/dt = A x + B u} ! @item sys ! system data structure ! @item w ! vector of frequencies ! @end table ! @strong{Output} ! @table @var ! @item out ! frequency response, that is: ! @end table ! @iftex ! @tex ! $$ G(j\omega) = (j\omega I-A)^{-1}B $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! -1 ! G(s) = (jw I-A) B ! @end example ! @end ifinfo ! for complex frequencies @math{s = jw}. @end deftypefn ! lyap -*- texinfo -*- ! @deftypefn {Function File} {} lyap (@var{a}, @var{b}, @var{c}) ! @deftypefnx {Function File} {} lyap (@var{a}, @var{b}) ! Solve the Lyapunov (or Sylvester) equation via the Bartels-Stewart ! algorithm (Communications of the @acronym{ACM}, 1972). - If @var{a}, @var{b}, and @var{c} are specified, then @code{lyap} returns - the solution of the Sylvester equation - @iftex - @tex - $$ A X + X B + C = 0 $$ - @end tex - @end iftex - @ifinfo - @example - a x + x b + c = 0 - @end example - @end ifinfo - If only @code{(a, b)} are specified, then @command{lyap} returns the - solution of the Lyapunov equation - @iftex - @tex - $$ A^T X + X A + B = 0 $$ - @end tex - @end iftex - @ifinfo - @example - a' x + x a + b = 0 - @end example - @end ifinfo - If @var{b} is not square, then @code{lyap} returns the solution of either - @iftex - @tex - $$ A^T X + X A + B^T B = 0 $$ - @end tex - @end iftex - @ifinfo @example ! a' x + x a + b' b = 0 @end example ! @end ifinfo @noindent ! or ! @iftex ! @tex ! $$ A X + X A^T + B B^T = 0 $$ ! @end tex ! @end iftex ! @ifinfo @example ! a x + x a' + b b' = 0 @end example - @end ifinfo - @noindent - whichever is appropriate. - - Solves by using the Bartels-Stewart algorithm (1972). @end deftypefn ! nichols -*- texinfo -*- ! @deftypefn {Function File} {[@var{mag}, @var{phase}, @var{w}] =} nichols (@var{sys}, @var{w}, @var{outputs}, @var{inputs}) ! Produce Nichols plot of a system. ! @strong{Inputs} ! @table @var ! @item sys ! System data structure (must be either purely continuous or discrete; ! see @command{is_digital}). ! @item w ! Frequency values for evaluation. ! @itemize ! @item if sys is continuous, then nichols evaluates @math{G(jw)}. ! @item if sys is discrete, then nichols evaluates @math{G(exp(jwT))}, ! where @var{T}=@var{sys}. @var{tsam} is the system sampling time. ! @item the default frequency range is selected as follows (These ! steps are @strong{not} performed if @var{w} is specified): ! @enumerate ! @item via routine @command{__bodquist__}, isolate all poles and zeros away from ! @var{w}=0 (@math{jw=0} or @math{exp(jwT)=1}) and select the frequency range ! based on the breakpoint locations of the frequencies. ! @item if sys is discrete time, the frequency range is limited to jwT in ! @iftex ! @tex ! $ [0, 2p\pi] $. ! @end tex ! @end iftex ! @ifinfo ! [0,2p*pi]. ! @end ifinfo ! @item A ``smoothing'' routine is used to ensure that the plot phase does ! not change excessively from point to point and that singular points ! (e.g., crossovers from +/- 180) are accurately shown. ! @end enumerate ! @end itemize ! @item outputs ! @itemx inputs ! the names or indices of the output(s) and input(s) to be used in the ! frequency response; see @command{sysprune}. ! @end table ! @strong{Outputs} ! @table @var ! @item mag ! @itemx phase ! The magnitude and phase of the frequency response @math{G(jw)} or ! @math{G(exp(jwT))} at the selected frequency values. ! @item w ! The vector of frequency values used. ! @end table ! If no output arguments are given, @command{nichols} plots the results to the screen. ! Descriptive labels are automatically placed. See @command{xlabel}, ! @command{ylabel}, and @command{title}. ! Note: if the requested plot is for an @acronym{MIMO} system, @var{mag} is set to ! @iftex ! @tex ! $ \Vert G(jw) \Vert $ or $ \Vert G( {\rm exp}(jwT) \Vert $ ! @end tex ! @end iftex ! @ifinfo ! ||G(jw)|| or ||G(exp(jwT))|| ! @end ifinfo ! and phase information is not computed. @end deftypefn ! nyquist -*- texinfo -*- ! @deftypefn {Function File} {[@var{realp}, @var{imagp}, @var{w}] =} nyquist (@var{sys}, @var{w}, @var{out_idx}, @var{in_idx}, @var{atol}) ! @deftypefnx {Function File} {} nyquist (@var{sys}, @var{w}, @var{out_idx}, @var{in_idx}, @var{atol}) ! Produce Nyquist plots of a system; if no output arguments are given, Nyquist ! plot is printed to the screen. ! Compute the frequency response of a system. ! @strong{Inputs} (pass as empty to get default values) ! @table @var ! @item sys ! system data structure (must be either purely continuous or discrete; ! see @code{is_digital}) ! @item w ! frequency values for evaluation. ! If sys is continuous, then bode evaluates @math{G(@var{jw})}; ! if sys is discrete, then bode evaluates @math{G(exp(@var{jwT}))}, ! where @var{T} is the system sampling time. ! @item default ! the default frequency range is selected as follows: (These ! steps are @strong{not} performed if @var{w} is specified) ! @enumerate ! @item via routine @command{__bodquist__}, isolate all poles and zeros away from ! @var{w}=0 (@var{jw}=0 or @math{exp(@var{jwT})=1}) and select the frequency ! range based on the breakpoint locations of the frequencies. ! @item if @var{sys} is discrete time, the frequency range is limited ! to @var{jwT} in ! @ifinfo ! [0,2p*pi] ! @end ifinfo ! @iftex ! @tex ! $ [ 0,2 p \pi ] $ ! @end tex ! @end iftex ! @item A ``smoothing'' routine is used to ensure that the plot phase does ! not change excessively from point to point and that singular ! points (e.g., crossovers from +/- 180) are accurately shown. ! @end enumerate ! @item atol ! for interactive nyquist plots: atol is a change-in-slope tolerance ! for the of asymptotes (default = 0; 1e-2 is a good choice). This allows ! the user to ``zoom in'' on portions of the Nyquist plot too small to be ! seen with large asymptotes. ! @end table ! @strong{Outputs} ! @table @var ! @item realp ! @itemx imagp ! the real and imaginary parts of the frequency response ! @math{G(jw)} or @math{G(exp(jwT))} at the selected frequency values. ! @item w ! the vector of frequency values used ! @end table ! ! If no output arguments are given, nyquist plots the results to the screen. ! If @var{atol} != 0 and asymptotes are detected then the user is asked ! interactively if they wish to zoom in (remove asymptotes) ! Descriptive labels are automatically placed. ! Note: if the requested plot is for an @acronym{MIMO} system, a warning message is ! presented; the returned information is of the magnitude ! @iftex ! @tex ! $ \Vert G(jw) \Vert $ or $ \Vert G( {\rm exp}(jwT) \Vert $ ! @end tex ! @end iftex ! @ifinfo ! ||G(jw)|| or ||G(exp(jwT))|| ! @end ifinfo ! only; phase information is not computed. @end deftypefn ! obsv -*- texinfo -*- ! @deftypefn {Function File} {} obsv (@var{sys}, @var{c}) ! @deftypefnx {Function File} {} obsv (@var{a}, @var{c}) ! Build observability matrix: ! @iftex ! @tex ! $$ Q_b = \left[ \matrix{ C \cr ! CA \cr ! CA^2 \cr ! \vdots \cr ! CA^{n-1} } \right ] $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! @group ! | C | ! | CA | ! Qb = | CA^2 | ! | ... | ! | CA^(n-1) | ! @end group ! @end example ! @end ifinfo ! of a system data structure or the pair (@var{a}, @var{c}). ! ! The numerical properties of @command{is_observable} ! are much better for observability tests. @end deftypefn ! place -*- texinfo -*- ! @deftypefn {Function File} {@var{K} =} place (@var{sys}, @var{p}) ! Computes the matrix @var{K} such that if the state ! is feedback with gain @var{K}, then the eigenvalues of the closed loop ! system (i.e. @math{A-BK}) are those specified in the vector @var{p}. ! ! Version: Beta (May-1997): If you have any comments, please let me know. ! (see the file place.m for my address) @end deftypefn ! pzmap -*- texinfo -*- ! @deftypefn {Function File} {[@var{zer}, @var{pol}] =} pzmap (@var{sys}) ! Plots the zeros and poles of a system in the complex plane. ! @strong{Input} ! @table @var ! @item sys ! System data structure. @end table ! @strong{Outputs} ! @table @var ! @item pol ! @item zer ! if omitted, the poles and zeros are plotted on the screen. ! otherwise, @var{pol} and @var{zer} are returned as the ! system poles and zeros (see @command{sys2zp} for a preferable function call). @end table @end deftypefn ! rldemo -*- texinfo -*- ! @deftypefn {Function File} {} rldemo (@var{inputs}) ! Octave Control toolbox demo: Root Locus demo. @end deftypefn ! rlocus -*- texinfo -*- ! @deftypefn {Function File} {[@var{rldata}, @var{k}] =} rlocus (@var{sys}[, @var{increment}, @var{min_k}, @var{max_k}]) - Display root locus plot of the specified @acronym{SISO} system. @example @group ! ----- --- -------- ! --->| + |---|k|---->| SISO |-----------> ! ----- --- -------- | ! - ^ | ! |_____________________________| @end group @end example ! @strong{Inputs} ! @table @var ! @item sys ! system data structure ! @item min_k ! Minimum value of @var{k} ! @item max_k ! Maximum value of @var{k} ! @item increment ! The increment used in computing gain values ! @end table ! ! @strong{Outputs} ! ! Plots the root locus to the screen. ! @table @var ! @item rldata ! Data points plotted: in column 1 real values, in column 2 the imaginary values. ! @item k ! Gains for real axis break points. ! @end table @end deftypefn ! step -*- texinfo -*- ! @deftypefn {Function File} {[@var{y}, @var{t}] =} step (@var{sys}, @var{inp}, @var{tstop}, @var{n}) ! Step response for a linear system. ! The system can be discrete or multivariable (or both). ! If no output arguments are specified, @code{step} ! produces a plot or the step response data for system @var{sys}. ! @strong{Inputs} ! @table @var ! @item sys ! System data structure. ! @item inp ! Index of input being excited ! @item tstop ! The argument @var{tstop} (scalar value) denotes the time when the ! simulation should end. ! @item n ! the number of data values. ! Both parameters @var{tstop} and @var{n} can be omitted and will be ! computed from the eigenvalues of the A Matrix. ! @end table ! @strong{Outputs} ! @table @var ! @item y ! Values of the step response. ! @item t ! Times of the step response. ! @end table ! When invoked with the output parameter @var{y} the plot is not displayed. ! @seealso{impulse} @end deftypefn ! tzero -*- texinfo -*- ! @deftypefn {Function File} {[@var{zer}, @var{gain}] =} tzero (@var{a}, @var{b}, @var{c}, @var{d}, @var{opt}) ! @deftypefnx {Function File} {[@var{zer}, @var{gain}] =} tzero (@var{sys}, @var{opt}) ! Compute transmission zeros of a continuous system: ! @iftex ! @tex ! $$ \dot x = Ax + Bu $$ ! $$ y = Cx + Du $$ ! @end tex ! @end iftex ! @ifinfo @example ! . ! x = Ax + Bu ! y = Cx + Du @end example ! @end ifinfo ! or of a discrete one: ! @iftex ! @tex ! $$ x_{k+1} = Ax_k + Bu_k $$ ! $$ y_k = Cx_k + Du_k $$ ! @end tex ! @end iftex ! @ifinfo @example ! x(k+1) = A x(k) + B u(k) ! y(k) = C x(k) + D u(k) @end example ! @end ifinfo - @strong{Outputs} @table @var ! @item zer ! transmission zeros of the system ! @item gain ! leading coefficient (pole-zero form) of @acronym{SISO} transfer function ! returns gain=0 if system is multivariable @end table ! @strong{References} ! @enumerate ! @item Emami-Naeini and Van Dooren, Automatica, 1982. ! @item Hodel, @cite{Computation of Zeros with Balancing}, 1992 Lin. Alg. Appl. ! @end enumerate @end deftypefn ! tzero2 -*- texinfo -*- ! @deftypefn {Function File} {@var{zr} =} tzero2 (@var{a}, @var{b}, @var{c}, @var{d}, @var{bal}) ! Compute the transmission zeros of @var{a}, @var{b}, @var{c}, @var{d}. ! @var{bal} = balancing option (see balance); default is @code{"B"}. ! Needs to incorporate @command{mvzero} algorithm to isolate finite zeros; ! use @command{tzero} instead. @end deftypefn ! dgkfdemo -*- texinfo -*- ! @deftypefn {Function File} {} dgkfdemo () ! Octave Controls toolbox demo: ! @iftex ! @tex ! $ { \cal H }_2 $/$ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! H-2/H-infinity ! @end ifinfo ! options demos. @end deftypefn ! dhinfdemo -*- texinfo -*- ! @deftypefn {Function File} {} dhinfdemo () ! Demonstrate the functions available to design a discrete ! @iftex ! @tex ! $ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! H-infinity ! @end ifinfo ! controller. This is not a true discrete design. The ! design is carried out in continuous time while the effect of sampling ! is described by a bilinear transformation of the sampled system. ! This method works quite well if the sampling period is "small" ! compared to the plant time constants. - Continuous plant: - @iftex - @tex - $$ G(s) = { 1 \over (s+2) (s+1) } $$ - @end tex - @end iftex - @ifinfo @example @group ! 1 ! G(s) = -------------- ! (s + 2)(s + 1) @end group @end example - @end ifinfo ! Discretised plant with @acronym{ZOH} (Sampling period = @var{Ts} = 1 second): ! @iftex ! @tex ! $$ G(z) = { 0.39958z + 0.14700 \over (z - 0.36788) (z - 0.13533) } $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! @group ! 0.39958z + 0.14700 ! G(z) = -------------------------- ! (z - 0.36788)(z - 0.13533) ! @end group ! @end example ! @end ifinfo @example ! @group ! +----+ ! -------------------->| W1 |---> v1 ! z | +----+ ! ----|-------------+ || T || => min. ! | | vz infty ! | +---+ v +----+ ! *--->| G |--->O--*-->| W2 |---> v2 ! | +---+ | +----+ ! | | ! | +---+ | ! -----| K |<------- ! +---+ ! @end group @end example @noindent ! W1 and W2 are the robustness and performancs weighting functions. @end deftypefn ! h2norm -*- texinfo -*- ! @deftypefn {Function File} {} h2norm (@var{sys}) ! Computes the @iftex @tex ! $ { \cal H }_2 $ @end tex @end iftex @ifinfo ! H-2 @end ifinfo ! norm of a system data structure (continuous time only). ! ! Reference: ! Doyle, Glover, Khargonekar, Francis, @cite{State-Space Solutions to Standard} @iftex @tex ! $ { \cal H }_2 $ @cite{and} $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! @cite{H-2 and H-infinity} @end ifinfo ! @cite{Control Problems}, @acronym{IEEE} @acronym{TAC} August 1989. ! @end deftypefn ! h2syn ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{K}, @var{gain}, @var{kc}, @var{kf}, @var{pc}, @var{pf}] = } h2syn (@var{asys}, @var{nu}, @var{ny}, @var{tol}) ! Design @iftex @tex ! $ { \cal H }_2 $ @end tex @end iftex @ifinfo ! H-2 @end ifinfo ! optimal controller per procedure in ! Doyle, Glover, Khargonekar, Francis, @cite{State-Space Solutions to Standard} @iftex @tex ! $ { \cal H }_2 $ @cite{and} $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! @cite{H-2 and H-infinity} @end ifinfo ! @cite{Control Problems}, @acronym{IEEE} @acronym{TAC} August 1989. ! ! Discrete-time control per Zhou, Doyle, and Glover, @cite{Robust and optimal control}, Prentice-Hall, 1996. ! ! @strong{Inputs} ! @table @var ! @item asys ! system data structure (see ss, sys2ss) ! @itemize @bullet ! @item controller is implemented for continuous time systems ! @item controller is @strong{not} implemented for discrete time systems ! @end itemize ! @item nu ! number of controlled inputs ! @item ny ! number of measured outputs ! @item tol ! threshold for 0. Default: 200*@code{eps} ! @end table ! ! @strong{Outputs} ! @table @var ! @item k ! system controller ! @item gain ! optimal closed loop gain ! @item kc ! full information control (packed) ! @item kf ! state estimator (packed) ! @item pc ! @acronym{ARE} solution matrix for regulator subproblem ! @item pf ! @acronym{ARE} solution matrix for filter subproblem ! @end table ! @end deftypefn ! hinf_ctr ! -*- texinfo -*- ! @deftypefn {Function File} {@var{K} =} hinf_ctr (@var{dgs}, @var{f}, @var{h}, @var{z}, @var{g}) ! Called by @code{hinfsyn} to compute the @iftex @tex ! $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! H-infinity @end ifinfo - optimal controller. ! @strong{Inputs} ! @table @var ! @item dgs ! data structure returned by @code{is_dgkf} ! @item f ! @itemx h ! feedback and filter gain (not partitioned) ! @item g ! final gamma value ! @end table ! @strong{Outputs} ! @table @var ! @item K ! controller (system data structure) ! @end table ! Do not attempt to use this at home; no argument checking performed. @end deftypefn ! hinfdemo -*- texinfo -*- ! @deftypefn {Function File} {} hinfdemo () ! @iftex @tex ! $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! H-infinity @end ifinfo ! design demos for continuous @acronym{SISO} and @acronym{MIMO} systems and a ! discrete system. The @acronym{SISO} system is difficult to control because ! it is non-minimum-phase and unstable. The second design example ! controls the @command{jet707} plant, the linearized state space model of a ! Boeing 707-321 aircraft at @var{v}=80 m/s @iftex @tex ! ($M = 0.26$, $G_{a0} = -3^{\circ}$, ${\alpha}_0 = 4^{\circ}$, ${\kappa}= 50^{\circ}$). @end tex @end iftex @ifinfo ! (@var{M} = 0.26, @var{Ga0} = -3 deg, @var{alpha0} = 4 deg, @var{kappa} = 50 deg). @end ifinfo ! Inputs: (1) thrust and (2) elevator angle ! Outputs: (1) airspeed and (2) pitch angle. The discrete system is a ! stable and second order. ! ! @table @asis ! @item @acronym{SISO} plant: ! @iftex @tex ! $$ G(s) = { s-2 \over (s+2) (s-1) } $$ @end tex @end iftex @ifinfo ! @example ! @group ! s - 2 ! G(s) = -------------- ! (s + 2)(s - 1) ! @end group ! @end example @end ifinfo ! ! @smallexample ! @group ! ! +----+ ! -------------------->| W1 |---> v1 ! z | +----+ ! ----|-------------+ ! | | ! | +---+ v y +----+ ! u *--->| G |--->O--*-->| W2 |---> v2 ! | +---+ | +----+ ! | | ! | +---+ | ! -----| K |<------- ! +---+ ! @end group ! @end smallexample ! @iftex @tex ! $$ { \rm min } \Vert T_{vz} \Vert _\infty $$ @end tex @end iftex @ifinfo ! @example ! min || T || ! vz infty ! @end example @end ifinfo ! ! @var{W1} und @var{W2} are the robustness and performance weighting ! functions. ! ! @item @acronym{MIMO} plant: ! The optimal controller minimizes the ! @iftex ! @tex ! $ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! H-infinity ! @end ifinfo ! norm of the ! augmented plant @var{P} (mixed-sensitivity problem): ! @smallexample ! @group ! w ! 1 -----------+ ! | +----+ ! +---------------------->| W1 |----> z1 ! w | | +----+ ! 2 ------------------------+ ! | | | ! | v +----+ v +----+ ! +--*-->o-->| G |-->o--*-->| W2 |---> z2 ! | +----+ | +----+ ! | | ! ^ v ! u y (to K) ! (from controller K) ! @end group ! @end smallexample ! @iftex @tex ! $$ \left [ \matrix{ z_1 \cr ! z_2 \cr ! y } \right ] = ! P \left [ \matrix{ w_1 \cr ! w_2 \cr ! u } \right ] $$ @end tex @end iftex @ifinfo ! @smallexample ! @group ! + + + + ! | z | | w | ! | 1 | | 1 | ! | z | = [ P ] * | w | ! | 2 | | 2 | ! | y | | u | ! + + + + ! @end group ! @end smallexample @end ifinfo ! @item Discrete system: ! This is not a true discrete design. The design is carried out ! in continuous time while the effect of sampling is described by ! a bilinear transformation of the sampled system. ! This method works quite well if the sampling period is ``small'' ! compared to the plant time constants. ! @item The continuous plant: ! @iftex ! @tex ! $$ G(s) = { 1 \over (s+2)(s+1) } $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! @group ! 1 ! G (s) = -------------- ! k (s + 2)(s + 1) ! @end group ! @end example ! @end ifinfo ! is discretised with a @acronym{ZOH} (Sampling period = @var{Ts} = 1 second): ! @iftex ! @tex ! $$ G(z) = { 0.199788z + 0.073498 \over (z - 0.36788) (z - 0.13534) } $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! @group ! 0.199788z + 0.073498 ! G(z) = -------------------------- ! (z - 0.36788)(z - 0.13534) ! @end group ! @end example ! @end ifinfo ! @smallexample ! @group ! +----+ ! -------------------->| W1 |---> v1 ! z | +----+ ! ----|-------------+ ! | | ! | +---+ v +----+ ! *--->| G |--->O--*-->| W2 |---> v2 ! | +---+ | +----+ ! | | ! | +---+ | ! -----| K |<------- ! +---+ ! @end group ! @end smallexample ! @iftex ! @tex ! $$ { \rm min } \Vert T_{vz} \Vert _\infty $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! min || T || ! vz infty ! @end example ! @end ifinfo ! @var{W1} and @var{W2} are the robustness and performance weighting ! functions. ! @end table @end deftypefn ! hinfnorm -*- texinfo -*- ! @deftypefn {Function File} {[@var{g}, @var{gmin}, @var{gmax}] =} hinfnorm (@var{sys}, @var{tol}, @var{gmin}, @var{gmax}, @var{ptol}) ! Computes the ! @iftex ! @tex ! $ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! H-infinity ! @end ifinfo ! norm of a system data structure. ! ! @strong{Inputs} ! @table @var ! @item sys ! system data structure ! @item tol ! @iftex ! @tex ! $ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! H-infinity ! @end ifinfo ! norm search tolerance (default: 0.001) ! @item gmin ! minimum value for norm search (default: 1e-9) ! @item gmax ! maximum value for norm search (default: 1e+9) ! @item ptol ! pole tolerance: ! @itemize @bullet ! @item if sys is continuous, poles with ! @iftex ! @tex ! $ \vert {\rm real}(pole) \vert < ptol \Vert H \Vert $ ! @end tex ! @end iftex ! @ifinfo ! @math{ |real(pole))| < ptol*||H|| } ! @end ifinfo ! (@var{H} is appropriate Hamiltonian) ! are considered to be on the imaginary axis. ! @item if sys is discrete, poles with ! @iftex ! @tex ! $ \vert { \rm pole } - 1 \vert < ptol \Vert [ s_1 s_2 ] \Vert $ ! @end tex ! @end iftex ! @ifinfo ! @math{|abs(pole)-1| < ptol*||[s1,s2]||} ! @end ifinfo ! (appropriate symplectic pencil) ! are considered to be on the unit circle. ! @item Default value: 1e-9 @end itemize - @end table ! @strong{Outputs} ! @table @var ! @item g ! Computed gain, within @var{tol} of actual gain. @var{g} is returned as Inf ! if the system is unstable. ! @item gmin ! @itemx gmax ! Actual system gain lies in the interval [@var{gmin}, @var{gmax}]. ! @end table - References: - Doyle, Glover, Khargonekar, Francis, @cite{State-space solutions to standard} - @iftex - @tex - $ { \cal H }_2 $ @cite{and} $ { \cal H }_\infty $ - @end tex - @end iftex - @ifinfo - @cite{H-2 and H-infinity} - @end ifinfo - @cite{control problems}, @acronym{IEEE} @acronym{TAC} August 1989; - Iglesias and Glover, @cite{State-Space approach to discrete-time} - @iftex - @tex - $ { \cal H }_\infty $ - @end tex - @end iftex - @ifinfo - @cite{H-infinity} - @end ifinfo - @cite{control}, Int. J. Control, vol 54, no. 5, 1991; - Zhou, Doyle, Glover, @cite{Robust and Optimal Control}, Prentice-Hall, 1996. @end deftypefn ! hinfsyn -*- texinfo -*- ! @deftypefn {Function File} {[@var{k}, @var{g}, @var{gw}, @var{xinf}, @var{yinf}] =} hinfsyn (@var{asys}, @var{nu}, @var{ny}, @var{gmin}, @var{gmax}, @var{gtol}, @var{ptol}, @var{tol}) ! @strong{Inputs} input system is passed as either ! @table @var ! @item asys ! system data structure (see @command{ss}, @command{sys2ss}) ! @itemize @bullet ! @item controller is implemented for continuous time systems ! @item controller is @strong{not} implemented for discrete time systems (see ! bilinear transforms in @command{c2d}, @command{d2c}) ! @end itemize ! @item nu ! number of controlled inputs ! @item ny ! number of measured outputs ! @item gmin ! initial lower bound on ! @iftex ! @tex ! $ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! H-infinity ! @end ifinfo ! optimal gain ! @item gmax ! initial upper bound on ! @iftex ! @tex ! $ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! H-infinity ! @end ifinfo ! Optimal gain. ! @item gtol ! Gain threshold. Routine quits when @var{gmax}/@var{gmin} < 1+tol. ! @item ptol ! poles with @code{abs(real(pole))} ! @iftex ! @tex ! $ < ptol \Vert H \Vert $ ! @end tex ! @end iftex ! @ifinfo ! < ptol*||H|| ! @end ifinfo ! (@var{H} is appropriate ! Hamiltonian) are considered to be on the imaginary axis. ! Default: 1e-9. ! @item tol ! threshold for 0. Default: 200*@code{eps}. ! @var{gmax}, @var{min}, @var{tol}, and @var{tol} must all be positive scalars. ! @end table ! @strong{Outputs} ! @table @var ! @item k ! System controller. ! @item g ! Designed gain value. ! @item gw ! Closed loop system. ! @item xinf ! @acronym{ARE} solution matrix for regulator subproblem. ! @item yinf ! @acronym{ARE} solution matrix for filter subproblem. ! @end table ! References: ! @enumerate ! @item Doyle, Glover, Khargonekar, Francis, @cite{State-Space Solutions ! to Standard} ! @iftex ! @tex ! $ { \cal H }_2 $ @cite{and} $ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! @cite{H-2 and H-infinity} ! @end ifinfo ! @cite{Control Problems}, @acronym{IEEE} @acronym{TAC} August 1989. ! @item Maciejowksi, J.M., @cite{Multivariable feedback design}, ! Addison-Wesley, 1989, @acronym{ISBN} 0-201-18243-2. ! @item Keith Glover and John C. Doyle, @cite{State-space formulae for all ! stabilizing controllers that satisfy an} ! @iftex ! @tex ! $ { \cal H }_\infty $@cite{norm} ! @end tex ! @end iftex ! @ifinfo ! @cite{H-infinity-norm} ! @end ifinfo ! @cite{bound and relations to risk sensitivity}, ! Systems & Control Letters 11, Oct. 1988, pp 167--172. ! @end enumerate @end deftypefn ! hinfsyn_chk -*- texinfo -*- ! @deftypefn {Function File} {[@var{retval}, @var{pc}, @var{pf}] =} hinfsyn_chk (@var{a}, @var{b1}, @var{b2}, @var{c1}, @var{c2}, @var{d12}, @var{d21}, @var{g}, @var{ptol}) ! Called by @code{hinfsyn} to see if gain @var{g} satisfies conditions in ! Theorem 3 of ! Doyle, Glover, Khargonekar, Francis, @cite{State Space Solutions to Standard} ! @iftex ! @tex ! $ { \cal H }_2 $ @cite{and} $ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! @cite{H-2 and H-infinity} ! @end ifinfo ! @cite{Control Problems}, @acronym{IEEE} @acronym{TAC} August 1989. ! @strong{Warning:} do not attempt to use this at home; no argument ! checking performed. ! @strong{Inputs} ! As returned by @code{is_dgkf}, except for: ! @table @var ! @item g ! candidate gain level ! @item ptol ! as in @code{hinfsyn} ! @end table ! @strong{Outputs} ! @table @var ! @item retval ! 1 if g exceeds optimal Hinf closed loop gain, else 0 ! @item pc ! solution of ``regulator'' ! @iftex ! @tex ! $ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! H-infinity ! @end ifinfo ! @acronym{ARE} ! @item pf ! solution of ``filter'' ! @iftex ! @tex ! $ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! H-infinity ! @end ifinfo ! @acronym{ARE} ! @end table ! Do not attempt to use this at home; no argument checking performed. @end deftypefn ! hinfsyn_ric -*- texinfo -*- ! @deftypefn {Function File} {[@var{xinf}, @var{x_ha_err}] =} hinfsyn_ric (@var{a}, @var{bb}, @var{c1}, @var{d1dot}, @var{r}, @var{ptol}) ! Forms ! @example ! xx = ([bb; -c1'*d1dot]/r) * [d1dot'*c1 bb']; ! Ha = [a 0*a; -c1'*c1 - a'] - xx; ! @end example ! and solves associated Riccati equation. ! The error code @var{x_ha_err} indicates one of the following ! conditions: ! @table @asis ! @item 0 ! successful ! @item 1 ! @var{xinf} has imaginary eigenvalues ! @item 2 ! @var{hx} not Hamiltonian ! @item 3 ! @var{xinf} has infinite eigenvalues (numerical overflow) ! @item 4 ! @var{xinf} not symmetric ! @item 5 ! @var{xinf} not positive definite ! @item 6 ! @var{r} is singular ! @end table @end deftypefn ! is_dgkf -*- texinfo -*- ! @deftypefn {Function File} {[@var{retval}, @var{dgkf_struct} ] =} is_dgkf (@var{asys}, @var{nu}, @var{ny}, @var{tol} ) ! Determine whether a continuous time state space system meets ! assumptions of @acronym{DGKF} algorithm. ! Partitions system into: ! @example ! [dx/dt] [A | Bw Bu ][w] ! [ z ] = [Cz | Dzw Dzu ][u] ! [ y ] [Cy | Dyw Dyu ] ! @end example ! or similar discrete-time system. ! If necessary, orthogonal transformations @var{qw}, @var{qz} and nonsingular ! transformations @var{ru}, @var{ry} are applied to respective vectors ! @var{w}, @var{z}, @var{u}, @var{y} in order to satisfy @acronym{DGKF} assumptions. ! Loop shifting is used if @var{dyu} block is nonzero. ! ! @strong{Inputs} ! @table @var ! @item asys ! system data structure ! @item nu ! number of controlled inputs ! @item ny ! number of measured outputs ! @item tol ! threshold for 0; default: 200*@code{eps}. ! @end table ! @strong{Outputs} ! @table @var ! @item retval ! true(1) if system passes check, false(0) otherwise ! @item dgkf_struct ! data structure of @command{is_dgkf} results. Entries: ! @table @var ! @item nw ! @itemx nz ! dimensions of @var{w}, @var{z} ! @item a ! system @math{A} matrix ! @item bw ! (@var{n} x @var{nw}) @var{qw}-transformed disturbance input matrix ! @item bu ! (@var{n} x @var{nu}) @var{ru}-transformed controlled input matrix; ! @math{B = [Bw Bu]} ! @item cz ! (@var{nz} x @var{n}) Qz-transformed error output matrix ! @item cy ! (@var{ny} x @var{n}) @var{ry}-transformed measured output matrix ! @math{C = [Cz; Cy]} ! @item dzu ! @item dyw ! off-diagonal blocks of transformed system @math{D} matrix that enter ! @var{z}, @var{y} from @var{u}, @var{w} respectively ! @item ru ! controlled input transformation matrix ! @item ry ! observed output transformation matrix ! @item dyu_nz ! nonzero if the @var{dyu} block is nonzero. ! @item dyu ! untransformed @var{dyu} block ! @item dflg ! nonzero if the system is discrete-time ! @end table ! @end table ! @code{is_dgkf} exits with an error if the system is mixed ! discrete/continuous. ! @strong{References} ! @table @strong ! @item [1] ! Doyle, Glover, Khargonekar, Francis, @cite{State Space Solutions to Standard} ! @iftex ! @tex ! $ { \cal H }_2 $ @cite{and} $ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! @cite{H-2 and H-infinity} ! @end ifinfo ! @cite{Control Problems}, @acronym{IEEE} @acronym{TAC} August 1989. ! @item [2] ! Maciejowksi, J.M., @cite{Multivariable Feedback Design}, Addison-Wesley, 1989. ! @end table @end deftypefn ! wgt1o -*- texinfo -*- ! @deftypefn {Function File} {@var{W} =} wgt1o (@var{vl}, @var{vh}, @var{fc}) ! State space description of a first order weighting function. ! ! Weighting function are needed by the ! @iftex ! @tex ! $ { \cal H }_2 / { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! H-2/H-infinity ! @end ifinfo ! design procedure. ! These functions are part of the augmented plant @var{P} ! (see @command{hinfdemo} for an application example). ! @strong{Inputs} ! @table @var ! @item vl ! Gain at low frequencies. ! @item vh ! Gain at high frequencies. ! @item fc ! Corner frequency (in Hz, @strong{not} in rad/sec) ! @end table ! @strong{Output} ! @table @var ! @item W ! Weighting function, given in form of a system data structure. ! @end table @end deftypefn ! dezero -*- texinfo -*- ! @deftypefn {Functin File} {} dezero (@var{s}) ! Remove trailing blank entries and all zero entries from the string s. @end deftypefn ! dlqg ! O B S O L E T E * * * D O N O T U S E! ! ! Use lqg instead. ! function [K,Q,P,Ee,Er] = dlqg(A,B,C,G,Sigw,Sigv,Q,R) ! function [K,Q,P,Ee,Er] = dlqg(Sys,Sigw,Sigv,Q,R) ! design a discrete-time linear quadratic gaussian optimal controller ! for the system ! x(k+1) = A x(k) + B u(k) + G w(k) [w]=N(0,[Sigw 0 ]) ! y(k) = C x(k) + v(k) [v] ( 0 Sigv ]) ! Outputs: ! K: system data structure format LQG optimal controller ! P: Solution of control (state feedback) algebraic Riccati equation ! Q: Solution of estimation algebraic Riccati equation ! Ee: estimator poles ! Es: controller poles ! inputs: ! A,B,C,G, or Sys: state space representation of system. ! Sigw, Sigv: covariance matrices of independent Gaussian noise processes ! (as above) ! Q, R: state, control weighting matrices for dlqr call respectively. ! See also: lqg, dlqe, dlqr ! minfo ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{systype}, @var{nout}, @var{nin}, @var{ncstates}, @var{ndstates}] =} minfo (@var{inmat}) ! Determines the type of system matrix. @var{inmat} can be a varying, ! a system, a constant, and an empty matrix. ! @strong{Outputs} ! @table @var ! @item systype ! Can be one of: varying, system, constant, and empty. ! @item nout ! The number of outputs of the system. ! @item nin ! The number of inputs of the system. ! @item ncstates ! The number of continuous states of the system. ! @item ndstates ! The number of discrete states of the system. ! @end table ! @end deftypefn ! packsys ! O B S O L E T E: use ss instead. ! function Asys = packsys(a,b,c[,d,dflg]) ! dflg: 0 for continuous time system, 1 for discrete-time system. ! defaults: ! D: 0 matrix of appropriate dimension. ! dflg: 0 (continuous time) ! Note: discrete-state sampling time is not included! ! qzval -*- texinfo -*- ! @deftypefn {Function File} {} qzval (@var{a}, @var{b}) ! Compute generalized eigenvalues of the matrix pencil ! @ifinfo @example ! (A - lambda B). @end example - @end ifinfo - @iftex - @tex - $(A - \lambda B)$. - @end tex - @end iftex - - @var{a} and @var{b} must be real matrices. - - @code{qzval} is obsolete; use @code{qz} instead. @end deftypefn ! rotg ! function [c,s] = rotg(a,b) ! givens rotation calculation ! NOTE: Use [c,s] = givens(a,b) instead. ! series ! Forms the series connection of two systems. ! Superseded by sysmult. Do not use this routine! ! used internally in zp2ss ! Type of input: Transfer functions ! Command: [num,den]=series(num1,den1,num2,den2) ! Forms the series representation of the two transfer functions. ! Type of input: State space systems ! Command: [a,b,c,d]=series(a1,b1,c1,d1,a2,b2,c2,d2) ! Forms the series representation of the two state space system arguments. ! The series connected system will have the inputs of system 1 and the ! outputs of system 2. ! Type of input: system data structure ! Command: syst=series(syst1,syst2) ! Forms the series representation of the two mu system arguments. ! swapcols ! -*- texinfo -*- ! @deftypefn {Function File} {} swapcols (inputs) ! @format ! function B = swapcols(A) ! permute columns of A into reverse order ! @end format ! @end deftypefn ! swaprows ! -*- texinfo -*- ! @deftypefn {Function File} {} swaprows (inputs) ! @format ! function B = swaprows(A) ! permute rows of A into reverse order ! @end format @end deftypefn ! syschnames -*- texinfo -*- ! @deftypefn {Function File} {} syschnames (@var{sys}, @var{opt}, @var{list}, @var{names}) ! Superseded by @command{syssetsignals}. @end deftypefn ! unpacksys ! [a,b,c,d] = unpacksys(sys) ! Obsolete. Use sys2ss instead. ! __abcddims__ ! Undocumented internal function. ! __syschnamesl__ ! Undocumented internal function. ! __sysconcat__ ! Undocumented internal function. ! __syscont_disc__ ! Undocumented internal function. ! __sysdefioname__ ! Undocumented internal function. ! __sysdefstname__ ! Undocumented internal function. ! __sysgroupn__ ! Undocumented internal function. ! __tf2sysl__ ! Undocumented internal function. ! __tfl__ ! Undocumented internal function. ! __zp2ssg2__ ! Undocumented internal function. ! abcddim -*- texinfo -*- ! @deftypefn {Function File} {[@var{n}, @var{m}, @var{p}] =} abcddim (@var{a}, @var{b}, @var{c}, @var{d}) ! Check for compatibility of the dimensions of the matrices defining ! the linear system ! @iftex ! @tex ! $[A, B, C, D]$ corresponding to ! $$ ! \eqalign{ ! {dx\over dt} &= A x + B u\cr ! y &= C x + D u} ! $$ ! @end tex ! @end iftex ! @ifinfo ! [A, B, C, D] corresponding to @example ! dx/dt = a x + b u ! y = c x + d u @end example ! @end ifinfo ! or a similar discrete-time system. ! ! If the matrices are compatibly dimensioned, then @code{abcddim} returns ! ! @table @var ! @item n ! The number of system states. ! ! @item m ! The number of system inputs. ! ! @item p ! The number of system outputs. ! @end table ! ! Otherwise @code{abcddim} returns @var{n} = @var{m} = @var{p} = @minus{}1. ! ! Note: n = 0 (pure gain block) is returned without warning. ! @seealso{is_abcd} @end deftypefn ! buildssic -*- texinfo -*- ! @deftypefn {Function File} {} buildssic (@var{clst}, @var{ulst}, @var{olst}, @var{ilst}, @var{s1}, @var{s2}, @var{s3}, @var{s4}, @var{s5}, @var{s6}, @var{s7}, @var{s8}) ! ! Form an arbitrary complex (open or closed loop) system in ! state-space form from several systems. @command{buildssic} can ! easily (despite its cryptic syntax) integrate transfer functions ! from a complex block diagram into a single system with one call. ! This function is especially useful for building open loop ! interconnections for ! @iftex ! @tex ! $ { \cal H }_\infty $ and $ { \cal H }_2 $ ! @end tex ! @end iftex ! @ifinfo ! H-infinity and H-2 ! @end ifinfo ! designs or for closing loops with these controllers. ! ! Although this function is general purpose, the use of @command{sysgroup} ! @command{sysmult}, @command{sysconnect} and the like is recommended for ! standard operations since they can handle mixed discrete and continuous ! systems and also the names of inputs, outputs, and states. ! The parameters consist of 4 lists that describe the connections ! outputs and inputs and up to 8 systems @var{s1}--@var{s8}. ! Format of the lists: ! @table @var ! @item clst ! connection list, describes the input signal of ! each system. The maximum number of rows of Clst is ! equal to the sum of all inputs of s1-s8. ! Example: ! @code{[1 2 -1; 2 1 0]} means that: new input 1 is old input 1 ! + output 2 - output 1, and new input 2 is old input 2 ! + output 1. The order of rows is arbitrary. ! @item ulst ! if not empty the old inputs in vector @var{ulst} will ! be appended to the outputs. You need this if you ! want to ``pull out'' the input of a system. Elements ! are input numbers of @var{s1}--@var{s8}. ! @item olst ! output list, specifies the outputs of the resulting ! systems. Elements are output numbers of @var{s1}--@var{s8}. ! The numbers are allowed to be negative and may ! appear in any order. An empty matrix means ! all outputs. ! @item ilst ! input list, specifies the inputs of the resulting ! systems. Elements are input numbers of @var{s1}--@var{s8}. ! The numbers are allowed to be negative and may ! appear in any order. An empty matrix means ! all inputs. ! @end table - Example: Very simple closed loop system. @example @group ! w e +-----+ u +-----+ ! --->o--*-->| K |--*-->| G |--*---> y ! ^ | +-----+ | +-----+ | ! - | | | | ! | | +----------------> u ! | | | ! | +-------------------------|---> e ! | | ! +----------------------------+ @end group @end example ! The closed loop system @var{GW} can be obtained by ! @example ! GW = buildssic([1 2; 2 -1], 2, [1 2 3], 2, G, K); ! @end example ! @table @var ! @item clst ! 1st row: connect input 1 (@var{G}) with output 2 (@var{K}). ! ! 2nd row: connect input 2 (@var{K}) with negative output 1 (@var{G}). ! @item ulst ! Append input of 2 (@var{K}) to the number of outputs. ! @item olst ! Outputs are output of 1 (@var{G}), 2 (@var{K}) and ! appended output 3 (from @var{ulst}). ! @item ilst ! The only input is 2 (@var{K}). ! @end table - Here is a real example: @example @group ! +----+ ! -------------------->| W1 |---> v1 ! z | +----+ ! ----|-------------+ ! | | ! | +---+ v +----+ ! *--->| G |--->O--*-->| W2 |---> v2 ! | +---+ | +----+ ! | | ! | v ! u y @end group @end example - @iftex - @tex - $$ { \rm min } \Vert GW_{vz} \Vert _\infty $$ - @end tex - @end iftex - @ifinfo - @example - min || GW || - vz infty - @end example - @end ifinfo - - The closed loop system @var{GW} - @iftex - @tex - from $ [z, u]^T $ to $ [v_1, v_2, y]^T $ - @end tex - @end iftex - @ifinfo - from [z, u]' to [v1, v2, y]' - @end ifinfo - can be obtained by (all @acronym{SISO} systems): - @example - GW = buildssic([1, 4; 2, 4; 3, 1], 3, [2, 3, 5], - [3, 4], G, W1, W2, One); - @end example - where ``One'' is a unity gain (auxiliary) function with order 0. - (e.g. @code{One = ugain(1);}) @end deftypefn ! c2d -*- texinfo -*- ! @deftypefn {Function File} {} c2d (@var{sys}, @var{opt}, @var{t}) ! @deftypefnx {Function File} {} c2d (@var{sys}, @var{t}) ! ! Converts the system data structure describing: ! @iftex ! @tex ! $$ \dot x = A_cx + B_cu $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! . ! x = Ac x + Bc u ! @end example ! @end ifinfo ! into a discrete time equivalent model: ! @iftex ! @tex ! $$ x_{n+1} = A_dx_n + B_du_n $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! x[n+1] = Ad x[n] + Bd u[n] ! @end example ! @end ifinfo ! via the matrix exponential or bilinear transform. ! ! @strong{Inputs} ! @table @var ! @item sys ! system data structure (may have both continuous time and discrete ! time subsystems) ! @item opt ! string argument; conversion option (optional argument; ! may be omitted as shown above) ! @table @code ! @item "ex" ! use the matrix exponential (default) ! @item "bi" ! use the bilinear transformation ! @iftex ! @tex ! $$ s = { 2(z-1) \over T(z+1) } $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! 2(z-1) ! s = ----- ! T(z+1) ! @end example ! @end ifinfo ! FIXME: This option exits with an error if @var{sys} is not purely ! continuous. (The @code{ex} option can handle mixed systems.) ! @item "matched" ! Use the matched pole/zero equivalent transformation (currently only ! works for purely continuous @acronym{SISO} systems). ! @end table ! @item t ! sampling time; required if @var{sys} is purely continuous. ! @strong{Note} that if the second argument is not a string, @code{c2d()} ! assumes that the second argument is @var{t} and performs ! appropriate argument checks. ! @end table ! @strong{Output} ! @table @var ! @item dsys ! Discrete time equivalent via zero-order hold, sample each @var{t} sec. ! @end table ! This function adds the suffix @code{_d} ! to the names of the new discrete states. @end deftypefn ! cellidx -*- texinfo -*- ! @deftypefn {Function File} {[@var{idxvec}, @var{errmsg}] =} cellidx (@var{listvar}, @var{strlist}) ! Return indices of string entries in @var{listvar} that match strings ! in @var{strlist}. ! Both @var{listvar} and @var{strlist} may be passed as strings or ! string matrices. If they are passed as string matrices, each entry ! is processed by @code{deblank} prior to searching for the entries. ! The first output is the vector of indices in @var{listvar}. ! If @var{strlist} contains a string not in @var{listvar}, then ! an error message is returned in @var{errmsg}. If only one output ! argument is requested, then @var{cellidx} prints @var{errmsg} to the ! screen and exits with an error. @end deftypefn ! d2c -*- texinfo -*- ! @deftypefn {Function File} {} d2c (@var{sys}, @var{tol}) ! @deftypefnx {Function File} {} d2c (@var{sys}, @var{opt}) ! Convert a discrete (sub)system into a purely continuous one. ! The sampling time used is @code{sysgettsam(@var{sys})}. ! ! @strong{Inputs} ! @table @var ! @item sys ! system data structure with discrete components ! @item tol ! Scalar value. ! Tolerance for convergence of default @code{"log"} option (see below) ! @item opt ! conversion option. Choose from: ! @table @code ! @item "log" ! (default) Conversion is performed via a matrix logarithm. ! Due to some problems with this computation, it is ! followed by a steepest descent algorithm to identify continuous time ! @var{a}, @var{b}, to get a better fit to the original data. ! ! If called as @code{d2c (@var{sys}, @var{tol})}, with @var{tol} ! positive scalar, the @code{"log"} option is used. The default value ! for @var{tol} is @code{1e-8}. ! @item "bi" ! Conversion is performed via bilinear transform ! @math{z = (1 + s T / 2)/(1 - s T / 2)} where @math{T} is the ! system sampling time (see @code{sysgettsam}). ! ! FIXME: bilinear option exits with an error if @var{sys} is not purely ! discrete ! @end table ! @end table ! @strong{Output} ! @table @var ! @item csys ! continuous time system (same dimensions and signal names as in @var{sys}). ! @end table @end deftypefn ! dmr2d -*- texinfo -*- ! @deftypefn {Function File} {[@var{dsys}, @var{fidx}] =} dmr2d (@var{sys}, @var{idx}, @var{sprefix}, @var{ts2}, @var{cuflg}) ! convert a multirate digital system to a single rate digital system ! states specified by @var{idx}, @var{sprefix} are sampled at @var{ts2}, all ! others are assumed sampled at @var{ts1} = @code{sysgettsam (@var{sys})}. ! ! @strong{Inputs} ! @table @var ! @item sys ! discrete time system; ! @code{dmr2d} exits with an error if @var{sys} is not discrete ! @item idx ! indices or names of states with sampling time ! @code{sysgettsam(@var{sys})} (may be empty); see @code{cellidx} ! @item sprefix ! list of string prefixes of states with sampling time ! @code{sysgettsam(@var{sys})} (may be empty) ! @item ts2 ! sampling time of states not specified by @var{idx}, @var{sprefix} ! must be an integer multiple of @code{sysgettsam(@var{sys})} ! @item cuflg ! "constant u flag" if @var{cuflg} is nonzero then the system inputs are ! assumed to be constant over the revised sampling interval @var{ts2}. ! Otherwise, since the inputs can change during the interval ! @var{t} in @math{[k ts2, (k+1) ts2]}, an additional set of inputs is ! included in the revised B matrix so that these intersample inputs ! may be included in the single-rate system. ! default @var{cuflg} = 1. ! @end table ! ! @strong{Outputs} ! @table @var ! @item dsys ! equivalent discrete time system with sampling time @var{ts2}. ! ! The sampling time of sys is updated to @var{ts2}. ! ! if @var{cuflg}=0 then a set of additional inputs is added to ! the system with suffixes _d1, @dots{}, _dn to indicate their ! delay from the starting time k @var{ts2}, i.e. ! u = [u_1; u_1_d1; @dots{}, u_1_dn] where u_1_dk is the input ! k*ts1 units of time after u_1 is sampled. (@var{ts1} is ! the original sampling time of the discrete time system and ! @var{ts2} = (n+1)*ts1) ! ! @item fidx ! indices of "formerly fast" states specified by @var{idx} and @var{sprefix}; ! these states are updated to the new (slower) sampling interval @var{ts2}. ! @end table ! ! @strong{WARNING} Not thoroughly tested yet; especially when ! @var{cuflg} == 0. @end deftypefn ! fir2sys -*- texinfo -*- ! @deftypefn {Function File} {} fir2sys (@var{num}, @var{tsam}, @var{inname}, @var{outname}) ! construct a system data structure from @acronym{FIR} description ! ! @strong{Inputs} ! @table @var ! @item num ! vector of coefficients ! @ifinfo ! [c0, c1, @dots{}, cn] ! @end ifinfo ! @iftex ! @tex ! $ [c_0, c_1, \ldots, c_n ]$ ! @end tex ! @end iftex ! of the @acronym{SISO} @acronym{FIR} transfer function ! @ifinfo ! C(z) = c0 + c1*z^(-1) + c2*z^(-2) + @dots{} + cn*z^(-n) ! @end ifinfo ! @iftex ! @tex ! $$ C(z) = c_0 + c_1z^{-1} + c_2z^{-2} + \ldots + c_nz^{-n} $$ ! @end tex ! @end iftex ! ! @item tsam ! sampling time (default: 1) ! @item inname ! name of input signal; may be a string or a list with a single entry. ! @item outname ! name of output signal; may be a string or a list with a single entry. ! @end table ! @strong{Output} ! @table @var ! @item sys ! system data structure @end table ! @strong{Example} ! @example ! octave:1> sys = fir2sys([1 -1 2 4],0.342,\ ! > "A/D input","filter output"); ! octave:2> sysout(sys) ! Input(s) ! 1: A/D input ! ! Output(s): ! 1: filter output (discrete) ! Sampling interval: 0.342 ! transfer function form: ! 1*z^3 - 1*z^2 + 2*z^1 + 4 ! ------------------------- ! 1*z^3 + 0*z^2 + 0*z^1 + 0 ! @end example @end deftypefn ! is_abcd -*- texinfo -*- ! @deftypefn {Function File} {@var{retval} =} is_abcd (@var{a}, @var{b}, @var{c}, @var{d}) ! Returns @var{retval} = 1 if the dimensions of @var{a}, @var{b}, ! @var{c}, @var{d} are compatible, otherwise @var{retval} = 0 with an ! appropriate diagnostic message printed to the screen. The matrices ! @var{b}, @var{c}, or @var{d} may be omitted. ! @seealso{abcddim} @end deftypefn ! is_controllable -*- texinfo -*- ! @deftypefn {Function File} {[@var{retval}, @var{u}] =} is_controllable (@var{sys}, @var{tol}) ! @deftypefnx {Function File} {[@var{retval}, @var{u}] =} is_controllable (@var{a}, @var{b}, @var{tol}) ! Logical check for system controllability. ! ! @strong{Inputs} ! @table @var ! @item sys ! system data structure ! @item a ! @itemx b ! @var{n} by @var{n}, @var{n} by @var{m} matrices, respectively ! @item tol ! optional roundoff parameter. Default value: @code{10*eps} ! @end table ! ! @strong{Outputs} ! @table @var ! @item retval ! Logical flag; returns true (1) if the system @var{sys} or the ! pair (@var{a}, @var{b}) is controllable, whichever was passed as input ! arguments. ! @item u ! @var{u} is an orthogonal basis of the controllable subspace. ! @end table ! ! @strong{Method} ! Controllability is determined by applying Arnoldi iteration with ! complete re-orthogonalization to obtain an orthogonal basis of the ! Krylov subspace ! @example ! span ([b,a*b,...,a^@{n-1@}*b]). ! @end example ! The Arnoldi iteration is executed with @code{krylov} if the system ! has a single input; otherwise a block Arnoldi iteration is performed ! with @code{krylovb}. ! @seealso{size, rows, columns, length, ismatrix, isscalar, isvector ! is_observable, is_stabilizable, is_detectable, krylov, krylovb} @end deftypefn ! is_detectable -*- texinfo -*- ! @deftypefn {Function File} {@var{retval} =} is_detectable (@var{a}, @var{c}, @var{tol}, @var{dflg}) ! @deftypefnx {Function File} {@var{retval} =} is_detectable (@var{sys}, @var{tol}) ! Test for detectability (observability of unstable modes) of (@var{a}, @var{c}). ! ! Returns 1 if the system @var{a} or the pair (@var{a}, @var{c}) is ! detectable, 0 if not, and -1 if the system has unobservable modes at the ! imaginary axis (unit circle for discrete-time systems). ! ! @strong{See} @command{is_stabilizable} for detailed description of ! arguments and computational method. ! @seealso{is_stabilizable, size, rows, columns, length, ismatrix, ! isscalar, isvector} @end deftypefn ! is_digital -*- texinfo -*- ! @deftypefn {Function File} {@var{digital} =} is_digital (@var{sys}, @var{eflg}) ! Return nonzero if system is digital. ! ! @strong{Inputs} ! @table @var ! @item sys ! System data structure. ! @item eflg ! When equal to 0 (default value), exits with an error if the system ! is mixed (continuous and discrete components); when equal to 1, print ! a warning if the system is mixed (continuous and discrete); when equal ! to 2, operate silently. ! @end table ! ! @strong{Output} ! @table @var ! @item digital ! When equal to 0, the system is purely continuous; when equal to 1, the ! system is purely discrete; when equal to -1, the system is mixed continuous ! and discrete. ! @end table ! Exits with an error if @var{sys} is a mixed (continuous and discrete) system. @end deftypefn ! is_observable -*- texinfo -*- ! @deftypefn {Function File} {[@var{retval}, @var{u}] =} is_observable (@var{a}, @var{c}, @var{tol}) ! @deftypefnx {Function File} {[@var{retval}, @var{u}] =} is_observable (@var{sys}, @var{tol}) ! Logical check for system observability. ! ! Default: tol = @code{tol = 10*norm(a,'fro')*eps} ! ! Returns 1 if the system @var{sys} or the pair (@var{a}, @var{c}) is ! observable, 0 if not. ! ! See @command{is_controllable} for detailed description of arguments ! and default values. ! @seealso{size, rows, columns, length, ismatrix, isscalar, isvector} @end deftypefn ! is_sample -*- texinfo -*- ! @deftypefn {Function File} {} is_sample (@var{ts}) ! Return true if @var{ts} is a valid sampling time ! (real, scalar, > 0). @end deftypefn ! is_signal_list -*- texinfo -*- ! @deftypefn {Function File} {} is_signal_list (@var{mylist}) ! Return true if @var{mylist} is a list of individual strings. @end deftypefn ! is_siso -*- texinfo -*- ! @deftypefn {Function File} {} is_siso (@var{sys}) ! Returns nonzero if the system data structure ! @var{sys} is single-input, single-output. @end deftypefn ! is_stabilizable -*- texinfo -*- ! @deftypefn {Function File} {@var{retval} =} is_stabilizable (@var{sys}, @var{tol}) ! @deftypefnx {Function File} {@var{retval} =} is_stabilizable (@var{a}, @var{b}, @var{tol}, @var{dflg}) ! Logical check for system stabilizability (i.e., all unstable modes are controllable). ! Returns 1 if the system is stabilizable, 0 if the system is not stabilizable, -1 ! if the system has non stabilizable modes at the imaginary axis (unit circle for ! discrete-time systems. ! Test for stabilizability is performed via Hautus Lemma. If ! @iftex ! @tex ! @var{dflg}$\neq$0 ! @end tex ! @end iftex ! @ifinfo ! @var{dflg}!=0 ! @end ifinfo ! assume that discrete-time matrices (a,b) are supplied. ! @seealso{size, rows, columns, length, ismatrix, isscalar, isvector ! is_observable, is_stabilizable, is_detectable} ! @end deftypefn ! is_stable ! -*- texinfo -*- ! @deftypefn {Function File} {} is_stable (@var{a}, @var{tol}, @var{dflg}) ! @deftypefnx {Function File} {} is_stable (@var{sys}, @var{tol}) ! Returns 1 if the matrix @var{a} or the system @var{sys} ! is stable, or 0 if not. ! @strong{Inputs} ! @table @var ! @item tol ! is a roundoff parameter, set to 200*@code{eps} if omitted. ! @item dflg ! Digital system flag (not required for system data structure): ! @table @code ! @item @var{dflg} != 0 ! stable if eig(a) is in the unit circle ! @item @var{dflg} == 0 ! stable if eig(a) is in the open LHP (default) ! @end table @end table ! @seealso{size, rows, columns, length, ismatrix, isscalar, isvector ! is_observable, is_stabilizable, is_detectable, krylov, krylovb} @end deftypefn ! jet707 -*- texinfo -*- ! @deftypefn {Function File} {@var{sys} =} jet707 () ! Creates a linearized state-space model of a Boeing 707-321 aircraft ! at @var{v}=80 m/s ! @iftex ! @tex ! ($M = 0.26$, $G_{a0} = -3^{\circ}$, ${\alpha}_0 = 4^{\circ}$, ${\kappa}= 50^{\circ}$). ! @end tex ! @end iftex ! @ifinfo ! (@var{M} = 0.26, @var{Ga0} = -3 deg, @var{alpha0} = 4 deg, @var{kappa} = 50 deg). ! @end ifinfo ! ! System inputs: (1) thrust and (2) elevator angle. ! ! System outputs: (1) airspeed and (2) pitch angle. ! ! @strong{Reference}: R. Brockhaus: @cite{Flugregelung} (Flight ! Control), Springer, 1994. ! @seealso{ord2} @end deftypefn ! listidx -*- texinfo -*- ! @deftypefn {Function File} {[@var{idxvec}, @var{errmsg}] =} listidx (@var{listvar}, @var{strlist}) ! Return indices of string entries in @var{listvar} that match strings ! in @var{strlist}. ! ! Both @var{listvar} and @var{strlist} may be passed as strings or ! string matrices. If they are passed as string matrices, each entry ! is processed by @code{deblank} prior to searching for the entries. ! The first output is the vector of indices in @var{listvar}. ! If @var{strlist} contains a string not in @var{listvar}, then ! an error message is returned in @var{errmsg}. If only one output ! argument is requested, then @var{listidx} prints @var{errmsg} to the ! screen and exits with an error. @end deftypefn ! moddemo -*- texinfo -*- ! @deftypefn {Function File} {} moddemo (@var{inputs}) ! Octave Control toolbox demo: Model Manipulations demo. ! @end deftypefn ! ord2 -*- texinfo -*- ! @deftypefn {Function File} {} ord2 (@var{nfreq}, @var{damp}, @var{gain}) ! Creates a continuous 2nd order system with parameters: ! @strong{Inputs} ! @table @var ! @item nfreq ! natural frequency [Hz]. (not in rad/s) ! @item damp ! damping coefficient ! @item gain ! dc-gain ! This is steady state value only for damp > 0. ! gain is assumed to be 1.0 if omitted. ! @end table ! @strong{Output} ! @table @var ! @item outsys ! system data structure has representation with ! @ifinfo ! @math{w = 2 * pi * nfreq}: ! @end ifinfo ! @iftex ! @tex ! $ w = 2 \pi f $: ! @end tex ! @end iftex @example ! @group ! / \ ! | / -2w*damp -w \ / w \ | ! G = | | |, | |, [ 0 gain ], 0 | ! | \ w 0 / \ 0 / | ! \ / ! @end group @end example ! @end table ! @strong{See also} @command{jet707} (@acronym{MIMO} example, Boeing 707-321 ! aircraft model) ! @end deftypefn ! parallel ! -*- texinfo -*- ! @deftypefn {Function File} {@var{ksys} =} parallel (@var{asys}, @var{bsys}) ! Forms the parallel connection of two systems. @example ! @group ! -------------------- ! | -------- | ! u ----->|----> | asys |--->|----> y1 ! | | -------- | ! | | -------- | ! |--->|----> | bsys |--->|----> y2 ! | -------- | ! -------------------- ! ksys ! @end group @end example ! @end deftypefn ! ss ! -*- texinfo -*- ! @deftypefn {Function File} {@var{outsys} =} ss (@var{a}, @var{b}, @var{c}, @var{d}, @var{tsam}, @var{n}, @var{nz}, @var{stname}, @var{inname}, @var{outname}, @var{outlist}) ! Create system structure from state-space data. May be continuous, ! discrete, or mixed (sampled data) ! ! @strong{Inputs} ! @table @var ! @item a ! @itemx b ! @itemx c ! @itemx d ! usual state space matrices. ! ! default: @var{d} = zero matrix ! ! @item tsam ! sampling rate. Default: @math{tsam = 0} (continuous system) ! ! @item n ! @itemx nz ! number of continuous, discrete states in the system ! ! If @var{tsam} is 0, @math{n = @code{rows}(@var{a})}, @math{nz = 0}. ! If @var{tsam} is greater than zero, @math{n = 0}, ! @math{nz = @code{rows}(@var{a})} ! see below for system partitioning ! @item stname ! cell array of strings of state signal names ! default (@var{stname}=[] on input): @code{x_n} for continuous states, ! @code{xd_n} for discrete states ! @item inname ! cell array of strings of input signal names ! default (@var{inname} = [] on input): @code{u_n} ! @item outname ! cell array of strings of output signal names ! default (@var{outname} = [] on input): @code{y_n} ! @item outlist ! ! list of indices of outputs y that are sampled ! ! If @var{tsam} is 0, @math{outlist = []}. ! If @var{tsam} is greater than 0, @math{outlist = 1:@code{rows}(@var{c})}. ! @end table ! Unlike states, discrete/continuous outputs may appear in any order. ! @code{sys2ss} returns a vector @var{yd} where ! @var{yd}(@var{outlist}) = 1; all other entries of @var{yd} are 0. - @strong{Output} @table @var ! @item outsys ! system data structure @end table ! @strong{System partitioning} ! ! Suppose for simplicity that outlist specified ! that the first several outputs were continuous and the remaining outputs ! were discrete. Then the system is partitioned as ! @example ! @group ! x = [ xc ] (n x 1) ! [ xd ] (nz x 1 discrete states) ! a = [ acc acd ] b = [ bc ] ! [ adc add ] [ bd ] ! c = [ ccc ccd ] d = [ dc ] ! [ cdc cdd ] [ dd ] ! ! (cdc = c(outlist,1:n), etc.) ! @end group ! @end example ! with dynamic equations: ! @ifinfo ! @math{d/dt xc(t) = acc*xc(t) + acd*xd(k*tsam) + bc*u(t)} ! ! @math{xd((k+1)*tsam) = adc*xc(k*tsam) + add*xd(k*tsam) + bd*u(k*tsam)} ! @math{yc(t) = ccc*xc(t) + ccd*xd(k*tsam) + dc*u(t)} - @math{yd(k*tsam) = cdc*xc(k*tsam) + cdd*xd(k*tsam) + dd*u(k*tsam)} - @end ifinfo @iftex @tex ! $$\eqalign{ ! {d \over dt} x_c(t) ! & = a_{cc} x_c(t) + a_{cd} x_d(k*t_{sam}) + bc*u(t) \cr ! x_d((k+1)*t_{sam}) ! & = a_{dc} x_c(k t_{sam}) + a_{dd} x_d(k t_{sam}) + b_d u(k t_{sam}) \cr ! y_c(t) ! & = c_{cc} x_c(t) + c_{cd} x_d(k t_{sam}) + d_c u(t) \cr ! y_d(k t_{sam}) ! & = c_{dc} x_c(k t_{sam}) + c_{dd} x_d(k t_{sam}) + d_d u(k t_{sam}) ! }$$ @end tex @end iftex ! ! @strong{Signal partitions} @example ! @group ! | continuous | discrete | ! ---------------------------------------------------- ! states | stname(1:n,:) | stname((n+1):(n+nz),:) | ! ---------------------------------------------------- ! outputs | outname(cout,:) | outname(outlist,:) | ! ---------------------------------------------------- ! @end group @end example ! where @math{cout} is the list of in 1:@code{rows}(@var{p}) ! that are not contained in outlist. (Discrete/continuous outputs ! may be entered in any order desired by the user.) ! ! @strong{Example} ! @example ! octave:1> a = [1 2 3; 4 5 6; 7 8 10]; ! octave:2> b = [0 0 ; 0 1 ; 1 0]; ! octave:3> c = eye (3); ! octave:4> sys = ss (a, b, c, [], 0, 3, 0, ... ! > @{"volts", "amps", "joules"@}); ! octave:5> sysout(sys); ! Input(s) ! 1: u_1 ! 2: u_2 ! Output(s): ! 1: y_1 ! 2: y_2 ! 3: y_3 ! state-space form: ! 3 continuous states, 0 discrete states ! State(s): ! 1: volts ! 2: amps ! 3: joules ! A matrix: 3 x 3 ! 1 2 3 ! 4 5 6 ! 7 8 10 ! B matrix: 3 x 2 ! 0 0 ! 0 1 ! 1 0 ! C matrix: 3 x 3 ! 1 0 0 ! 0 1 0 ! 0 0 1 ! D matrix: 3 x 3 ! 0 0 ! 0 0 ! 0 0 ! @end example ! Notice that the @math{D} matrix is constructed by default to the ! correct dimensions. Default input and output signals names were assigned ! since none were given. @end deftypefn ! ss2sys -*- texinfo -*- ! @deftypefn {Function File} {} ss2sys (@var{a}, @var{b}, @var{c}, @var{d}, @var{tsam}, @var{n}, @var{nz}, @var{stname}, @var{inname}, @var{outname}, @var{outlist}) ! Create system structure from state-space data. May be continuous, ! discrete, or mixed (sampled data) ! @strong{Inputs} ! @table @var ! @item a ! @itemx b ! @itemx c ! @itemx d ! usual state space matrices. ! default: @var{d} = zero matrix ! @item tsam ! sampling rate. Default: @math{tsam = 0} (continuous system) ! @item n ! @itemx nz ! number of continuous, discrete states in the system ! If @var{tsam} is 0, @math{n = @code{rows}(@var{a})}, @math{nz = 0}. ! If @var{tsam} is greater than zero, @math{n = 0}, ! @math{nz = @code{rows}(@var{a})} ! see below for system partitioning ! @item stname ! cell array of strings of state signal names ! default (@var{stname}=[] on input): @code{x_n} for continuous states, ! @code{xd_n} for discrete states ! ! @item inname ! cell array of strings of input signal names ! default (@var{inname} = [] on input): @code{u_n} ! @item outname ! cell array of strings of input signal names ! default (@var{outname} = [] on input): @code{y_n} ! @item outlist ! list of indices of outputs y that are sampled ! If @var{tsam} is 0, @math{outlist = []}. ! If @var{tsam} is greater than 0, @math{outlist = 1:@code{rows}(@var{c})}. ! @end table ! Unlike states, discrete/continuous outputs may appear in any order. ! @code{sys2ss} returns a vector @var{yd} where ! @var{yd}(@var{outlist}) = 1; all other entries of @var{yd} are 0. ! @strong{Outputs} ! @var{outsys} = system data structure ! @strong{System partitioning} ! Suppose for simplicity that outlist specified ! that the first several outputs were continuous and the remaining outputs ! were discrete. Then the system is partitioned as ! @example ! @group ! x = [ xc ] (n x 1) ! [ xd ] (nz x 1 discrete states) ! a = [ acc acd ] b = [ bc ] ! [ adc add ] [ bd ] ! c = [ ccc ccd ] d = [ dc ] ! [ cdc cdd ] [ dd ] ! (cdc = c(outlist,1:n), etc.) ! @end group ! @end example ! with dynamic equations: ! @ifinfo ! @math{d/dt xc(t) = acc*xc(t) + acd*xd(k*tsam) + bc*u(t)} ! @math{xd((k+1)*tsam) = adc*xc(k*tsam) + add*xd(k*tsam) + bd*u(k*tsam)} ! @math{yc(t) = ccc*xc(t) + ccd*xd(k*tsam) + dc*u(t)} ! @math{yd(k*tsam) = cdc*xc(k*tsam) + cdd*xd(k*tsam) + dd*u(k*tsam)} ! @end ifinfo ! @iftex ! @tex ! $$\eqalign{ ! {d \over dt} x_c(t) ! & = a_{cc} x_c(t) + a_{cd} x_d(k*t_{sam}) + bc*u(t) \cr ! x_d((k+1)*t_{sam}) ! & = a_{dc} x_c(k t_{sam}) + a_{dd} x_d(k t_{sam}) + b_d u(k t_{sam}) \cr ! y_c(t) ! & = c_{cc} x_c(t) + c_{cd} x_d(k t_{sam}) + d_c u(t) \cr ! y_d(k t_{sam}) ! & = c_{dc} x_c(k t_{sam}) + c_{dd} x_d(k t_{sam}) + d_d u(k t_{sam}) ! }$$ ! @end tex ! @end iftex ! @strong{Signal partitions} ! @example ! @group ! | continuous | discrete | ! ---------------------------------------------------- ! states | stname(1:n,:) | stname((n+1):(n+nz),:) | ! ---------------------------------------------------- ! outputs | outname(cout,:) | outname(outlist,:) | ! ---------------------------------------------------- ! @end group ! @end example ! where @math{cout} is the list of in 1:@code{rows}(@var{p}) ! that are not contained in outlist. (Discrete/continuous outputs ! may be entered in any order desired by the user.) ! @strong{Example} ! @example ! octave:1> a = [1 2 3; 4 5 6; 7 8 10]; ! octave:2> b = [0 0 ; 0 1 ; 1 0]; ! octave:3> c = eye (3); ! octave:4> sys = ss (a, b, c, [], 0, 3, 0, ! > @{"volts", "amps", "joules"@}); ! octave:5> sysout(sys); ! Input(s) ! 1: u_1 ! 2: u_2 ! Output(s): ! 1: y_1 ! 2: y_2 ! 3: y_3 ! state-space form: ! 3 continuous states, 0 discrete states ! State(s): ! 1: volts ! 2: amps ! 3: joules ! A matrix: 3 x 3 ! 1 2 3 ! 4 5 6 ! 7 8 10 ! B matrix: 3 x 2 ! 0 0 ! 0 1 ! 1 0 ! C matrix: 3 x 3 ! 1 0 0 ! 0 1 0 ! 0 0 1 ! D matrix: 3 x 3 ! 0 0 ! 0 0 ! 0 0 ! @end example ! Notice that the @math{D} matrix is constructed by default to the ! correct dimensions. Default input and output signals names were assigned ! since none were given. @end deftypefn ! ss2tf -*- texinfo -*- ! @deftypefn {Function File} {[@var{num}, @var{den}] =} ss2tf (@var{a}, @var{b}, @var{c}, @var{d}) ! Conversion from transfer function to state-space. ! The state space system: ! @iftex ! @tex ! $$ \dot x = Ax + Bu $$ ! $$ y = Cx + Du $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! . ! x = Ax + Bu ! y = Cx + Du ! @end example ! @end ifinfo ! ! is converted to a transfer function: ! @iftex ! @tex ! $$ G(s) = { { \rm num }(s) \over { \rm den }(s) } $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! num(s) ! G(s)=------- ! den(s) ! @end example ! @end ifinfo ! used internally in system data structure format manipulations. @end deftypefn ! ss2zp -*- texinfo -*- ! @deftypefn {Function File} {[@var{pol}, @var{zer}, @var{k}] =} ss2zp (@var{a}, @var{b}, @var{c}, @var{d}) ! Converts a state space representation to a set of poles and zeros; ! @var{k} is a gain associated with the zeros. ! Used internally in system data structure format manipulations. @end deftypefn ! starp -*- texinfo -*- ! @deftypefn {Function File} {} starp (@var{P}, @var{K}, @var{ny}, @var{nu}) ! Redheffer star product or upper/lower LFT, respectively. ! @example ! @group ! +-------+ ! --------->| |---------> ! | P | ! +--->| |---+ ny ! | +-------+ | ! +-------------------+ ! | | ! +----------------+ | ! | | ! | +-------+ | ! +--->| |------+ nu ! | K | ! --------->| |---------> ! +-------+ ! @end group ! @end example ! If @var{ny} and @var{nu} ``consume'' all inputs and outputs of ! @var{K} then the result is a lower fractional transformation. ! If @var{ny} and @var{nu} ``consume'' all inputs and outputs of ! @var{P} then the result is an upper fractional transformation. ! @var{ny} and/or @var{nu} may be negative (i.e. negative feedback). @end deftypefn ! sys2fir -*- texinfo -*- ! @deftypefn {Function File} {[@var{c}, @var{tsam}, @var{input}, @var{output}] =} sys2fir (@var{sys}) ! Extract @acronym{FIR} data from system data structure; see @command{fir2sys} for ! parameter descriptions. ! @seealso{fir2sys} @end deftypefn ! sys2ss -*- texinfo -*- ! @deftypefn {Function File} {[@var{a}, @var{b}, @var{c}, @var{d}, @var{tsam}, @var{n}, @var{nz}, @var{stname}, @var{inname}, @var{outname}, @var{yd}] =} sys2ss (@var{sys}) ! Extract state space representation from system data structure. ! @strong{Input} ! @table @var ! @item sys ! System data structure. ! @end table ! @strong{Outputs} ! @table @var ! @item a ! @itemx b ! @itemx c ! @itemx d ! State space matrices for @var{sys}. ! @item tsam ! Sampling time of @var{sys} (0 if continuous). ! @item n ! @itemx nz ! Number of continuous, discrete states (discrete states come ! last in state vector @var{x}). ! @item stname ! @itemx inname ! @itemx outname ! Signal names (lists of strings); names of states, ! inputs, and outputs, respectively. ! @item yd ! Binary vector; @var{yd}(@var{ii}) is 1 if output @var{y}(@var{ii}) ! is discrete (sampled); otherwise @var{yd}(@var{ii}) is 0. ! @end table ! A warning massage is printed if the system is a mixed ! continuous and discrete system. ! @strong{Example} ! @example ! octave:1> sys=tf2sys([1 2],[3 4 5]); ! octave:2> [a,b,c,d] = sys2ss(sys) ! a = ! 0.00000 1.00000 ! -1.66667 -1.33333 ! b = ! 0 ! 1 ! c = 0.66667 0.33333 ! d = 0 ! @end example @end deftypefn ! sys2tf -*- texinfo -*- ! @deftypefn {Function File} {[@var{num}, @var{den}, @var{tsam}, @var{inname}, @var{outname}] =} sys2tf (@var{sys}) ! Extract transfer function data from a system data structure. ! See @command{tf} for parameter descriptions. ! @strong{Example} ! @example ! octave:1> sys=ss([1 -2; -1.1,-2.1],[0;1],[1 1]); ! octave:2> [num,den] = sys2tf(sys) ! num = 1.0000 -3.0000 ! den = 1.0000 1.1000 -4.3000 ! @end example @end deftypefn ! sys2zp -*- texinfo -*- ! @deftypefn {Function File} {[@var{zer}, @var{pol}, @var{k}, @var{tsam}, @var{inname}, @var{outname}] =} sys2zp (@var{sys}) ! Extract zero/pole/leading coefficient information from a system data ! structure. ! See @command{zp} for parameter descriptions. ! @strong{Example} ! @example ! octave:1> sys=ss([1 -2; -1.1,-2.1],[0;1],[1 1]); ! octave:2> [zer,pol,k] = sys2zp(sys) ! zer = 3.0000 ! pol = ! -2.6953 ! 1.5953 ! k = 1 ! @end example @end deftypefn ! sysadd -*- texinfo -*- ! @deftypefn {Function File} {} sysadd (@var{gsys}, @var{hsys}) ! returns @var{sys} = @var{gsys} + @var{hsys}. ! @itemize @bullet ! @item Exits with ! an error if @var{gsys} and @var{hsys} are not compatibly dimensioned. ! @item Prints a warning message is system states have identical names; ! duplicate names are given a suffix to make them unique. ! @item @var{sys} input/output names are taken from @var{gsys}. ! @end itemize ! @example ! @group ! ________ ! ----| gsys |--- ! u | ---------- +| ! ----- (_)----> y ! | ________ +| ! ----| hsys |--- ! -------- ! @end group ! @end example @end deftypefn ! sysappend -*- texinfo -*- ! @deftypefn {Function File} {@var{sys} =} sysappend (@var{syst}, @var{b}, @var{c}, @var{d}, @var{outname}, @var{inname}, @var{yd}) ! appends new inputs and/or outputs to a system ! ! @strong{Inputs} ! @table @var ! @item syst ! system data structure ! @item b ! matrix to be appended to sys "B" matrix (empty if none) ! @item c ! matrix to be appended to sys "C" matrix (empty if none) ! @item d ! revised sys d matrix (can be passed as [] if the revised d is all zeros) ! @item outname ! list of names for new outputs ! @item inname ! list of names for new inputs ! @item yd ! binary vector; @math{yd(ii)=0} indicates a continuous output; ! @math{yd(ii)=1} indicates a discrete output. ! @end table ! @strong{Outputs} ! @table @var ! @item sys ! @example ! @group ! sys.b := [syst.b , b] ! sys.c := [syst.c ] ! [ c ] ! sys.d := [syst.d | D12 ] ! [ D21 | D22 ] ! @end group ! @end example ! where @math{D12}, @math{D21}, and @math{D22} are the appropriate dimensioned ! blocks of the input parameter @var{d}. ! @itemize @bullet ! @item The leading block @math{D11} of @var{d} is ignored. ! @item If @var{inname} and @var{outname} are not given as arguments, ! the new inputs and outputs are be assigned default names. ! @item @var{yd} is a binary vector of length rows(c) that indicates ! continuous/sampled outputs. Default value for @var{yd} is: ! @itemize @minus ! @item @var{sys} is continuous or mixed ! @var{yd} = @code{zeros(1,rows(c))} ! @item @var{sys} is discrete ! @var{yd} = @code{ones(1,rows(c))} ! @end itemize ! @end itemize ! @end table ! @end deftypefn ! syschtsam ! -*- texinfo -*- ! @deftypefn {Function File} {} syschtsam (@var{sys}, @var{tsam}) ! This function changes the sampling time (tsam) of the system. Exits with ! an error if sys is purely continuous time. @end deftypefn ! sysconnect -*- texinfo -*- ! @deftypefn {Function File} {@var{clsys} =} sysconnect (@var{sys}, @var{out_idx}, @var{in_idx}, @var{order}, @var{tol}) ! Close the loop from specified outputs to respective specified inputs ! ! @strong{Inputs} ! @table @var ! @item sys ! System data structure. ! @item out_idx ! @itemx in_idx ! Names or indices of signals to connect (see @code{sysidx}). ! The output specified by @math{out_idx(ii)} is connected to the input ! specified by @math{in_idx(ii)}. ! @item order ! logical flag (default = 0) ! @table @code ! @item 0 ! Leave inputs and outputs in their original order. ! @item 1 ! Permute inputs and outputs to the order shown in the diagram below. ! @end table ! @item tol ! Tolerance for singularities in algebraic loops, default: 200@code{eps}. ! @end table ! @strong{Outputs} ! @table @var ! @item clsys ! Resulting closed loop system. ! @end table ! @strong{Method} ! @code{sysconnect} internally permutes selected inputs, outputs as shown ! below, closes the loop, and then permutes inputs and outputs back to their ! original order ! @example ! @group ! -------------------- ! u_1 ----->| |----> y_1 ! | sys | ! old u_2 | | ! u_2* ---->(+)--->| |----->y_2 ! (in_idx) ^ -------------------- | (out_idx) ! | | ! ------------------------------- ! @end group ! @end example ! The input that has the summing junction added to it has an * added to ! the end of the input name. @end deftypefn ! syscont -*- texinfo -*- ! @deftypefn {Function File} {[@var{csys}, @var{acd}, @var{ccd}] =} syscont (@var{sys}) ! Extract the purely continuous subsystem of an input system. ! @strong{Input} ! @table @var ! @item sys ! system data structure. ! @end table ! @strong{Outputs} ! @table @var ! @item csys ! is the purely continuous input/output connections of @var{sys} ! @item acd ! @itemx ccd ! connections from discrete states to continuous states, ! discrete states to continuous outputs, respectively. ! If no continuous path exists, @var{csys} will be empty. ! @end table @end deftypefn ! sysdimensions -*- texinfo -*- ! @deftypefn {Function File} {[@var{n}, @var{nz}, @var{m}, @var{p}, @var{yd}] =} sysdimensions (@var{sys}, @var{opt}) ! return the number of states, inputs, and/or outputs in the system ! @var{sys}. ! ! @strong{Inputs} ! @table @var ! @item sys ! system data structure ! ! @item opt ! String indicating which dimensions are desired. Values: ! @table @code ! @item "all" ! (default) return all parameters as specified under Outputs below. ! ! @item "cst" ! return @var{n}= number of continuous states ! ! @item "dst" ! return @var{n}= number of discrete states ! ! @item "in" ! return @var{n}= number of inputs ! @item "out" ! return @var{n}= number of outputs ! @end table ! @end table ! @strong{Outputs} ! @table @var ! @item n ! number of continuous states (or individual requested dimension as specified ! by @var{opt}). ! @item nz ! number of discrete states ! @item m ! number of system inputs ! @item p ! number of system outputs ! @item yd ! binary vector; @var{yd}(@var{ii}) is nonzero if output @var{ii} is ! discrete. ! @math{yd(ii) = 0} if output @var{ii} is continuous ! @end table ! @seealso{sysgetsignals, sysgettsam} @end deftypefn ! sysdisc -*- texinfo -*- ! @deftypefn {Function File} {[@var{dsys}, @var{adc}, @var{cdc}] =} sysdisc (@var{sys}) ! ! @strong{Input} ! @table @var ! @item sys ! System data structure. ! @end table ! @strong{Outputs} ! @table @var ! @item dsys ! Purely discrete portion of sys (returned empty if there is ! no purely discrete path from inputs to outputs). ! @item adc ! @itemx cdc ! Connections from continuous states to discrete states and discrete ! outputs, respectively. ! @end table @end deftypefn ! sysdup -*- texinfo -*- ! @deftypefn {Function File} {@var{retsys} =} sysdup (@var{asys}, @var{out_idx}, @var{in_idx}) ! Duplicate specified input/output connections of a system ! @strong{Inputs} ! @table @var ! @item asys ! system data structure ! @item out_idx ! @itemx in_idx ! indices or names of desired signals (see @code{sigidx}). ! duplicates are made of @code{y(out_idx(ii))} and @code{u(in_idx(ii))}. ! @end table ! @strong{Output} ! @table @var ! @item retsys ! Resulting closed loop system: ! duplicated i/o names are appended with a @code{"+"} suffix. ! @end table ! @strong{Method} ! @code{sysdup} creates copies of selected inputs and outputs as ! shown below. @var{u1}, @var{y1} is the set of original inputs/outputs, and ! @var{u2}, @var{y2} is the set of duplicated inputs/outputs in the order ! specified in @var{in_idx}, @var{out_idx}, respectively ! @example ! @group ! ____________________ ! u1 ----->| |----> y1 ! | asys | ! u2 ------>| |----->y2 ! (in_idx) -------------------- (out_idx) ! @end group ! @end example @end deftypefn ! sysgetsignals -*- texinfo -*- ! @deftypefn {Function File} {[@var{stname}, @var{inname}, @var{outname}, @var{yd}] =} sysgetsignals (@var{sys}) ! @deftypefnx {Function File} {@var{siglist} =} sysgetsignals (@var{sys}, @var{sigid}) ! @deftypefnx {Function File} {@var{signame} =} sysgetsignals (@var{sys}, @var{sigid}, @var{signum}, @var{strflg}) ! Get signal names from a system ! @strong{Inputs} ! @table @var ! @item sys ! system data structure for the state space system ! @item sigid ! signal id. String. Must be one of ! @table @code ! @item "in" ! input signals ! @item "out" ! output signals ! @item "st" ! stage signals ! @item "yd" ! value of logical vector @var{yd} ! @end table ! @item signum ! index(indices) or name(s) or signals; see @code{sysidx} ! @item strflg ! flag to return a string instead of a cell array; Values: ! @table @code ! @item 0 ! (default) return a cell array (even if signum specifies an individual signal) ! @item 1 ! return a string. Exits with an error if signum does not specify an ! individual signal. ! @end table ! ! @end table ! ! @strong{Outputs} ! @table @bullet ! @item If @var{sigid} is not specified: ! @table @var ! @item stname ! @itemx inname ! @itemx outname ! signal names (cell array of strings); names of states, ! inputs, and outputs, respectively. ! @item yd ! binary vector; @var{yd}(@var{ii}) is nonzero if output @var{ii} is ! discrete. ! @end table ! ! @item If @var{sigid} is specified but @var{signum} is not specified: ! @table @code ! @item sigid="in" ! @var{siglist} is set to the cell array of input names. ! ! @item sigid="out" ! @var{siglist} is set to the cell array of output names. ! ! @item sigid="st" ! @var{siglist} is set to the cell array of state names. ! ! stage signals ! @item sigid="yd" ! @var{siglist} is set to logical vector indicating discrete outputs; ! @var{siglist}(@var{ii}) = 0 indicates that output @var{ii} is continuous ! (unsampled), otherwise it is discrete. ! ! @end table ! ! @item If the first three input arguments are specified: ! @var{signame} is a cell array of the specified signal names (@var{sigid} is ! @code{"in"}, @code{"out"}, or @code{"st"}), or else the logical flag ! indicating whether output(s) @var{signum} is(are) discrete (@var{sigval}=1) ! or continuous (@var{sigval}=0). ! @end table ! ! @strong{Examples} (From @code{sysrepdemo}) ! @example ! octave> sys=ss(rand(4),rand(4,2),rand(3,4)); ! octave># get all signal names ! octave> [Ast,Ain,Aout,Ayd] = sysgetsignals(sys) ! Ast = ! ( ! [1] = x_1 ! [2] = x_2 ! [3] = x_3 ! [4] = x_4 ! ) ! Ain = ! ( ! [1] = u_1 ! [2] = u_2 ! ) ! Aout = ! ( ! [1] = y_1 ! [2] = y_2 ! [3] = y_3 ! ) ! Ayd = ! ! 0 0 0 ! octave> # get only input signal names: ! octave> Ain = sysgetsignals(sys,"in") ! Ain = ! ( ! [1] = u_1 ! [2] = u_2 ! ) ! octave> # get name of output 2 (in cell array): ! octave> Aout = sysgetsignals(sys,"out",2) ! Aout = ! ( ! [1] = y_2 ! ) ! octave> # get name of output 2 (as string): ! octave> Aout = sysgetsignals(sys,"out",2,1) ! Aout = y_2 ! @end example @end deftypefn ! sysgettsam -*- texinfo -*- ! @deftypefn {Function File} {} sysgettsam (@var{sys}) ! Return the sampling time of the system @var{sys}. @end deftypefn ! sysgettype -*- texinfo -*- ! @deftypefn {Function File} {} sysgettype (@var{sys}) ! return the initial system type of the system ! ! @strong{Input} ! @table @var ! @item sys ! System data structure. ! @end table ! ! @strong{Output} ! @table @var ! @item systype ! String indicating how the structure was initially ! constructed. Values: @code{"ss"}, @code{"zp"}, or @code{"tf"}. ! @end table ! ! @acronym{FIR} initialized systems return @code{systype="tf"}. @end deftypefn ! sysgroup -*- texinfo -*- ! @deftypefn {Function File} {@var{sys} =} sysgroup (@var{asys}, @var{bsys}) ! Combines two systems into a single system. ! ! @strong{Inputs} ! @table @var ! @item asys ! @itemx bsys ! System data structures. ! @end table ! @strong{Output} ! @table @var ! @item sys ! @math{sys = @r{block diag}(asys,bsys)} ! @end table ! @example ! @group ! __________________ ! | ________ | ! u1 ----->|--> | asys |--->|----> y1 ! | -------- | ! | ________ | ! u2 ----->|--> | bsys |--->|----> y2 ! | -------- | ! ------------------ ! Ksys ! @end group ! @end example ! The function also rearranges the internal state-space realization of @var{sys} ! so that the continuous states come first and the discrete states come last. ! If there are duplicate names, the second name has a unique suffix appended ! on to the end of the name. @end deftypefn ! sysidx -*- texinfo -*- ! @deftypefn {Function File} {} sysidx (@var{sys}, @var{sigtype}, @var{signamelist}) ! Return indices of signals with specified signal names ! inputs given a system data structure @var{sys}, a signal type to be ! selected @var{sigtype} (@code{"in"}, @code{"out"}, @code{"st"}), and ! a list of desired signal names @var{signamelist}. @end deftypefn ! sysmin -*- texinfo -*- ! @deftypefn {Function File} {[@var{retsys}, @var{nc}, @var{no}] =} sysmin (@var{sys}, @var{flg}) ! Returns a minimal (or reduced order) system ! ! @strong{Inputs} ! @table @var ! @item sys ! System data structure ! @item flg ! When equal to 0 (default value), returns minimal system, ! in which state names are lost; when equal to 1, returns system ! with physical states removed that are either uncontrollable or ! unobservable (cannot reduce further without discarding physical ! meaning of states). ! @end table ! @strong{Outputs} ! @table @var ! @item retsys ! Returned system. ! @item nc ! Number of controllable states in the returned system. ! @item no ! Number of observable states in the returned system. ! @item cflg ! @code{is_controllable(retsys)}. ! @item oflg ! @code{is_observable(retsys)}. ! @end table @end deftypefn ! sysmult -*- texinfo -*- ! @deftypefn {Function File} {@var{sys} =} sysmult (@var{Asys}, @var{Bsys}) ! Compute @math{sys = Asys*Bsys} (series connection): ! @example ! @group ! u ---------- ---------- ! --->| Bsys |---->| Asys |---> ! ---------- ---------- ! @end group ! @end example ! A warning occurs if there is direct feed-through from an input ! or a continuous state of @var{Bsys}, through a discrete output ! of @var{Bsys}, to a continuous state or output in @var{Asys} ! (system data structure does not recognize discrete inputs). @end deftypefn ! sysout -*- texinfo -*- ! @deftypefn {Function File} {} sysout (@var{sys}, @var{opt}) ! print out a system data structure in desired format ! @table @var ! @item sys ! system data structure ! @item opt ! Display option ! @table @code ! @item [] ! primary system form (default) ! @item "ss" ! state space form ! @item "tf" ! transfer function form ! @item "zp" ! zero-pole form ! @item "all" ! all of the above ! @end table ! @end table @end deftypefn ! sysprune -*- texinfo -*- ! @deftypefn {Function File} {@var{retsys} =} sysprune (@var{asys}, @var{out_idx}, @var{in_idx}) ! Extract specified inputs/outputs from a system ! ! @strong{Inputs} ! @table @var ! @item asys ! system data structure ! @item out_idx ! @itemx in_idx ! Indices or signal names of the outputs and inputs to be kept in the returned ! system; remaining connections are ``pruned'' off. ! May select as [] (empty matrix) to specify all outputs/inputs. ! ! @example ! retsys = sysprune (Asys, [1:3,4], "u_1"); ! retsys = sysprune (Asys, @{"tx", "ty", "tz"@}, 4); ! @end example ! ! @end table ! @strong{Output} ! @table @var ! @item retsys ! Resulting system. ! @end table ! @example ! @group ! ____________________ ! u1 ------->| |----> y1 ! (in_idx) | Asys | (out_idx) ! u2 ------->| |----| y2 ! (deleted)-------------------- (deleted) ! @end group ! @end example @end deftypefn ! sysreorder -*- texinfo -*- ! @deftypefn {Function File} {@var{pv} =} sysreorder (@var{vlen}, @var{list}) ! ! @strong{Inputs} ! @table @var ! @item vlen ! Vector length. ! @item list ! A subset of @code{[1:vlen]}. ! @end table ! ! @strong{Output} ! @table @var ! @item pv ! A permutation vector to order elements of @code{[1:vlen]} in ! @code{list} to the end of a vector. ! @end table ! ! Used internally by @code{sysconnect} to permute vector elements to their ! desired locations. @end deftypefn ! sysrepdemo -*- texinfo -*- ! @deftypefn {Function File} {} sysrepdemo ! Tutorial for the use of the system data structure functions. @end deftypefn ! sysscale -*- texinfo -*- ! @deftypefn {Function File} {@var{retsys} =} sysscale (@var{sys}, @var{outscale}, @var{inscale}, @var{outname}, @var{inname}) ! scale inputs/outputs of a system. ! ! @strong{Inputs} ! @table @var ! @item sys ! Structured system. ! @item outscale ! @itemx inscale ! Constant matrices of appropriate dimension. ! @item outname ! @itemx inname ! Lists of strings with the names of respectively outputs and inputs. ! @end table ! ! @strong{Output} ! @table @var ! @item retsys ! resulting open loop system: ! @smallexample ! ----------- ------- ----------- ! u --->| inscale |--->| sys |--->| outscale |---> y ! ----------- ------- ----------- ! @end smallexample ! @end table ! If the input names and output names (each a list of strings) ! are not given and the scaling matrices ! are not square, then default names will be given to the inputs and/or ! outputs. ! A warning message is printed if outscale attempts to add continuous ! system outputs to discrete system outputs; otherwise @var{yd} is ! set appropriately in the returned value of @var{sys}. @end deftypefn ! syssetsignals -*- texinfo -*- ! @deftypefn {Function File} {} syssetsignals (@var{sys}, @var{opt}, @var{names}, @var{sig_idx}) ! change the names of selected inputs, outputs and states. ! ! @strong{Inputs} ! @table @var ! @item sys ! System data structure. ! ! @item opt ! Change default name (output). ! ! @table @code ! @item "out" ! Change selected output names. ! @item "in" ! Change selected input names. ! @item "st" ! Change selected state names. ! @item "yd" ! Change selected outputs from discrete to continuous or ! from continuous to discrete. ! @end table ! ! @item names ! @table @code ! @item opt = "out", "in", "st" ! string or string array containing desired signal names or values. ! @item opt = "yd" ! To desired output continuous/discrete flag. ! Set name to 0 for continuous, or 1 for discrete. ! @end table ! @item sig_idx ! indices or names of outputs, yd, inputs, or ! states whose respective names/values should be changed. ! ! Default: replace entire cell array of names/entire yd vector. ! @end table ! @strong{Outputs} ! @table @var ! @item retsys ! @var{sys} with appropriate signal names changed ! (or @var{yd} values, where appropriate). ! @end table ! @strong{Example} @example ! octave:1> sys=ss ([1 2; 3 4],[5;6],[7 8]); ! octave:2> sys = syssetsignals (sys, "st", ! > str2mat("Posx","Velx")); ! octave:3> sysout(sys) ! Input(s) ! 1: u_1 ! Output(s): ! 1: y_1 ! state-space form: ! 2 continuous states, 0 discrete states ! State(s): ! 1: Posx ! 2: Velx ! A matrix: 2 x 2 ! 1 2 ! 3 4 ! B matrix: 2 x 1 ! 5 ! 6 ! C matrix: 1 x 2 ! 7 8 ! D matrix: 1 x 1 ! 0 @end example @end deftypefn ! syssub -*- texinfo -*- ! @deftypefn {Function File} {@var{sys} =} syssub (@var{Gsys}, @var{Hsys}) ! Return @math{sys = Gsys - Hsys}. ! ! @strong{Method} ! @var{Gsys} and @var{Hsys} are connected in parallel. ! The input vector is connected to both systems; the outputs are ! subtracted. Returned system names are those of @var{Gsys}. ! @example ! @group ! +--------+ ! +--->| Gsys |---+ ! | +--------+ | ! | +| ! u --+ (_)--> y ! | -| ! | +--------+ | ! +--->| Hsys |---+ ! +--------+ ! @end group ! @end example @end deftypefn ! sysupdate -*- texinfo -*- ! @deftypefn {Function File} {} sysupdate (@var{sys}, @var{opt}) ! Update the internal representation of a system. ! @strong{Inputs} ! @table @var ! @item sys: ! system data structure ! @item opt ! string: ! @table @code ! @item "tf" ! update transfer function form ! @item "zp" ! update zero-pole form ! @item "ss" ! update state space form ! @item "all" ! all of the above ! @end table ! @end table ! ! @strong{Outputs} ! @table @var ! @item retsys ! Contains union of data in sys and requested data. ! If requested data in @var{sys} is already up to date then @var{retsys}=@var{sys}. ! @end table ! ! Conversion to @command{tf} or @command{zp} exits with an error if the system is ! mixed continuous/digital. ! @seealso{tf, ss, zp, sysout, sys2ss, sys2tf, sys2zp} @end deftypefn ! tf -*- texinfo -*- ! @deftypefn {Function File} {} tf (@var{num}, @var{den}, @var{tsam}, @var{inname}, @var{outname}) ! build system data structure from transfer function format data ! ! @strong{Inputs} ! @table @var ! @item num ! @itemx den ! coefficients of numerator/denominator polynomials ! @item tsam ! sampling interval. default: 0 (continuous time) ! @item inname ! @itemx outname ! input/output signal names; may be a string or cell array with a single string ! entry. ! @end table ! ! @strong{Outputs} ! @var{sys} = system data structure ! ! @strong{Example} ! @example ! octave:1> sys=tf([2 1],[1 2 1],0.1); ! octave:2> sysout(sys) ! Input(s) ! 1: u_1 ! Output(s): ! 1: y_1 (discrete) ! Sampling interval: 0.1 ! transfer function form: ! 2*z^1 + 1 ! ----------------- ! 1*z^2 + 2*z^1 + 1 ! @end example @end deftypefn ! tf2ss -*- texinfo -*- ! @deftypefn {Function File} {[@var{a}, @var{b}, @var{c}, @var{d}] =} tf2ss (@var{num}, @var{den}) ! Conversion from transfer function to state-space. ! The state space system: ! @iftex ! @tex ! $$ \dot x = Ax + Bu $$ ! $$ y = Cx + Du $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! . ! x = Ax + Bu ! y = Cx + Du ! @end example ! @end ifinfo ! is obtained from a transfer function: @iftex @tex ! $$ G(s) = { { \rm num }(s) \over { \rm den }(s) } $$ @end tex @end iftex @ifinfo @example ! num(s) ! G(s)=------- ! den(s) @end example @end ifinfo ! The vector @var{den} must contain only one row, whereas the vector ! @var{num} may contain as many rows as there are outputs @var{y} of ! the system. The state space system matrices obtained from this function ! will be in controllable canonical form as described in @cite{Modern Control ! Theory}, (Brogan, 1991). @end deftypefn ! tf2sys -*- texinfo -*- ! @deftypefn {Function File} {} tf2sys (@var{num}, @var{den}, @var{tsam}, @var{inname}, @var{outname}) ! Build system data structure from transfer function format data. ! ! @strong{Inputs} ! @table @var ! @item num ! @itemx den ! Coefficients of numerator/denominator polynomials. ! @item tsam ! Sampling interval; default: 0 (continuous time). ! @item inname ! @itemx outname ! Input/output signal names; may be a string or cell array with a single string ! entry. ! @end table ! ! @strong{Output} ! @table @var ! @item sys ! System data structure. ! @end table ! ! @strong{Example} ! @example ! octave:1> sys=tf2sys([2 1],[1 2 1],0.1); ! octave:2> sysout(sys) ! Input(s) ! 1: u_1 ! Output(s): ! 1: y_1 (discrete) ! Sampling interval: 0.1 ! transfer function form: ! 2*z^1 + 1 ! ----------------- ! 1*z^2 + 2*z^1 + 1 ! @end example @end deftypefn ! tf2zp -*- texinfo -*- ! @deftypefn {Function File} {[@var{zer}, @var{pol}, @var{k}] =} tf2zp (@var{num}, @var{den}) ! Converts transfer functions to poles-and-zero representations. ! ! Returns the zeros and poles of the @acronym{SISO} system defined ! by @var{num}/@var{den}. ! @var{k} is a gain associated with the system zeros. @end deftypefn ! tfout -*- texinfo -*- ! @deftypefn {Function File} {} tfout (@var{num}, @var{denom}, @var{x}) ! Print formatted transfer function @math{n(s)/d(s)} to the screen. ! @var{x} defaults to the string @code{"s"} ! @seealso{polyval, polyvalm, poly, roots, conv, deconv, residue, ! filter, polyderiv, polyinteg, polyout} @end deftypefn ! ugain -*- texinfo -*- ! @deftypefn {Function File} {} ugain (@var{n}) ! Creates a system with unity gain, no states. ! This trivial system is sometimes needed to create arbitrary ! complex systems from simple systems with @command{buildssic}. ! Watch out if you are forming sampled systems since @command{ugain} ! does not contain a sampling period. ! @seealso{hinfdemo, jet707} @end deftypefn ! zp -*- texinfo -*- ! @deftypefn {Function File} {} zp (@var{zer}, @var{pol}, @var{k}, @var{tsam}, @var{inname}, @var{outname}) ! Create system data structure from zero-pole data. ! ! @strong{Inputs} ! @table @var ! @item zer ! vector of system zeros ! @item pol ! vector of system poles ! @item k ! scalar leading coefficient ! @item tsam ! sampling period. default: 0 (continuous system) ! @item inname ! @itemx outname ! input/output signal names (lists of strings) ! @end table ! ! @strong{Outputs} ! sys: system data structure ! @strong{Example} ! @example ! octave:1> sys=zp([1 -1],[-2 -2 0],1); ! octave:2> sysout(sys) ! Input(s) ! 1: u_1 ! Output(s): ! 1: y_1 ! zero-pole form: ! 1 (s - 1) (s + 1) ! ----------------- ! s (s + 2) (s + 2) ! @end example @end deftypefn ! zp2ss -*- texinfo -*- ! @deftypefn {Function File} {[@var{a}, @var{b}, @var{c}, @var{d}] =} zp2ss (@var{zer}, @var{pol}, @var{k}) ! Conversion from zero / pole to state space. ! @strong{Inputs} ! @table @var ! @item zer ! @itemx pol ! Vectors of (possibly) complex poles and zeros of a transfer ! function. Complex values must come in conjugate pairs ! (i.e., @math{x+jy} in @var{zer} means that @math{x-jy} is also in @var{zer}). ! The number of zeros must not exceed the number of poles. ! @item k ! Real scalar (leading coefficient). ! @end table - @strong{Outputs} - @table @var - @item @var{a} - @itemx @var{b} - @itemx @var{c} - @itemx @var{d} - The state space system, in the form: @iftex @tex ! $$ \dot x = Ax + Bu $$ ! $$ y = Cx + Du $$ @end tex @end iftex ! @ifinfo @example ! . ! x = Ax + Bu ! y = Cx + Du @end example ! @end ifinfo ! @end table ! @end deftypefn ! zp2sys ! -*- texinfo -*- ! @deftypefn {Function File} {} zp2sys (@var{zer}, @var{pol}, @var{k}, @var{tsam}, @var{inname}, @var{outname}) ! Create system data structure from zero-pole data. ! ! @strong{Inputs} ! @table @var ! @item zer ! Vector of system zeros. ! @item pol ! Vector of system poles. ! @item k ! Scalar leading coefficient. ! @item tsam ! Sampling period; default: 0 (continuous system). ! @item inname ! @itemx outname ! Input/output signal names (lists of strings). ! @end table ! ! @strong{Output} ! @table @var ! @item sys ! System data structure. ! @end table ! @strong{Example} ! @example ! octave:1> sys=zp2sys([1 -1],[-2 -2 0],1); ! octave:2> sysout(sys) ! Input(s) ! 1: u_1 ! Output(s): ! 1: y_1 ! zero-pole form: ! 1 (s - 1) (s + 1) ! ----------------- ! s (s + 2) (s + 2) ! @end example @end deftypefn ! zp2tf -*- texinfo -*- ! @deftypefn {Function File} {[@var{num}, @var{den}] =} zp2tf (@var{zer}, @var{pol}, @var{k}) ! Converts zeros / poles to a transfer function. ! ! @strong{Inputs} ! @table @var ! @item zer ! @itemx pol ! Vectors of (possibly complex) poles and zeros of a transfer ! function. Complex values must appear in conjugate pairs. ! @item k ! Real scalar (leading coefficient). ! @end table @end deftypefn ! zpout -*- texinfo -*- ! @deftypefn {Function File} {} zpout (@var{zer}, @var{pol}, @var{k}, @var{x}) ! print formatted zero-pole form to the screen. ! @var{x} defaults to the string @code{"s"} ! @seealso{polyval, polyvalm, poly, roots, conv, deconv, residue, ! filter, polyderiv, polyinteg, polyout} @end deftypefn ! __outlist__ ! Undocumented internal function. ! __zgpbal__ ! Undocumented internal function. ! axis2dlim -*- texinfo -*- ! @deftypefn {Function File} {} axis2dlim (@var{axdata}) ! Determine axis limits for 2-D data (column vectors); leaves a 10% ! margin around the plots. ! Inserts margins of +/- 0.1 if data is one-dimensional ! (or a single point). ! ! @strong{Input} ! @table @var ! @item axdata ! @var{n} by 2 matrix of data [@var{x}, @var{y}]. ! @end table ! ! @strong{Output} ! @table @var ! @item axvec ! Vector of axis limits appropriate for call to @command{axis} function. ! @end table @end deftypefn ! prompt -*- texinfo -*- ! @deftypefn {Function File} {} prompt (@var{str}) ! Prompt user to continue ! ! @strong{Input} ! @table @var ! @item str ! Input string. Its default value is: ! @example ! \n ---- Press a key to continue --- ! @end example ! @end table @end deftypefn ! run_cmd ! run_cmd: short script used in demos ! prints string cmd to the screen, then executes after a pause ! sortcom -*- texinfo -*- ! @deftypefn {Function File} {[@var{yy}, @var{idx}] =} sortcom (@var{xx}[, @var{opt}]) ! Sort a complex vector. ! ! @strong{Inputs} ! @table @var ! @item xx ! Complex vector ! @item opt ! sorting option: ! @table @code ! @item "re" ! Real part (default); ! @item "mag" ! By magnitude; ! @item "im" ! By imaginary part. ! @end table ! if @var{opt} is not chosen as @code{"im"}, then complex conjugate pairs are grouped together, ! @math{a - jb} followed by @math{a + jb}. ! @end table ! @strong{Outputs} ! @table @var ! @item yy ! Sorted values ! @item idx ! Permutation vector: @code{yy = xx(idx)} ! @end table @end deftypefn ! strappend -*- texinfo -*- ! @deftypefn {Function File} {} strappend (@var{strlist}, @var{suffix}) ! Append string @var{suffix} to each string in the list @var{strlist}. @end deftypefn ! swap -*- texinfo -*- ! @deftypefn {Function File} {} swap (@var{inputs}) ! @format ! [a1,b1] = swap(a,b) ! interchange a and b ! @end format @end deftypefn ! zgfmul -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} zgfmul (@var{a}, @var{b}, @var{c}, @var{d}, @var{x}) ! Compute product of @var{zgep} incidence matrix @math{F} with vector @var{x}. ! Used by @command{zgepbal} (in @command{zgscal}) as part of generalized conjugate gradient ! iteration. @end deftypefn ! zgfslv -*- texinfo -*- ! @deftypefn {Function File} {} zgfslv (@var{n}, @var{m}, @var{p}, @var{b}) ! Solve system of equations for dense zgep problem. @end deftypefn ! zginit -*- texinfo -*- ! @deftypefn {Function File} {@var{zz} =} zginit (@var{a}, @var{b}, @var{c}, @var{d}) ! Construct right hand side vector @var{zz} ! for the zero-computation generalized eigenvalue problem ! balancing procedure. Called by @command{zgepbal}. ! @end deftypefn ! zgreduce ! -*- texinfo -*- ! @deftypefn {Function File} {} zgreduce (@var{sys}, @var{meps}) ! Implementation of procedure REDUCE in (Emami-Naeini and Van Dooren, ! Automatica, # 1982). ! @end deftypefn ! zgrownorm ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{nonz}, @var{zer}] =} zgrownorm (@var{mat}, @var{meps}) ! Return @var{nonz} = number of rows of @var{mat} whose two norm ! exceeds @var{meps}, and @var{zer} = number of rows of mat whose two ! norm is less than @var{meps}. ! @end deftypefn ! zgscal ! -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} zgscal (@var{f}, @var{z}, @var{n}, @var{m}, @var{p}) ! Generalized conjugate gradient iteration to ! solve zero-computation generalized eigenvalue problem balancing equation ! @math{fx=z}; called by @command{zgepbal}. ! @end deftypefn ! zgsgiv ! -*- texinfo -*- ! @deftypefn {Function File} {[a, b] =} zgsgiv (@var{c}, @var{s}, @var{a}, @var{b}) ! Apply givens rotation c,s to row vectors @var{a}, @var{b}. ! No longer used in zero-balancing (__zgpbal__); kept for backward ! compatibility. ! @end deftypefn ! zgshsr ! -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} zgshsr (@var{y}) ! Apply householder vector based on ! @iftex ! @tex ! $ e^m $ ! @end tex ! @end iftex ! @ifinfo ! @math{e^(m)} ! @end ifinfo ! to column vector @var{y}. ! Called by @command{zgfslv}. ! @end deftypefn ! beta_cdf ! -*- texinfo -*- ! @deftypefn {Function File} {} beta_cdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, returns the CDF at @var{x} of the beta ! distribution with parameters @var{a} and @var{b}, i.e., ! PROB (beta (@var{a}, @var{b}) <= @var{x}). ! @end deftypefn ! beta_inv ! -*- texinfo -*- ! @deftypefn {Function File} {} beta_inv (@var{x}, @var{a}, @var{b}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the Beta distribution with parameters @var{a} ! and @var{b}. ! @end deftypefn ! beta_pdf ! -*- texinfo -*- ! @deftypefn {Function File} {} beta_pdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, returns the PDF at @var{x} of the beta ! distribution with parameters @var{a} and @var{b}. @end deftypefn ! beta_rnd -*- texinfo -*- ! @deftypefn {Function File} {} beta_rnd (@var{a}, @var{b}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} beta_rnd (@var{a}, @var{b}, @var{sz}) Return an @var{r} by @var{c} or @code{size (@var{sz})} matrix of random samples from the Beta distribution with parameters @var{a} and @var{b}. Both @var{a} and @var{b} must be scalar or of size @var{r} --- 3,3790 ---- ### This file is generated automatically from the Octave sources. ### Edit those files instead and run make to update this file. ! deal -*- texinfo -*- ! @deftypefn {Function File} {[@var{r1}, @var{r2}, @dots{}, @var{rn}] =} deal (@var{a}) ! @deftypefnx {Function File} {[@var{r1}, @var{r2}, @dots{}, @var{rn}] =} deal (@var{a1}, @var{a2}, @dots{}, @var{an}) ! Copy the input parameters into the corresponding output parameters. ! If only one input parameter is supplied, its value is copied to each ! of the outputs. ! For example, ! ! @example ! [a, b, c] = deal (x, y, z); ! @end example ! ! @noindent ! is equivalent to ! ! @example ! @group ! a = x; ! b = y; ! c = z; ! @end group ! @end example ! ! @noindent ! and ! ! @example ! [a, b, c] = deal (x); ! @end example ! ! @noindent ! is equivalent to ! ! @example ! a = b = c = x; ! @end example @end deftypefn ! bitget -*- texinfo -*- ! @deftypefn {Function File} {@var{X} =} bitget (@var{a},@var{n}) ! Return the status of bit(s) @var{n} of unsigned integers in @var{a} ! the lowest significant bit is @var{n} = 1. ! ! @example ! bitget (100, 8:-1:1) ! @result{} 0 1 1 0 0 1 0 0 ! @end example ! @seealso{bitand, bitor, bitxor, bitset, bitcmp, bitshift, bitmax} @end deftypefn ! rat -*- texinfo -*- ! @deftypefn {Function File} {@var{s} =} rat (@var{x}, @var{tol}) ! @deftypefnx {Function File} {[@var{n}, @var{d}] =} rat (@var{x}, @var{tol}) ! ! Find a rational approximation to @var{x} within tolerance defined ! by @var{tol} using a continued fraction expansion. E.g, ! ! @example ! rat(pi) = 3 + 1/(7 + 1/16) = 355/113 ! rat(e) = 3 + 1/(-4 + 1/(2 + 1/(5 + 1/(-2 + 1/(-7))))) ! = 1457/536 ! @end example ! ! Called with two arguments returns the numerator and denominator separately ! as two matrices. @end deftypefn ! @seealso{rats} ! isequalwithequalnans -*- texinfo -*- ! @deftypefn {Function File} {} isequalwithequalnans (@var{x1}, @var{x2}, @dots{}) ! Assuming NaN == NaN, return true if all of @var{x1}, @var{x2}, @dots{} ! are equal. ! @seealso{isequal} @end deftypefn ! common_size -*- texinfo -*- ! @deftypefn {Function File} {[@var{err}, @var{y1}, @dots{}] =} common_size (@var{x1}, @dots{}) ! Determine if all input arguments are either scalar or of common ! size. If so, @var{err} is zero, and @var{yi} is a matrix of the ! common size with all entries equal to @var{xi} if this is a scalar or ! @var{xi} otherwise. If the inputs cannot be brought to a common size, ! errorcode is 1, and @var{yi} is @var{xi}. For example, ! ! @example ! @group ! [errorcode, a, b] = common_size ([1 2; 3 4], 5) ! @result{} errorcode = 0 ! @result{} a = [ 1, 2; 3, 4 ] ! @result{} b = [ 5, 5; 5, 5 ] ! @end group ! @end example ! ! @noindent ! This is useful for implementing functions where arguments can either ! be scalars or of common size. @end deftypefn ! repmat -*- texinfo -*- ! @deftypefn {Function File} {} repmat (@var{A}, @var{m}, @var{n}) ! @deftypefnx {Function File} {} repmat (@var{A}, [@var{m} @var{n}]) ! @deftypefnx {Function File} {} repmat (@var{A}, [@var{m} @var{n} @var{p} ...]) ! Form a block matrix of size @var{m} by @var{n}, with a copy of matrix ! @var{A} as each element. If @var{n} is not specified, form an ! @var{m} by @var{m} block matrix. @end deftypefn ! nthroot -*- texinfo -*- ! @deftypefn {Function File} {} nthroot (@var{x}, @var{n}) ! Compute the nth root of @var{x}, returning real results for real ! components of @var{x}. For example ! @example ! @group ! nthroot (-1, 3) ! @result{} -1 ! (-1) ^ (1 / 3) ! @result{} 0.50000 - 0.86603i ! @end group ! @end example @end deftypefn ! cart2pol -*- texinfo -*- ! @deftypefn {Function File} {[@var{theta}, @var{r}] =} cart2pol (@var{x}, @var{y}) ! @deftypefnx {Function File} {[@var{theta}, @var{r}, @var{z}] =} cart2pol (@var{x}, @var{y}, @var{z}) ! Transform cartesian to polar or cylindrical coordinates. ! @var{x}, @var{y} (and @var{z}) must be of same shape. ! @var{theta} describes the angle relative to the x - axis. ! @var{r} is the distance to the z - axis (0, 0, z). ! @seealso{pol2cart, cart2sph, sph2cart} @end deftypefn ! cell2mat -*- texinfo -*- ! @deftypefn {Function File} {@var{m} =} cell2mat (@var{c}) ! Convert the cell array @var{c} into a matrix by concatenating all ! elements of @var{c} into a hyperrectangle. Elements of @var{c} must ! be numeric, logical or char, and @code{cat} must be able to ! concatenate them together. ! @seealso{mat2cell, num2cell} ! @end deftypefn ! isdefinite ! -*- texinfo -*- ! @deftypefn {Function File} {} isdefinite (@var{x}, @var{tol}) ! Return 1 if @var{x} is symmetric positive definite within the ! tolerance specified by @var{tol} or 0 if @var{x} is symmetric ! positive semidefinite. Otherwise, return -1. If @var{tol} ! is omitted, use a tolerance equal to 100 times the machine precision. ! @seealso{issymmetric} ! @end deftypefn ! rot90 ! -*- texinfo -*- ! @deftypefn {Function File} {} rot90 (@var{x}, @var{n}) ! Return a copy of @var{x} with the elements rotated counterclockwise in ! 90-degree increments. The second argument is optional, and specifies ! how many 90-degree rotations are to be applied (the default value is 1). ! Negative values of @var{n} rotate the matrix in a clockwise direction. ! For example, ! @example @group ! rot90 ([1, 2; 3, 4], -1) ! @result{} 3 1 ! 4 2 ! @end group ! @end example ! @noindent ! rotates the given matrix clockwise by 90 degrees. The following are all ! equivalent statements: ! ! @example ! @group ! rot90 ([1, 2; 3, 4], -1) ! rot90 ([1, 2; 3, 4], 3) ! rot90 ([1, 2; 3, 4], 7) @end group @end example ! ! Due to the difficulty of defining an axis about which to rotate the ! matrix @code{rot90} only work with 2-D arrays. To rotate N-d arrays ! use @code{rotdim} instead. ! @seealso{rotdim, flipud, fliplr, flipdim} @end deftypefn ! isdir -*- texinfo -*- ! @deftypefn {Function File} {} isdir (@var{f}) ! Return true if @var{f} is a directory. @end deftypefn ! isscalar -*- texinfo -*- ! @deftypefn {Function File} {} isscalar (@var{a}) ! Return 1 if @var{a} is a scalar. Otherwise, return 0. ! @seealso{size, rows, columns, length, isscalar, ismatrix} @end deftypefn ! isa -*- texinfo -*- ! @deftypefn {Function File} {} isa (@var{x}, @var{class}) ! Return true if @var{x} is a value from the class @var{class}. @end deftypefn ! cart2sph -*- texinfo -*- ! @deftypefn {Function File} {[@var{theta}, @var{phi}, @var{r}] =} cart2sph (@var{x}, @var{y}, @var{z}) ! Transform cartesian to spherical coordinates. ! @var{x}, @var{y} and @var{z} must be of same shape. ! @var{theta} describes the angle relative to the x - axis. ! @var{phi} is the angle relative to the xy - plane. ! @var{r} is the distance to the origin (0, 0, 0). ! @seealso{pol2cart, cart2pol, sph2cart} ! @end deftypefn ! pol2cart ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{y}] =} pol2cart (@var{theta}, @var{r}) ! @deftypefnx {Function File} {[@var{x}, @var{y}, @var{z}] =} pol2cart (@var{theta}, @var{r}, @var{z}) ! Transform polar or cylindrical to cartesian coordinates. ! @var{theta}, @var{r} (and @var{z}) must be of same shape. ! @var{theta} describes the angle relative to the x - axis. ! @var{r} is the distance to the z - axis (0, 0, z). ! @seealso{cart2pol, cart2sph, sph2cart} ! @end deftypefn ! tril ! -*- texinfo -*- ! @deftypefn {Function File} {} tril (@var{a}, @var{k}) ! @deftypefnx {Function File} {} triu (@var{a}, @var{k}) ! Return a new matrix formed by extracting the lower (@code{tril}) ! or upper (@code{triu}) triangular part of the matrix @var{a}, and ! setting all other elements to zero. The second argument is optional, ! and specifies how many diagonals above or below the main diagonal should ! also be set to zero. ! The default value of @var{k} is zero, so that @code{triu} and ! @code{tril} normally include the main diagonal as part of the result ! matrix. ! If the value of @var{k} is negative, additional elements above (for ! @code{tril}) or below (for @code{triu}) the main diagonal are also ! selected. ! The absolute value of @var{k} must not be greater than the number of ! sub- or super-diagonals. ! For example, ! @example ! @group ! tril (ones (3), -1) ! @result{} 0 0 0 ! 1 0 0 ! 1 1 0 ! @end group ! @end example ! @noindent ! and @example ! @group ! tril (ones (3), 1) ! @result{} 1 1 0 ! 1 1 1 ! 1 1 1 ! @end group @end example ! @seealso{triu, diag} ! @end deftypefn ! __isequal__ ! Undocumented internal function. ! interp1 ! -*- texinfo -*- ! @deftypefn {Function File} {@var{yi} =} interp1 (@var{x}, @var{y}, @var{xi}) ! @deftypefnx {Function File} {@var{yi} =} interp1 (@dots{}, @var{method}) ! @deftypefnx {Function File} {@var{yi} =} interp1 (@dots{}, @var{extrap}) ! @deftypefnx {Function File} {@var{pp} =} interp1 (@dots{}, 'pp') ! ! One-dimensional interpolation. Interpolate @var{y}, defined at the ! points @var{x}, at the points @var{xi}. The sample points @var{x} ! must be strictly monotonic. If @var{y} is an array, treat the columns ! of @var{y} separately. ! ! Method is one of: ! ! @table @asis ! @item 'nearest' ! Return the nearest neighbour. ! @item 'linear' ! Linear interpolation from nearest neighbours ! @item 'pchip' ! Piece-wise cubic hermite interpolating polynomial ! @item 'cubic' ! Cubic interpolation from four nearest neighbours ! @item 'spline' ! Cubic spline interpolation--smooth first and second derivatives ! throughout the curve @end table ! Appending '*' to the start of the above method forces @code{interp1} ! to assume that @var{x} is uniformly spaced, and only @code{@var{x} ! (1)} and @code{@var{x} (2)} are referenced. This is usually faster, ! and is never slower. The default method is 'linear'. ! ! If @var{extrap} is the string 'extrap', then extrapolate values beyond ! the endpoints. If @var{extrap} is a number, replace values beyond the ! endpoints with that number. If @var{extrap} is missing, assume NA. ! ! If the string argument 'pp' is specified, then @var{xi} should not be ! supplied and @code{interp1} returns the piece-wise polynomial that ! can later be used with @code{ppval} to evaluate the interpolation. ! There is an equivalence, such that @code{ppval (interp1 (@var{x}, ! @var{y}, @var{method}, 'pp'), @var{xi}) == interp1 (@var{x}, @var{y}, ! @var{xi}, @var{method}, 'extrap')}. ! ! An example of the use of @code{interp1} is ! @example ! @group ! xf=[0:0.05:10]; yf = sin(2*pi*xf/5); ! xp=[0:10]; yp = sin(2*pi*xp/5); ! lin=interp1(xp,yp,xf); ! spl=interp1(xp,yp,xf,'spline'); ! cub=interp1(xp,yp,xf,'cubic'); ! near=interp1(xp,yp,xf,'nearest'); ! plot(xf,yf,"r",xf,lin,"g",xf,spl,"b", ... ! xf,cub,"c",xf,near,"m",xp,yp,"r*"); ! legend ("original","linear","spline","cubic","nearest") ! @end group @end example ! @seealso{interpft} @end deftypefn ! flipdim -*- texinfo -*- ! @deftypefn {Function File} {} flipdim (@var{x}, @var{dim}) ! Return a copy of @var{x} flipped about the dimension @var{dim}. ! For example ! @example ! @group ! flipdim ([1, 2; 3, 4], 2) ! @result{} 2 1 ! 4 3 ! @end group ! @end example ! @seealso{fliplr, flipud, rot90, rotdim} @end deftypefn ! lookup -*- texinfo -*- ! @deftypefn {Function File} {@var{idx} =} lookup (@var{table}, @var{y}) ! Lookup values in a sorted table. Usually used as a prelude to ! interpolation. ! ! If table is strictly increasing and @code{idx = lookup (table, y)}, then ! @code{table(idx(i)) <= y(i) < table(idx(i+1))} for all @code{y(i)} ! within the table. If @code{y(i)} is before the table, then ! @code{idx(i)} is 0. If @code{y(i)} is after the table then ! @code{idx(i)} is @code{table(n)}. ! ! If the table is strictly decreasing, then the tests are reversed. ! There are no guarantees for tables which are non-monotonic or are not ! strictly monotonic. ! ! To get an index value which lies within an interval of the table, ! use: ! @example ! idx = lookup (table(2:length(table)-1), y) + 1 @end example ! @noindent ! This expression puts values before the table into the first ! interval, and values after the table into the last interval. @end deftypefn ! ind2sub -*- texinfo -*- ! @deftypefn {Function File} {[@var{s1}, @var{s2}, @dots{}, @var{sN}] =} ind2sub (@var{dims}, @var{ind}) ! Convert a linear index into subscripts. ! ! The following example shows how to convert the linear index @code{8} ! in a 3-by-3 matrix into a subscript. @example ! [r, c] = ind2sub ([3, 3], 8) ! @result{} r = 2 ! c = 3 @end example ! @seealso{sub2ind} ! @end deftypefn ! polyarea ! -*- texinfo -*- ! @deftypefn {Function File} {} polyarea (@var{x}, @var{y}) ! @deftypefnx {Function File} {} polyarea (@var{x}, @var{y}, @var{dim}) ! Determines area of a polygon by triangle method. The variables ! @var{x} and @var{y} define the vertex pairs, and must therefore have ! the same shape. They can be either vectors or arrays. If they are ! arrays then the columns of @var{x} and @var{y} are treated separately ! and an area returned for each. ! If the optional @var{dim} argument is given, then @code{polyarea} ! works along this dimension of the arrays @var{x} and @var{y}. ! @end deftypefn ! interp3 ! -*- texinfo -*- ! @deftypefn {Function File} {@var{vi} =} interp3 (@var{x}, @var{y},@var{z}, @var{v}, @var{xi}, @var{yi}, @var{zi}) ! @deftypefnx {Function File} {@var{vi} =} interp3 (@var{v}, @var{xi}, @var{yi}, @var{zi}) ! @deftypefnx {Function File} {@var{vi} =} interp3 (@var{v}, @var{m}) ! @deftypefnx {Function File} {@var{vi} =} interp3 (@var{v}) ! @deftypefnx {Function File} {@var{vi} =} interp3 (@dots{}, @var{method}) ! @deftypefnx {Function File} {@var{vi} =} interp3 (@dots{}, @var{method}, @var{extrapval}) ! Perform 3-dimensional interpolation. Each element of then 3-dimensional ! array @var{v} represents a value at a location given by the parameters ! @var{x}, @var{y}, and @var{z}. The parameters @var{x}, @var{x}, and ! @var{z} are either 3-dimensional arrays of the same size as the array ! @var{v} in the 'meshgrid' format or vectors. The parameters @var{xi}, etc ! respect a similar format to @var{x}, etc, and they represent the points ! at which the array @var{vi} is interpolated. ! If @var{x}, @var{y}, @var{z} are omitted, they are assumed to be ! @code{x = 1 : size (@var{v}, 2)}, @code{y = 1 : size (@var{v}, 1)} and ! @code{z = 1 : size (@var{v}, 3)}. If @var{m} is specified, then ! the interpolation adds a point half way between each of the interpolation ! points. This process is performed @var{m} times. If only @var{v} is ! specified, then @var{m} is assumed to be @code{1}. ! Method is one of: ! ! @table @asis ! @item 'nearest' ! Return the nearest neighbour. ! @item 'linear' ! Linear interpolation from nearest neighbours. ! @item 'cubic' ! Cubic interpolation from four nearest neighbours (not implemented yet). ! @item 'spline' ! Cubic spline interpolation--smooth first and second derivatives ! throughout the curve. @end table ! The default method is 'linear'. ! If @var{extrap} is the string 'extrap', then extrapolate values beyond ! the endpoints. If @var{extrap} is a number, replace values beyond the ! endpoints with that number. If @var{extrap} is missing, assume NA. ! @seealso{interp1, interp2, spline, meshgrid} @end deftypefn ! bicubic -*- texinfo -*- ! @deftypefn {Function File} {@var{zi}=} bicubic (@var{x}, @var{y}, @var{z}, @var{xi}, @var{yi}, @var{extrapval}) ! ! Return a matrix @var{zi} corresponding to the bicubic ! interpolations at @var{xi} and @var{yi} of the data supplied ! as @var{x}, @var{y} and @var{z}. Points outside the grid are set ! to @var{extrapval} ! ! See @url{http://wiki.woodpecker.org.cn/moin/Octave/Bicubic} ! for further information. ! @seealso{interp2} @end deftypefn ! num2str -*- texinfo -*- ! @deftypefn {Function File} {} num2str (@var{n}) ! @deftypefnx {Function File} {} num2str (@var{x}, @var{precision}) ! @deftypefnx {Function File} {} num2str (@var{x}, @var{format}) ! Convert a number to a string. This function is not very flexible. ! For better control over the results, use @code{sprintf} ! (@pxref{Formatted Output}). ! @seealso{sprintf, int2str} ! @end deftypefn ! bitcmp ! -*- texinfo -*- ! @deftypefn {Function File} {} bitcmp (@var{a}, @var{k}) ! Return the @var{k}-bit complement of integers in @var{a}. If ! @var{k} is omitted @code{k = log2 (bitmax) + 1} is assumed. @example ! bitcmp(7,4) ! @result{} 8 ! dec2bin(11) ! @result{} 1011 ! dec2bin(bitcmp(11, 6)) ! @result{} 110100 @end example ! @seealso{bitand, bitor, bitxor, bitset, bitget, bitcmp, bitshift, bitmax} @end deftypefn ! cumtrapz -*- texinfo -*- ! @deftypefn {Function File} {@var{z} =} cumtrapz (@var{y}) ! @deftypefnx {Function File} {@var{z} =} cumtrapz (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{z} =} cumtrapz (@dots{}, @var{dim}) ! Cumulative numerical integration using trapezoidal method. ! @code{cumtrapz (@var{y})} computes the cumulative integral of the ! @var{y} along the first non singleton dimension. If the argument ! @var{x} is omitted a equally spaced vector is assumed. @code{cumtrapz ! (@var{x}, @var{y})} evaluates the cumulative integral with respect ! to @var{x}. ! ! @seealso{trapz,cumsum} ! @end deftypefn ! rotdim ! -*- texinfo -*- ! @deftypefn {Function File} {} rotdim (@var{x}, @var{n}, @var{plane}) ! Return a copy of @var{x} with the elements rotated counterclockwise in ! 90-degree increments. The second argument is optional, and specifies ! how many 90-degree rotations are to be applied (the default value is 1). ! The third argument is also optional and defines the plane of the ! rotation. As such @var{plane} is a two element vector containing two ! different valid dimensions of the matrix. If @var{plane} is not given ! Then the first two non-singleton dimensions are used. ! Negative values of @var{n} rotate the matrix in a clockwise direction. ! For example, ! @example ! @group ! rotdim ([1, 2; 3, 4], -1, [1, 2]) ! @result{} 3 1 ! 4 2 ! @end group ! @end example ! @noindent ! rotates the given matrix clockwise by 90 degrees. The following are all ! equivalent statements: @example ! @group ! rotdim ([1, 2; 3, 4], -1, [1, 2]) ! rotdim ([1, 2; 3, 4], 3, [1, 2]) ! rotdim ([1, 2; 3, 4], 7, [1, 2]) ! @end group @end example ! @seealso{rot90, flipud, fliplr, flipdim} ! @end deftypefn ! accumarray ! -*- texinfo -*- ! @deftypefn {Function File} {} accumarray (@var{subs}, @var{vals}, @var{sz}, @var{fun}, @var{fillval}, @var{issparse}) ! @deftypefnx {Function File} {} accumarray (@var{csubs}, @var{vals}, @dots{}) ! Create an array by accumulating the elements of a vector into the ! positions defined by their subscripts. The subscripts are defined by ! the rows of the matrix @var{subs} and the values by @var{vals}. Each row ! of @var{subs} corresponds to one of the values in @var{vals}. ! The size of the matrix will be determined by the subscripts themselves. ! However, if @var{sz} is defined it determines the matrix size. The length ! of @var{sz} must correspond to the number of columns in @var{subs}. ! The default action of @code{accumarray} is to sum the elements with the ! same subscripts. This behavior can be modified by defining the @var{fun} ! function. This should be a function or function handle that accepts a ! column vector and returns a scalar. The result of the function should not ! depend on the order of the subscripts. ! The elements of the returned array that have no subscripts assoicated with ! them are set to zero. Defining @var{fillval} to some other value allows ! these values to be defined. ! By default @code{accumarray} returns a full matrix. If @var{issparse} is ! logically true, then a sparse matrix is returned instead. ! An example of the use of @code{accumarray} is: ! @example ! @group ! accumarray ([1,1,1;2,1,2;2,3,2;2,1,2;2,3,2], 101:105) ! @result{} ans(:,:,1) = [101, 0, 0; 0, 0, 0] ! ans(:,:,2) = [0, 0, 0; 206, 0, 208] ! @end group ! @end example @end deftypefn ! rem -*- texinfo -*- ! @deftypefn {Mapping Function} {} rem (@var{x}, @var{y}) ! Return the remainder of @code{@var{x} / @var{y}}, computed using the ! expression @example ! x - y .* fix (x ./ y) @end example ! An error message is printed if the dimensions of the arguments do not ! agree, or if either of the arguments is complex. ! @seealso{mod, round} ! @end deftypefn ! nargchk ! -*- texinfo -*- ! @deftypefn {Function File} {} nargchk (@var{nargin_min}, @var{nargin_max}, @var{n}) ! If @var{n} is in the range @var{nargin_min} through @var{nargin_max} ! inclusive, return the empty matrix. Otherwise, return a message ! indicating whether @var{n} is too large or too small. ! This is useful for checking to see that the number of arguments supplied ! to a function is within an acceptable range. ! @end deftypefn ! structfun ! -*- texinfo -*- ! @deftypefn {Function File} {} structfun (@var{func}, @var{s}) ! @deftypefnx {Function File} {[@var{a}, @var{b}] =} structfun (@dots{}) ! @deftypefnx {Function File} {} structfun (@dots{}, 'ErrorHandler', @var{errfunc}) ! @deftypefnx {Function File} {} structfun (@dots{}, 'UniformOutput', @var{val}) ! Evaluate the function named @var{name} on the fields of the structure ! @var{s}. The fields of @var{s} are passed to the function @var{func} ! individually. ! @code{structfun} accepts an arbitrary function @var{func} in the form of ! an inline function, function handle, or the name of a function (in a ! character string). In the case of a character string argument, the ! function must accept a single argument named @var{x}, and it must return ! a string value. If the function returns more than one argument, they are ! returned as separate output variables. ! If the param 'UniformOutput' is set to true (the default), then the function ! must return either a single element which will be concatenated into the ! return value. If 'UniformOutput is false, the outputs placed in a structure ! with the same fieldnames as the input structure. ! @example ! @group ! s.name1 = "John Smith"; ! s.name2 = "Jill Jones"; ! structfun (@@(x) regexp (x, '(\w+)$', 'matches')@{1@}, s, ! 'UniformOutput', false) ! @end group ! @end example ! Given the parameter 'ErrorHandler', then @var{errfunc} defines a function to ! call in case @var{func} generates an error. The form of the function is ! @example ! function [@dots{}] = errfunc (@var{se}, @dots{}) ! @end example ! where there is an additional input argument to @var{errfunc} relative to ! @var{func}, given by @var{se}. This is a structure with the elements ! 'identifier', 'message' and 'index', giving respectively the error ! identifier, the error message, and the index into the input arguments ! of the element that caused the error. ! @seealso{cellfun, arrayfun} @end deftypefn ! __splinen__ ! Undocumented internal function. ! arrayfun -*- texinfo -*- ! @deftypefn {Function File} {@var{a} =} arrayfun (@var{name}, @var{c}) ! @deftypefnx {Function File} {@var{a} =} arrayfun (@var{func}, @var{c}) ! @deftypefnx {Function File} {@var{a} =} arrayfun (@var{func}, @var{c}, @var{d}) ! @deftypefnx {Function File} {@var{a} =} arrayfun (@var{func}, @var{c}, @var{options}) ! @deftypefnx {Function File} {[@var{a}, @var{b}, @dots{}] =} arrayfun (@var{func}, @var{c}, @dots{}) ! Execute a function on each element of an array. This is useful for ! functions that do not accept array arguments. If the function does ! accept array arguments it is better to call the function directly. ! See @code{cellfun} for complete usage instructions. ! @seealso{cellfun} ! @end deftypefn ! shift ! -*- texinfo -*- ! @deftypefn {Function File} {} shift (@var{x}, @var{b}) ! @deftypefnx {Function File} {} shift (@var{x}, @var{b}, @var{dim}) ! If @var{x} is a vector, perform a circular shift of length @var{b} of ! the elements of @var{x}. ! If @var{x} is a matrix, do the same for each column of @var{x}. ! If the optional @var{dim} argument is given, operate along this ! dimension ! @end deftypefn ! int2str ! -*- texinfo -*- ! @deftypefn {Function File} {} int2str (@var{n}) ! Convert an integer to a string. This function is not very flexible. ! For better control over the results, use @code{sprintf} ! (@pxref{Formatted Output}). ! @seealso{sprintf, num2str} ! @end deftypefn ! is_duplicate_entry ! -*- texinfo -*- ! @deftypefn {Function File} {} is_duplicate_entry (@var{x}) ! Return non-zero if any entries in @var{x} are duplicates of one ! another. ! @end deftypefn ! issymmetric ! -*- texinfo -*- ! @deftypefn {Function File} {} issymmetric (@var{x}, @var{tol}) ! If @var{x} is symmetric within the tolerance specified by @var{tol}, ! then return the dimension of @var{x}. Otherwise, return 0. If ! @var{tol} is omitted, use a tolerance equal to the machine precision. ! Matrix @var{x} is considered symmetric if ! @code{norm (@var{x} - @var{x}.', inf) / norm (@var{x}, inf) < @var{tol}}. ! @seealso{size, rows, columns, length, ishermitian, ismatrix, isscalar, ! issquare, isvector} ! @end deftypefn ! prepad ! -*- texinfo -*- ! @deftypefn {Function File} {} prepad (@var{x}, @var{l}, @var{c}) ! @deftypefnx {Function File} {} postpad (@var{x}, @var{l}, @var{c}) ! @deftypefnx {Function File} {} postpad (@var{x}, @var{l}, @var{c}, @var{dim}) ! Prepends (appends) the scalar value @var{c} to the vector @var{x} ! until it is of length @var{l}. If the third argument is not ! supplied, a value of 0 is used. ! If @code{length (@var{x}) > @var{l}}, elements from the beginning (end) of ! @var{x} are removed until a vector of length @var{l} is obtained. ! If @var{x} is a matrix, elements are prepended or removed from each row. ! If the optional @var{dim} argument is given, then operate along this ! dimension. ! @end deftypefn ! fliplr ! -*- texinfo -*- ! @deftypefn {Function File} {} fliplr (@var{x}) ! Return a copy of @var{x} with the order of the columns reversed. For ! example, ! @example ! @group ! fliplr ([1, 2; 3, 4]) ! @result{} 2 1 ! 4 3 ! @end group ! @end example ! Note that @code{fliplr} only work with 2-D arrays. To flip N-d arrays ! use @code{flipdim} instead. ! @seealso{flipud, flipdim, rot90, rotdim} ! @end deftypefn ! blkdiag ! -*- texinfo -*- ! @deftypefn {Function File} {} blkdiag (@var{a}, @var{b}, @var{c}, @dots{}) ! Build a block diagonal matrix from @var{a}, @var{b}, @var{c}, @dots{}. ! All the arguments must be numeric and are two-dimensional matrices or ! scalars. ! @seealso{diag, horzcat, vertcat} ! @end deftypefn ! postpad ! -*- texinfo -*- ! @deftypefn {Function File} {} postpad (@var{x}, @var{l}, @var{c}) ! See prepad. ! @end deftypefn ! nextpow2 ! -*- texinfo -*- ! @deftypefn {Function File} {} nextpow2 (@var{x}) ! If @var{x} is a scalar, returns the first integer @var{n} such that @iftex @tex ! $2^n \ge |x|$. @end tex @end iftex @ifinfo ! 2^n >= abs (x). @end ifinfo ! If @var{x} is a vector, return @code{nextpow2 (length (@var{x}))}. ! @seealso{pow2} ! @end deftypefn ! diff ! -*- texinfo -*- ! @deftypefn {Function File} {} diff (@var{x}, @var{k}, @var{dim}) ! If @var{x} is a vector of length @var{n}, @code{diff (@var{x})} is the ! vector of first differences @iftex @tex ! $x_2 - x_1, \ldots{}, x_n - x_{n-1}$. @end tex @end iftex @ifinfo ! @var{x}(2) - @var{x}(1), @dots{}, @var{x}(n) - @var{x}(n-1). @end ifinfo ! ! If @var{x} is a matrix, @code{diff (@var{x})} is the matrix of column ! differences along the first non-singleton dimension. ! ! The second argument is optional. If supplied, @code{diff (@var{x}, ! @var{k})}, where @var{k} is a nonnegative integer, returns the ! @var{k}-th differences. It is possible that @var{k} is larger than ! then first non-singleton dimension of the matrix. In this case, ! @code{diff} continues to take the differences along the next ! non-singleton dimension. ! ! The dimension along which to take the difference can be explicitly ! stated with the optional variable @var{dim}. In this case the ! @var{k}-th order differences are calculated along this dimension. ! In the case where @var{k} exceeds @code{size (@var{x}, @var{dim})} ! then an empty matrix is returned. @end deftypefn ! randperm -*- texinfo -*- ! @deftypefn {Function File} {} randperm (@var{n}) ! Return a row vector containing a random permutation of the ! integers from 1 to @var{n}. ! @end deftypefn ! shiftdim ! -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} shiftdim (@var{x}, @var{n}) ! @deftypefnx {Function File} {[@var{y}, @var{ns}] =} shiftdim (@var{x}) ! Shifts the dimension of @var{x} by @var{n}, where @var{n} must be ! an integer scalar. When @var{n} is positive, the dimensions of ! @var{x} are shifted to the left, with the leading dimensions ! circulated to the end. If @var{n} is negative, then the dimensions ! of @var{x} are shifted to the right, with @var{n} leading singleton ! dimensions added. ! Called with a single argument, @code{shiftdim}, removes the leading ! singleton dimensions, returning the number of dimensions removed ! in the second output argument @var{ns}. ! For example @example ! @group ! x = ones (1, 2, 3); ! size (shiftdim (x, -1)) ! @result{} [1, 1, 2, 3] ! size (shiftdim (x, 1)) ! @result{} [2, 3] ! [b, ns] = shiftdim (x); ! @result{} b = [1, 1, 1; 1, 1, 1] ! @result{} ns = 1 ! @end group @end example ! @seealso {reshape, permute, ipermute, circshift, squeeze} ! @end deftypefn ! cplxpair ! -*- texinfo -*- ! @deftypefn {Function File} {} cplxpair (@var{z}, @var{tol}, @var{dim}) ! Sort the numbers @var{z} into complex conjugate pairs ordered by ! increasing real part. With identical real parts, order by increasing ! imaginary magnitude. Place the negative imaginary complex number ! first within each pair. Place all the real numbers after all the ! complex pairs (those with @code{abs (imag (@var{z}) / @var{z}) < ! @var{tol})}, where the default value of @var{tol} is @code{100 * ! @var{eps}}. ! By default the complex pairs are sorted along the first non-singleton ! dimension of @var{z}. If @var{dim} is specified, then the complex ! pairs are sorted along this dimension. ! Signal an error if some complex numbers could not be paired. Requires ! all complex numbers to be exact conjugates within tol, or signals an ! error. Note that there are no guarantees on the order of the returned ! pairs with identical real parts but differing imaginary parts. ! ! @c Using 'smallexample' to make text fit in page when using 'smallbook' ! @smallexample ! cplxpair (exp(2i*pi*[0:4]'/5)) == exp(2i*pi*[3; 2; 4; 1; 0]/5) ! @end smallexample @end deftypefn ! interpft -*- texinfo -*- ! @deftypefn {Function File} {} interpft (@var{x}, @var{n}) ! @deftypefnx {Function File} {} interpft (@var{x}, @var{n}, @var{dim}) ! ! Fourier interpolation. If @var{x} is a vector, then @var{x} is ! resampled with @var{n} points. The data in @var{x} is assumed to be ! equispaced. If @var{x} is an array, then operate along each column of ! the array separately. If @var{dim} is specified, then interpolate ! along the dimension @var{dim}. ! ! @code{interpft} assumes that the interpolated function is periodic, ! and so assumptions are made about the end points of the interpolation. ! ! @seealso{interp1} @end deftypefn ! bitset -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} bitset (@var{a}, @var{n}) ! @deftypefnx {Function File} {@var{x} =} bitset (@var{a}, @var{n}, @var{v}) ! Set or reset bit(s) @var{n} of unsigned integers in @var{a}. ! @var{v} = 0 resets and @var{v} = 1 sets the bits. ! The lowest significant bit is: @var{n} = 1 ! ! @example ! dec2bin (bitset (10, 1)) ! @result{} 1011 ! @end example ! @seealso{bitand, bitor, bitxor, bitget, bitcmp, bitshift, bitmax} @end deftypefn ! triu -*- texinfo -*- ! @deftypefn {Function File} {} triu (@var{a}, @var{k}) ! See tril. @end deftypefn ! isvector -*- texinfo -*- ! @deftypefn {Function File} {} isvector (@var{a}) ! Return 1 if @var{a} is a vector. Otherwise, return 0. ! @seealso{size, rows, columns, length, isscalar, ismatrix} @end deftypefn ! sortrows -*- texinfo -*- ! @deftypefn {Function File} {} sortrows (@var{a}, @var{c}) ! Sort the rows of the matrix @var{a} according to the order of the ! columns specified in @var{c}. If @var{c} is omitted, a ! lexicographical sort is used. By default ascending order is used ! however if elements of @var{c} are negative then the corrosponding ! column is sorted in descending order. @end deftypefn ! circshift -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} circshift (@var{x}, @var{n}) ! Circularly shifts the values of the array @var{x}. @var{n} must be ! a vector of integers no longer than the number of dimensions in ! @var{x}. The values of @var{n} can be either positive or negative, ! which determines the direction in which the values or @var{x} are ! shifted. If an element of @var{n} is zero, then the corresponding ! dimension of @var{x} will not be shifted. For example @example ! @group ! x = [1, 2, 3; 4, 5, 6; 7, 8, 9]; ! circshift (x, 1) ! @result{} 7, 8, 9 ! 1, 2, 3 ! 4, 5, 6 ! circshift (x, -2) ! @result{} 7, 8, 9 ! 1, 2, 3 ! 4, 5, 6 ! circshift (x, [0,1]) ! @result{} 3, 1, 2 ! 6, 4, 5 ! 9, 7, 8 ! @end group @end example + @seealso {permute, ipermute, shiftdim} + @end deftypefn + sub2ind + -*- texinfo -*- + @deftypefn {Function File} {@var{ind} =} sub2ind (@var{dims}, @var{i}, @var{j}) + @deftypefnx {Function File} {@var{ind} =} sub2ind (@var{dims}, @var{s1}, @var{s2}, @dots{}, @var{sN}) + Convert subscripts into a linear index. ! The following example shows how to convert the two-dimensional ! index @code{(2,3)} of a 3-by-3 matrix to a linear index. @example ! linear_index = sub2ind ([3, 3], 2, 3) ! @result{} 8 ! @end example ! @seealso{ind2sub} ! @end deftypefn ! interpn ! -*- texinfo -*- ! @deftypefn {Function File} {@var{vi} =} interpn (@var{x1}, @var{x2}, @dots{}, @var{v}, @var{y1}, @var{y2}, @dots{}) ! @deftypefnx {Function File} {@var{vi} =} interpn (@var{v}, @var{y1}, @var{y2}, @dots{}) ! @deftypefnx {Function File} {@var{vi} =} interpn (@var{v}, @var{m}) ! @deftypefnx {Function File} {@var{vi} =} interpn (@var{v}) ! @deftypefnx {Function File} {@var{vi} =} interpn (@dots{}, @var{method}) ! @deftypefnx {Function File} {@var{vi} =} interpn (@dots{}, @var{method}, @var{extrapval}) ! Perform @var{n}-dimensional interpolation, where @var{n} is at least two. ! Each element of then @var{n}-dimensional array @var{v} represents a value ! at a location given by the parameters @var{x1}, @var{x2}, @dots{}, @var{xn}. ! The parameters @var{x1}, @var{x2}, @dots{}, @var{xn} are either ! @var{n}-dimensional arrays of the same size as the array @var{v} in ! the 'ndgrid' format or vectors. The parameters @var{y1}, etc respect a ! similar format to @var{x1}, etc, and they represent the points at which ! the array @var{vi} is interpolated. ! If @var{x1}, @dots{}, @var{xn} are omitted, they are assumed to be ! @code{x1 = 1 : size (@var{v}, 1)}, etc. If @var{m} is specified, then ! the interpolation adds a point half way between each of the interpolation ! points. This process is performed @var{m} times. If only @var{v} is ! specified, then @var{m} is assumed to be @code{1}. ! Method is one of: ! @table @asis ! @item 'nearest' ! Return the nearest neighbour. ! @item 'linear' ! Linear interpolation from nearest neighbours. ! @item 'cubic' ! Cubic interpolation from four nearest neighbours (not implemented yet). ! @item 'spline' ! Cubic spline interpolation--smooth first and second derivatives ! throughout the curve. ! @end table ! The default method is 'linear'. ! If @var{extrap} is the string 'extrap', then extrapolate values beyond ! the endpoints. If @var{extrap} is a number, replace values beyond the ! endpoints with that number. If @var{extrap} is missing, assume NA. ! @seealso{interp1, interp2, spline, ndgrid} @end deftypefn ! celldisp -*- texinfo -*- ! @deftypefn {Function File} {} celldisp (@var{c}, @var{name}) ! Recursively display the contents of a cell array. By default the values ! are displayed with the name of the variable @var{c}. However, this name ! can be replaced with the variable @var{name}. ! @seealso{disp} ! @end deftypefn ! gradient ! -*- texinfo -*- ! @deftypefn {Function File} {@var{x} = } gradient (@var{M}) ! @deftypefnx {Function File} {[@var{x}, @var{y}, @dots{}] = } gradient (@var{M}) ! @deftypefnx {Function File} {[@dots{}] = } gradient (@var{M}, @var{s}) ! @deftypefnx {Function File} {[@dots{}] = } gradient (@var{M}, @var{dx}, @var{dy}, @dots{}) ! ! Calculates the gradient. @code{@var{x} = gradient (@var{M})} ! calculates the one dimensional gradient if @var{M} is a vector. If ! @var{M} is a matrix the gradient is calculated for each row. ! ! @code{[@var{x}, @var{y}] = gradient (@var{M})} calculates the one ! dimensional gradient for each direction if @var{M} if @var{M} is a ! matrix. Additional return arguments can be use for multi-dimensional ! matrices. ! ! Spacing values between two points can be provided by the ! @var{dx}, @var{dy} or @var{h} parameters. If @var{h} is supplied it ! is assumed to be the spacing in all directions. Otherwise, separate ! values of the spacing can be supplied by the @var{dx}, etc variables. ! A scalar value specifies an equidistant spacing, while a vector value ! can be used to specify a variable spacing. The length must match ! their respective dimension of @var{M}. ! ! At boundary points a linear extrapolation is applied. Interior points ! are calculated with the first approximation of the numerical gradient ! @example ! y'(i) = 1/(x(i+1)-x(i-1)) *(y(i-1)-y(i+1)). @end example ! ! @end deftypefn ! flipud ! -*- texinfo -*- ! @deftypefn {Function File} {} flipud (@var{x}) ! Return a copy of @var{x} with the order of the rows reversed. For ! example, ! @example ! @group ! flipud ([1, 2; 3, 4]) ! @result{} 3 4 ! 1 2 ! @end group @end example ! Due to the difficulty of defining which axis about which to flip the ! matrix @code{flipud} only work with 2-d arrays. To flip N-d arrays ! use @code{flipdim} instead. ! @seealso{fliplr, flipdim, rot90, rotdim} @end deftypefn ! del2 -*- texinfo -*- ! @deftypefn {Function File} {@var{d} =} del2 (@var{m}) ! @deftypefnx {Function File} {@var{d} =} del2 (@var{m}, @var{h}) ! @deftypefnx {Function File} {@var{d} =} del2 (@var{m}, @var{dx}, @var{dy}, @dots{}) ! ! Calculates the discrete Laplace operator. If @var{m} is a matrix this is ! defined as ! @iftex @tex ! $d = {1 \over 4} \left( {d^2 \over dx^2} M(x,y) + {d^2 \over dy^2} M(x,y) \right)$ @end tex @end iftex ! @ifnottex @example ! @group ! 1 / d^2 d^2 \ ! D = --- * | --- M(x,y) + --- M(x,y) | ! 4 \ dx^2 dy^2 / ! @end group @end example + @end ifnottex ! The above to continued to N-dimensional arrays calculating the second ! derivative over the higher dimensions. ! ! The spacing between evaluation points may be defined by @var{h}, which is a ! scalar defining the spacing in all dimensions. Or alternative, the spacing ! in each dimension may be defined separately by @var{dx}, @var{dy}, etc. ! Scalar spacing values give equidistant spacing, whereas vector spacing ! values can be used to specify variable spacing. The length of the vectors ! must match the respective dimension of @var{m}. The default spacing value ! is 1. ! ! You need at least 3 data points for each dimension. Boundary points are ! calculated as the linear extrapolation of the interior points. ! ! @seealso{gradient, diff} ! @end deftypefn ! logspace ! -*- texinfo -*- ! @deftypefn {Function File} {} logspace (@var{base}, @var{limit}, @var{n}) ! Similar to @code{linspace} except that the values are logarithmically ! spaced from @iftex @tex ! $10^{base}$ to $10^{limit}$. @end tex @end iftex @ifinfo ! 10^base to 10^limit. @end ifinfo ! If @var{limit} is equal to @iftex @tex ! $\pi$, @end tex @end iftex @ifinfo ! pi, @end ifinfo ! the points are between @iftex @tex ! $10^{base}$ and $\pi$, @end tex @end iftex @ifinfo ! 10^base and pi, @end ifinfo ! @emph{not} @iftex @tex ! $10^{base}$ and $10^{\pi}$, @end tex @end iftex @ifinfo ! 10^base and 10^pi, @end ifinfo ! in order to be compatible with the corresponding @sc{Matlab} ! function. ! Also for compatibility, return the second argument if fewer than two ! values are requested. ! @seealso{linspace} @end deftypefn ! quadl -*- texinfo -*- ! @deftypefn {Function File} {@var{q} =} quadl (@var{f}, @var{a}, @var{b}) ! @deftypefnx {Function File} {@var{q} =} quadl (@var{f}, @var{a}, @var{b}, @var{tol}) ! @deftypefnx {Function File} {@var{q} =} quadl (@var{f}, @var{a}, @var{b}, @var{tol}, @var{trace}) ! @deftypefnx {Function File} {@var{q} =} quadl (@var{f}, @var{a}, @var{b}, @var{tol}, @var{trace}, @var{p1}, @var{p2}, @dots{}) ! Numerically evaluate integral using adaptive Lobatto rule. ! @code{quadl (@var{f}, @var{a}, @var{b})} approximates the integral of ! @code{@var{f}(@var{x})} to machine precision. @var{f} is either a ! function handle, inline function or string containing the name of ! the function to evaluate. The function @var{f} must return a vector ! of output values if given a vector of input values. ! ! If defined, @var{tol} defines the relative tolerance to which to ! which to integrate @code{@var{f}(@var{x})}. While if @var{trace} is ! defined, displays the left end point of the current interval, the ! interval length, and the partial integral. ! ! Additional arguments @var{p1}, etc, are passed directly to @var{f}. ! To use default values for @var{tol} and @var{trace}, one may pass ! empty matrices. ! ! Reference: W. Gander and W. Gautschi, 'Adaptive Quadrature - ! Revisited', BIT Vol. 40, No. 1, March 2000, pp. 84--101. ! @url{http://www.inf.ethz.ch/personal/gander/} @end deftypefn ! strerror -*- texinfo -*- ! @deftypefn {Function File} {} strerror (@var{name}, @var{num}) ! Return the text of an error message for function @var{name} ! corresponding to the error number @var{num}. This function is intended ! to be used to print useful error messages for those functions that ! return numeric error codes. @end deftypefn ! logical -*- texinfo -*- ! @deftypefn {Function File} {} logical (@var{arg}) ! Convert @var{arg} to a logical value. For example, @example ! logical ([-1, 0, 1]) @end example ! @noindent ! is equivalent to ! @example ! [-1, 0, 1] != 0 @end example @end deftypefn ! runlength -*- texinfo -*- ! @deftypefn {Function File} {} runlength (@var{x}) ! Find the lengths of all sequences of common values. Return the ! vector of lengths and the value that was repeated. ! @example ! runlength ([2, 2, 0, 4, 4, 4, 0, 1, 1, 1, 1]) ! @result{} [2, 1, 3, 1, 4] ! @end example ! @end deftypefn ! issquare ! -*- texinfo -*- ! @deftypefn {Function File} {} issquare (@var{x}) ! If @var{x} is a square matrix, then return the dimension of @var{x}. ! Otherwise, return 0. ! @seealso{size, rows, columns, length, ismatrix, isscalar, isvector} ! @end deftypefn ! trapz ! -*- texinfo -*- ! @deftypefn {Function File} {@var{z} =} trapz (@var{y}) ! @deftypefnx {Function File} {@var{z} =} trapz (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{z} =} trapz (@dots{}, @var{dim}) ! Numerical integration using trapezoidal method. @code{trapz ! (@var{y})} computes the integral of the @var{y} along the first ! non singleton dimension. If the argument @var{x} is omitted a ! equally spaced vector is assumed. @code{trapz (@var{x}, @var{y})} ! evaluates the integral with respect to @var{x}. ! ! @seealso{cumtrapz} @end deftypefn ! mod -*- texinfo -*- ! @deftypefn {Mapping Function} {} mod (@var{x}, @var{y}) ! Compute modulo function. Conceptually this is given by ! @example ! x - y .* floor (x ./ y) ! @end example ! and is written in a manner that the correct modulus is returned for ! integer types. This function handles negative values correctly. That ! is @code{mod (-1, 3)} is 2, not -1 as @code{rem (-1, 3)} returns. ! Also, @code{mod (@var{x}, 0)} returns @var{x}. ! An error message is printed if the dimensions of the arguments do not ! agree, or if either of the arguments is complex. ! @seealso{rem, round} @end deftypefn ! sph2cart -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{y}, @var{z}] =} sph2cart (@var{theta}, @var{phi}, @var{r}) ! Transform spherical to cartesian coordinates. ! @var{x}, @var{y} and @var{z} must be of same shape. ! @var{theta} describes the angle relative to the x-axis. ! @var{phi} is the angle relative to the xy-plane. ! @var{r} is the distance to the origin (0, 0, 0). ! @seealso{pol2cart, cart2pol, cart2sph} @end deftypefn ! perror -*- texinfo -*- ! @deftypefn {Function File} {} perror (@var{name}, @var{num}) ! Print the error message for function @var{name} corresponding to the ! error number @var{num}. This function is intended to be used to print ! useful error messages for those functions that return numeric error ! codes. ! @seealso{strerror} @end deftypefn ! isequal -*- texinfo -*- ! @deftypefn {Function File} {} isequal (@var{x1}, @var{x2}, @dots{}) ! Return true if all of @var{x1}, @var{x2}, @dots{} are equal. ! @seealso{isequalwithequalnans} ! @end deftypefn ! interp2 ! -*- texinfo -*- ! @deftypefn {Function File} {@var{zi}=} interp2 (@var{x}, @var{y}, @var{z}, @var{xi}, @var{yi}) ! @deftypefnx {Function File} {@var{zi}=} interp2 (@var{Z}, @var{xi}, @var{yi}) ! @deftypefnx {Function File} {@var{zi}=} interp2 (@var{Z}, @var{n}) ! @deftypefnx {Function File} {@var{zi}=} interp2 (@dots{}, @var{method}) ! @deftypefnx {Function File} {@var{zi}=} interp2 (@dots{}, @var{method}, @var{extrapval}) ! Two-dimensional interpolation. @var{x}, @var{y} and @var{z} describe a ! surface function. If @var{x} and @var{y} are vectors their length ! must correspondent to the size of @var{z}. @var{x} and @var{Yy} must be ! monotonic. If they are matrices they must have the @code{meshgrid} ! format. ! ! @table @code ! @item interp2 (@var{x}, @var{y}, @var{Z}, @var{xi}, @var{yi}, @dots{}) ! Returns a matrix corresponding to the points described by the ! matrices @var{XI}, @var{YI}. ! ! If the last argument is a string, the interpolation method can ! be specified. The method can be 'linear', 'nearest' or 'cubic'. ! If it is omitted 'linear' interpolation is assumed. ! ! @item interp2 (@var{z}, @var{xi}, @var{yi}) ! Assumes @code{@var{x} = 1:rows (@var{z})} and @code{@var{y} = ! 1:columns (@var{z})} ! ! @item interp2 (@var{z}, @var{n}) ! Interleaves the Matrix @var{z} n-times. If @var{n} is omitted a value ! of @code{@var{n} = 1} is assumed. @end table ! The variable @var{method} defines the method to use for the ! interpolation. It can take one of the values ! ! @table @asis ! @item 'nearest' ! Return the nearest neighbor. ! @item 'linear' ! Linear interpolation from nearest neighbors. ! @item 'pchip' ! Piece-wise cubic hermite interpolating polynomial (not implemented yet). ! @item 'cubic' ! Cubic interpolation from four nearest neighbors. ! @item 'spline' ! Cubic spline interpolation--smooth first and second derivatives ! throughout the curve. @end table + + If a scalar value @var{extrapval} is defined as the final value, then + values outside the mesh as set to this value. Note that in this case + @var{method} must be defined as well. If @var{extrapval} is not + defined then NA is assumed. + + @seealso{interp1} @end deftypefn ! vech -*- texinfo -*- ! @deftypefn {Function File} {} vech (@var{x}) ! Return the vector obtained by eliminating all supradiagonal elements of ! the square matrix @var{x} and stacking the result one column above the ! other. @end deftypefn ! cross -*- texinfo -*- ! @deftypefn {Function File} {} cross (@var{x}, @var{y}, @var{dim}) ! Computes the vector cross product of the two 3-dimensional vectors ! @var{x} and @var{y}. @example @group ! cross ([1,1,0], [0,1,1]) ! @result{} [ 1; -1; 1 ] @end group @end example ! If @var{x} and @var{y} are matrices, the cross product is applied ! along the first dimension with 3 elements. The optional argument ! @var{dim} is used to force the cross product to be calculated along ! the dimension defined by @var{dim}. @end deftypefn ! krylov -*- texinfo -*- ! @deftypefn {Function File} {[@var{u}, @var{h}, @var{nu}] =} krylov (@var{a}, @var{v}, @var{k}, @var{eps1}, @var{pflg}) ! Construct an orthogonal basis @var{u} of block Krylov subspace ! @example ! [v a*v a^2*v ... a^(k+1)*v] ! @end example ! @noindent ! Using Householder reflections to guard against loss of orthogonality. ! If @var{v} is a vector, then @var{h} contains the Hessenberg matrix ! such that @code{a*u == u*h+rk*ek'}, in which @code{rk = ! a*u(:,k)-u*h(:,k)}, and @code{ek'} is the vector ! @code{[0, 0, @dots{}, 1]} of length @code{k}. Otherwise, @var{h} is ! meaningless. ! ! If @var{v} is a vector and @var{k} is greater than ! @code{length(A)-1}, then @var{h} contains the Hessenberg matrix such ! that @code{a*u == u*h}. ! ! The value of @var{nu} is the dimension of the span of the krylov ! subspace (based on @var{eps1}). ! ! If @var{b} is a vector and @var{k} is greater than @var{m-1}, then ! @var{h} contains the Hessenberg decomposition of @var{a}. ! ! The optional parameter @var{eps1} is the threshold for zero. The ! default value is 1e-12. ! ! If the optional parameter @var{pflg} is nonzero, row pivoting is used ! to improve numerical behavior. The default value is 0. ! ! Reference: Hodel and Misra, "Partial Pivoting in the Computation of ! Krylov Subspaces", to be submitted to Linear Algebra and its ! Applications @end deftypefn ! __norm__ ! Undocumented internal function. ! qzhess -*- texinfo -*- ! @deftypefn {Function File} {[@var{aa}, @var{bb}, @var{q}, @var{z}] =} qzhess (@var{a}, @var{b}) ! Compute the Hessenberg-triangular decomposition of the matrix pencil ! @code{(@var{a}, @var{b})}, returning ! @code{@var{aa} = @var{q} * @var{a} * @var{z}}, ! @code{@var{bb} = @var{q} * @var{b} * @var{z}}, with @var{q} and @var{z} ! orthogonal. For example, ! @example ! @group ! [aa, bb, q, z] = qzhess ([1, 2; 3, 4], [5, 6; 7, 8]) ! @result{} aa = [ -3.02244, -4.41741; 0.92998, 0.69749 ] ! @result{} bb = [ -8.60233, -9.99730; 0.00000, -0.23250 ] ! @result{} q = [ -0.58124, -0.81373; -0.81373, 0.58124 ] ! @result{} z = [ 1, 0; 0, 1 ] ! @end group @end example ! ! The Hessenberg-triangular decomposition is the first step in ! Moler and Stewart's QZ decomposition algorithm. ! ! Algorithm taken from Golub and Van Loan, @cite{Matrix Computations, 2nd ! edition}. ! @end deftypefn ! krylovb ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{u}, @var{ucols}] =} krylovb (@var{a}, @var{v}, @var{k}, @var{eps1}, @var{pflg}) ! See @code{krylov}. ! @end deftypefn ! orth ! -*- texinfo -*- ! @deftypefn {Function File} {} orth (@var{a}, @var{tol}) ! Return an orthonormal basis of the range space of @var{a}. ! ! The dimension of the range space is taken as the number of singular ! values of @var{a} greater than @var{tol}. If the argument @var{tol} is ! missing, it is computed as ! @example ! max (size (@var{a})) * max (svd (@var{a})) * eps @end example ! @end deftypefn ! dmult ! -*- texinfo -*- ! @deftypefn {Function File} {} dmult (@var{a}, @var{b}) ! If @var{a} is a vector of length @code{rows (@var{b})}, return ! @code{diag (@var{a}) * @var{b}} (but computed much more efficiently). ! @end deftypefn ! cond ! -*- texinfo -*- ! @deftypefn {Function File} {} cond (@var{a},@var{p}) ! Compute the @var{p}-norm condition number of a matrix. @code{cond (@var{a})} is ! defined as @code{norm (@var{a}, @var{p}) * norm (inv (@var{a}), @var{p})}. ! By default @code{@var{p}=2} is used which implies a (relatively slow) ! singular value decomposition. Other possible selections are ! @code{@var{p}= 1, Inf, inf, 'Inf', 'fro'} which are generally faster. ! @seealso{norm, inv, det, svd, rank} ! @end deftypefn ! condest ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{est}, @var{v}] =} condest (@var{a}, @var{t}) ! @deftypefnx {Function File} {[@var{est}, @var{v}] =} condest (@var{a}, @var{solve}, @var{solve_t}, @var{t}) ! @deftypefnx {Function File} {[@var{est}, @var{v}] =} condest (@var{apply}, @var{apply_t}, @var{solve}, @var{solve_t}, @var{n}, @var{t}) ! ! Estimate the 1-norm condition number of a matrix matrix @var{A} ! using @var{t} test vectors using a randomized 1-norm estimator. ! If @var{t} exceeds 5, then only 5 test vectors are used. ! ! If the matrix is not explicit, e.g. when estimating the condition ! number of @var{a} given an LU factorization, @code{condest} uses the ! following functions: @table @var ! @item apply ! @code{A*x} for a matrix @code{x} of size @var{n} by @var{t}. ! @item apply_t ! @code{A'*x} for a matrix @code{x} of size @var{n} by @var{t}. ! @item solve ! @code{A \ b} for a matrix @code{b} of size @var{n} by @var{t}. ! @item solve_t ! @code{A' \ b} for a matrix @code{b} of size @var{n} by @var{t}. @end table ! ! The implicit version requires an explicit dimension @var{n}. ! ! @code{condest} uses a randomized algorithm to approximate ! the 1-norms. ! ! @code{condest} returns the 1-norm condition estimate @var{est} and ! a vector @var{v} satisfying @code{norm (A*v, 1) == norm (A, 1) * norm ! (@var{v}, 1) / @var{est}}. When @var{est} is large, @var{v} is an ! approximate null vector. ! ! References: ! @itemize ! @item Nicholas J. Higham and Françoise Tisseur, "A Block Algorithm ! for Matrix 1-Norm Estimation, with an Application to 1-Norm ! Pseudospectra." SIMAX vol 21, no 4, pp 1185-1201. ! @url{http://dx.doi.org/10.1137/S0895479899356080} ! @item Nicholas J. Higham and Françoise Tisseur, "A Block Algorithm ! for Matrix 1-Norm Estimation, with an Application to 1-Norm ! Pseudospectra." @url{http://citeseer.ist.psu.edu/223007.html} ! @end itemize ! ! @seealso{norm, cond, onenormest} @end deftypefn ! vec -*- texinfo -*- ! @deftypefn {Function File} {} vec (@var{x}) ! Return the vector obtained by stacking the columns of the matrix @var{x} ! one above the other. ! @end deftypefn ! null ! -*- texinfo -*- ! @deftypefn {Function File} {} null (@var{a}, @var{tol}) ! Return an orthonormal basis of the null space of @var{a}. ! The dimension of the null space is taken as the number of singular ! values of @var{a} not greater than @var{tol}. If the argument @var{tol} ! is missing, it is computed as ! @example ! max (size (@var{a})) * max (svd (@var{a})) * eps ! @end example @end deftypefn ! rref -*- texinfo -*- ! @deftypefn {Function File} {[@var{r}, @var{k}] =} rref (@var{a}, @var{tol}) ! ! Returns the reduced row echelon form of @var{a}. @var{tol} defaults ! to @code{eps * max (size (@var{a})) * norm (@var{a}, inf)}. ! ! Called with two return arguments, @var{k} returns the vector of ! "bound variables", which are those columns on which elimination ! has been performed. ! @end deftypefn ! housh -*- texinfo -*- ! @deftypefn {Function File} {[@var{housv}, @var{beta}, @var{zer}] =} housh (@var{x}, @var{j}, @var{z}) ! Compute Householder reflection vector @var{housv} to reflect @var{x} ! to be the jth column of identity, i.e., @example @group ! (I - beta*housv*housv')x = norm(x)*e(j) if x(1) < 0, ! (I - beta*housv*housv')x = -norm(x)*e(j) if x(1) >= 0 @end group @end example ! @noindent ! Inputs ! ! @table @var ! @item x ! vector ! @item j ! index into vector ! @item z ! threshold for zero (usually should be the number 0) ! @end table ! ! @noindent ! Outputs (see Golub and Van Loan): ! ! @table @var ! @item beta ! If beta = 0, then no reflection need be applied (zer set to 0) ! @item housv ! householder vector ! @end table ! @end deftypefn ! logm ! -*- texinfo -*- ! @deftypefn {Function File} {} logm (@var{a}) ! Compute the matrix logarithm of the square matrix @var{a}. Note that ! this is currently implemented in terms of an eigenvalue expansion and ! needs to be improved to be more robust. ! @end deftypefn ! trace ! -*- texinfo -*- ! @deftypefn {Function File} {} trace (@var{a}) ! Compute the trace of @var{a}, @code{sum (diag (@var{a}))}. ! @end deftypefn ! rank ! -*- texinfo -*- ! @deftypefn {Function File} {} rank (@var{a}, @var{tol}) ! Compute the rank of @var{a}, using the singular value decomposition. ! The rank is taken to be the number of singular values of @var{a} that ! are greater than the specified tolerance @var{tol}. If the second ! argument is omitted, it is taken to be @example ! tol = max (size (@var{a})) * sigma(1) * eps; @end example @noindent ! where @code{eps} is machine precision and @code{sigma(1)} is the largest ! singular value of @var{a}. @end deftypefn ! dot -*- texinfo -*- ! @deftypefn {Function File} {} dot (@var{x}, @var{y}, @var{dim}) ! Computes the dot product of two vectors. If @var{x} and @var{y} ! are matrices, calculate the dot-product along the first ! non-singleton dimension. If the optional argument @var{dim} is ! given, calculate the dot-product along this dimension. ! @end deftypefn ! commutation_matrix ! -*- texinfo -*- ! @deftypefn {Function File} {} commutation_matrix (@var{m}, @var{n}) ! Return the commutation matrix @iftex @tex ! $K_{m,n}$ @end tex @end iftex @ifinfo ! K(m,n) @end ifinfo ! which is the unique @iftex @tex ! $m n \times m n$ @end tex @end iftex @ifinfo ! @var{m}*@var{n} by @var{m}*@var{n} @end ifinfo ! matrix such that @iftex @tex ! $K_{m,n} \cdot {\rm vec} (A) = {\rm vec} (A^T)$ @end tex @end iftex @ifinfo ! @math{K(m,n) * vec(A) = vec(A')} @end ifinfo ! for all @iftex @tex ! $m\times n$ @end tex @end iftex @ifinfo ! @math{m} by @math{n} @end ifinfo ! matrices @iftex @tex ! $A$. @end tex @end iftex @ifinfo ! @math{A}. @end ifinfo ! If only one argument @var{m} is given, ! @iftex ! @tex ! $K_{m,m}$ ! @end tex ! @end iftex ! @ifinfo ! @math{K(m,m)} ! @end ifinfo ! is returned. ! See Magnus and Neudecker (1988), Matrix differential calculus with ! applications in statistics and econometrics. @end deftypefn ! duplication_matrix -*- texinfo -*- ! @deftypefn {Function File} {} duplication_matrix (@var{n}) ! Return the duplication matrix @iftex @tex ! $D_n$ @end tex @end iftex @ifinfo ! @math{Dn} @end ifinfo ! which is the unique @iftex @tex ! $n^2 \times n(n+1)/2$ @end tex @end iftex @ifinfo ! @math{n^2} by @math{n*(n+1)/2} @end ifinfo ! matrix such that @iftex @tex ! $D_n * {\rm vech} (A) = {\rm vec} (A)$ @end tex @end iftex @ifinfo ! @math{Dn vech (A) = vec (A)} @end ifinfo ! for all symmetric @iftex @tex ! $n \times n$ @end tex @end iftex @ifinfo ! @math{n} by @math{n} @end ifinfo ! matrices @iftex @tex ! $A$. @end tex @end iftex @ifinfo ! @math{A}. @end ifinfo ! See Magnus and Neudecker (1988), Matrix differential calculus with ! applications in statistics and econometrics. ! @end deftypefn ! onenormest ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{est}, @var{v}, @var{w}, @var{iter}] =} onenormest (@var{a}, @var{t}) ! @deftypefnx {Function File} {[@var{est}, @var{v}, @var{w}, @var{iter}] =} onenormest (@var{apply}, @var{apply_t}, @var{n}, @var{t}) ! Apply Higham and Tisseur's randomized block 1-norm estimator to ! matrix @var{a} using @var{t} test vectors. If @var{t} exceeds 5, then ! only 5 test vectors are used. ! If the matrix is not explicit, e.g. when estimating the norm of ! @code{inv (@var{A})} given an LU factorization, @code{onenormest} applies ! @var{A} and its conjugate transpose through a pair of functions ! @var{apply} and @var{apply_t}, respectively, to a dense matrix of size ! @var{n} by @var{t}. The implicit version requires an explicit dimension ! @var{n}. ! Returns the norm estimate @var{est}, two vectors @var{v} and ! @var{w} related by norm ! @code{(@var{w}, 1) = @var{est} * norm (@var{v}, 1)}, ! and the number of iterations @var{iter}. The number of ! iterations is limited to 10 and is at least 2. ! References: ! @itemize ! @item Nicholas J. Higham and Françoise Tisseur, "A Block Algorithm ! for Matrix 1-Norm Estimation, with an Application to 1-Norm ! Pseudospectra." SIMAX vol 21, no 4, pp 1185-1201. ! @url{http://dx.doi.org/10.1137/S0895479899356080} ! @item Nicholas J. Higham and Françoise Tisseur, "A Block Algorithm ! for Matrix 1-Norm Estimation, with an Application to 1-Norm ! Pseudospectra." @url{http://citeseer.ist.psu.edu/223007.html} ! @end itemize ! @seealso{condest, norm, cond} ! @end deftypefn ! beep ! -*- texinfo -*- ! @deftypefn {Function File} {} beep () ! Produce a beep from the speaker (or visual bell). ! @seealso{puts, fputs, printf, fprintf} ! @end deftypefn ! griddata3 ! -*- texinfo -*- ! @deftypefn {Function File} {@var{vi} =} griddata3 (@var{x}, @var{y}, @var{z}, @var{v} @var{xi}, @var{yi}, @var{zi}, @var{method}, @var{options}) ! Generate a regular mesh from irregular data using interpolation. ! The function is defined by @code{@var{y} = f (@var{x},@var{y},@var{z})}. ! The interpolation points are all @var{xi}. ! The interpolation method can be @code{"nearest"} or @code{"linear"}. ! If method is omitted it defaults to @code{"linear"}. ! @seealso{griddata, delaunayn} @end deftypefn ! delaunayn -*- texinfo -*- ! @deftypefn {Function File} {@var{T} =} delaunayn (@var{P}) ! @deftypefnx {Function File} {@var{T} =} delaunayn (@var{P}, @var{opt}) ! Form the Delaunay triangulation for a set of points. ! The Delaunay triangulation is a tessellation of the convex hull of the ! points such that no n-sphere defined by the n-triangles contains ! any other points from the set. ! The input matrix @var{P} of size @code{[n, dim]} contains @var{n} ! points in a space of dimension dim. The return matrix @var{T} has the ! size @code{[m, dim+1]}. It contains for each row a set of indices to ! the points, which describes a simplex of dimension dim. For example, ! a 2d simplex is a triangle and 3d simplex is a tetrahedron. ! Extra options for the underlying Qhull command can be specified by the ! second argument. This argument is a cell array of strings. The default ! options depend on the dimension of the input: ! @itemize ! @item 2D and 3D: @var{opt} = @code{@{"Qt", "Qbb", "Qc"@}} ! @item 4D and higher: @var{opt} = @code{@{"Qt", "Qbb", "Qc", "Qz"@}} @end itemize ! If @var{opt} is [], then the default arguments are used. If @var{opt} ! is @code{@{"@w{}"@}}, then none of the default arguments are used by Qhull. ! See the Qhull documentation for the available options. ! ! All options can also be specified as single string, for example ! @code{"Qt Qbb Qc Qz"}. @end deftypefn ! dsearch -*- texinfo -*- ! @deftypefn {Function File} {@var{idx} =} dsearch (@var{x}, @var{y}, @var{tri}, @var{xi}, @var{yi}) ! @deftypefnx {Function File} {@var{idx} =} dsearch (@var{x}, @var{y}, @var{tri}, @var{xi}, @var{yi}, @var{s}) ! Returns the index @var{idx} or the closest point in @code{@var{x}, @var{y})} ! to the elements @code{[@var{xi}(:), @var{yi}(:)]}. The variable @var{s} is ! accepted but ignored for compatibility. ! @seealso{dsearchn, tsearch} ! @end deftypefn ! voronoi ! -*- texinfo -*- ! @deftypefn {Function File} {} voronoi (@var{x}, @var{y}) ! @deftypefnx {Function File} {} voronoi (@var{x}, @var{y}, "plotstyle") ! @deftypefnx {Function File} {} voronoi (@var{x}, @var{y}, "plotstyle", @var{options}) ! @deftypefnx {Function File} {[@var{vx}, @var{vy}] =} voronoi (@dots{}) ! plots voronoi diagram of points @code{(@var{x}, @var{y})}. ! The voronoi facets with points at infinity are not drawn. ! [@var{vx}, @var{vy}] = voronoi(...) returns the vertices instead plotting the ! diagram. plot (@var{vx}, @var{vy}) shows the voronoi diagram. ! A fourth optional argument, which must be a string, contains extra options ! passed to the underlying qhull command. See the documentation for the ! Qhull library for details. ! @example ! @group ! x = rand (10, 1); ! y = rand (size (x)); ! h = convhull (x, y); ! [vx, vy] = voronoi (x, y); ! plot (vx, vy, "-b", x, y, "o", x(h), y(h), "-g") ! legend ("", "points", "hull"); ! @end group ! @end example ! @seealso{voronoin, delaunay, convhull} ! @end deftypefn ! triplot ! -*- texinfo -*- ! @deftypefn {Function File} {} triplot (@var{tri}, @var{x}, @var{y}) ! @deftypefnx {Function File} {} triplot (@var{tri}, @var{x}, @var{y}, @var{linespec}) ! @deftypefnx {Function File} {@var{h} = } triplot (@dots{}) ! Plot a triangular mesh in 2D. The variable @var{tri} is the triangular ! meshing of the points @code{(@var{x}, @var{y})} which is returned from ! @code{delaunay}. If given, the @var{linespec} determines the properties ! to use for the lines. The output argument @var{h} is the graphic handle ! to the plot. ! @seealso{plot, trimesh, delaunay} ! @end deftypefn ! trimesh ! -*- texinfo -*- ! @deftypefn {Function File} {} trimesh (@var{tri}, @var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {@var{h} = } trimesh (@dots{}) ! Plot a triangular mesh in 3D. The variable @var{tri} is the triangular ! meshing of the points @code{(@var{x}, @var{y})} which is returned ! from @code{delaunay}. The variable @var{z} is value at the point ! @code{(@var{x}, @var{y})}. The output argument @var{h} is the graphic ! handle to the plot. ! @seealso{triplot, delaunay3} ! @end deftypefn ! griddatan ! -*- texinfo -*- ! @deftypefn {Function File} {@var{yi} =} griddatan (@var{x}, @var{y}, @var{xi}, @var{method}, @var{options}) ! Generate a regular mesh from irregular data using interpolation. ! The function is defined by @code{@var{y} = f (@var{x})}. ! The interpolation points are all @var{xi}. ! The interpolation method can be @code{"nearest"} or @code{"linear"}. ! If method is omitted it defaults to @code{"linear"}. ! @seealso{griddata, delaunayn} @end deftypefn ! inpolygon -*- texinfo -*- ! @deftypefn {Function File} {[@var{in}, @var{on}] = } inpolygon (@var{x}, @var{y}, @var{xv}, @var{xy}) ! For a polygon defined by @code{(@var{xv}, @var{yv})} points, determine ! if the points @code{(@var{x}, @var{y})} are inside or outside the polygon. ! The variables @var{x}, @var{y}, must have the same dimension. The optional ! output @var{on} gives the points that are on the polygon. ! @end deftypefn ! griddata ! -*- texinfo -*- ! @deftypefn {Function File} {@var{zi} =} griddata (@var{x}, @var{y}, @var{z}, @var{xi}, @var{yi}, @var{method}) ! @deftypefnx {Function File} {[@var{xi}, @var{yi}, @var{zi}] =} griddata (@var{x}, @var{y}, @var{z}, @var{xi}, @var{yi}, @var{method}) ! Generate a regular mesh from irregular data using interpolation. ! The function is defined by @code{@var{z} = f (@var{x}, @var{y})}. ! The interpolation points are all @code{(@var{xi}, @var{yi})}. If ! @var{xi}, @var{yi} are vectors then they are made into a 2D mesh. ! The interpolation method can be @code{"nearest"}, @code{"cubic"} or ! @code{"linear"}. If method is omitted it defaults to @code{"linear"}. ! @seealso{delaunay} @end deftypefn ! voronoin -*- texinfo -*- ! @deftypefn {Function File} {[@var{C}, @var{F}] =} voronoin (@var{pts}) ! @deftypefnx {Function File} {[@var{C}, @var{F}] =} voronoin (@var{pts}, @var{options}) ! computes n- dimensional voronoi facets. The input matrix @var{pts} ! of size [n, dim] contains n points of dimension dim. ! @var{C} contains the points of the voronoi facets. The list @var{F} ! contains for each facet the indices of the voronoi points. ! ! A second optional argument, which must be a string, contains extra options ! passed to the underlying qhull command. See the documentation for the ! Qhull library for details. ! @seealso{voronoin, delaunay, convhull} @end deftypefn ! dsearchn -*- texinfo -*- ! @deftypefn {Function File} {@var{idx} =} dsearchn (@var{x}, @var{tri}, @var{xi}) ! @deftypefnx {Function File} {@var{idx} =} dsearchn (@var{x}, @var{tri}, @var{xi}, @var{outval}) ! @deftypefnx {Function File} {@var{idx} =} dsearchn (@var{x}, @var{xi}) ! @deftypefnx {Function File} {[@var{idx}, @var{d}] =} dsearchn (@dots{}) ! Returns the index @var{idx} or the closest point in @var{x} to the elements ! @var{xi}. If @var{outval} is supplied, then the values of @var{xi} that are ! not contained within one of the simplicies @var{tri} are set to ! @var{outval}. Generally, @var{tri} is returned from @code{delaunayn ! (@var{x})}. ! @seealso{dsearch, tsearch} ! @end deftypefn ! tsearchn ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{idx}, @var{p}] =} tsearchn (@var{x}, @var{t}, @var{xi}) ! Searches for the enclosing Delaunay convex hull. For @code{@var{t} = ! delaunayn (@var{x})}, finds the index in @var{t} containing the ! points @var{xi}. For points outside the convex hull, @var{idx} is NaN. ! If requested @code{tsearchn} also returns the barycentric coordinates @var{p} ! of the enclosing triangles. ! @seealso{delaunay, delaunayn} ! @end deftypefn ! delaunay3 ! -*- texinfo -*- ! @deftypefn {Function File} {@var{T} =} delaunay3 (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {@var{T} =} delaunay3 (@var{x}, @var{y}, @var{z}, @var{opt}) ! A matrix of size [n, 4] is returned. Each row contains a ! set of tetrahedron which are ! described by the indices to the data point vectors (x,y,z). ! A fourth optional argument, which must be a string or cell array of strings, ! contains extra options passed to the underlying qhull command. See the ! documentation for the Qhull library for details. ! @seealso{delaunay,delaunayn} ! @end deftypefn ! delaunay ! -*- texinfo -*- ! @deftypefn {Function File} {@var{tri}=} delaunay (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{tri}=} delaunay (@var{x}, @var{y}, @var{opt}) ! The return matrix of size [n, 3] contains a set triangles which are ! described by the indices to the data point x and y vector. ! The triangulation satisfies the Delaunay circumcircle criterion. ! No other data point is in the circumcircle of the defining triangle. ! A third optional argument, which must be a string, contains extra options ! passed to the underlying qhull command. See the documentation for the ! Qhull library for details. ! @example ! @group ! x = rand (1, 10); ! y = rand (size (x)); ! T = delaunay (x, y); ! X = [x(T(:,1)); x(T(:,2)); x(T(:,3)); x(T(:,1))]; ! Y = [y(T(:,1)); y(T(:,2)); y(T(:,3)); y(T(:,1))]; ! axis ([0,1,0,1]); ! plot (X, Y, "b", x, y, "r*"); ! @end group ! @end example ! @seealso{voronoi, delaunay3, delaunayn} @end deftypefn ! convhull -*- texinfo -*- ! @deftypefn {Function File} {@var{H} =} convhull (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{H} =} convhull (@var{x}, @var{y}, @var{opt}) ! Returns the index vector to the points of the enclosing convex hull. The ! data points are defined by the x and y vectors. ! A third optional argument, which must be a string, contains extra options ! passed to the underlying qhull command. See the documentation for the ! Qhull library for details. ! @seealso{delaunay, convhulln} @end deftypefn ! eomday -*- texinfo -*- ! @deftypefn {Function File} {@var{e} =} eomday (@var{y}, @var{m}) ! Return the last day of the month @var{m} for the year @var{y}. ! @seealso{datenum, datevec, weekday, eomdate} @end deftypefn ! datestr ! -*- texinfo -*- ! @deftypefn {Function File} {@var{str} =} datestr (@var{date}, [@var{f}, [@var{p}]]) ! Format the given date/time according to the format @code{f} and return ! the result in @var{str}. @var{date} is a serial date number (see ! @code{datenum}) or a date vector (see @code{datevec}). The value of ! @var{date} may also be a string or cell array of strings. ! @var{f} can be an integer which corresponds to one of the codes in ! the table below, or a date format string. ! @var{p} is the year at the start of the century in which two-digit years ! are to be interpreted in. If not specified, it defaults to the current ! year minus 50. ! For example, the date 730736.65149 (2000-09-07 15:38:09.0934) would be ! formatted as follows: ! @multitable @columnfractions 0.1 0.45 0.35 ! @headitem Code @tab Format @tab Example ! @item 0 @tab dd-mmm-yyyy HH:MM:SS @tab 07-Sep-2000 15:38:09 ! @item 1 @tab dd-mmm-yyyy @tab 07-Sep-2000 ! @item 2 @tab mm/dd/yy @tab 09/07/00 ! @item 3 @tab mmm @tab Sep ! @item 4 @tab m @tab S ! @item 5 @tab mm @tab 09 ! @item 6 @tab mm/dd @tab 09/07 ! @item 7 @tab dd @tab 07 ! @item 8 @tab ddd @tab Thu ! @item 9 @tab d @tab T ! @item 10 @tab yyyy @tab 2000 ! @item 11 @tab yy @tab 00 ! @item 12 @tab mmmyy @tab Sep00 ! @item 13 @tab HH:MM:SS @tab 15:38:09 ! @item 14 @tab HH:MM:SS PM @tab 03:38:09 PM ! @item 15 @tab HH:MM @tab 15:38 ! @item 16 @tab HH:MM PM @tab 03:38 PM ! @item 17 @tab QQ-YY @tab Q3-00 ! @item 18 @tab QQ @tab Q3 ! @item 19 @tab dd/mm @tab 13/03 ! @item 20 @tab dd/mm/yy @tab 13/03/95 ! @item 21 @tab mmm.dd.yyyy HH:MM:SS @tab Mar.03.1962 13:53:06 ! @item 22 @tab mmm.dd.yyyy @tab Mar.03.1962 ! @item 23 @tab mm/dd/yyyy @tab 03/13/1962 ! @item 24 @tab dd/mm/yyyy @tab 12/03/1962 ! @item 25 @tab yy/mm/dd @tab 95/03/13 ! @item 26 @tab yyyy/mm/dd @tab 1995/03/13 ! @item 27 @tab QQ-YYYY @tab Q4-2132 ! @item 28 @tab mmmyyyy @tab Mar2047 ! @item 29 @tab yyyymmdd @tab 20470313 ! @item 30 @tab yyyymmddTHHMMSS @tab 20470313T132603 ! @item 31 @tab yyyy-mm-dd HH:MM:SS @tab 1047-03-13 13:26:03 ! @end multitable ! If @var{f} is a format string, the following symbols are recognised: ! @multitable @columnfractions 0.1 0.7 0.2 ! @headitem Symbol @tab Meaning @tab Example ! @item yyyy @tab Full year @tab 2005 ! @item yy @tab Two-digit year @tab 2005 ! @item mmmm @tab Full month name @tab December ! @item mmm @tab Abbreviated month name @tab Dec ! @item mm @tab Numeric month number (padded with zeros) @tab 01, 08, 12 ! @item m @tab First letter of month name (capitalized) @tab D ! @item dddd @tab Full weekday name @tab Sunday ! @item ddd @tab Abbreviated weekday name @tab Sun ! @item dd @tab Numeric day of month (padded with zeros) @tab 11 ! @item d @tab First letter of weekday name (capitalized) @tab S ! @item HH @tab Hour of day, padded with zeros if PM is set @tab 09:00 ! @item @tab and not padded with zeros otherwise @tab 9:00 AM ! @item MM @tab Minute of hour (padded with zeros) @tab 10:05 ! @item SS @tab Second of minute (padded with zeros) @tab 10:05:03 ! @item PM @tab Use 12-hour time format @tab 11:30 PM ! @end multitable ! If @var{f} is not specified or is @code{-1}, then use 0, 1 or 16, ! depending on whether the date portion or the time portion of ! @var{date} is empty. ! If @var{p} is nor specified, it defaults to the current year minus 50. ! If a matrix or cell array of dates is given, a vector of date strings is ! returned. ! ! @seealso{datenum, datevec, date, clock, now, datetick} ! @end deftypefn ! ctime -*- texinfo -*- ! @deftypefn {Function File} {} ctime (@var{t}) ! Convert a value returned from @code{time} (or any other nonnegative ! integer), to the local time and return a string of the same form as ! @code{asctime}. The function @code{ctime (time)} is equivalent to ! @code{asctime (localtime (time))}. For example, ! @example ! @group ! ctime (time ()) ! @result{} "Mon Feb 17 01:15:06 1997\n" ! @end group @end example @end deftypefn ! asctime ! -*- texinfo -*- ! @deftypefn {Function File} {} asctime (@var{tm_struct}) ! Convert a time structure to a string using the following five-field ! format: Thu Mar 28 08:40:14 1996. For example, ! @example ! @group ! asctime (localtime (time ())) ! @result{} "Mon Feb 17 01:15:06 1997\n" ! @end group ! @end example ! This is equivalent to @code{ctime (time ())}. ! @end deftypefn ! calendar ! -*- texinfo -*- ! @deftypefn {Function File} {} calendar (@dots{}) ! @deftypefnx {Function File} {@var{c} =} calendar () ! @deftypefnx {Function File} {@var{c} =} calendar (@var{d}) ! @deftypefnx {Function File} {@var{c} =} calendar (@var{y}, @var{m}) ! If called with no arguments, return the current monthly calendar in ! a 6x7 matrix. ! If @var{d} is specified, return the calendar for the month containing ! the day @var{d}, which must be a serial date number or a date string. ! If @var{y} and @var{m} are specified, return the calendar for year @var{y} ! and month @var{m}. ! If no output arguments are specified, print the calendar on the screen ! instead of returning a matrix. ! @seealso{datenum} @end deftypefn ! is_leap_year -*- texinfo -*- ! @deftypefn {Function File} {} is_leap_year (@var{year}) ! Return 1 if the given year is a leap year and 0 otherwise. If no ! arguments are provided, @code{is_leap_year} will use the current year. ! For example, ! ! @example ! @group ! is_leap_year (2000) ! @result{} 1 ! @end group ! @end example @end deftypefn ! etime -*- texinfo -*- ! @deftypefn {Function File} {} etime (@var{t1}, @var{t2}) ! Return the difference (in seconds) between two time values returned from ! @code{clock}. For example: @example ! t0 = clock (); ! many computations later... ! elapsed_time = etime (clock (), t0); @end example ! @noindent ! will set the variable @code{elapsed_time} to the number of seconds since ! the variable @code{t0} was set. ! @seealso{tic, toc, clock, cputime} @end deftypefn ! weekday -*- texinfo -*- ! @deftypefn {Function File} {[@var{n}, @var{s}] =} weekday (@var{d}, [@var{form}]) ! Return the day of week as a number in @var{n} and a string in @var{s}, ! for example @code{[1, "Sun"]}, @code{[2, "Mon"]}, @dots{}, or ! @code{[7, "Sat"]}. ! @var{d} is a serial date number or a date string. ! If the string @var{form} is given and is @code{"long"}, @var{s} will ! contain the full name of the weekday; otherwise (or if @var{form} is ! @code{"short"}), @var{s} will contain the abbreviated name of the weekday. ! @seealso{datenum, datevec, eomday} ! @end deftypefn ! datevec ! -*- texinfo -*- ! @deftypefn {Function File} {@var{v} =} datevec (@var{date}) ! @deftypefnx {Function File} {@var{v} =} datevec (@var{date}, @var{f}) ! @deftypefnx {Function File} {@var{v} =} datevec (@var{date}, @var{p}) ! @deftypefnx {Function File} {@var{v} =} datevec (@var{date}, @var{f}, @var{p}) ! @deftypefnx {Function File} {[@var{y}, @var{m}, @var{d}, @var{h}, @var{mi}, @var{s}] =} datevec (@dots{}) ! Convert a serial date number (see @code{datenum}) or date string (see ! @code{datestr}) into a date vector. ! A date vector is a row vector with six members, representing the year, ! month, day, hour, minute, and seconds respectively. ! @var{f} is the format string used to interpret date strings ! (see @code{datestr}). ! @var{p} is the year at the start of the century in which two-digit years ! are to be interpreted in. If not specified, it defaults to the current ! year minus 50. ! @seealso{datenum, datestr, date, clock, now} ! @end deftypefn ! clock ! -*- texinfo -*- ! @deftypefn {Function File} {} clock () ! Return a vector containing the current year, month (1-12), day (1-31), ! hour (0-23), minute (0-59) and second (0-61). For example, @example @group ! clock () ! @result{} [ 1993, 8, 20, 4, 56, 1 ] @end group @end example ! The function clock is more accurate on systems that have the ! @code{gettimeofday} function. ! @end deftypefn ! date ! -*- texinfo -*- ! @deftypefn {Function File} {} date () ! Return the date as a character string in the form DD-MMM-YY. For ! example, @example @group ! date () ! @result{} "20-Aug-93" @end group @end example @end deftypefn ! now -*- texinfo -*- ! @deftypefn {Function File} {t =} now () ! Returns the current local time as the number of days since Jan 1, 0000. ! By this reckoning, Jan 1, 1970 is day number 719529. ! The integral part, @code{floor (now)} corresponds to 00:00:00 today. ! The fractional part, @code{rem (now, 1)} corresponds to the current ! time on Jan 1, 0000. ! The returned value is also called a "serial date number" ! (see @code{datenum}). ! @seealso{clock, date, datenum} @end deftypefn ! datenum -*- texinfo -*- ! @deftypefn {Function File} {} datenum (@var{year}, @var{month}, @var{day}) ! @deftypefnx {Function File} {} datenum (@var{year}, @var{month}, @var{day}, @var{hour}) ! @deftypefnx {Function File} {} datenum (@var{year}, @var{month}, @var{day}, @var{hour}, @var{minute}) ! @deftypefnx {Function File} {} datenum (@var{year}, @var{month}, @var{day}, @var{hour}, @var{minute}, @var{second}) ! @deftypefnx {Function File} {} datenum (@code{"date"}) ! @deftypefnx {Function File} {} datenum (@code{"date"}, @var{p}) ! Returns the specified local time as a day number, with Jan 1, 0000 ! being day 1. By this reckoning, Jan 1, 1970 is day number 719529. ! The fractional portion, @var{p}, corresponds to the portion of the ! specified day. ! Notes: ! @itemize ! @item ! Years can be negative and/or fractional. ! @item ! Months below 1 are considered to be January. ! @item ! Days of the month start at 1. ! @item ! Days beyond the end of the month go into subsequent months. ! @item ! Days before the beginning of the month go to the previous month. ! @item ! Days can be fractional. ! @end itemize ! @strong{Warning:} this function does not attempt to handle Julian ! calendars so dates before Octave 15, 1582 are wrong by as much ! as eleven days. Also be aware that only Roman Catholic countries ! adopted the calendar in 1582. It took until 1924 for it to be ! adopted everywhere. See the Wikipedia entry on the Gregorian ! calendar for more details. ! ! @strong{Warning:} leap seconds are ignored. A table of leap seconds ! is available on the Wikipedia entry for leap seconds. ! @seealso{date, clock, now, datestr, datevec, calendar, weekday} @end deftypefn ! __img_via_file__ ! Undocumented internal function. ! hsv2rgb -*- texinfo -*- ! @deftypefn {Function File} {@var{rgb_map} =} hsv2rgb (@var{hsv_map}) ! Transform a colormap from the hsv space to the rgb space. ! @seealso{rgb2hsv} @end deftypefn ! hot -*- texinfo -*- ! @deftypefn {Function File} {} hot (@var{n}) ! Create color colormap. This colormap is black through dark red, red, ! orange, yellow to white. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} @end deftypefn ! saveimage -*- texinfo -*- ! @deftypefn {Function File} {} saveimage (@var{file}, @var{x}, @var{fmt}, @var{map}) ! Save the matrix @var{x} to @var{file} in image format @var{fmt}. Valid ! values for @var{fmt} are ! @table @code ! @item "img" ! Octave's image format. The current colormap is also saved in the file. ! @item "ppm" ! Portable pixmap format. ! @item "ps" ! PostScript format. Note that images saved in PostScript format can not ! be read back into Octave with loadimage. @end table ! If the fourth argument is supplied, the specified colormap will also be ! saved along with the image. ! Note: if the colormap contains only two entries and these entries are ! black and white, the bitmap ppm and PostScript formats are used. If the ! image is a gray scale image (the entries within each row of the colormap ! are equal) the gray scale ppm and PostScript image formats are used, ! otherwise the full color formats are used. ! @seealso{loadimage, save, load, colormap} @end deftypefn ! ntsc2rgb -*- texinfo -*- ! @deftypefn {Function File} {} ntsc2rgb (@var{yiq}) ! Image format conversion. @end deftypefn ! gmap40 -*- texinfo -*- ! @deftypefn {Function File} {} gmap40 (@var{n}) ! Create a color colormap. The colormap is red, green, blue, yellow, ! magneta and cyan. These are the colors that are allowed with patch ! objects using gnuplot 4.0, and so this colormap function is specially ! designed for users of gnuplot 4.0. The argument @var{n} should be ! a scalar. If it is omitted, a length of 6 is assumed. Larger values ! of @var{n} result in a repetition of the above colors ! @seealso{colormap} @end deftypefn ! rainbow -*- texinfo -*- ! @deftypefn {Function File} {} rainbow (@var{n}) ! Create color colormap. This colormap is red through orange, yellow, green, ! blue to violet. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} @end deftypefn ! rgb2ind -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{map}] =} rgb2ind (@var{rgb}) ! @deftypefnx {Function File} {[@var{x}, @var{map}] =} rgb2ind (@var{r}, @var{g}, @var{b}) ! Convert and RGB image to an Octave indexed image. ! @seealso{ind2rgb, rgb2ntsc} @end deftypefn ! gray2ind -*- texinfo -*- ! @deftypefn {Function File} {[@var{img}, @var{map}] =} gray2ind (@var{}) ! Convert a gray scale intensity image to an Octave indexed image. @end deftypefn ! imagesc -*- texinfo -*- ! @deftypefn {Function File} {} imagesc (@var{a}) ! @deftypefnx {Function File} {} imagesc (@var{x}, @var{y}, @var{a}) ! @deftypefnx {Function File} {} imagesc (@dots{}, @var{limits}) ! @deftypefnx {Function File} {} imagesc (@var{h}, @dots{}) ! @deftypefnx {Function File} { @var{h} = } imagesc (@dots{}) ! Display a scaled version of the matrix @var{a} as a color image. The ! colormap is scaled so that the entries of the matrix occupy the entire ! colormap. If @var{limits} = [@var{lo}, @var{hi}] are given, then that ! range is set to the 'clim' of the current axes. ! ! The axis values corresponding to the matrix elements are specified in ! @var{x} and @var{y}, either as pairs giving the minimum and maximum ! values for the respective axes, or as values for each row and column ! of the matrix @var{a}. ! ! @seealso{image, imshow, clim, caxis} @end deftypefn ! prism -*- texinfo -*- ! @deftypefn {Function File} {} prism (@var{n}) ! Create color colormap. This colormap cycles trough red, orange, yellow, ! green, blue and violet. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} @end deftypefn ! gray -*- texinfo -*- ! @deftypefn {Function File} {} gray (@var{n}) ! Return a gray colormap with @var{n} entries corresponding to values from ! 0 to @var{n}-1. The argument @var{n} should be a scalar. If it is ! omitted, the length of the current colormap or 64 is assumed. @end deftypefn ! imshow -*- texinfo -*- ! @deftypefn {Function File} {} imshow (@var{im}) ! @deftypefnx {Function File} {} imshow (@var{im}, @var{limits}) ! @deftypefnx {Function File} {} imshow (@var{im}, @var{map}) ! @deftypefnx {Function File} {} imshow (@var{rgb}, @dots{}) ! @deftypefnx {Function File} {} imshow (@var{filename}) ! @deftypefnx {Function File} {} imshow (@dots{}, @var{string_param1}, @var{value1}, @dots{}) ! Display the image @var{im}, where @var{im} can be a 2-dimensional ! (gray-scale image) or a 3-dimensional (RGB image) matrix. ! If @var{limits} is a 2-element vector @code{[@var{low}, @var{high}]}, ! the image is shown using a display range between @var{low} and ! @var{high}. If an empty matrix is passed for @var{limits}, the ! display range is computed as the range between the minimal and the ! maximal value in the image. ! If @var{map} is a valid color map, the image will be shown as an indexed ! image using the supplied color map. ! If a file name is given instead of an image, the file will be read and ! shown. ! ! If given, the parameter @var{string_param1} has value ! @var{value1}. @var{string_param1} can be any of the following: ! @table @samp ! @item "displayrange" ! @var{value1} is the display range as described above. @end table ! @seealso{image, imagesc, colormap, gray2ind, rgb2ind} @end deftypefn ! autumn -*- texinfo -*- ! @deftypefn {Function File} {} autumn (@var{n}) ! Create color colormap. This colormap is red through orange to yellow. ! The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} @end deftypefn ! brighten -*- texinfo -*- ! @deftypefn {Function File} {@var{map_out} =} brighten (@var{map}, @var{beta}) ! @deftypefnx {Function File} {@var{map_out} =} brighten (@var{h}, @var{beta}) ! @deftypefnx {Function File} {@var{map_out} =} brighten (@var{beta}) ! Darkens or brightens the given colormap. If the @var{map} argument ! is omitted, the function is applied to the current colormap. The first ! argument can also be a valid graphics handle @var{h}, in which case ! @code{brighten} is applied to the colormap associated with this handle. ! Should the resulting colormap @var{map_out} not be assigned, it will be ! written to the current colormap. ! The argument @var{beta} should be a scalar between -1 and 1, ! where a negative value darkens and a positive value brightens ! the colormap. ! @seealso{colormap} @end deftypefn ! ind2gray -*- texinfo -*- ! @deftypefn {Function File} {} ind2gray (@var{x}, @var{map}) ! Convert an Octave indexed image to a gray scale intensity image. ! If @var{map} is omitted, the current colormap is used to determine the ! intensities. ! @seealso{gray2ind, rgb2ntsc, image, colormap} ! @end deftypefn ! bone -*- texinfo -*- ! @deftypefn {Function File} {} bone (@var{n}) ! Create color colormap. This colormap is a gray colormap with a light ! blue tone. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! __img__ ! Undocumented internal function. ! image_viewer ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{fcn}, @var{default_zoom}] =} image_viewer (@var{fcn}, @var{default_zoom}) ! Change the program or function used for viewing images and return the ! previous values. ! When the @code{image} or @code{imshow} function is called it will ! launch an external program to display the image. The default behaviour ! is to use gnuplot if the installed version supports image viewing, ! and otherwise try the programs @code{display}, @code{xv}, and ! @code{xloadimage}. Using this function it is possible to change that ! behaviour. ! When called with one input argument images will be displayed by saving ! the image to a file and the system command @var{command} will called ! to view the image. The @var{command} must be a string containing ! @code{%s} and possibly @code{%f}. The @code{%s} will be replaced by ! the filename of the image, and the @code{%f} will (if present) be ! replaced by the zoom factor given to the @code{image} function. ! For example, @example ! image_viewer ("eog %s"); @end example ! changes the image viewer to the @code{eog} program. + With two input arguments, images will be displayed by calling + the function @var{function_handle}. For example, @example ! image_viewer (data, @@my_image_viewer); @end example ! sets the image viewer function to @code{my_image_viewer}. The image ! viewer function is called with ! @example ! my_image_viewer (@var{x}, @var{y}, @var{im}, @var{zoom}, @var{data}) ! @end example ! where @var{x} and @var{y} are the axis of the image, @var{im} is the image ! variable, and @var{data} is extra user-supplied data to be passed to ! the viewer function. ! With three input arguments it is possible to change the zooming. ! Some programs (like @code{xloadimage}) require the zoom factor to be ! between 0 and 100, and not 0 and 1 like Octave assumes. This is ! solved by setting the third argument to 100. ! @seealso{image, imshow} ! @end deftypefn ! ocean ! -*- texinfo -*- ! @deftypefn {Function File} {} ocean (@var{n}) ! Create color colormap. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @end deftypefn ! flag ! -*- texinfo -*- ! @deftypefn {Function File} {} flag (@var{n}) ! Create color colormap. This colormap cycles through red, white, blue ! and black. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! ind2rgb ! -*- texinfo -*- ! @deftypefn {Function File} {@var{rgb} =} ind2rgb (@var{x}, @var{map}) ! @deftypefnx {Function File} {[@var{r}, @var{g}, @var{b}] =} ind2rgb (@var{x}, @var{map}) ! Convert an indexed image to red, green, and blue color components. ! If the colormap doesn't contain enough colors, pad it with the ! last color in the map. ! If @var{map} is omitted, the current colormap is used for the conversion. ! @seealso{rgb2ind, image, imshow, ind2gray, gray2ind} ! @end deftypefn ! rgb2hsv ! -*- texinfo -*- ! @deftypefn {Function File} {@var{hsv_map} =} rgb2hsv (@var{rgb_map}) ! Transform a colormap from the rgb space to the hsv space. ! A color n the RGB space consists of the red, green and blue intensities. ! In the HSV space each color is represented by their hue, saturation ! and value (brightness). Value gives the amount of light in the color. ! Hue describes the dominant wavelength. ! Saturation is the amount of Hue mixed into the color. ! @seealso{hsv2rgb} ! @end deftypefn ! loadimage ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{map}] =} loadimage (@var{file}) ! Load an image file and it's associated color map from the specified ! @var{file}. The image must be stored in Octave's image format. ! @seealso{saveimage, load, save} ! @end deftypefn ! white ! -*- texinfo -*- ! @deftypefn {Function File} {} white (@var{n}) ! Create color colormap. This colormap is completely white. ! The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! cool ! -*- texinfo -*- ! @deftypefn {Function File} {} cool (@var{n}) ! Create color colormap. The colormap is cyan to magenta. The argument ! @var{n} should be a scalar. If it is omitted, the length of the current ! colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! summer ! -*- texinfo -*- ! @deftypefn {Function File} {} summer (@var{n}) ! Create color colormap. This colormap is green to yellow. ! The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! winter ! -*- texinfo -*- ! @deftypefn {Function File} {} winter (@var{n}) ! Create color colormap. This colormap is blue to green. ! The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! copper ! -*- texinfo -*- ! @deftypefn {Function File} {} copper (@var{n}) ! Create color colormap. This colormap is black to a light copper tone. ! The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! colormap ! -*- texinfo -*- ! @deftypefn {Function File} {} colormap (@var{map}) ! @deftypefnx {Function File} {} colormap ("default") ! Set the current colormap. ! @code{colormap (@var{map})} sets the current colormap to @var{map}. The ! color map should be an @var{n} row by 3 column matrix. The columns ! contain red, green, and blue intensities respectively. All entries ! should be between 0 and 1 inclusive. The new colormap is returned. ! @code{colormap ("default")} restores the default colormap (the ! @code{jet} map with 64 entries). The default colormap is returned. ! With no arguments, @code{colormap} returns the current color map. ! @seealso{jet} ! @end deftypefn ! spring ! -*- texinfo -*- ! @deftypefn {Function File} {} spring (@var{n}) ! Create color colormap. This colormap is magenta to yellow. ! The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! image ! -*- texinfo -*- ! @deftypefn {Function File} {} image (@var{img}) ! @deftypefnx {Function File} {} image (@var{x}, @var{y}, @var{img}) ! Display a matrix as a color image. The elements of @var{x} are indices ! into the current colormap, and the colormap will be scaled so that the ! extremes of @var{x} are mapped to the extremes of teh colormap. ! It first tries to use @code{gnuplot}, then @code{display} from ! @code{ImageMagick}, then @code{xv}, and then @code{xloadimage}. ! The actual program used can be changed using the @code{image_viewer} ! function. ! The axis values corresponding to the matrix elements are specified in ! @var{x} and @var{y}. If you're not using gnuplot 4.2 or later, these ! variables are ignored. ! @seealso{imshow, imagesc, colormap, image_viewer} ! @end deftypefn ! rgb2ntsc ! -*- texinfo -*- ! @deftypefn {Function File} {} rgb2ntsc (@var{rgb}) ! Image format conversion. ! @end deftypefn ! pink ! -*- texinfo -*- ! @deftypefn {Function File} {} pink (@var{n}) ! Create color colormap. This colormap gives a sephia tone on black and ! white images. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! hsv ! -*- texinfo -*- ! @deftypefn {Function File} {} hsv (@var{n}) ! Create color colormap. This colormap is red through yellow, green, cyan, ! blue, magenta to red. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! jet ! -*- texinfo -*- ! @deftypefn {Function File} {} jet (@var{n}) ! Create color colormap. This colormap is dark blue through blue, cyan, ! green, yellow, red to dark red. The argument @var{n} should be a scalar. ! If it is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! cor_test ! -*- texinfo -*- ! @deftypefn {Function File} {} cor_test (@var{x}, @var{y}, @var{alt}, @var{method}) ! Test whether two samples @var{x} and @var{y} come from uncorrelated ! populations. ! The optional argument string @var{alt} describes the alternative ! hypothesis, and can be @code{"!="} or @code{"<>"} (non-zero), ! @code{">"} (greater than 0), or @code{"<"} (less than 0). The ! default is the two-sided case. ! The optional argument string @var{method} specifies on which ! correlation coefficient the test should be based. If @var{method} is ! @code{"pearson"} (default), the (usual) Pearson's product moment ! correlation coefficient is used. In this case, the data should come ! from a bivariate normal distribution. Otherwise, the other two ! methods offer nonparametric alternatives. If @var{method} is ! @code{"kendall"}, then Kendall's rank correlation tau is used. If ! @var{method} is @code{"spearman"}, then Spearman's rank correlation ! rho is used. Only the first character is necessary. ! The output is a structure with the following elements: @table @var ! @item pval ! The p-value of the test. ! @item stat ! The value of the test statistic. ! @item dist ! The distribution of the test statistic. ! @item params ! The parameters of the null distribution of the test statistic. ! @item alternative ! The alternative hypothesis. ! @item method ! The method used for testing. @end table ! If no output argument is given, the p-value is displayed. ! @end deftypefn ! hotelling_test_2 ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{tsq}] =} hotelling_test_2 (@var{x}, @var{y}) ! For two samples @var{x} from multivariate normal distributions with ! the same number of variables (columns), unknown means and unknown ! equal covariance matrices, test the null hypothesis @code{mean ! (@var{x}) == mean (@var{y})}. ! Hotelling's two-sample @math{T^2} is returned in @var{tsq}. Under the null, @iftex @tex ! $$ ! {n_x+n_y-p-1) T^2 \over p(n_x+n_y-2)} ! $$ @end tex @end iftex ! @ifnottex @example ! (n_x+n_y-p-1) T^2 / (p(n_x+n_y-2)) @end example ! @end ifnottex ! @noindent ! has an F distribution with @math{p} and @math{n_x+n_y-p-1} degrees of ! freedom, where @math{n_x} and @math{n_y} are the sample sizes and ! @math{p} is the number of variables. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! kolmogorov_smirnov_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{ks}] =} kolmogorov_smirnov_test (@var{x}, @var{dist}, @var{params}, @var{alt}) ! Perform a Kolmogorov-Smirnov test of the null hypothesis that the ! sample @var{x} comes from the (continuous) distribution dist. I.e., ! if F and G are the CDFs corresponding to the sample and dist, ! respectively, then the null is that F == G. ! The optional argument @var{params} contains a list of parameters of ! @var{dist}. For example, to test whether a sample @var{x} comes from ! a uniform distribution on [2,4], use ! @example ! kolmogorov_smirnov_test(x, "uniform", 2, 4) ! @end example ! @noindent ! @var{dist} can be any string for which a function @var{dist_cdf} ! that calculates the CDF of distribution @var{dist} exists. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative F ! != G. In this case, the test statistic @var{ks} follows a two-sided ! Kolmogorov-Smirnov distribution. If @var{alt} is @code{">"}, the ! one-sided alternative F > G is considered. Similarly for @code{"<"}, ! the one-sided alternative F > G is considered. In this case, the ! test statistic @var{ks} has a one-sided Kolmogorov-Smirnov ! distribution. The default is the two-sided case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value is displayed. ! @end deftypefn ! welch_test ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{t}, @var{df}] =} welch_test (@var{x}, @var{y}, @var{alt}) ! For two samples @var{x} and @var{y} from normal distributions with ! unknown means and unknown and not necessarily equal variances, ! perform a Welch test of the null hypothesis of equal means. ! Under the null, the test statistic @var{t} approximately follows a ! Student distribution with @var{df} degrees of freedom. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{mean (@var{x}) != @var{m}}. If @var{alt} is @code{">"}, the ! one-sided alternative mean(x) > @var{m} is considered. Similarly for ! @code{"<"}, the one-sided alternative mean(x) < @var{m} is ! considered. The default is the two-sided case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. ! @end deftypefn ! z_test_2 ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{z}] =} z_test_2 (@var{x}, @var{y}, @var{v_x}, @var{v_y}, @var{alt}) ! For two samples @var{x} and @var{y} from normal distributions with ! unknown means and known variances @var{v_x} and @var{v_y}, perform a ! Z-test of the hypothesis of equal means. Under the null, the test ! statistic @var{z} follows a standard normal distribution. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{mean (@var{x}) != mean (@var{y})}. If alt is @code{">"}, the ! one-sided alternative @code{mean (@var{x}) > mean (@var{y})} is used. ! Similarly for @code{"<"}, the one-sided alternative @code{mean ! (@var{x}) < mean (@var{y})} is used. The default is the two-sided ! case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed ! along with some information. ! @end deftypefn ! t_test ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{t}, @var{df}] =} t_test (@var{x}, @var{m}, @var{alt}) ! For a sample @var{x} from a normal distribution with unknown mean and ! variance, perform a t-test of the null hypothesis @code{mean ! (@var{x}) == @var{m}}. Under the null, the test statistic @var{t} ! follows a Student distribution with @code{@var{df} = length (@var{x}) ! - 1} degrees of freedom. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{mean (@var{x}) != @var{m}}. If @var{alt} is @code{">"}, the ! one-sided alternative @code{mean (@var{x}) > @var{m}} is considered. ! Similarly for @var{"<"}, the one-sided alternative @code{mean ! (@var{x}) < @var{m}} is considered. The default is the two-sided ! case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. ! @end deftypefn ! f_test_regression ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{f}, @var{df_num}, @var{df_den}] =} f_test_regression (@var{y}, @var{x}, @var{rr}, @var{r}) ! Perform an F test for the null hypothesis rr * b = r in a classical ! normal regression model y = X * b + e. ! Under the null, the test statistic @var{f} follows an F distribution ! with @var{df_num} and @var{df_den} degrees of freedom. ! The p-value (1 minus the CDF of this distribution at @var{f}) is ! returned in @var{pval}. ! If not given explicitly, @var{r} = 0. ! If no output argument is given, the p-value is displayed. ! @end deftypefn ! u_test ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{z}] =} u_test (@var{x}, @var{y}, @var{alt}) ! For two samples @var{x} and @var{y}, perform a Mann-Whitney U-test of ! the null hypothesis PROB (@var{x} > @var{y}) == 1/2 == PROB (@var{x} ! < @var{y}). Under the null, the test statistic @var{z} approximately ! follows a standard normal distribution. Note that this test is ! equivalent to the Wilcoxon rank-sum test. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! PROB (@var{x} > @var{y}) != 1/2. If @var{alt} is @code{">"}, the ! one-sided alternative PROB (@var{x} > @var{y}) > 1/2 is considered. ! Similarly for @code{"<"}, the one-sided alternative PROB (@var{x} > ! @var{y}) < 1/2 is considered. The default is the two-sided case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. ! @end deftypefn ! wilcoxon_test ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{z}] =} wilcoxon_test (@var{x}, @var{y}, @var{alt}) ! For two matched-pair sample vectors @var{x} and @var{y}, perform a ! Wilcoxon signed-rank test of the null hypothesis PROB (@var{x} > ! @var{y}) == 1/2. Under the null, the test statistic @var{z} ! approximately follows a standard normal distribution when @var{n} > 25. ! @strong{Warning}: This function assumes a normal distribution for @var{z} ! and thus is invalid for @var{n} <= 25. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! PROB (@var{x} > @var{y}) != 1/2. If alt is @code{">"}, the one-sided ! alternative PROB (@var{x} > @var{y}) > 1/2 is considered. Similarly ! for @code{"<"}, the one-sided alternative PROB (@var{x} > @var{y}) < ! 1/2 is considered. The default is the two-sided case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. ! @end deftypefn ! t_test_regression ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{t}, @var{df}] =} t_test_regression (@var{y}, @var{x}, @var{rr}, @var{r}, @var{alt}) ! Perform an t test for the null hypothesis @code{@var{rr} * @var{b} = ! @var{r}} in a classical normal regression model @code{@var{y} = ! @var{x} * @var{b} + @var{e}}. Under the null, the test statistic @var{t} ! follows a @var{t} distribution with @var{df} degrees of freedom. ! If @var{r} is omitted, a value of 0 is assumed. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{@var{rr} * @var{b} != @var{r}}. If @var{alt} is @code{">"}, the ! one-sided alternative @code{@var{rr} * @var{b} > @var{r}} is used. ! Similarly for @var{"<"}, the one-sided alternative @code{@var{rr} * ! @var{b} < @var{r}} is used. The default is the two-sided case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! chisquare_test_independence -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{chisq}, @var{df}] =} chisquare_test_independence (@var{x}) ! Perform a chi-square test for independence based on the contingency ! table @var{x}. Under the null hypothesis of independence, ! @var{chisq} approximately has a chi-square distribution with ! @var{df} degrees of freedom. ! The p-value (1 minus the CDF of this distribution at chisq) of the ! test is returned in @var{pval}. ! If no output argument is given, the p-value is displayed. @end deftypefn ! hotelling_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{tsq}] =} hotelling_test (@var{x}, @var{m}) ! For a sample @var{x} from a multivariate normal distribution with unknown ! mean and covariance matrix, test the null hypothesis that @code{mean ! (@var{x}) == @var{m}}. ! Hotelling's @math{T^2} is returned in @var{tsq}. Under the null, ! @math{(n-p) T^2 / (p(n-1))} has an F distribution with @math{p} and ! @math{n-p} degrees of freedom, where @math{n} and @math{p} are the ! numbers of samples and variables, respectively. ! ! The p-value of the test is returned in @var{pval}. ! ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! prop_test_2 -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{z}] =} prop_test_2 (@var{x1}, @var{n1}, @var{x2}, @var{n2}, @var{alt}) ! If @var{x1} and @var{n1} are the counts of successes and trials in ! one sample, and @var{x2} and @var{n2} those in a second one, test the ! null hypothesis that the success probabilities @var{p1} and @var{p2} ! are the same. Under the null, the test statistic @var{z} ! approximately follows a standard normal distribution. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @var{p1} != @var{p2}. If @var{alt} is @code{">"}, the one-sided ! alternative @var{p1} > @var{p2} is used. Similarly for @code{"<"}, ! the one-sided alternative @var{p1} < @var{p2} is used. ! The default is the two-sided case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! bartlett_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{chisq}, @var{df}] =} bartlett_test (@var{x1}, @dots{}) ! Perform a Bartlett test for the homogeneity of variances in the data ! vectors @var{x1}, @var{x2}, @dots{}, @var{xk}, where @var{k} > 1. ! Under the null of equal variances, the test statistic @var{chisq} ! approximately follows a chi-square distribution with @var{df} degrees of ! freedom. ! ! The p-value (1 minus the CDF of this distribution at @var{chisq}) is ! returned in @var{pval}. ! ! If no output argument is given, the p-value is displayed. @end deftypefn ! z_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{z}] =} z_test (@var{x}, @var{m}, @var{v}, @var{alt}) ! Perform a Z-test of the null hypothesis @code{mean (@var{x}) == ! @var{m}} for a sample @var{x} from a normal distribution with unknown ! mean and known variance @var{v}. Under the null, the test statistic ! @var{z} follows a standard normal distribution. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{mean (@var{x}) != @var{m}}. If @var{alt} is @code{">"}, the ! one-sided alternative @code{mean (@var{x}) > @var{m}} is considered. ! Similarly for @code{"<"}, the one-sided alternative @code{mean ! (@var{x}) < @var{m}} is considered. The default is the two-sided ! case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed ! along with some information. ! @end deftypefn ! mcnemar_test ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{chisq}, @var{df}] =} mcnemar_test (@var{x}) ! For a square contingency table @var{x} of data cross-classified on ! the row and column variables, McNemar's test can be used for testing ! the null hypothesis of symmetry of the classification probabilities. ! Under the null, @var{chisq} is approximately distributed as chisquare ! with @var{df} degrees of freedom. ! The p-value (1 minus the CDF of this distribution at @var{chisq}) is ! returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. ! @end deftypefn ! kruskal_wallis_test ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{k}, @var{df}] =} kruskal_wallis_test (@var{x1}, @dots{}) ! Perform a Kruskal-Wallis one-factor "analysis of variance". ! Suppose a variable is observed for @var{k} > 1 different groups, and ! let @var{x1}, @dots{}, @var{xk} be the corresponding data vectors. ! Under the null hypothesis that the ranks in the pooled sample are not ! affected by the group memberships, the test statistic @var{k} is ! approximately chi-square with @var{df} = @var{k} - 1 degrees of ! freedom. ! ! If the data contains ties (some value appears more than once) ! @var{k} is divided by ! ! 1 - @var{sumTies} / ( @var{n}^3 - @var{n} ) ! ! where @var{sumTies} is the sum of @var{t}^2 - @var{t} over each group ! of ties where @var{t} is the number of ties in the group and @var{n} ! is the total number of values in the input data. For more info on ! this adjustment see "Use of Ranks in One-Criterion Variance Analysis" ! in Journal of the American Statistical Association, Vol. 47, ! No. 260 (Dec 1952) by William H. Kruskal and W. Allen Wallis. ! ! The p-value (1 minus the CDF of this distribution at @var{k}) is ! returned in @var{pval}. ! ! If no output argument is given, the p-value is displayed. @end deftypefn ! var_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{f}, @var{df_num}, @var{df_den}] =} var_test (@var{x}, @var{y}, @var{alt}) ! For two samples @var{x} and @var{y} from normal distributions with ! unknown means and unknown variances, perform an F-test of the null ! hypothesis of equal variances. Under the null, the test statistic ! @var{f} follows an F-distribution with @var{df_num} and @var{df_den} ! degrees of freedom. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{var (@var{x}) != var (@var{y})}. If @var{alt} is @code{">"}, ! the one-sided alternative @code{var (@var{x}) > var (@var{y})} is ! used. Similarly for "<", the one-sided alternative @code{var ! (@var{x}) > var (@var{y})} is used. The default is the two-sided ! case. ! The p-value of the test is returned in @var{pval}. ! ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! kolmogorov_smirnov_test_2 -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{ks}, @var{d}] =} kolmogorov_smirnov_test_2 (@var{x}, @var{y}, @var{alt}) ! Perform a 2-sample Kolmogorov-Smirnov test of the null hypothesis ! that the samples @var{x} and @var{y} come from the same (continuous) ! distribution. I.e., if F and G are the CDFs corresponding to the ! @var{x} and @var{y} samples, respectively, then the null is that F == ! G. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative F ! != G. In this case, the test statistic @var{ks} follows a two-sided ! Kolmogorov-Smirnov distribution. If @var{alt} is @code{">"}, the ! one-sided alternative F > G is considered. Similarly for @code{"<"}, ! the one-sided alternative F < G is considered. In this case, the ! test statistic @var{ks} has a one-sided Kolmogorov-Smirnov ! distribution. The default is the two-sided case. ! The p-value of the test is returned in @var{pval}. ! ! The third returned value, @var{d}, is the test statistic, the maximum ! vertical distance between the two cumulative distribution functions. ! ! If no output argument is given, the p-value is displayed. @end deftypefn ! manova -*- texinfo -*- ! @deftypefn {Function File} {} manova (@var{y}, @var{g}) ! Perform a one-way multivariate analysis of variance (MANOVA). The ! goal is to test whether the p-dimensional population means of data ! taken from @var{k} different groups are all equal. All data are ! assumed drawn independently from p-dimensional normal distributions ! with the same covariance matrix. ! ! The data matrix is given by @var{y}. As usual, rows are observations ! and columns are variables. The vector @var{g} specifies the ! corresponding group labels (e.g., numbers from 1 to @var{k}). ! ! The LR test statistic (Wilks' Lambda) and approximate p-values are ! computed and displayed. @end deftypefn ! sign_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{b}, @var{n}] =} sign_test (@var{x}, @var{y}, @var{alt}) ! For two matched-pair samples @var{x} and @var{y}, perform a sign test ! of the null hypothesis PROB (@var{x} > @var{y}) == PROB (@var{x} < ! @var{y}) == 1/2. Under the null, the test statistic @var{b} roughly ! follows a binomial distribution with parameters @code{@var{n} = sum ! (@var{x} != @var{y})} and @var{p} = 1/2. ! With the optional argument @code{alt}, the alternative of interest ! can be selected. If @var{alt} is @code{"!="} or @code{"<>"}, the ! null hypothesis is tested against the two-sided alternative PROB ! (@var{x} < @var{y}) != 1/2. If @var{alt} is @code{">"}, the ! one-sided alternative PROB (@var{x} > @var{y}) > 1/2 ("x is ! stochastically greater than y") is considered. Similarly for ! @code{"<"}, the one-sided alternative PROB (@var{x} > @var{y}) < 1/2 ! ("x is stochastically less than y") is considered. The default is ! the two-sided case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. ! @end deftypefn ! anova ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{f}, @var{df_b}, @var{df_w}] =} anova (@var{y}, @var{g}) ! Perform a one-way analysis of variance (ANOVA). The goal is to test ! whether the population means of data taken from @var{k} different ! groups are all equal. ! Data may be given in a single vector @var{y} with groups specified by ! a corresponding vector of group labels @var{g} (e.g., numbers from 1 ! to @var{k}). This is the general form which does not impose any ! restriction on the number of data in each group or the group labels. ! If @var{y} is a matrix and @var{g} is omitted, each column of @var{y} ! is treated as a group. This form is only appropriate for balanced ! ANOVA in which the numbers of samples from each group are all equal. ! Under the null of constant means, the statistic @var{f} follows an F ! distribution with @var{df_b} and @var{df_w} degrees of freedom. ! The p-value (1 minus the CDF of this distribution at @var{f}) is ! returned in @var{pval}. ! If no output argument is given, the standard one-way ANOVA table is ! printed. @end deftypefn ! chisquare_test_homogeneity -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{chisq}, @var{df}] =} chisquare_test_homogeneity (@var{x}, @var{y}, @var{c}) ! Given two samples @var{x} and @var{y}, perform a chisquare test for ! homogeneity of the null hypothesis that @var{x} and @var{y} come from ! the same distribution, based on the partition induced by the ! (strictly increasing) entries of @var{c}. ! For large samples, the test statistic @var{chisq} approximately follows a ! chisquare distribution with @var{df} = @code{length (@var{c})} ! degrees of freedom. ! The p-value (1 minus the CDF of this distribution at @var{chisq}) is ! returned in @var{pval}. ! If no output argument is given, the p-value is displayed. @end deftypefn ! t_test_2 -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{t}, @var{df}] =} t_test_2 (@var{x}, @var{y}, @var{alt}) ! For two samples x and y from normal distributions with unknown means ! and unknown equal variances, perform a two-sample t-test of the null ! hypothesis of equal means. Under the null, the test statistic ! @var{t} follows a Student distribution with @var{df} degrees of ! freedom. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{mean (@var{x}) != mean (@var{y})}. If @var{alt} is @code{">"}, ! the one-sided alternative @code{mean (@var{x}) > mean (@var{y})} is ! used. Similarly for @code{"<"}, the one-sided alternative @code{mean ! (@var{x}) < mean (@var{y})} is used. The default is the two-sided ! case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! run_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{chisq}] =} run_test (@var{x}) ! Perform a chi-square test with 6 degrees of freedom based on the ! upward runs in the columns of @var{x}. Can be used to test whether ! @var{x} contains independent data. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value is displayed. @end deftypefn ! stdnormal_pdf -*- texinfo -*- ! @deftypefn {Function File} {} stdnormal_pdf (@var{x}) ! For each element of @var{x}, compute the probability density function ! (PDF) of the standard normal distribution at @var{x}. ! @end deftypefn ! betacdf ! -*- texinfo -*- ! @deftypefn {Function File} {} betacdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, returns the CDF at @var{x} of the beta ! distribution with parameters @var{a} and @var{b}, i.e., ! PROB (beta (@var{a}, @var{b}) <= @var{x}). ! @end deftypefn ! poissinv ! -*- texinfo -*- ! @deftypefn {Function File} {} poissinv (@var{x}, @var{lambda}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the Poisson distribution with parameter ! @var{lambda}. ! @end deftypefn ! nbinpdf ! -*- texinfo -*- ! @deftypefn {Function File} {} nbinpdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the Pascal (negative binomial) distribution with ! parameters @var{n} and @var{p}. ! The number of failures in a Bernoulli experiment with success ! probability @var{p} before the @var{n}-th success follows this ! distribution. @end deftypefn ! trnd -*- texinfo -*- ! @deftypefn {Function File} {} trnd (@var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} trnd (@var{n}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the t ! (Student) distribution with @var{n} degrees of freedom. @var{n} must ! be a scalar or of size @var{r} by @var{c}. Or if @var{sz} is a ! vector create a matrix of size @var{sz}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{n}. ! @end deftypefn ! binocdf ! -*- texinfo -*- ! @deftypefn {Function File} {} binocdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the CDF at @var{x} of the ! binomial distribution with parameters @var{n} and @var{p}. ! @end deftypefn ! laplace_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} laplace_rnd (@var{r}, @var{c}) ! @deftypefnx {Function File} {} laplace_rnd (@var{sz}); ! Return an @var{r} by @var{c} matrix of random numbers from the ! Laplace distribution. Or if @var{sz} is a vector, create a matrix of ! @var{sz}. ! @end deftypefn ! expinv ! -*- texinfo -*- ! @deftypefn {Function File} {} expinv (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the exponential distribution with mean ! @var{lambda}. ! @end deftypefn ! gaminv ! -*- texinfo -*- ! @deftypefn {Function File} {} gaminv (@var{x}, @var{a}, @var{b}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the Gamma distribution with parameters @var{a} ! and @var{b}. ! @seealso{gamma, gammaln, gammainc, gampdf, gamcdf, gamrnd} ! @end deftypefn ! hygepdf ! -*- texinfo -*- ! @deftypefn {Function File} {} hygepdf (@var{x}, @var{t}, @var{m}, @var{n}) ! Compute the probability density function (PDF) at @var{x} of the ! hypergeometric distribution with parameters @var{t}, @var{m}, and ! @var{n}. This is the probability of obtaining @var{x} marked items ! when randomly drawing a sample of size @var{n} without replacement ! from a population of total size @var{t} containing @var{m} marked items. ! The arguments must be of common size or scalar. ! @end deftypefn ! chi2cdf ! -*- texinfo -*- ! @deftypefn {Function File} {} chi2cdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the chisquare distribution with @var{n} ! degrees of freedom. ! @end deftypefn ! empirical_inv ! -*- texinfo -*- ! @deftypefn {Function File} {} empirical_inv (@var{x}, @var{data}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the empirical distribution obtained from the ! univariate sample @var{data}. ! @end deftypefn ! nbinrnd ! -*- texinfo -*- ! @deftypefn {Function File} {} nbinrnd (@var{n}, @var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} nbinrnd (@var{n}, @var{p}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the Pascal ! (negative binomial) distribution with parameters @var{n} and @var{p}. ! Both @var{n} and @var{p} must be scalar or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{n} and @var{p}. Or if @var{sz} is a vector, ! create a matrix of size @var{sz}. ! @end deftypefn ! unifcdf ! -*- texinfo -*- ! @deftypefn {Function File} {} unifcdf (@var{x}, @var{a}, @var{b}) ! Return the CDF at @var{x} of the uniform distribution on [@var{a}, ! @var{b}], i.e., PROB (uniform (@var{a}, @var{b}) <= x). ! Default values are @var{a} = 0, @var{b} = 1. @end deftypefn ! binornd -*- texinfo -*- ! @deftypefn {Function File} {} binornd (@var{n}, @var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} binornd (@var{n}, @var{p}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the binomial distribution with parameters @var{n} ! and @var{p}. Both @var{n} and @var{p} must be scalar or of size ! @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{n} and @var{p}. ! @end deftypefn ! unifpdf ! -*- texinfo -*- ! @deftypefn {Function File} {} unifpdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, compute the PDF at @var{x} of the uniform ! distribution on [@var{a}, @var{b}]. ! Default values are @var{a} = 0, @var{b} = 1. ! @end deftypefn ! hygeinv ! -*- texinfo -*- ! @deftypefn {Function File} {} hygeinv (@var{x}, @var{t}, @var{m}, @var{n}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! hypergeometric distribution with parameters @var{t}, @var{m}, and ! @var{n}. ! The parameters @var{t}, @var{m}, and @var{n} must positive integers ! with @var{m} and @var{n} not greater than @var{t}. ! @end deftypefn ! chi2pdf ! -*- texinfo -*- ! @deftypefn {Function File} {} chisquare_pdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the chisquare distribution with @var{n} degrees ! of freedom. ! @end deftypefn ! hygecdf ! -*- texinfo -*- ! @deftypefn {Function File} {} hygecdf (@var{x}, @var{t}, @var{m}, @var{n}) ! Compute the cumulative distribution function (CDF) at @var{x} of the ! hypergeometric distribution with parameters @var{t}, @var{m}, and ! @var{n}. This is the probability of obtaining not more than @var{x} ! marked items when randomly drawing a sample of size @var{n} without ! replacement from a population of total size @var{t} containing ! @var{m} marked items. ! The parameters @var{t}, @var{m}, and @var{n} must positive integers ! with @var{m} and @var{n} not greater than @var{t}. ! @end deftypefn ! tpdf ! -*- texinfo -*- ! @deftypefn {Function File} {} tpdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the @var{t} (Student) distribution with @var{n} ! degrees of freedom. ! @end deftypefn ! unifinv ! -*- texinfo -*- ! @deftypefn {Function File} {} unifinv (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the uniform distribution on [@var{a}, @var{b}]. ! Default values are @var{a} = 0, @var{b} = 1. @end deftypefn ! cauchy_pdf -*- texinfo -*- ! @deftypefn {Function File} {} cauchy_pdf (@var{x}, @var{lambda}, @var{sigma}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the Cauchy distribution with location parameter ! @var{lambda} and scale parameter @var{sigma} > 0. Default values are ! @var{lambda} = 0, @var{sigma} = 1. @end deftypefn ! unidcdf -*- texinfo -*- ! @deftypefn {Function File} {} unidcdf (@var{x}, @var{v}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of a univariate discrete distribution which ! assumes the values in @var{v} with equal probability. @end deftypefn ! empirical_cdf -*- texinfo -*- ! @deftypefn {Function File} {} empirical_cdf (@var{x}, @var{data}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the empirical distribution obtained from ! the univariate sample @var{data}. ! @end deftypefn ! normrnd ! -*- texinfo -*- ! @deftypefn {Function File} {} normrnd (@var{m}, @var{s}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} normrnd (@var{m}, @var{s}, @var{sz}) ! Return an @var{r} by @var{c} or @code{size (@var{sz})} matrix of ! random samples from the normal distribution with parameters mean @var{m} ! and standard deviation @var{s}. Both @var{m} and @var{s} must be scalar ! or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{m} and @var{s}. @end deftypefn ! exppdf -*- texinfo -*- ! @deftypefn {Function File} {} exppdf (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the probability density function ! (PDF) of the exponential distribution with mean @var{lambda}. @end deftypefn ! betapdf -*- texinfo -*- ! @deftypefn {Function File} {} betapdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, returns the PDF at @var{x} of the beta ! distribution with parameters @var{a} and @var{b}. @end deftypefn ! laplace_cdf -*- texinfo -*- ! @deftypefn {Function File} {} laplace_cdf (@var{x}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the Laplace distribution. @end deftypefn ! logistic_pdf -*- texinfo -*- ! @deftypefn {Function File} {} logistic_pdf (@var{x}) ! For each component of @var{x}, compute the PDF at @var{x} of the ! logistic distribution. @end deftypefn ! logninv -*- texinfo -*- ! @deftypefn {Function File} {} logninv (@var{x}, @var{mu}, @var{sigma}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the lognormal distribution with parameters @var{mu} ! and @var{sigma}. If a random variable follows this distribution, its ! logarithm is normally distributed with mean @code{log (@var{mu})} and ! variance @var{sigma}. ! Default values are @var{mu} = 1, @var{sigma} = 1. @end deftypefn ! tcdf -*- texinfo -*- ! @deftypefn {Function File} {} tcdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the t (Student) distribution with ! @var{n} degrees of freedom, i.e., PROB (t(@var{n}) <= @var{x}). @end deftypefn ! lognrnd -*- texinfo -*- ! @deftypefn {Function File} {} lognrnd (@var{mu}, @var{sigma}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} lognrnd (@var{mu}, @var{sigma}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! lognormal distribution with parameters @var{mu} and @var{sigma}. Both ! @var{mu} and @var{sigma} must be scalar or of size @var{r} by @var{c}. ! Or if @var{sz} is a vector, create a matrix of size @var{sz}. ! ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{mu} and @var{sigma}. @end deftypefn ! geornd -*- texinfo -*- ! @deftypefn {Function File} {} geornd (@var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} geornd (@var{p}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! geometric distribution with parameter @var{p}, which must be a scalar ! or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are given create a matrix with @var{r} rows and ! @var{c} columns. Or if @var{sz} is a vector, create a matrix of size ! @var{sz}. @end deftypefn ! normcdf -*- texinfo -*- ! @deftypefn {Function File} {} normcdf (@var{x}, @var{m}, @var{s}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the normal distribution with mean ! @var{m} and standard deviation @var{s}. ! Default values are @var{m} = 0, @var{s} = 1. ! @end deftypefn ! wblcdf ! -*- texinfo -*- ! @deftypefn {Function File} {} wblcdf (@var{x}, @var{scale}, @var{shape}) ! Compute the cumulative distribution function (CDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape}, which is ! @iftex ! @tex ! $$ 1 - \exp(-(x/shape)^{scale}) $$ ! for $x\geq 0$. ! @end tex ! @end iftex ! @ifnottex @example ! 1 - exp(-(x/shape)^scale) @end example + for @var{x} >= 0. + @end ifnottex @end deftypefn ! fpdf -*- texinfo -*- ! @deftypefn {Function File} {} fpdf (@var{x}, @var{m}, @var{n}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the F distribution with @var{m} and @var{n} ! degrees of freedom. ! @end deftypefn ! norminv ! -*- texinfo -*- ! @deftypefn {Function File} {} norminv (@var{x}, @var{m}, @var{s}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the normal distribution with mean @var{m} and ! standard deviation @var{s}. ! Default values are @var{m} = 0, @var{s} = 1. @end deftypefn ! chi2rnd -*- texinfo -*- ! @deftypefn {Function File} {} chi2rnd (@var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} chi2rnd (@var{n}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the chisquare distribution with @var{n} degrees ! of freedom. @var{n} must be a scalar or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{n}. @end deftypefn ! laplace_inv -*- texinfo -*- ! @deftypefn {Function File} {} laplace_inv (@var{x}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the Laplace distribution. @end deftypefn ! betainv -*- texinfo -*- ! @deftypefn {Function File} {} betainv (@var{x}, @var{a}, @var{b}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the Beta distribution with parameters @var{a} ! and @var{b}. ! @end deftypefn ! stdnormal_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} stdnormal_rnd (@var{r}, @var{c}) ! @deftypefnx {Function File} {} stdnormal_rnd (@var{sz}) ! Return an @var{r} by @var{c} or @code{size (@var{sz})} matrix of ! random numbers from the standard normal distribution. ! @end deftypefn ! kolmogorov_smirnov_cdf ! -*- texinfo -*- ! @deftypefn {Function File} {} kolmogorov_smirnov_cdf (@var{x}, @var{tol}) ! Return the CDF at @var{x} of the Kolmogorov-Smirnov distribution, @iftex @tex ! $$ Q(x) = \sum_{k=-\infty}^\infty (-1)^k \exp(-2 k^2 x^2) $$ @end tex @end iftex @ifinfo @example ! Inf ! Q(x) = SUM (-1)^k exp(-2 k^2 x^2) ! k = -Inf @end example @end ifinfo ! @noindent ! for @var{x} > 0. ! ! The optional parameter @var{tol} specifies the precision up to which ! the series should be evaluated; the default is @var{tol} = @code{eps}. @end deftypefn ! poisscdf -*- texinfo -*- ! @deftypefn {Function File} {} poisscdf (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the Poisson distribution with parameter ! lambda. @end deftypefn ! gamcdf -*- texinfo -*- ! @deftypefn {Function File} {} gamcdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the Gamma distribution with parameters ! @var{a} and @var{b}. ! @seealso{gamma, gammaln, gammainc, gampdf, gaminv, gamrnd} @end deftypefn ! cauchy_inv -*- texinfo -*- ! @deftypefn {Function File} {} cauchy_inv (@var{x}, @var{lambda}, @var{sigma}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the Cauchy distribution with location parameter ! @var{lambda} and scale parameter @var{sigma}. Default values are ! @var{lambda} = 0, @var{sigma} = 1. @end deftypefn ! logistic_cdf -*- texinfo -*- ! @deftypefn {Function File} {} logistic_cdf (@var{x}) ! For each component of @var{x}, compute the CDF at @var{x} of the ! logistic distribution. @end deftypefn ! cauchy_cdf -*- texinfo -*- ! @deftypefn {Function File} {} cauchy_cdf (@var{x}, @var{lambda}, @var{sigma}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the Cauchy distribution with location ! parameter @var{lambda} and scale parameter @var{sigma}. Default ! values are @var{lambda} = 0, @var{sigma} = 1. ! @end deftypefn ! expcdf ! -*- texinfo -*- ! @deftypefn {Function File} {} expcdf (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the exponential distribution with ! mean @var{lambda}. ! The arguments can be of common size or scalar. @end deftypefn ! normpdf -*- texinfo -*- ! @deftypefn {Function File} {} normpdf (@var{x}, @var{m}, @var{s}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the normal distribution with mean @var{m} and ! standard deviation @var{s}. ! Default values are @var{m} = 0, @var{s} = 1. ! @end deftypefn ! geocdf ! -*- texinfo -*- ! @deftypefn {Function File} {} geocdf (@var{x}, @var{p}) ! For each element of @var{x}, compute the CDF at @var{x} of the ! geometric distribution with parameter @var{p}. ! @end deftypefn ! empirical_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} empirical_rnd (@var{n}, @var{data}) ! @deftypefnx {Function File} {} empirical_rnd (@var{data}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} empirical_rnd (@var{data}, @var{sz}) ! Generate a bootstrap sample of size @var{n} from the empirical ! distribution obtained from the univariate sample @var{data}. ! ! If @var{r} and @var{c} are given create a matrix with @var{r} rows and ! @var{c} columns. Or if @var{sz} is a vector, create a matrix of size ! @var{sz}. ! @end deftypefn ! wblpdf ! -*- texinfo -*- ! @deftypefn {Function File} {} wblpdf (@var{x}, @var{scale}, @var{shape}) ! Compute the probability density function (PDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape} which is given by @iftex @tex ! $$ scale \cdot shape^{-scale} x^{scale-1} \exp(-(x/shape)^{scale}) $$ @end tex @end iftex ! @ifnottex @example ! scale * shape^(-scale) * x^(scale-1) * exp(-(x/shape)^scale) @end example ! @end ifnottex ! @noindent ! for @var{x} > 0. @end deftypefn ! gampdf -*- texinfo -*- ! @deftypefn {Function File} {} gampdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, return the probability density function ! (PDF) at @var{x} of the Gamma distribution with parameters @var{a} ! and @var{b}. ! @seealso{gamma, gammaln, gammainc, gamcdf, gaminv, gamrnd} @end deftypefn ! frnd -*- texinfo -*- ! @deftypefn {Function File} {} frnd (@var{m}, @var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} frnd (@var{m}, @var{n}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the F ! distribution with @var{m} and @var{n} degrees of freedom. Both ! @var{m} and @var{n} must be scalar or of size @var{r} by @var{c}. ! If @var{sz} is a vector the random samples are in a matrix of ! size @var{sz}. ! ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{m} and @var{n}. @end deftypefn ! empirical_pdf -*- texinfo -*- ! @deftypefn {Function File} {} empirical_pdf (@var{x}, @var{data}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the empirical distribution obtained from the ! univariate sample @var{data}. @end deftypefn ! stdnormal_inv -*- texinfo -*- ! @deftypefn {Function File} {} stdnormal_inv (@var{x}) ! For each component of @var{x}, compute compute the quantile (the ! inverse of the CDF) at @var{x} of the standard normal distribution. @end deftypefn ! discrete_rnd -*- texinfo -*- ! @deftypefn {Function File} {} discrete_rnd (@var{n}, @var{v}, @var{p}) ! @deftypefnx {Function File} {} discrete_rnd (@var{v}, @var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} discrete_rnd (@var{v}, @var{p}, @var{sz}) ! Generate a row vector containing a random sample of size @var{n} from ! the univariate distribution which assumes the values in @var{v} with ! probabilities @var{p}. @var{n} must be a scalar. ! If @var{r} and @var{c} are given create a matrix with @var{r} rows and ! @var{c} columns. Or if @var{sz} is a vector, create a matrix of size ! @var{sz}. @end deftypefn ! tinv -*- texinfo -*- ! @deftypefn {Function File} {} tinv (@var{x}, @var{n}) ! For each probability value @var{x}, compute the the inverse of the ! cumulative distribution function (CDF) of the t (Student) ! distribution with degrees of freedom @var{n}. This function is ! analagous to looking in a table for the t-value of a single-tailed ! distribution. @end deftypefn ! discrete_cdf -*- texinfo -*- ! @deftypefn {Function File} {} discrete_cdf (@var{x}, @var{v}, @var{p}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of a univariate discrete distribution which ! assumes the values in @var{v} with probabilities @var{p}. @end deftypefn ! cauchy_rnd -*- texinfo -*- ! @deftypefn {Function File} {} cauchy_rnd (@var{lambda}, @var{sigma}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} cauchy_rnd (@var{lambda}, @var{sigma}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the Cauchy distribution with parameters @var{lambda} ! and @var{sigma} which must both be scalar or of size @var{r} by @var{c}. ! ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{lambda} and @var{sigma}. @end deftypefn ! geoinv -*- texinfo -*- ! @deftypefn {Function File} {} geoinv (@var{x}, @var{p}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! geometric distribution with parameter @var{p}. @end deftypefn ! wblrnd -*- texinfo -*- ! @deftypefn {Function File} {} wblrnd (@var{scale}, @var{shape}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} wblrnd (@var{scale}, @var{shape}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! Weibull distribution with parameters @var{scale} and @var{shape} ! which must be scalar or of size @var{r} by @var{c}. Or if @var{sz} ! is a vector return a matrix of size @var{sz}. ! ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{alpha} and @var{sigma}. @end deftypefn ! betarnd -*- texinfo -*- ! @deftypefn {Function File} {} betarnd (@var{a}, @var{b}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} betarnd (@var{a}, @var{b}, @var{sz}) Return an @var{r} by @var{c} or @code{size (@var{sz})} matrix of random samples from the Beta distribution with parameters @var{a} and @var{b}. Both @var{a} and @var{b} must be scalar or of size @var{r} *************** *** 4930,9164 **** If @var{r} and @var{c} are omitted, the size of the result matrix is the common size of @var{a} and @var{b}. @end deftypefn ! binomial_cdf ! -*- texinfo -*- ! @deftypefn {Function File} {} binomial_cdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the CDF at @var{x} of the ! binomial distribution with parameters @var{n} and @var{p}. ! @end deftypefn ! binomial_inv -*- texinfo -*- ! @deftypefn {Function File} {} binomial_inv (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! binomial distribution with parameters @var{n} and @var{p}. @end deftypefn ! binomial_pdf -*- texinfo -*- ! @deftypefn {Function File} {} binomial_pdf (@var{x}, @var{n}, @var{p}) For each element of @var{x}, compute the probability density function (PDF) at @var{x} of the binomial distribution with parameters @var{n} and @var{p}. @end deftypefn ! binomial_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} binomial_rnd (@var{n}, @var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} binomial_rnd (@var{n}, @var{p}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the binomial distribution with parameters @var{n} ! and @var{p}. Both @var{n} and @var{p} must be scalar or of size ! @var{r} by @var{c}. ! ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{n} and @var{p}. ! @end deftypefn ! chisquare_cdf -*- texinfo -*- ! @deftypefn {Function File} {} chisquare_cdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the chisquare distribution with @var{n} ! degrees of freedom. @end deftypefn ! chisquare_inv -*- texinfo -*- ! @deftypefn {Function File} {} chisquare_inv (@var{x}, @var{n}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the chisquare distribution with @var{n} degrees of ! freedom. @end deftypefn ! chisquare_pdf -*- texinfo -*- ! @deftypefn {Function File} {} chisquare_pdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the chisquare distribution with @var{n} degrees ! of freedom. @end deftypefn ! chisquare_rnd -*- texinfo -*- ! @deftypefn {Function File} {} chisquare_rnd (@var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} chisquare_rnd (@var{n}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the chisquare distribution with @var{n} degrees ! of freedom. @var{n} must be a scalar or of size @var{r} by @var{c}. If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{n}. ! @end deftypefn ! clearplot ! -*- texinfo -*- ! @deftypefn {Function File} {} clearplot () ! This function has been deprecated. Use clf instead. @end deftypefn ! clg -*- texinfo -*- ! @deftypefn {Function File} {} clg () ! This function has been deprecated. Use clf instead. @end deftypefn ! com2str -*- texinfo -*- ! @deftypefn {Function File} {} com2str (@var{zz}, @var{flg}) ! This function has been deprecated. Use num2str instead. ! Convert complex number to a string. ! @strong{Inputs} ! @table @var ! @item zz ! complex number ! @item flg ! format flag ! 0 (default): -1, 0, 1, 1i, 1 + 0.5i ! 1 (for use with zpout): -1, 0, + 1, + 1i, + 1 + 0.5i ! @end table @end deftypefn ! exponential_cdf -*- texinfo -*- ! @deftypefn {Function File} {} exponential_cdf (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the exponential distribution with ! parameter @var{lambda}. ! The arguments can be of common size or scalar. @end deftypefn ! exponential_inv -*- texinfo -*- ! @deftypefn {Function File} {} exponential_inv (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the exponential distribution with parameter ! @var{lambda}. @end deftypefn ! exponential_pdf -*- texinfo -*- ! @deftypefn {Function File} {} exponential_pdf (@var{x}, @var{lambda}) For each element of @var{x}, compute the probability density function ! (PDF) of the exponential distribution with parameter @var{lambda}. @end deftypefn ! exponential_rnd -*- texinfo -*- ! @deftypefn {Function File} {} exponential_rnd (@var{lambda}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} exponential_rnd (@var{lambda}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! exponential distribution with parameter @var{lambda}, which must be a ! scalar or of size @var{r} by @var{c}. Or if @var{sz} is a vector, ! create a matrix of size @var{sz}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{lambda}. @end deftypefn ! f_cdf -*- texinfo -*- ! @deftypefn {Function File} {} f_cdf (@var{x}, @var{m}, @var{n}) For each element of @var{x}, compute the CDF at @var{x} of the F distribution with @var{m} and @var{n} degrees of freedom, i.e., PROB (F (@var{m}, @var{n}) <= @var{x}). @end deftypefn ! f_inv -*- texinfo -*- ! @deftypefn {Function File} {} f_inv (@var{x}, @var{m}, @var{n}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the F distribution with parameters @var{m} and ! @var{n}. @end deftypefn ! f_pdf -*- texinfo -*- ! @deftypefn {Function File} {} f_pdf (@var{x}, @var{m}, @var{n}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the F distribution with @var{m} and @var{n} ! degrees of freedom. @end deftypefn ! f_rnd -*- texinfo -*- ! @deftypefn {Function File} {} f_rnd (@var{m}, @var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} f_rnd (@var{m}, @var{n}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the F ! distribution with @var{m} and @var{n} degrees of freedom. Both ! @var{m} and @var{n} must be scalar or of size @var{r} by @var{c}. ! If @var{sz} is a vector the random samples are in a matrix of ! size @var{sz}. ! ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{m} and @var{n}. @end deftypefn ! gamma_cdf -*- texinfo -*- ! @deftypefn {Function File} {} gamma_cdf (@var{x}, @var{a}, @var{b}) For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the Gamma distribution with parameters ! @var{a} and @var{b}. ! @end deftypefn ! gamma_inv ! -*- texinfo -*- ! @deftypefn {Function File} {} gamma_inv (@var{x}, @var{a}, @var{b}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the Gamma distribution with parameters @var{a} ! and @var{b}. ! @end deftypefn ! gamma_pdf ! -*- texinfo -*- ! @deftypefn {Function File} {} gamma_pdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, return the probability density function ! (PDF) at @var{x} of the Gamma distribution with parameters @var{a} ! and @var{b}. @end deftypefn ! gamma_rnd -*- texinfo -*- ! @deftypefn {Function File} {} gamma_rnd (@var{a}, @var{b}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} gamma_rnd (@var{a}, @var{b}, @var{sz}) Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the Gamma distribution with parameters @var{a} ! and @var{b}. Both @var{a} and @var{b} must be scalar or of size ! @var{r} by @var{c}. If @var{r} and @var{c} are omitted, the size of the result matrix is the common size of @var{a} and @var{b}. @end deftypefn ! geometric_cdf ! -*- texinfo -*- ! @deftypefn {Function File} {} geometric_cdf (@var{x}, @var{p}) ! For each element of @var{x}, compute the CDF at @var{x} of the ! geometric distribution with parameter @var{p}. ! @end deftypefn ! geometric_inv -*- texinfo -*- ! @deftypefn {Function File} {} geometric_inv (@var{x}, @var{p}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! geometric distribution with parameter @var{p}. @end deftypefn ! geometric_pdf -*- texinfo -*- ! @deftypefn {Function File} {} geometric_pdf (@var{x}, @var{p}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the geometric distribution with parameter @var{p}. @end deftypefn ! geometric_rnd -*- texinfo -*- ! @deftypefn {Function File} {} geometric_rnd (@var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} geometric_rnd (@var{p}, @var{sz}) Return an @var{r} by @var{c} matrix of random samples from the ! geometric distribution with parameter @var{p}, which must be a scalar ! or of size @var{r} by @var{c}. ! ! If @var{r} and @var{c} are given create a matrix with @var{r} rows and ! @var{c} columns. Or if @var{sz} is a vector, create a matrix of size ! @var{sz}. ! @end deftypefn ! hypergeometric_cdf ! -*- texinfo -*- ! @deftypefn {Function File} {} hypergeometric_cdf (@var{x}, @var{m}, @var{t}, @var{n}) ! Compute the cumulative distribution function (CDF) at @var{x} of the ! hypergeometric distribution with parameters @var{m}, @var{t}, and ! @var{n}. This is the probability of obtaining not more than @var{x} ! marked items when randomly drawing a sample of size @var{n} without ! replacement from a population of total size @var{t} containing ! @var{m} marked items. ! The parameters @var{m}, @var{t}, and @var{n} must positive integers ! with @var{m} and @var{n} not greater than @var{t}. @end deftypefn ! hypergeometric_inv -*- texinfo -*- ! @deftypefn {Function File} {} hypergeometric_inv (@var{x}, @var{m}, @var{t}, @var{n}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! hypergeometric distribution with parameters @var{m}, @var{t}, and @var{n}. - - The parameters @var{m}, @var{t}, and @var{n} must positive integers - with @var{m} and @var{n} not greater than @var{t}. - @end deftypefn - hypergeometric_pdf - -*- texinfo -*- - @deftypefn {Function File} {} hypergeometric_pdf (@var{x}, @var{m}, @var{t}, @var{n}) - Compute the probability density function (PDF) at @var{x} of the - hypergeometric distribution with parameters @var{m}, @var{t}, and - @var{n}. This is the probability of obtaining @var{x} marked items - when randomly drawing a sample of size @var{n} without replacement - from a population of total size @var{t} containing @var{m} marked items. - - The arguments must be of common size or scalar. @end deftypefn ! hypergeometric_rnd -*- texinfo -*- ! @deftypefn {Function File} {} hypergeometric_rnd (@var{m}, @var{t}, @var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} hygernd (@var{m}, @var{t}, @var{n}, @var{sz}) Return an @var{r} by @var{c} matrix of random samples from the ! hypergeometric distribution with parameters @var{m}, @var{t}, and @var{n}. ! The parameters @var{m}, @var{t}, and @var{n} must positive integers with @var{m} and @var{n} not greater than @var{t}. @end deftypefn ! intersection -*- texinfo -*- ! @deftypefn {Function File} {} intersection (@var{x}, @var{y}) ! This function has been deprecated. Use intersect instead. @end deftypefn ! is_bool -*- texinfo -*- ! @deftypefn {Function File} {} is_bool (@var{a}) ! This function has been deprecated. Use isbool instead. @end deftypefn ! is_complex -*- texinfo -*- ! @deftypefn {Function File} {} is_complex (@var{a}) ! This function has been deprecated. Use iscomplex instead. @end deftypefn ! is_list -*- texinfo -*- ! @deftypefn {Function File} {} is_list (@var{a}) ! This function has been deprecated. Use islist instead. @end deftypefn ! is_matrix -*- texinfo -*- ! @deftypefn {Function File} {} is_matrix (@var{a}) ! This function has been deprecated. Use ismatrix instead. @end deftypefn ! is_scalar -*- texinfo -*- ! @deftypefn {Function File} {} is_scalar (@var{a}) ! This function has been deprecated. Use isscalar instead. @end deftypefn ! is_square ! -*- texinfo -*- ! @deftypefn {Function File} {} is_square (@var{x}) ! This function has been deprecated. Use issquare instead. ! @end deftypefn ! is_stream ! -*- texinfo -*- ! @deftypefn {Function File} {} is_stream (@var{a}) ! This function has been deprecated. Use isstream instead. ! @end deftypefn ! is_struct ! -*- texinfo -*- ! @deftypefn {Function File} {} is_struct (@var{a}) ! This function has been deprecated. Use isstruct instead. ! @end deftypefn ! is_symmetric ! -*- texinfo -*- ! @deftypefn {Function File} {} issymmetric (@var{x}, @var{tol}) ! This function has been deprecated. Use issymmetric instead. ! @end deftypefn ! is_vector ! -*- texinfo -*- ! @deftypefn {Function File} {} is_vector (@var{a}) ! This function has been deprecated. Use isvector instead. ! @end deftypefn ! isstr -*- texinfo -*- ! @deftypefn {Function File} {} isstr (@var{a}) ! This function has been deprecated. Use ischar instead. @end deftypefn ! lognormal_cdf -*- texinfo -*- ! @deftypefn {Function File} {} lognormal_cdf (@var{x}, @var{a}, @var{v}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the lognormal distribution with ! parameters @var{a} and @var{v}. If a random variable follows this ! distribution, its logarithm is normally distributed with mean ! @code{log (@var{a})} and variance @var{v}. ! Default values are @var{a} = 1, @var{v} = 1. @end deftypefn ! lognormal_inv -*- texinfo -*- ! @deftypefn {Function File} {} lognormal_inv (@var{x}, @var{a}, @var{v}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the lognormal distribution with parameters @var{a} ! and @var{v}. If a random variable follows this distribution, its ! logarithm is normally distributed with mean @code{log (@var{a})} and ! variance @var{v}. ! Default values are @var{a} = 1, @var{v} = 1. @end deftypefn ! lognormal_pdf -*- texinfo -*- ! @deftypefn {Function File} {} lognormal_pdf (@var{x}, @var{a}, @var{v}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the lognormal distribution with parameters ! @var{a} and @var{v}. If a random variable follows this distribution, ! its logarithm is normally distributed with mean @code{log (@var{a})} ! and variance @var{v}. ! Default values are @var{a} = 1, @var{v} = 1. @end deftypefn ! lognormal_rnd -*- texinfo -*- ! @deftypefn {Function File} {} lognormal_rnd (@var{a}, @var{v}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} lognormal_rnd (@var{a}, @var{v}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! lognormal distribution with parameters @var{a} and @var{v}. Both ! @var{a} and @var{v} must be scalar or of size @var{r} by @var{c}. ! Or if @var{sz} is a vector, create a matrix of size @var{sz}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{a} and @var{v}. ! @end deftypefn ! meshdom ! -*- texinfo -*- ! @deftypefn {Function File} {} meshdom (@var{x}, @var{y}) ! This function has been deprecated. Use @code{meshgrid} instead. ! @end deftypefn ! normal_cdf ! -*- texinfo -*- ! @deftypefn {Function File} {} normal_cdf (@var{x}, @var{m}, @var{v}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the normal distribution with mean ! @var{m} and variance @var{v}. ! Default values are @var{m} = 0, @var{v} = 1. ! @end deftypefn ! normal_inv ! -*- texinfo -*- ! @deftypefn {Function File} {} normal_inv (@var{x}, @var{m}, @var{v}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the normal distribution with mean @var{m} and ! variance @var{v}. ! Default values are @var{m} = 0, @var{v} = 1. ! @end deftypefn ! normal_pdf ! -*- texinfo -*- ! @deftypefn {Function File} {} normal_pdf (@var{x}, @var{m}, @var{v}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the normal distribution with mean @var{m} and ! variance @var{v}. ! Default values are @var{m} = 0, @var{v} = 1. ! @end deftypefn ! normal_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} normal_rnd (@var{m}, @var{v}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} normal_rnd (@var{m}, @var{v}, @var{sz}) ! Return an @var{r} by @var{c} or @code{size (@var{sz})} matrix of ! random samples from the normal distribution with parameters @var{m} ! and @var{v}. Both @var{m} and @var{v} must be scalar or of size ! @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{m} and @var{v}. @end deftypefn ! pascal_cdf -*- texinfo -*- ! @deftypefn {Function File} {} pascal_cdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the CDF at x of the Pascal ! (negative binomial) distribution with parameters @var{n} and @var{p}. ! The number of failures in a Bernoulli experiment with success ! probability @var{p} before the @var{n}-th success follows this ! distribution. @end deftypefn ! pascal_inv -*- texinfo -*- ! @deftypefn {Function File} {} pascal_inv (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! Pascal (negative binomial) distribution with parameters @var{n} and ! @var{p}. ! The number of failures in a Bernoulli experiment with success ! probability @var{p} before the @var{n}-th success follows this ! distribution. @end deftypefn ! pascal_pdf -*- texinfo -*- ! @deftypefn {Function File} {} pascal_pdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the Pascal (negative binomial) distribution with ! parameters @var{n} and @var{p}. ! The number of failures in a Bernoulli experiment with success ! probability @var{p} before the @var{n}-th success follows this ! distribution. @end deftypefn ! pascal_rnd -*- texinfo -*- ! @deftypefn {Function File} {} pascal_rnd (@var{n}, @var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} pascal_rnd (@var{n}, @var{p}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the Pascal ! (negative binomial) distribution with parameters @var{n} and @var{p}. ! Both @var{n} and @var{p} must be scalar or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{n} and @var{p}. Or if @var{sz} is a vector, ! create a matrix of size @var{sz}. @end deftypefn ! poisson_cdf -*- texinfo -*- ! @deftypefn {Function File} {} poisson_cdf (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the Poisson distribution with parameter ! lambda. ! @end deftypefn ! poisson_inv ! -*- texinfo -*- ! @deftypefn {Function File} {} poisson_inv (@var{x}, @var{lambda}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the Poisson distribution with parameter ! @var{lambda}. ! @end deftypefn ! poisson_pdf ! -*- texinfo -*- ! @deftypefn {Function File} {} poisson_pdf (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the poisson distribution with parameter @var{lambda}. @end deftypefn ! poisson_rnd -*- texinfo -*- ! @deftypefn {Function File} {} poisson_rnd (@var{lambda}, @var{r}, @var{c}) ! Return an @var{r} by @var{c} matrix of random samples from the ! Poisson distribution with parameter @var{lambda}, which must be a ! scalar or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{lambda}. ! @end deftypefn ! polyinteg ! -*- texinfo -*- ! @deftypefn {Function File} {} polyinteg (@var{c}) ! Return the coefficients of the integral of the polynomial whose ! coefficients are represented by the vector @var{c}. ! The constant of integration is set to zero. ! @seealso{poly, polyderiv, polyreduce, roots, conv, deconv, residue, ! filter, polyval, and polyvalm} ! @end deftypefn ! setstr ! -*- texinfo -*- ! @deftypefn {Function File} {} setstr (@var{s}) ! This function has been deprecated. Use char instead. ! @end deftypefn ! struct_contains ! -*- texinfo -*- ! @deftypefn {Function File} {} struct_contains (@var{expr}, @var{name}) ! This function has been deprecated. Use isfield instead. ! @end deftypefn ! struct_elements ! -*- texinfo -*- ! @deftypefn {Function File} {} struct_elements (@var{struct}) ! This function has been deprecated. Use fieldnames instead. ! @end deftypefn ! t_cdf ! -*- texinfo -*- ! @deftypefn {Function File} {} t_cdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the CDF at @var{x} of the ! t (Student) distribution with @var{n} degrees of freedom, i.e., ! PROB (t(@var{n}) <= @var{x}). ! @end deftypefn ! t_inv ! -*- texinfo -*- ! @deftypefn {Function File} {} t_inv (@var{x}, @var{n}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the t (Student) distribution with parameter ! @var{n}. ! @end deftypefn ! t_pdf ! -*- texinfo -*- ! @deftypefn {Function File} {} t_pdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the @var{t} (Student) distribution with @var{n} ! degrees of freedom. ! @end deftypefn ! t_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} t_rnd (@var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} t_rnd (@var{n}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the t ! (Student) distribution with @var{n} degrees of freedom. @var{n} must ! be a scalar or of size @var{r} by @var{c}. Or if @var{sz} is a ! vector create a matrix of size @var{sz}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{n}. ! @end deftypefn ! uniform_cdf ! -*- texinfo -*- ! @deftypefn {Function File} {} uniform_cdf (@var{x}, @var{a}, @var{b}) ! Return the CDF at @var{x} of the uniform distribution on [@var{a}, ! @var{b}], i.e., PROB (uniform (@var{a}, @var{b}) <= x). ! Default values are @var{a} = 0, @var{b} = 1. ! @end deftypefn ! uniform_inv ! -*- texinfo -*- ! @deftypefn {Function File} {} uniform_inv (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the uniform distribution on [@var{a}, @var{b}]. ! Default values are @var{a} = 0, @var{b} = 1. ! @end deftypefn ! uniform_pdf ! -*- texinfo -*- ! @deftypefn {Function File} {} uniform_pdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, compute the PDF at @var{x} of the uniform ! distribution on [@var{a}, @var{b}]. ! Default values are @var{a} = 0, @var{b} = 1. @end deftypefn ! uniform_rnd -*- texinfo -*- ! @deftypefn {Function File} {} uniform_rnd (@var{a}, @var{b}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} uniform_rnd (@var{a}, @var{b}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the uniform distribution on [@var{a}, @var{b}]. ! Both @var{a} and @var{b} must be scalar or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{a} and @var{b}. ! @end deftypefn ! weibcdf ! -*- texinfo -*- ! @deftypefn {Function File} {} weibcdf (@var{x}, @var{scale}, @var{shape}) ! Compute the cumulative distribution function (CDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape}, which is @example ! 1 - exp(-(x/shape)^scale) @end example ! @noindent ! for @var{x} >= 0. ! @end deftypefn ! weibinv ! -*- texinfo -*- ! @deftypefn {Function File} {} weibinv (@var{x}, @var{scale}, @var{shape}) ! Compute the quantile (the inverse of the CDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape}. @end deftypefn ! weibpdf -*- texinfo -*- ! @deftypefn {Function File} {} weibpdf (@var{x}, @var{scale}, @var{shape}) ! Compute the probability density function (PDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape} which is given by @example ! scale * shape^(-scale) * x^(scale-1) * exp(-(x/shape)^scale) @end example ! ! @noindent ! for @var{x} > 0. @end deftypefn ! weibrnd -*- texinfo -*- ! @deftypefn {Function File} {} weibrnd (@var{scale}, @var{shape}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} weibrnd (@var{scale}, @var{shape}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! Weibull distribution with parameters @var{scale} and @var{shape} ! which must be scalar or of size @var{r} by @var{c}. Or if @var{sz} ! is a vector return a matrix of size @var{sz}. ! ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{alpha} and @var{sigma}. @end deftypefn ! weibull_cdf -*- texinfo -*- ! @deftypefn {Function File} {} weibull_cdf (@var{x}, @var{shape}, @var{scale}) ! Compute the cumulative distribution function (CDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape}, which is ! @example ! 1 - exp(-(x/shape)^scale) ! @end example ! @noindent ! for @var{x} >= 0. @end deftypefn ! weibull_inv -*- texinfo -*- ! @deftypefn {Function File} {} weibull_inv (@var{x}, @var{shape}, @var{scale}) ! Compute the quantile (the inverse of the CDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape}. @end deftypefn ! weibull_pdf -*- texinfo -*- ! @deftypefn {Function File} {} weibull_pdf (@var{x}, @var{shape}, @var{scale}) ! Compute the probability density function (PDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape} which is given by @example ! scale * shape^(-scale) * x^(scale-1) * exp(-(x/shape)^scale) @end example ! @noindent ! for @var{x} > 0. ! @end deftypefn ! weibull_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} weibull_rnd (@var{shape}, @var{scale}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} weibull_rnd (@var{shape}, @var{scale}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! Weibull distribution with parameters @var{scale} and @var{shape} ! which must be scalar or of size @var{r} by @var{c}. Or if @var{sz} ! is a vector return a matrix of size @var{sz}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{alpha} and @var{sigma}. ! @end deftypefn ! wiener_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} wiener_rnd (@var{t}, @var{d}, @var{n}) ! Return a simulated realization of the @var{d}-dimensional Wiener Process ! on the interval [0, @var{t}]. If @var{d} is omitted, @var{d} = 1 is ! used. The first column of the return matrix contains time, the ! remaining columns contain the Wiener process. ! The optional parameter @var{n} gives the number of summands used for ! simulating the process over an interval of length 1. If @var{n} is ! omitted, @var{n} = 1000 is used. ! @end deftypefn ! acosd ! -*- texinfo -*- ! @deftypefn {Function File} {} acosd (@var{x}) ! Compute the inverse cosine of an angle in degrees. ! @seealso{acos, cosd, asecd} @end deftypefn ! acot -*- texinfo -*- ! @deftypefn {Mapping Function} {} acot (@var{x}) ! Compute the inverse cotangent of each element of @var{x}. @end deftypefn ! acotd -*- texinfo -*- ! @deftypefn {Function File} {} acotd (@var{x}) ! Compute the inverse cotangent of an angle in degrees. ! @seealso{atan, tand} @end deftypefn ! acoth -*- texinfo -*- ! @deftypefn {Mapping Function} {} acoth (@var{x}) ! Compute the inverse hyperbolic cotangent of each element of @var{x}. @end deftypefn ! acsc -*- texinfo -*- ! @deftypefn {Mapping Function} {} acsc (@var{x}) ! Compute the inverse cosecant of each element of @var{x}. @end deftypefn ! acscd -*- texinfo -*- ! @deftypefn {Function File} {} acscd (@var{x}) ! Compute the inverse cosecant of an angle in degrees. ! @seealso{acsc, cscd, asecd} ! @end deftypefn ! acsch ! -*- texinfo -*- ! @deftypefn {Mapping Function} {} acsch (@var{x}) ! Compute the inverse hyperbolic cosecant of each element of @var{x}. ! @end deftypefn ! asec ! -*- texinfo -*- ! @deftypefn {Mapping Function} {} asec (@var{x}) ! Compute the inverse secant of each element of @var{x}. ! @end deftypefn ! asecd ! -*- texinfo -*- ! @deftypefn {Function File} {} asecd (@var{x}) ! Compute inverse secant in degrees. ! @seealso{asec, secd, acscd} @end deftypefn ! asech -*- texinfo -*- ! @deftypefn {Mapping Function} {} asech (@var{x}) ! Compute the inverse hyperbolic secant of each element of @var{x}. @end deftypefn ! asind -*- texinfo -*- ! @deftypefn {Function File} {} asind (@var{x}) ! Compute the inverse sine of an angle in degrees. ! @seealso{asin, sind, acosd} @end deftypefn ! atand -*- texinfo -*- ! @deftypefn {Function File} {} atand (@var{x}) ! Compute the inverse tangent of an angle in degrees. ! @seealso{acot, tand} @end deftypefn ! cosd -*- texinfo -*- ! @deftypefn {Function File} {} cosd (@var{x}) ! Compute the cosine of an angle in degrees. Returns zero in elements ! for which @code{(@var{x}-90)/180} is an integer. ! @seealso{cos, sind, tand, acosd, asind, atand} @end deftypefn ! cot -*- texinfo -*- ! @deftypefn {Mapping Function} {} cot (@var{x}) ! Compute the cotangent of each element of @var{x}. @end deftypefn ! cotd -*- texinfo -*- ! @deftypefn {Function File} {} cotd (@var{x}) ! Compute the cotangent of an angle in degrees. ! @seealso{cot, tand} @end deftypefn ! coth -*- texinfo -*- ! @deftypefn {Mapping Function} {} coth (@var{x}) ! Compute the hyperbolic cotangent of each element of @var{x}. @end deftypefn ! csc -*- texinfo -*- ! @deftypefn {Mapping Function} {} csc (@var{x}) ! Compute the cosecant of each element of @var{x}. @end deftypefn ! cscd -*- texinfo -*- ! @deftypefn {Function File} {} cscd (@var{x}) ! Compute the cosecant of an angle in degrees. ! @seealso{csc, secd, sind, cosd} @end deftypefn ! csch -*- texinfo -*- ! @deftypefn {Mapping Function} {} csch (@var{x}) ! Compute the hyperbolic cosecant of each element of @var{x}. @end deftypefn ! lcm -*- texinfo -*- ! @deftypefn {Mapping Function} {} lcm (@var{x}, @dots{}) ! Compute the least common multiple of the elements of @var{x}, or ! the list of all the arguments. For example, @example ! lcm (a1, ..., ak) @end example ! @noindent ! is the same as @example ! lcm ([a1, ..., ak]). @end example ! All elements must be the same size or scalar. ! @seealso{gcd, min, max, ceil, floor} @end deftypefn ! sec -*- texinfo -*- ! @deftypefn {Mapping Function} {} sec (@var{x}) ! Compute the secant of each element of @var{x}. @end deftypefn ! secd -*- texinfo -*- ! @deftypefn {Function File} {} secd (@var{x}) ! Compute the secant of an angle in degrees. ! @seealso{sec, cscd, sind, cosd} @end deftypefn ! sech -*- texinfo -*- ! @deftypefn {Mapping Function} {} sech (@var{x}) ! Compute the hyperbolic secant of each element of @var{x}. @end deftypefn ! sind -*- texinfo -*- ! @deftypefn {Function File} {} sind (@var{x}) ! Compute the sine of each element of @var{x}. Returns zero in elements ! for which @code{@var{x}/180} is an integer. ! @seealso{sin, cosd, tand, acosd, asind, atand} @end deftypefn ! tand -*- texinfo -*- ! @deftypefn {Function File} {} tand (@var{x}) ! Compute the tangent of an angle in degrees. Returns zero for elements ! of for which @code{@var{x}/180} is an integer and @code{Inf} for elements ! where @code{(@var{x}-90)/180} is an integer. ! @seealso{tan, cosd, sind, acosd, asind, atand} @end deftypefn ! fv -*- texinfo -*- ! @deftypefn {Function File} {} fv (@var{r}, @var{n}, @var{p}, @var{l}, @var{method}) ! Return the future value at the end of period @var{n} of an investment ! which consists of @var{n} payments of @var{p} in each period, ! assuming an interest rate @var{r}. ! The optional argument @var{l} may be used to specify an ! additional lump-sum payment. ! The optional argument @var{method} may be used to specify whether the ! payments are made at the end (@code{"e"}, default) or at the ! beginning (@code{"b"}) of each period. ! Note that the rate @var{r} is specified as a fraction (i.e., 0.05, ! not 5 percent). ! @end deftypefn ! fvl ! -*- texinfo -*- ! @deftypefn {Function File} {} fvl (@var{r}, @var{n}, @var{l}) ! Return the future value at the end of @var{n} periods of an initial ! lump sum investment @var{l}, given a per-period interest rate ! @var{r}. ! Note that the rate @var{r} is specified as a fraction (i.e., 0.05, ! not 5 percent). ! @end deftypefn ! irr ! -*- texinfo -*- ! @deftypefn {Function File} {} irr (@var{p}, @var{i}) ! Return the internal rate of return of a series of payments @var{p} ! from an initial investment @var{i} (i.e., the solution of ! @code{npv (r, p) = i}. If the second argument is omitted, a value of ! 0 is used. ! @seealso{npv, pv, rate} @end deftypefn ! nper -*- texinfo -*- ! @deftypefn {Function File} {} nper (@var{r}, @var{p}, @var{a}, @var{l}, @var{method}) ! Return the number of regular payments of @var{p} necessary to ! amortize @var{a} loan of amount @var{a} and interest @var{r}. ! The optional argument @var{l} may be used to specify an additional ! lump-sum payment of @var{l} made at the end of the amortization time. ! The optional argument @var{method} may be used to specify whether ! payments are made at the end (@var{"e"}, default) or at the beginning ! (@var{"b"}) of each period. ! Note that the rate @var{r} is specified as a fraction (i.e., 0.05, ! not 5 percent). ! @seealso{pv, pmt, rate, npv} @end deftypefn ! npv -*- texinfo -*- ! @deftypefn {Function File} {} npv (@var{r}, @var{p}, @var{i}) ! Returns the net present value of a series of irregular (i.e., not ! necessarily identical) payments @var{p} which occur at the ends of @var{n} ! consecutive periods. @var{r} specifies the one-period interest rates and ! can either be a scalar (constant rates) or a vector of the same ! length as @var{p}. ! ! The optional argument @var{i} may be used to specify an initial ! investment. ! ! Note that the rate @var{r} is specified as a fraction (i.e., 0.05, ! not 5 percent). ! @seealso{irr, pv} @end deftypefn ! pmt -*- texinfo -*- ! @deftypefn {Function File} {} pmt (@var{r}, @var{n}, @var{a}, @var{l}, @var{method}) ! Return the amount of periodic payment necessary to amortize a loan ! of amount a with interest rate @var{r} in @var{n} periods. ! ! The optional argument @var{l} may be used to specify a terminal ! lump-sum payment. ! ! The optional argument @var{method} may be used to specify whether ! payments are made at the end (@var{"e"}, default) or at the beginning ! (@var{"b"}) of each period. ! @seealso{pv, nper, rate} @end deftypefn ! pv -*- texinfo -*- ! @deftypefn {Function File} {} pv (@var{r}, @var{n}, @var{p}, @var{l}, @var{method}) ! Returns the present value of an investment that will pay off @var{p} for @var{n} ! consecutive periods, assuming an interest @var{r}. ! The optional argument @var{l} may be used to specify an additional ! lump-sum payment made at the end of @var{n} periods. ! The optional argument @var{method} may be used to specify whether ! payments are made at the end (@code{"e"}, default) or at the ! beginning (@code{"b"}) of each period. ! Note that the rate @var{r} is specified as a fraction (i.e., 0.05, ! not 5 percent). ! @seealso{pmt, nper, rate, npv} ! @end deftypefn ! pvl ! -*- texinfo -*- ! @deftypefn {Function File} {} pvl (@var{r}, @var{n}, @var{p}) ! Return the present value of an investment that will pay off @var{p} ! in one lump sum at the end of @var{n} periods, given the interest ! rate @var{r}. ! Note that the rate @var{r} is specified as a fraction (i.e., 0.05, ! not 5 percent). @end deftypefn ! rate -*- texinfo -*- ! @deftypefn {Function File} {} rate (@var{n}, @var{p}, @var{v}, @var{l}, @var{method}) ! Return the rate of return on an investment of present value @var{v} which ! pays @var{p} in @var{n} consecutive periods. ! The optional argument @var{l} may be used to specify an additional ! lump-sum payment made at the end of @var{n} periods. ! The optional string argument @var{method} may be used to specify ! whether payments are made at the end (@code{"e"}, default) or at the ! beginning (@code{"b"}) of each period. ! @seealso{pv, pmt, nper, npv} @end deftypefn ! vol -*- texinfo -*- ! @deftypefn {Function File} {} vol (@var{x}, @var{m}, @var{n}) ! Return the volatility of each column of the input matrix @var{x}. ! The number of data sets per period is given by @var{m} (e.g. the ! number of data per year if you want to compute the volatility per ! year). The optional parameter @var{n} gives the number of past ! periods used for computation, if it is omitted, a value of 1 is used. ! If @var{t} is the number of rows of @var{x}, @code{vol} returns the ! volatility from @code{n*m} to @var{t}. @end deftypefn ! __isequal__ ! Undocumented internal function. ! __splinen__ ! Undocumented internal function. ! accumarray -*- texinfo -*- ! @deftypefn {Function File} {} accumarray (@var{subs}, @var{vals}, @var{sz}, @var{fun}, @var{fillval}, @var{issparse}) ! @deftypefnx {Function File} {} accumarray (@var{csubs}, @var{vals}, @dots{}) ! Create an array by accumulating the elements of a vector into the ! positions defined by their subscripts. The subscripts are defined by ! the rows of the matrix @var{subs} and the values by @var{vals}. Each row ! of @var{subs} corresponds to one of the values in @var{vals}. ! The size of the matrix will be determined by the subscripts themselves. ! However, if @var{sz} is defined it determines the matrix size. The length ! of @var{sz} must correspond to the number of columns in @var{subs}. ! The default action of @code{accumarray} is to sum the elements with the ! same subscripts. This behavior can be modified by defining the @var{fun} ! function. This should be a function or function handle that accepts a ! column vector and returns a scalar. The result of the function should not ! depend on the order of the subscripts. ! The elements of the returned array that have no subscripts assoicated with ! them are set to zero. Defining @var{fillval} to some other value allows ! these values to be defined. ! By default @code{accumarray} returns a full matrix. If @var{issparse} is ! logically true, then a sparse matrix is returned instead. ! An example of the use of @code{accumarray} is: @example @group ! accumarray ([1,1,1;2,1,2;2,3,2;2,1,2;2,3,2], 101:105) ! @result{} ans(:,:,1) = [101, 0, 0; 0, 0, 0] ! ans(:,:,2) = [0, 0, 0; 206, 0, 208] @end group @end example ! @end deftypefn ! arrayfun ! -*- texinfo -*- ! @deftypefn {Function File} {@var{a} =} arrayfun (@var{name}, @var{c}) ! @deftypefnx {Function File} {@var{a} =} arrayfun (@var{func}, @var{c}) ! @deftypefnx {Function File} {@var{a} =} arrayfun (@var{func}, @var{c}, @var{d}) ! @deftypefnx {Function File} {@var{a} =} arrayfun (@var{func}, @var{c}, @var{options}) ! @deftypefnx {Function File} {[@var{a}, @var{b}, @dots{}] =} arrayfun (@var{func}, @var{c}, @dots{}) ! Execute a function on each element of an array. This is useful for ! functions that do not accept array arguments. If the function does ! accept array arguments it is better to call the function directly. ! ! See @code{cellfun} for complete usage instructions. ! @seealso{cellfun} ! @end deftypefn ! bicubic ! -*- texinfo -*- ! @deftypefn {Function File} {@var{zi}=} bicubic (@var{x}, @var{y}, @var{z}, @var{xi}, @var{yi}, @var{extrapval}) ! Return a matrix @var{zi} corresponding to the bicubic ! interpolations at @var{xi} and @var{yi} of the data supplied ! as @var{x}, @var{y} and @var{z}. Points outside the grid are set ! to @var{extrapval} ! See @url{http://wiki.woodpecker.org.cn/moin/Octave/Bicubic} ! for further information. ! @seealso{interp2} @end deftypefn ! bitcmp -*- texinfo -*- ! @deftypefn {Function File} {} bitcmp (@var{a}, @var{k}) ! Return the @var{k}-bit complement of integers in @var{a}. If ! @var{k} is omitted @code{k = log2 (bitmax) + 1} is assumed. @example ! bitcmp(7,4) ! @result{} 8 ! dec2bin(11) ! @result{} 1011 ! dec2bin(bitcmp(11, 6)) ! @result{} 110100 @end example ! @seealso{bitand, bitor, bitxor, bitset, bitget, bitcmp, bitshift, bitmax} @end deftypefn ! bitget -*- texinfo -*- ! @deftypefn {Function File} {@var{X} =} bitget (@var{a},@var{n}) ! Return the status of bit(s) @var{n} of unsigned integers in @var{a} ! the lowest significant bit is @var{n} = 1. - @example - bitget (100, 8:-1:1) - @result{} 0 1 1 0 0 1 0 0 - @end example - @seealso{bitand, bitor, bitxor, bitset, bitcmp, bitshift, bitmax} @end deftypefn ! bitset -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} bitset (@var{a}, @var{n}) ! @deftypefnx {Function File} {@var{x} =} bitset (@var{a}, @var{n}, @var{v}) ! Set or reset bit(s) @var{n} of unsigned integers in @var{a}. ! @var{v} = 0 resets and @var{v} = 1 sets the bits. ! The lowest significant bit is: @var{n} = 1 @example ! dec2bin (bitset (10, 1)) ! @result{} 1011 @end example - @seealso{bitand, bitor, bitxor, bitget, bitcmp, bitshift, bitmax} @end deftypefn ! blkdiag -*- texinfo -*- ! @deftypefn {Function File} {} blkdiag (@var{a}, @var{b}, @var{c}, @dots{}) ! Build a block diagonal matrix from @var{a}, @var{b}, @var{c}, @dots{}. ! All the arguments must be numeric and are two-dimensional matrices or ! scalars. ! @seealso{diag, horzcat, vertcat} @end deftypefn ! cart2pol -*- texinfo -*- ! @deftypefn {Function File} {[@var{theta}, @var{r}] =} cart2pol (@var{x}, @var{y}) ! @deftypefnx {Function File} {[@var{theta}, @var{r}, @var{z}] =} cart2pol (@var{x}, @var{y}, @var{z}) ! Transform cartesian to polar or cylindrical coordinates. ! @var{x}, @var{y} (and @var{z}) must be of same shape. ! @var{theta} describes the angle relative to the x - axis. ! @var{r} is the distance to the z - axis (0, 0, z). ! @seealso{pol2cart, cart2sph, sph2cart} ! @end deftypefn ! cart2sph ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{theta}, @var{phi}, @var{r}] =} cart2sph (@var{x}, @var{y}, @var{z}) ! Transform cartesian to spherical coordinates. ! @var{x}, @var{y} and @var{z} must be of same shape. ! @var{theta} describes the angle relative to the x - axis. ! @var{phi} is the angle relative to the xy - plane. ! @var{r} is the distance to the origin (0, 0, 0). ! @seealso{pol2cart, cart2pol, sph2cart} @end deftypefn ! cell2mat -*- texinfo -*- ! @deftypefn {Function File} {@var{m} =} cell2mat (@var{c}) ! Convert the cell array @var{c} into a matrix by concatenating all ! elements of @var{c} into a hyperrectangle. Elements of @var{c} must ! be numeric, logical or char, and @code{cat} must be able to ! concatenate them together. ! @seealso{mat2cell, num2cell} @end deftypefn ! celldisp -*- texinfo -*- ! @deftypefn {Function File} {} celldisp (@var{c}, @var{name}) ! Recursively display the contents of a cell array. By default the values ! are displayed with the name of the variable @var{c}. However, this name ! can be replaced with the variable @var{name}. ! @seealso{disp} @end deftypefn ! circshift -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} circshift (@var{x}, @var{n}) ! Circularly shifts the values of the array @var{x}. @var{n} must be ! a vector of integers no longer than the number of dimensions in ! @var{x}. The values of @var{n} can be either positive or negative, ! which determines the direction in which the values or @var{x} are ! shifted. If an element of @var{n} is zero, then the corresponding ! dimension of @var{x} will not be shifted. For example @example ! @group ! x = [1, 2, 3; 4, 5, 6; 7, 8, 9]; ! circshift (x, 1) ! @result{} 7, 8, 9 ! 1, 2, 3 ! 4, 5, 6 ! circshift (x, -2) ! @result{} 7, 8, 9 ! 1, 2, 3 ! 4, 5, 6 ! circshift (x, [0,1]) ! @result{} 3, 1, 2 ! 6, 4, 5 ! 9, 7, 8 ! @end group @end example ! @seealso {permute, ipermute, shiftdim} ! @end deftypefn ! common_size ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{err}, @var{y1}, @dots{}] =} common_size (@var{x1}, @dots{}) ! Determine if all input arguments are either scalar or of common ! size. If so, @var{err} is zero, and @var{yi} is a matrix of the ! common size with all entries equal to @var{xi} if this is a scalar or ! @var{xi} otherwise. If the inputs cannot be brought to a common size, ! errorcode is 1, and @var{yi} is @var{xi}. For example, @example @group ! [errorcode, a, b] = common_size ([1 2; 3 4], 5) ! @result{} errorcode = 0 ! @result{} a = [ 1, 2; 3, 4 ] ! @result{} b = [ 5, 5; 5, 5 ] @end group @end example @noindent ! This is useful for implementing functions where arguments can either ! be scalars or of common size. ! @end deftypefn ! cplxpair ! -*- texinfo -*- ! @deftypefn {Function File} {} cplxpair (@var{z}, @var{tol}, @var{dim}) ! Sort the numbers @var{z} into complex conjugate pairs ordered by ! increasing real part. With identical real parts, order by increasing ! imaginary magnitude. Place the negative imaginary complex number ! first within each pair. Place all the real numbers after all the ! complex pairs (those with @code{abs (imag (@var{z}) / @var{z}) < ! @var{tol})}, where the default value of @var{tol} is @code{100 * ! @var{eps}}. ! ! By default the complex pairs are sorted along the first non-singleton ! dimension of @var{z}. If @var{dim} is specified, then the complex ! pairs are sorted along this dimension. ! Signal an error if some complex numbers could not be paired. Requires ! all complex numbers to be exact conjugates within tol, or signals an ! error. Note that there are no guarantees on the order of the returned ! pairs with identical real parts but differing imaginary parts. ! @c Using 'smallexample' to make text fit in page when using 'smallbook' ! @smallexample ! cplxpair (exp(2i*pi*[0:4]'/5)) == exp(2i*pi*[3; 2; 4; 1; 0]/5) ! @end smallexample ! @end deftypefn ! cumtrapz ! -*- texinfo -*- ! @deftypefn {Function File} {@var{z} =} cumtrapz (@var{y}) ! @deftypefnx {Function File} {@var{z} =} cumtrapz (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{z} =} cumtrapz (@dots{}, @var{dim}) ! Cumulative numerical integration using trapezoidal method. ! @code{cumtrapz (@var{y})} computes the cumulative integral of the ! @var{y} along the first non singleton dimension. If the argument ! @var{x} is omitted a equally spaced vector is assumed. @code{cumtrapz ! (@var{x}, @var{y})} evaluates the cumulative integral with respect ! to @var{x}. ! ! @seealso{trapz,cumsum} ! @end deftypefn ! deal ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{r1}, @var{r2}, @dots{}, @var{rn}] =} deal (@var{a}) ! @deftypefnx {Function File} {[@var{r1}, @var{r2}, @dots{}, @var{rn}] =} deal (@var{a1}, @var{a2}, @dots{}, @var{an}) ! Copy the input parameters into the corresponding output parameters. ! If only one input parameter is supplied, its value is copied to each ! of the outputs. For example, @example ! [a, b, c] = deal (x, y, z); ! @end example ! @noindent ! is equivalent to - @example - @group - a = x; - b = y; - c = z; @end group @end example ! @noindent ! and @example ! [a, b, c] = deal (x); @end example @noindent ! is equivalent to ! ! @example ! a = b = c = x; ! @end example ! @end deftypefn ! del2 ! -*- texinfo -*- ! @deftypefn {Function File} {@var{d} =} del2 (@var{m}) ! @deftypefnx {Function File} {@var{d} =} del2 (@var{m}, @var{h}) ! @deftypefnx {Function File} {@var{d} =} del2 (@var{m}, @var{dx}, @var{dy}, @dots{}) ! ! Calculates the discrete Laplace operator. If @var{m} is a matrix this is ! defined as ! @iftex @tex ! $d = {1 \over 4} \left( {d^2 \over dx^2} M(x,y) + {d^2 \over dy^2} M(x,y) \right)$ @end tex @end iftex ! @ifnottex @example ! @group ! 1 / d^2 d^2 \ ! D = --- * | --- M(x,y) + --- M(x,y) | ! 4 \ dx^2 dy^2 / ! @end group @end example ! @end ifnottex ! The above to continued to N-dimensional arrays calculating the second ! derivative over the higher dimensions. ! The spacing between evaluation points may be defined by @var{h}, which is a ! scalar defining the spacing in all dimensions. Or alternative, the spacing ! in each dimension may be defined separately by @var{dx}, @var{dy}, etc. ! Scalar spacing values give equidistant spacing, whereas vector spacing ! values can be used to specify variable spacing. The length of the vectors ! must match the respective dimension of @var{m}. The default spacing value ! is 1. ! You need at least 3 data points for each dimension. Boundary points are ! calculated as the linear extrapolation of the interior points. ! @seealso{gradient, diff} @end deftypefn ! diff -*- texinfo -*- ! @deftypefn {Function File} {} diff (@var{x}, @var{k}, @var{dim}) ! If @var{x} is a vector of length @var{n}, @code{diff (@var{x})} is the ! vector of first differences @iftex @tex ! $x_2 - x_1, \ldots{}, x_n - x_{n-1}$. @end tex @end iftex @ifinfo ! @var{x}(2) - @var{x}(1), @dots{}, @var{x}(n) - @var{x}(n-1). @end ifinfo ! If @var{x} is a matrix, @code{diff (@var{x})} is the matrix of column ! differences along the first non-singleton dimension. ! The second argument is optional. If supplied, @code{diff (@var{x}, ! @var{k})}, where @var{k} is a nonnegative integer, returns the ! @var{k}-th differences. It is possible that @var{k} is larger than ! then first non-singleton dimension of the matrix. In this case, ! @code{diff} continues to take the differences along the next ! non-singleton dimension. ! The dimension along which to take the difference can be explicitly ! stated with the optional variable @var{dim}. In this case the ! @var{k}-th order differences are calculated along this dimension. ! In the case where @var{k} exceeds @code{size (@var{x}, @var{dim})} ! then an empty matrix is returned. @end deftypefn ! flipdim -*- texinfo -*- ! @deftypefn {Function File} {} flipdim (@var{x}, @var{dim}) ! Return a copy of @var{x} flipped about the dimension @var{dim}. ! For example ! @example ! @group ! flipdim ([1, 2; 3, 4], 2) ! @result{} 2 1 ! 4 3 ! @end group @end example ! @seealso{fliplr, flipud, rot90, rotdim} @end deftypefn ! fliplr -*- texinfo -*- ! @deftypefn {Function File} {} fliplr (@var{x}) ! Return a copy of @var{x} with the order of the columns reversed. For ! example, ! @example ! @group ! fliplr ([1, 2; 3, 4]) ! @result{} 2 1 ! 4 3 ! @end group ! @end example ! Note that @code{fliplr} only work with 2-D arrays. To flip N-d arrays ! use @code{flipdim} instead. ! @seealso{flipud, flipdim, rot90, rotdim} @end deftypefn ! flipud -*- texinfo -*- ! @deftypefn {Function File} {} flipud (@var{x}) ! Return a copy of @var{x} with the order of the rows reversed. For ! example, ! ! @example ! @group ! flipud ([1, 2; 3, 4]) ! @result{} 3 4 ! 1 2 ! @end group ! @end example ! ! Due to the difficulty of defining which axis about which to flip the ! matrix @code{flipud} only work with 2-d arrays. To flip N-d arrays ! use @code{flipdim} instead. ! @seealso{fliplr, flipdim, rot90, rotdim} @end deftypefn ! lookup -*- texinfo -*- ! @deftypefn {Function File} {@var{idx} =} lookup (@var{table}, @var{y}) ! Lookup values in a sorted table. Usually used as a prelude to ! interpolation. ! ! If table is strictly increasing and @code{idx = lookup (table, y)}, then ! @code{table(idx(i)) <= y(i) < table(idx(i+1))} for all @code{y(i)} ! within the table. If @code{y(i)} is before the table, then ! @code{idx(i)} is 0. If @code{y(i)} is after the table then ! @code{idx(i)} is @code{table(n)}. ! ! If the table is strictly decreasing, then the tests are reversed. ! There are no guarantees for tables which are non-monotonic or are not ! strictly monotonic. ! ! To get an index value which lies within an interval of the table, ! use: ! ! @example ! idx = lookup (table(2:length(table)-1), y) + 1 ! @end example ! ! @noindent ! This expression puts values before the table into the first ! interval, and values after the table into the last interval. @end deftypefn ! gradient -*- texinfo -*- ! @deftypefn {Function File} {@var{x} = } gradient (@var{M}) ! @deftypefnx {Function File} {[@var{x}, @var{y}, @dots{}] = } gradient (@var{M}) ! @deftypefnx {Function File} {[@dots{}] = } gradient (@var{M}, @var{s}) ! @deftypefnx {Function File} {[@dots{}] = } gradient (@var{M}, @var{dx}, @var{dy}, @dots{}) ! ! Calculates the gradient. @code{@var{x} = gradient (@var{M})} ! calculates the one dimensional gradient if @var{M} is a vector. If ! @var{M} is a matrix the gradient is calculated for each row. ! @code{[@var{x}, @var{y}] = gradient (@var{M})} calculates the one ! dimensional gradient for each direction if @var{M} if @var{M} is a ! matrix. Additional return arguments can be use for multi-dimensional ! matrices. ! Spacing values between two points can be provided by the ! @var{dx}, @var{dy} or @var{h} parameters. If @var{h} is supplied it ! is assumed to be the spacing in all directions. Otherwise, separate ! values of the spacing can be supplied by the @var{dx}, etc variables. ! A scalar value specifies an equidistant spacing, while a vector value ! can be used to specify a variable spacing. The length must match ! their respective dimension of @var{M}. ! At boundary points a linear extrapolation is applied. Interior points ! are calculated with the first approximation of the numerical gradient @example ! y'(i) = 1/(x(i+1)-x(i-1)) *(y(i-1)-y(i+1)). @end example @end deftypefn ! ind2sub -*- texinfo -*- ! @deftypefn {Function File} {[@var{s1}, @var{s2}, @dots{}, @var{sN}] =} ind2sub (@var{dims}, @var{ind}) ! Convert a linear index into subscripts. ! ! The following example shows how to convert the linear index @code{8} ! in a 3-by-3 matrix into a subscript. ! @example ! [r, c] = ind2sub ([3, 3], 8) ! @result{} r = 2 ! c = 3 ! @end example ! @seealso{sub2ind} @end deftypefn ! int2str -*- texinfo -*- ! @deftypefn {Function File} {} int2str (@var{n}) ! Convert an integer to a string. This function is not very flexible. ! For better control over the results, use @code{sprintf} ! (@pxref{Formatted Output}). ! @seealso{sprintf, num2str} @end deftypefn ! interp1 -*- texinfo -*- ! @deftypefn {Function File} {@var{yi} =} interp1 (@var{x}, @var{y}, @var{xi}) ! @deftypefnx {Function File} {@var{yi} =} interp1 (@dots{}, @var{method}) ! @deftypefnx {Function File} {@var{yi} =} interp1 (@dots{}, @var{extrap}) ! @deftypefnx {Function File} {@var{pp} =} interp1 (@dots{}, 'pp') ! One-dimensional interpolation. Interpolate @var{y}, defined at the ! points @var{x}, at the points @var{xi}. The sample points @var{x} ! must be strictly monotonic. If @var{y} is an array, treat the columns ! of @var{y} separately. ! Method is one of: ! @table @asis ! @item 'nearest' ! Return the nearest neighbour. ! @item 'linear' ! Linear interpolation from nearest neighbours ! @item 'pchip' ! Piece-wise cubic hermite interpolating polynomial ! @item 'cubic' ! Cubic interpolation from four nearest neighbours ! @item 'spline' ! Cubic spline interpolation--smooth first and second derivatives ! throughout the curve ! @end table ! Appending '*' to the start of the above method forces @code{interp1} ! to assume that @var{x} is uniformly spaced, and only @code{@var{x} ! (1)} and @code{@var{x} (2)} are referenced. This is usually faster, ! and is never slower. The default method is 'linear'. ! If @var{extrap} is the string 'extrap', then extrapolate values beyond ! the endpoints. If @var{extrap} is a number, replace values beyond the ! endpoints with that number. If @var{extrap} is missing, assume NA. ! If the string argument 'pp' is specified, then @var{xi} should not be ! supplied and @code{interp1} returns the piece-wise polynomial that ! can later be used with @code{ppval} to evaluate the interpolation. ! There is an equivalence, such that @code{ppval (interp1 (@var{x}, ! @var{y}, @var{method}, 'pp'), @var{xi}) == interp1 (@var{x}, @var{y}, ! @var{xi}, @var{method}, 'extrap')}. ! An example of the use of @code{interp1} is @example @group ! xf=[0:0.05:10]; yf = sin(2*pi*xf/5); ! xp=[0:10]; yp = sin(2*pi*xp/5); ! lin=interp1(xp,yp,xf); ! spl=interp1(xp,yp,xf,'spline'); ! cub=interp1(xp,yp,xf,'cubic'); ! near=interp1(xp,yp,xf,'nearest'); ! plot(xf,yf,"r",xf,lin,"g",xf,spl,"b", ... ! xf,cub,"c",xf,near,"m",xp,yp,"r*"); ! legend ("original","linear","spline","cubic","nearest") @end group @end example ! @seealso{interpft} @end deftypefn ! interp2 -*- texinfo -*- ! @deftypefn {Function File} {@var{zi}=} interp2 (@var{x}, @var{y}, @var{z}, @var{xi}, @var{yi}) ! @deftypefnx {Function File} {@var{zi}=} interp2 (@var{Z}, @var{xi}, @var{yi}) ! @deftypefnx {Function File} {@var{zi}=} interp2 (@var{Z}, @var{n}) ! @deftypefnx {Function File} {@var{zi}=} interp2 (@dots{}, @var{method}) ! @deftypefnx {Function File} {@var{zi}=} interp2 (@dots{}, @var{method}, @var{extrapval}) ! ! Two-dimensional interpolation. @var{x}, @var{y} and @var{z} describe a ! surface function. If @var{x} and @var{y} are vectors their length ! must correspondent to the size of @var{z}. @var{x} and @var{Yy} must be ! monotonic. If they are matrices they must have the @code{meshgrid} ! format. ! @table @code ! @item interp2 (@var{x}, @var{y}, @var{Z}, @var{xi}, @var{yi}, @dots{}) ! Returns a matrix corresponding to the points described by the ! matrices @var{XI}, @var{YI}. ! If the last argument is a string, the interpolation method can ! be specified. The method can be 'linear', 'nearest' or 'cubic'. ! If it is omitted 'linear' interpolation is assumed. ! ! @item interp2 (@var{z}, @var{xi}, @var{yi}) ! Assumes @code{@var{x} = 1:rows (@var{z})} and @code{@var{y} = ! 1:columns (@var{z})} ! ! @item interp2 (@var{z}, @var{n}) ! Interleaves the Matrix @var{z} n-times. If @var{n} is omitted a value ! of @code{@var{n} = 1} is assumed. ! @end table ! ! The variable @var{method} defines the method to use for the ! interpolation. It can take one of the values ! ! @table @asis ! @item 'nearest' ! Return the nearest neighbor. ! @item 'linear' ! Linear interpolation from nearest neighbors. ! @item 'pchip' ! Piece-wise cubic hermite interpolating polynomial (not implemented yet). ! @item 'cubic' ! Cubic interpolation from four nearest neighbors. ! @item 'spline' ! Cubic spline interpolation--smooth first and second derivatives ! throughout the curve. ! @end table ! ! If a scalar value @var{extrapval} is defined as the final value, then ! values outside the mesh as set to this value. Note that in this case ! @var{method} must be defined as well. If @var{extrapval} is not ! defined then NA is assumed. ! ! @seealso{interp1} ! @end deftypefn ! interp3 ! -*- texinfo -*- ! @deftypefn {Function File} {@var{vi} =} interp3 (@var{x}, @var{y},@var{z}, @var{v}, @var{xi}, @var{yi}, @var{zi}) ! @deftypefnx {Function File} {@var{vi} =} interp3 (@var{v}, @var{xi}, @var{yi}, @var{zi}) ! @deftypefnx {Function File} {@var{vi} =} interp3 (@var{v}, @var{m}) ! @deftypefnx {Function File} {@var{vi} =} interp3 (@var{v}) ! @deftypefnx {Function File} {@var{vi} =} interp3 (@dots{}, @var{method}) ! @deftypefnx {Function File} {@var{vi} =} interp3 (@dots{}, @var{method}, @var{extrapval}) ! ! Perform 3-dimensional interpolation. Each element of then 3-dimensional ! array @var{v} represents a value at a location given by the parameters ! @var{x}, @var{y}, and @var{z}. The parameters @var{x}, @var{x}, and ! @var{z} are either 3-dimensional arrays of the same size as the array ! @var{v} in the 'meshgrid' format or vectors. The parameters @var{xi}, etc ! respect a similar format to @var{x}, etc, and they represent the points ! at which the array @var{vi} is interpolated. ! ! If @var{x}, @var{y}, @var{z} are omitted, they are assumed to be ! @code{x = 1 : size (@var{v}, 2)}, @code{y = 1 : size (@var{v}, 1)} and ! @code{z = 1 : size (@var{v}, 3)}. If @var{m} is specified, then ! the interpolation adds a point half way between each of the interpolation ! points. This process is performed @var{m} times. If only @var{v} is ! specified, then @var{m} is assumed to be @code{1}. ! ! Method is one of: ! ! @table @asis ! @item 'nearest' ! Return the nearest neighbour. ! @item 'linear' ! Linear interpolation from nearest neighbours. ! @item 'cubic' ! Cubic interpolation from four nearest neighbours (not implemented yet). ! @item 'spline' ! Cubic spline interpolation--smooth first and second derivatives ! throughout the curve. ! @end table ! ! The default method is 'linear'. ! ! If @var{extrap} is the string 'extrap', then extrapolate values beyond ! the endpoints. If @var{extrap} is a number, replace values beyond the ! endpoints with that number. If @var{extrap} is missing, assume NA. ! @seealso{interp1, interp2, spline, meshgrid} ! @end deftypefn ! interpft ! -*- texinfo -*- ! @deftypefn {Function File} {} interpft (@var{x}, @var{n}) ! @deftypefnx {Function File} {} interpft (@var{x}, @var{n}, @var{dim}) ! ! Fourier interpolation. If @var{x} is a vector, then @var{x} is ! resampled with @var{n} points. The data in @var{x} is assumed to be ! equispaced. If @var{x} is an array, then operate along each column of ! the array separately. If @var{dim} is specified, then interpolate ! along the dimension @var{dim}. ! ! @code{interpft} assumes that the interpolated function is periodic, ! and so assumptions are made about the end points of the interpolation. ! ! @seealso{interp1} ! @end deftypefn ! interpn ! -*- texinfo -*- ! @deftypefn {Function File} {@var{vi} =} interpn (@var{x1}, @var{x2}, @dots{}, @var{v}, @var{y1}, @var{y2}, @dots{}) ! @deftypefnx {Function File} {@var{vi} =} interpn (@var{v}, @var{y1}, @var{y2}, @dots{}) ! @deftypefnx {Function File} {@var{vi} =} interpn (@var{v}, @var{m}) ! @deftypefnx {Function File} {@var{vi} =} interpn (@var{v}) ! @deftypefnx {Function File} {@var{vi} =} interpn (@dots{}, @var{method}) ! @deftypefnx {Function File} {@var{vi} =} interpn (@dots{}, @var{method}, @var{extrapval}) ! ! Perform @var{n}-dimensional interpolation, where @var{n} is at least two. ! Each element of then @var{n}-dimensional array @var{v} represents a value ! at a location given by the parameters @var{x1}, @var{x2}, @dots{}, @var{xn}. ! The parameters @var{x1}, @var{x2}, @dots{}, @var{xn} are either ! @var{n}-dimensional arrays of the same size as the array @var{v} in ! the 'ndgrid' format or vectors. The parameters @var{y1}, etc respect a ! similar format to @var{x1}, etc, and they represent the points at which ! the array @var{vi} is interpolated. ! ! If @var{x1}, @dots{}, @var{xn} are omitted, they are assumed to be ! @code{x1 = 1 : size (@var{v}, 1)}, etc. If @var{m} is specified, then ! the interpolation adds a point half way between each of the interpolation ! points. This process is performed @var{m} times. If only @var{v} is ! specified, then @var{m} is assumed to be @code{1}. ! ! Method is one of: ! ! @table @asis ! @item 'nearest' ! Return the nearest neighbour. ! @item 'linear' ! Linear interpolation from nearest neighbours. ! @item 'cubic' ! Cubic interpolation from four nearest neighbours (not implemented yet). ! @item 'spline' ! Cubic spline interpolation--smooth first and second derivatives ! throughout the curve. ! @end table ! ! The default method is 'linear'. ! ! If @var{extrap} is the string 'extrap', then extrapolate values beyond ! the endpoints. If @var{extrap} is a number, replace values beyond the ! endpoints with that number. If @var{extrap} is missing, assume NA. ! @seealso{interp1, interp2, spline, ndgrid} ! @end deftypefn ! is_duplicate_entry ! -*- texinfo -*- ! @deftypefn {Function File} {} is_duplicate_entry (@var{x}) ! Return non-zero if any entries in @var{x} are duplicates of one ! another. ! @end deftypefn ! isa ! -*- texinfo -*- ! @deftypefn {Function File} {} isa (@var{x}, @var{class}) ! Return true if @var{x} is a value from the class @var{class}. ! @end deftypefn ! isdefinite ! -*- texinfo -*- ! @deftypefn {Function File} {} isdefinite (@var{x}, @var{tol}) ! Return 1 if @var{x} is symmetric positive definite within the ! tolerance specified by @var{tol} or 0 if @var{x} is symmetric ! positive semidefinite. Otherwise, return -1. If @var{tol} ! is omitted, use a tolerance equal to 100 times the machine precision. ! @seealso{issymmetric} ! @end deftypefn ! isdir ! -*- texinfo -*- ! @deftypefn {Function File} {} isdir (@var{f}) ! Return true if @var{f} is a directory. ! @end deftypefn ! isequal ! -*- texinfo -*- ! @deftypefn {Function File} {} isequal (@var{x1}, @var{x2}, @dots{}) ! Return true if all of @var{x1}, @var{x2}, @dots{} are equal. ! @seealso{isequalwithequalnans} ! @end deftypefn ! isequalwithequalnans ! -*- texinfo -*- ! @deftypefn {Function File} {} isequalwithequalnans (@var{x1}, @var{x2}, @dots{}) ! Assuming NaN == NaN, return true if all of @var{x1}, @var{x2}, @dots{} ! are equal. ! @seealso{isequal} ! @end deftypefn ! isscalar ! -*- texinfo -*- ! @deftypefn {Function File} {} isscalar (@var{a}) ! Return 1 if @var{a} is a scalar. Otherwise, return 0. ! @seealso{size, rows, columns, length, isscalar, ismatrix} ! @end deftypefn ! issquare ! -*- texinfo -*- ! @deftypefn {Function File} {} issquare (@var{x}) ! If @var{x} is a square matrix, then return the dimension of @var{x}. ! Otherwise, return 0. ! @seealso{size, rows, columns, length, ismatrix, isscalar, isvector} ! @end deftypefn ! issymmetric ! -*- texinfo -*- ! @deftypefn {Function File} {} issymmetric (@var{x}, @var{tol}) ! If @var{x} is symmetric within the tolerance specified by @var{tol}, ! then return the dimension of @var{x}. Otherwise, return 0. If ! @var{tol} is omitted, use a tolerance equal to the machine precision. ! Matrix @var{x} is considered symmetric if ! @code{norm (@var{x} - @var{x}.', inf) / norm (@var{x}, inf) < @var{tol}}. ! @seealso{size, rows, columns, length, ishermitian, ismatrix, isscalar, ! issquare, isvector} ! @end deftypefn ! isvector ! -*- texinfo -*- ! @deftypefn {Function File} {} isvector (@var{a}) ! Return 1 if @var{a} is a vector. Otherwise, return 0. ! @seealso{size, rows, columns, length, isscalar, ismatrix} ! @end deftypefn ! logical ! -*- texinfo -*- ! @deftypefn {Function File} {} logical (@var{arg}) ! Convert @var{arg} to a logical value. For example, ! ! @example ! logical ([-1, 0, 1]) ! @end example ! ! @noindent ! is equivalent to ! @example ! [-1, 0, 1] != 0 ! @end example ! @end deftypefn ! logspace ! -*- texinfo -*- ! @deftypefn {Function File} {} logspace (@var{base}, @var{limit}, @var{n}) ! Similar to @code{linspace} except that the values are logarithmically ! spaced from @iftex @tex ! $10^{base}$ to $10^{limit}$. @end tex @end iftex @ifinfo ! 10^base to 10^limit. @end ifinfo ! ! If @var{limit} is equal to @iftex @tex ! $\pi$, @end tex @end iftex @ifinfo ! pi, @end ifinfo ! the points are between @iftex @tex ! $10^{base}$ and $\pi$, @end tex @end iftex @ifinfo ! 10^base and pi, @end ifinfo ! @emph{not} ! @iftex ! @tex ! $10^{base}$ and $10^{\pi}$, ! @end tex ! @end iftex ! @ifinfo ! 10^base and 10^pi, ! @end ifinfo ! in order to be compatible with the corresponding @sc{Matlab} ! function. ! Also for compatibility, return the second argument if fewer than two ! values are requested. ! @seealso{linspace} @end deftypefn ! mod -*- texinfo -*- ! @deftypefn {Mapping Function} {} mod (@var{x}, @var{y}) ! Compute modulo function, using ! @example ! x - y .* floor (x ./ y) ! @end example ! Note that this handles negative numbers correctly: ! @code{mod (-1, 3)} is 2, not -1 as @code{rem (-1, 3)} returns. ! Also, @code{mod (@var{x}, 0)} returns @var{x}. ! An error message is printed if the dimensions of the arguments do not ! agree, or if either of the arguments is complex. ! @seealso{rem, round} ! @end deftypefn ! nargchk ! -*- texinfo -*- ! @deftypefn {Function File} {} nargchk (@var{nargin_min}, @var{nargin_max}, @var{n}) ! If @var{n} is in the range @var{nargin_min} through @var{nargin_max} ! inclusive, return the empty matrix. Otherwise, return a message ! indicating whether @var{n} is too large or too small. ! This is useful for checking to see that the number of arguments supplied ! to a function is within an acceptable range. @end deftypefn ! nextpow2 -*- texinfo -*- ! @deftypefn {Function File} {} nextpow2 (@var{x}) ! If @var{x} is a scalar, returns the first integer @var{n} such that @iftex @tex ! $2^n \ge |x|$. @end tex @end iftex @ifinfo ! 2^n >= abs (x). @end ifinfo ! ! If @var{x} is a vector, return @code{nextpow2 (length (@var{x}))}. ! @seealso{pow2} @end deftypefn ! nthroot -*- texinfo -*- ! @deftypefn {Function File} {} nthroot (@var{x}, @var{n}) ! Compute the nth root of @var{x}, returning real results for real ! components of @var{x}. For example @example ! @group ! nthroot (-1, 3) ! @result{} -1 ! (-1) ^ (1 / 3) ! @result{} 0.50000 - 0.86603i ! @end group @end example @end deftypefn ! num2str -*- texinfo -*- ! @deftypefn {Function File} {} num2str (@var{n}) ! @deftypefnx {Function File} {} num2str (@var{x}, @var{precision}) ! @deftypefnx {Function File} {} num2str (@var{x}, @var{format}) ! Convert a number to a string. This function is not very flexible. ! For better control over the results, use @code{sprintf} ! (@pxref{Formatted Output}). ! @seealso{sprintf, int2str} @end deftypefn ! perror -*- texinfo -*- ! @deftypefn {Function File} {} perror (@var{name}, @var{num}) ! Print the error message for function @var{name} corresponding to the ! error number @var{num}. This function is intended to be used to print ! useful error messages for those functions that return numeric error ! codes. ! @seealso{strerror} @end deftypefn ! pol2cart -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{y}] =} pol2cart (@var{theta}, @var{r}) ! @deftypefnx {Function File} {[@var{x}, @var{y}, @var{z}] =} pol2cart (@var{theta}, @var{r}, @var{z}) ! Transform polar or cylindrical to cartesian coordinates. ! @var{theta}, @var{r} (and @var{z}) must be of same shape. ! @var{theta} describes the angle relative to the x - axis. ! @var{r} is the distance to the z - axis (0, 0, z). ! @seealso{cart2pol, cart2sph, sph2cart} @end deftypefn ! polyarea -*- texinfo -*- ! @deftypefn {Function File} {} polyarea (@var{x}, @var{y}) ! @deftypefnx {Function File} {} polyarea (@var{x}, @var{y}, @var{dim}) ! ! Determines area of a polygon by triangle method. The variables ! @var{x} and @var{y} define the vertex pairs, and must therefore have ! the same shape. They can be either vectors or arrays. If they are ! arrays then the columns of @var{x} and @var{y} are treated separately ! and an area returned for each. ! ! If the optional @var{dim} argument is given, then @code{polyarea} ! works along this dimension of the arrays @var{x} and @var{y}. ! @end deftypefn ! postpad -*- texinfo -*- ! @deftypefn {Function File} {} postpad (@var{x}, @var{l}, @var{c}) ! See prepad. @end deftypefn ! prepad -*- texinfo -*- ! @deftypefn {Function File} {} prepad (@var{x}, @var{l}, @var{c}) ! @deftypefnx {Function File} {} postpad (@var{x}, @var{l}, @var{c}) ! @deftypefnx {Function File} {} postpad (@var{x}, @var{l}, @var{c}, @var{dim}) ! Prepends (appends) the scalar value @var{c} to the vector @var{x} ! until it is of length @var{l}. If the third argument is not ! supplied, a value of 0 is used. ! If @code{length (@var{x}) > @var{l}}, elements from the beginning (end) of ! @var{x} are removed until a vector of length @var{l} is obtained. ! If @var{x} is a matrix, elements are prepended or removed from each row. ! If the optional @var{dim} argument is given, then operate along this ! dimension. @end deftypefn ! quadl -*- texinfo -*- ! @deftypefn {Function File} {@var{q} =} quadl (@var{f}, @var{a}, @var{b}) ! @deftypefnx {Function File} {@var{q} =} quadl (@var{f}, @var{a}, @var{b}, @var{tol}) ! @deftypefnx {Function File} {@var{q} =} quadl (@var{f}, @var{a}, @var{b}, @var{tol}, @var{trace}) ! @deftypefnx {Function File} {@var{q} =} quadl (@var{f}, @var{a}, @var{b}, @var{tol}, @var{trace}, @var{p1}, @var{p2}, @dots{}) ! Numerically evaluate integral using adaptive Lobatto rule. ! @code{quadl (@var{f}, @var{a}, @var{b})} approximates the integral of ! @code{@var{f}(@var{x})} to machine precision. @var{f} is either a ! function handle, inline function or string containing the name of ! the function to evaluate. The function @var{f} must return a vector ! of output values if given a vector of input values. ! If defined, @var{tol} defines the relative tolerance to which to ! which to integrate @code{@var{f}(@var{x})}. While if @var{trace} is ! defined, displays the left end point of the current interval, the ! interval length, and the partial integral. ! Additional arguments @var{p1}, etc, are passed directly to @var{f}. ! To use default values for @var{tol} and @var{trace}, one may pass ! empty matrices. ! Reference: W. Gander and W. Gautschi, 'Adaptive Quadrature - ! Revisited', BIT Vol. 40, No. 1, March 2000, pp. 84--101. ! @url{http://www.inf.ethz.ch/personal/gander/} @end deftypefn ! randperm -*- texinfo -*- ! @deftypefn {Function File} {} randperm (@var{n}) ! Return a row vector containing a random permutation of the ! integers from 1 to @var{n}. @end deftypefn ! rat -*- texinfo -*- ! @deftypefn {Function File} {@var{s} =} rat (@var{x}, @var{tol}) ! @deftypefnx {Function File} {[@var{n}, @var{d}] =} rat (@var{x}, @var{tol}) ! ! Find a rational approximation to @var{x} within tolerance defined ! by @var{tol} using a continued fraction expansion. E.g, @example ! rat(pi) = 3 + 1/(7 + 1/16) = 355/113 ! rat(e) = 3 + 1/(-4 + 1/(2 + 1/(5 + 1/(-2 + 1/(-7))))) ! = 1457/536 @end example ! Called with two arguments returns the numerator and denominator separately ! as two matrices. @end deftypefn ! @seealso{rats} ! rem -*- texinfo -*- ! @deftypefn {Mapping Function} {} rem (@var{x}, @var{y}) ! Return the remainder of @code{@var{x} / @var{y}}, computed using the ! expression ! @example ! x - y .* fix (x ./ y) ! @end example ! An error message is printed if the dimensions of the arguments do not ! agree, or if either of the arguments is complex. ! @seealso{mod, round} @end deftypefn ! repmat -*- texinfo -*- ! @deftypefn {Function File} {} repmat (@var{A}, @var{m}, @var{n}) ! @deftypefnx {Function File} {} repmat (@var{A}, [@var{m} @var{n}]) ! @deftypefnx {Function File} {} repmat (@var{A}, [@var{m} @var{n} @var{p} ...]) ! Form a block matrix of size @var{m} by @var{n}, with a copy of matrix ! @var{A} as each element. If @var{n} is not specified, form an ! @var{m} by @var{m} block matrix. @end deftypefn ! rot90 -*- texinfo -*- ! @deftypefn {Function File} {} rot90 (@var{x}, @var{n}) ! Return a copy of @var{x} with the elements rotated counterclockwise in ! 90-degree increments. The second argument is optional, and specifies ! how many 90-degree rotations are to be applied (the default value is 1). ! Negative values of @var{n} rotate the matrix in a clockwise direction. ! For example, @example ! @group ! rot90 ([1, 2; 3, 4], -1) ! @result{} 3 1 ! 4 2 ! @end group @end example @noindent ! rotates the given matrix clockwise by 90 degrees. The following are all ! equivalent statements: @example @group ! rot90 ([1, 2; 3, 4], -1) ! rot90 ([1, 2; 3, 4], 3) ! rot90 ([1, 2; 3, 4], 7) @end group @end example ! Due to the difficulty of defining an axis about which to rotate the ! matrix @code{rot90} only work with 2-D arrays. To rotate N-d arrays ! use @code{rotdim} instead. ! @seealso{rotdim, flipud, fliplr, flipdim} @end deftypefn ! rotdim -*- texinfo -*- ! @deftypefn {Function File} {} rotdim (@var{x}, @var{n}, @var{plane}) ! Return a copy of @var{x} with the elements rotated counterclockwise in ! 90-degree increments. The second argument is optional, and specifies ! how many 90-degree rotations are to be applied (the default value is 1). ! The third argument is also optional and defines the plane of the ! rotation. As such @var{plane} is a two element vector containing two ! different valid dimensions of the matrix. If @var{plane} is not given ! Then the first two non-singleton dimensions are used. ! Negative values of @var{n} rotate the matrix in a clockwise direction. ! For example, ! @example ! @group ! rotdim ([1, 2; 3, 4], -1, [1, 2]) ! @result{} 3 1 ! 4 2 ! @end group ! @end example ! @noindent ! rotates the given matrix clockwise by 90 degrees. The following are all ! equivalent statements: @example @group ! rotdim ([1, 2; 3, 4], -1, [1, 2]) ! rotdim ([1, 2; 3, 4], 3, [1, 2]) ! rotdim ([1, 2; 3, 4], 7, [1, 2]) @end group @end example - @seealso{rot90, flipud, fliplr, flipdim} @end deftypefn ! runlength -*- texinfo -*- ! @deftypefn {Function File} {} runlength (@var{x}) ! Find the lengths of all sequences of common values. Return the ! vector of lengths and the value that was repeated. ! @example ! runlength ([2, 2, 0, 4, 4, 4, 0, 1, 1, 1, 1]) ! @result{} [2, 1, 3, 1, 4] ! @end example ! @end deftypefn ! shift ! -*- texinfo -*- ! @deftypefn {Function File} {} shift (@var{x}, @var{b}) ! @deftypefnx {Function File} {} shift (@var{x}, @var{b}, @var{dim}) ! If @var{x} is a vector, perform a circular shift of length @var{b} of ! the elements of @var{x}. ! If @var{x} is a matrix, do the same for each column of @var{x}. ! If the optional @var{dim} argument is given, operate along this ! dimension @end deftypefn ! shiftdim -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} shiftdim (@var{x}, @var{n}) ! @deftypefnx {Function File} {[@var{y}, @var{ns}] =} shiftdim (@var{x}) ! Shifts the dimension of @var{x} by @var{n}, where @var{n} must be ! an integer scalar. When @var{n} is positive, the dimensions of ! @var{x} are shifted to the left, with the leading dimensions ! circulated to the end. If @var{n} is negative, then the dimensions ! of @var{x} are shifted to the right, with @var{n} leading singleton ! dimensions added. ! Called with a single argument, @code{shiftdim}, removes the leading ! singleton dimensions, returning the number of dimensions removed ! in the second output argument @var{ns}. ! For example ! @example ! @group ! x = ones (1, 2, 3); ! size (shiftdim (x, -1)) ! @result{} [1, 1, 2, 3] ! size (shiftdim (x, 1)) ! @result{} [2, 3] ! [b, ns] = shiftdim (x); ! @result{} b = [1, 1, 1; 1, 1, 1] ! @result{} ns = 1 ! @end group ! @end example ! @seealso {reshape, permute, ipermute, circshift, squeeze} @end deftypefn ! sortrows -*- texinfo -*- ! @deftypefn {Function File} {} sortrows (@var{a}, @var{c}) ! Sort the rows of the matrix @var{a} according to the order of the ! columns specified in @var{c}. If @var{c} is omitted, a ! lexicographical sort is used. By default ascending order is used ! however if elements of @var{c} are negative then the corrosponding ! column is sorted in descending order. @end deftypefn ! sph2cart ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{y}, @var{z}] =} sph2cart (@var{theta}, @var{phi}, @var{r}) ! Transform spherical to cartesian coordinates. ! @var{x}, @var{y} and @var{z} must be of same shape. ! @var{theta} describes the angle relative to the x-axis. ! @var{phi} is the angle relative to the xy-plane. ! @var{r} is the distance to the origin (0, 0, 0). ! @seealso{pol2cart, cart2pol, cart2sph} ! @end deftypefn ! strerror -*- texinfo -*- ! @deftypefn {Function File} {} strerror (@var{name}, @var{num}) ! Return the text of an error message for function @var{name} ! corresponding to the error number @var{num}. This function is intended ! to be used to print useful error messages for those functions that ! return numeric error codes. @end deftypefn ! structfun -*- texinfo -*- ! @deftypefn {Function File} {} structfun (@var{func}, @var{s}) ! @deftypefnx {Function File} {[@var{a}, @var{b}] =} structfun (@dots{}) ! @deftypefnx {Function File} {} structfun (@dots{}, 'ErrorHandler', @var{errfunc}) ! @deftypefnx {Function File} {} structfun (@dots{}, 'UniformOutput', @var{val}) ! Evaluate the function named @var{name} on the fields of the structure ! @var{s}. The fields of @var{s} are passed to the function @var{func} ! individually. ! @code{structfun} accepts an arbitrary function @var{func} in the form of ! an inline function, function handle, or the name of a function (in a ! character string). In the case of a character string argument, the ! function must accept a single argument named @var{x}, and it must return ! a string value. If the function returns more than one argument, they are ! returned as separate output variables. ! If the param 'UniformOutput' is set to true (the default), then the function ! must return either a single element which will be concatenated into the ! return value. If 'UniformOutput is false, the outputs placed in a structure ! with the same fieldnames as the input structure. ! @example ! @group ! s.name1 = "John Smith"; ! s.name2 = "Jill Jones"; ! structfun (@@(x) regexp (x, '(\w+)$', 'matches')@{1@}, s, ! 'UniformOutput', false) ! @end group ! @end example ! Given the parameter 'ErrorHandler', then @var{errfunc} defines a function to ! call in case @var{func} generates an error. The form of the function is @example ! function [@dots{}] = errfunc (@var{se}, @dots{}) @end example ! where there is an additional input argument to @var{errfunc} relative to ! @var{func}, given by @var{se}. This is a structure with the elements ! 'identifier', 'message' and 'index', giving respectively the error ! identifier, the error message, and the index into the input arguments ! of the element that caused the error. ! @seealso{cellfun, arrayfun} @end deftypefn ! sub2ind -*- texinfo -*- ! @deftypefn {Function File} {@var{ind} =} sub2ind (@var{dims}, @var{i}, @var{j}) ! @deftypefnx {Function File} {@var{ind} =} sub2ind (@var{dims}, @var{s1}, @var{s2}, @dots{}, @var{sN}) ! Convert subscripts into a linear index. ! ! The following example shows how to convert the two-dimensional ! index @code{(2,3)} of a 3-by-3 matrix to a linear index. @example ! linear_index = sub2ind ([3, 3], 2, 3) ! @result{} 8 @end example ! @seealso{ind2sub} @end deftypefn ! trapz -*- texinfo -*- ! @deftypefn {Function File} {@var{z} =} trapz (@var{y}) ! @deftypefnx {Function File} {@var{z} =} trapz (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{z} =} trapz (@dots{}, @var{dim}) ! Numerical integration using trapezoidal method. @code{trapz ! (@var{y})} computes the integral of the @var{y} along the first ! non singleton dimension. If the argument @var{x} is omitted a ! equally spaced vector is assumed. @code{trapz (@var{x}, @var{y})} ! evaluates the integral with respect to @var{x}. ! ! @seealso{cumtrapz} @end deftypefn ! tril -*- texinfo -*- ! @deftypefn {Function File} {} tril (@var{a}, @var{k}) ! @deftypefnx {Function File} {} triu (@var{a}, @var{k}) ! Return a new matrix formed by extracting the lower (@code{tril}) ! or upper (@code{triu}) triangular part of the matrix @var{a}, and ! setting all other elements to zero. The second argument is optional, ! and specifies how many diagonals above or below the main diagonal should ! also be set to zero. ! ! The default value of @var{k} is zero, so that @code{triu} and ! @code{tril} normally include the main diagonal as part of the result ! matrix. ! If the value of @var{k} is negative, additional elements above (for ! @code{tril}) or below (for @code{triu}) the main diagonal are also ! selected. ! The absolute value of @var{k} must not be greater than the number of ! sub- or super-diagonals. ! For example, ! @example ! @group ! tril (ones (3), -1) ! @result{} 0 0 0 ! 1 0 0 ! 1 1 0 ! @end group ! @end example ! @noindent ! and @example @group ! tril (ones (3), 1) ! @result{} 1 1 0 ! 1 1 1 ! 1 1 1 @end group @end example ! @seealso{triu, diag} @end deftypefn ! triu -*- texinfo -*- ! @deftypefn {Function File} {} triu (@var{a}, @var{k}) ! See tril. @end deftypefn ! convhull -*- texinfo -*- ! @deftypefn {Function File} {@var{H} =} convhull (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{H} =} convhull (@var{x}, @var{y}, @var{opt}) ! Returns the index vector to the points of the enclosing convex hull. The ! data points are defined by the x and y vectors. ! ! A third optional argument, which must be a string, contains extra options ! passed to the underlying qhull command. See the documentation for the ! Qhull library for details. ! @seealso{delaunay, convhulln} @end deftypefn ! delaunay ! -*- texinfo -*- ! @deftypefn {Function File} {@var{tri}=} delaunay (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{tri}=} delaunay (@var{x}, @var{y}, @var{opt}) ! The return matrix of size [n, 3] contains a set triangles which are ! described by the indices to the data point x and y vector. ! The triangulation satisfies the Delaunay circumcircle criterion. ! No other data point is in the circumcircle of the defining triangle. ! ! A third optional argument, which must be a string, contains extra options ! passed to the underlying qhull command. See the documentation for the ! Qhull library for details. ! ! @example ! @group ! x = rand (1, 10); ! y = rand (size (x)); ! T = delaunay (x, y); ! X = [x(T(:,1)); x(T(:,2)); x(T(:,3)); x(T(:,1))]; ! Y = [y(T(:,1)); y(T(:,2)); y(T(:,3)); y(T(:,1))]; ! axis ([0,1,0,1]); ! plot (X, Y, "b", x, y, "r*"); ! @end group ! @end example ! @seealso{voronoi, delaunay3, delaunayn} @end deftypefn ! delaunay3 -*- texinfo -*- ! @deftypefn {Function File} {@var{T} =} delaunay3 (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {@var{T} =} delaunay3 (@var{x}, @var{y}, @var{z}, @var{opt}) ! A matrix of size [n, 4] is returned. Each row contains a ! set of tetrahedron which are ! described by the indices to the data point vectors (x,y,z). ! A fourth optional argument, which must be a string or cell array of strings, ! contains extra options passed to the underlying qhull command. See the ! documentation for the Qhull library for details. ! @seealso{delaunay,delaunayn} @end deftypefn ! delaunayn -*- texinfo -*- ! @deftypefn {Function File} {@var{T} =} delaunayn (@var{P}) ! @deftypefnx {Function File} {@var{T} =} delaunayn (@var{P}, @var{opt}) ! Form the Delaunay triangulation for a set of points. ! The Delaunay triangulation is a tessellation of the convex hull of the ! points such that no n-sphere defined by the n-triangles contains ! any other points from the set. ! The input matrix @var{P} of size @code{[n, dim]} contains @var{n} ! points in a space of dimension dim. The return matrix @var{T} has the ! size @code{[m, dim+1]}. It contains for each row a set of indices to ! the points, which describes a simplex of dimension dim. For example, ! a 2d simplex is a triangle and 3d simplex is a tetrahedron. ! ! Extra options for the underlying Qhull command can be specified by the ! second argument. This argument is a cell array of strings. The default ! options depend on the dimension of the input: ! ! @itemize ! @item 2D and 3D: @var{opt} = @code{@{"Qt", "Qbb", "Qc"@}} ! @item 4D and higher: @var{opt} = @code{@{"Qt", "Qbb", "Qc", "Qz"@}} ! @end itemize ! ! If @var{opt} is [], then the default arguments are used. If @var{opt} ! is @code{@{"@w{}"@}}, then none of the default arguments are used by Qhull. ! See the Qhull documentation for the available options. ! All options can also be specified as single string, for example ! @code{"Qt Qbb Qc Qz"}. @end deftypefn ! dsearch ! -*- texinfo -*- ! @deftypefn {Function File} {@var{idx} =} dsearch (@var{x}, @var{y}, @var{tri}, @var{xi}, @var{yi}) ! @deftypefnx {Function File} {@var{idx} =} dsearch (@var{x}, @var{y}, @var{tri}, @var{xi}, @var{yi}, @var{s}) ! Returns the index @var{idx} or the closest point in @code{@var{x}, @var{y})} ! to the elements @code{[@var{xi}(:), @var{yi}(:)]}. The variable @var{s} is ! accepted but ignored for compatibility. ! @seealso{dsearchn, tsearch} ! @end deftypefn ! dsearchn ! -*- texinfo -*- ! @deftypefn {Function File} {@var{idx} =} dsearchn (@var{x}, @var{tri}, @var{xi}) ! @deftypefnx {Function File} {@var{idx} =} dsearchn (@var{x}, @var{tri}, @var{xi}, @var{outval}) ! @deftypefnx {Function File} {@var{idx} =} dsearchn (@var{x}, @var{xi}) ! @deftypefnx {Function File} {[@var{idx}, @var{d}] =} dsearchn (@dots{}) ! Returns the index @var{idx} or the closest point in @var{x} to the elements ! @var{xi}. If @var{outval} is supplied, then the values of @var{xi} that are ! not contained within one of the simplicies @var{tri} are set to ! @var{outval}. Generally, @var{tri} is returned from @code{delaunayn ! (@var{x})}. ! @seealso{dsearch, tsearch} ! @end deftypefn ! griddata -*- texinfo -*- ! @deftypefn {Function File} {@var{zi} =} griddata (@var{x}, @var{y}, @var{z}, @var{xi}, @var{yi}, @var{method}) ! @deftypefnx {Function File} {[@var{xi}, @var{yi}, @var{zi}] =} griddata (@var{x}, @var{y}, @var{z}, @var{xi}, @var{yi}, @var{method}) ! Generate a regular mesh from irregular data using interpolation. ! The function is defined by @code{@var{z} = f (@var{x}, @var{y})}. ! The interpolation points are all @code{(@var{xi}, @var{yi})}. If ! @var{xi}, @var{yi} are vectors then they are made into a 2D mesh. ! The interpolation method can be @code{"nearest"}, @code{"cubic"} or ! @code{"linear"}. If method is omitted it defaults to @code{"linear"}. ! @seealso{delaunay} @end deftypefn ! griddata3 -*- texinfo -*- ! @deftypefn {Function File} {@var{vi} =} griddata3 (@var{x}, @var{y}, @var{z}, @var{v} @var{xi}, @var{yi}, @var{zi}, @var{method}, @var{options}) ! Generate a regular mesh from irregular data using interpolation. ! The function is defined by @code{@var{y} = f (@var{x},@var{y},@var{z})}. ! The interpolation points are all @var{xi}. ! The interpolation method can be @code{"nearest"} or @code{"linear"}. ! If method is omitted it defaults to @code{"linear"}. ! @seealso{griddata, delaunayn} ! @end deftypefn ! griddatan ! -*- texinfo -*- ! @deftypefn {Function File} {@var{yi} =} griddatan (@var{x}, @var{y}, @var{xi}, @var{method}, @var{options}) ! Generate a regular mesh from irregular data using interpolation. ! The function is defined by @code{@var{y} = f (@var{x})}. ! The interpolation points are all @var{xi}. ! The interpolation method can be @code{"nearest"} or @code{"linear"}. ! If method is omitted it defaults to @code{"linear"}. ! @seealso{griddata, delaunayn} @end deftypefn ! inpolygon -*- texinfo -*- ! @deftypefn {Function File} {[@var{in}, @var{on}] = } inpolygon (@var{x}, @var{y}, @var{xv}, @var{xy}) ! For a polygon defined by @code{(@var{xv}, @var{yv})} points, determine ! if the points @code{(@var{x}, @var{y})} are inside or outside the polygon. ! The variables @var{x}, @var{y}, must have the same dimension. The optional ! output @var{on} gives the points that are on the polygon. @end deftypefn ! trimesh -*- texinfo -*- ! @deftypefn {Function File} {} trimesh (@var{tri}, @var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {@var{h} = } trimesh (@dots{}) ! Plot a triangular mesh in 3D. The variable @var{tri} is the triangular ! meshing of the points @code{(@var{x}, @var{y})} which is returned ! from @code{delaunay}. The variable @var{z} is value at the point ! @code{(@var{x}, @var{y})}. The output argument @var{h} is the graphic ! handle to the plot. ! @seealso{triplot, delaunay3} @end deftypefn ! triplot -*- texinfo -*- ! @deftypefn {Function File} {} triplot (@var{tri}, @var{x}, @var{y}) ! @deftypefnx {Function File} {} triplot (@var{tri}, @var{x}, @var{y}, @var{linespec}) ! @deftypefnx {Function File} {@var{h} = } triplot (@dots{}) ! Plot a triangular mesh in 2D. The variable @var{tri} is the triangular ! meshing of the points @code{(@var{x}, @var{y})} which is returned from ! @code{delaunay}. If given, the @var{linespec} determines the properties ! to use for the lines. The output argument @var{h} is the graphic handle ! to the plot. ! @seealso{plot, trimesh, delaunay} @end deftypefn ! tsearchn -*- texinfo -*- ! @deftypefn {Function File} {[@var{idx}, @var{p}] =} tsearchn (@var{x}, @var{t}, @var{xi}) ! Searches for the enclosing Delaunay convex hull. For @code{@var{t} = ! delaunayn (@var{x})}, finds the index in @var{t} containing the ! points @var{xi}. For points outside the convex hull, @var{idx} is NaN. ! If requested @code{tsearchn} also returns the barycentric coordinates @var{p} ! of the enclosing triangles. ! @seealso{delaunay, delaunayn} @end deftypefn ! voronoi -*- texinfo -*- ! @deftypefn {Function File} {} voronoi (@var{x}, @var{y}) ! @deftypefnx {Function File} {} voronoi (@var{x}, @var{y}, "plotstyle") ! @deftypefnx {Function File} {} voronoi (@var{x}, @var{y}, "plotstyle", @var{options}) ! @deftypefnx {Function File} {[@var{vx}, @var{vy}] =} voronoi (@dots{}) ! plots voronoi diagram of points @code{(@var{x}, @var{y})}. ! The voronoi facets with points at infinity are not drawn. ! [@var{vx}, @var{vy}] = voronoi(...) returns the vertices instead plotting the ! diagram. plot (@var{vx}, @var{vy}) shows the voronoi diagram. ! ! A fourth optional argument, which must be a string, contains extra options ! passed to the underlying qhull command. See the documentation for the ! Qhull library for details. ! @example ! @group ! x = rand (10, 1); ! y = rand (size (x)); ! h = convhull (x, y); ! [vx, vy] = voronoi (x, y); ! plot (vx, vy, "-b", x, y, "o", x(h), y(h), "-g") ! legend ("", "points", "hull"); ! @end group ! @end example ! @seealso{voronoin, delaunay, convhull} ! @end deftypefn ! voronoin ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{C}, @var{F}] =} voronoin (@var{pts}) ! @deftypefnx {Function File} {[@var{C}, @var{F}] =} voronoin (@var{pts}, @var{options}) ! computes n- dimensional voronoi facets. The input matrix @var{pts} ! of size [n, dim] contains n points of dimension dim. ! @var{C} contains the points of the voronoi facets. The list @var{F} ! contains for each facet the indices of the voronoi points. ! A second optional argument, which must be a string, contains extra options ! passed to the underlying qhull command. See the documentation for the ! Qhull library for details. ! @seealso{voronoin, delaunay, convhull} ! @end deftypefn ! __img__ ! Undocumented internal function. ! __img_via_file__ ! Undocumented internal function. ! autumn ! -*- texinfo -*- ! @deftypefn {Function File} {} autumn (@var{n}) ! Create color colormap. This colormap is red through orange to yellow. ! The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} @end deftypefn ! bone -*- texinfo -*- ! @deftypefn {Function File} {} bone (@var{n}) ! Create color colormap. This colormap is a gray colormap with a light ! blue tone. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} @end deftypefn ! brighten -*- texinfo -*- ! @deftypefn {Function File} {@var{map_out} =} brighten (@var{map}, @var{beta}) ! @deftypefnx {Function File} {@var{map_out} =} brighten (@var{h}, @var{beta}) ! @deftypefnx {Function File} {@var{map_out} =} brighten (@var{beta}) ! Darkens or brightens the given colormap. If the @var{map} argument ! is omitted, the function is applied to the current colormap. The first ! argument can also be a valid graphics handle @var{h}, in which case ! @code{brighten} is applied to the colormap associated with this handle. ! Should the resulting colormap @var{map_out} not be assigned, it will be ! written to the current colormap. ! The argument @var{beta} should be a scalar between -1 and 1, ! where a negative value darkens and a positive value brightens ! the colormap. ! @seealso{colormap} @end deftypefn ! colormap -*- texinfo -*- ! @deftypefn {Function File} {} colormap (@var{map}) ! @deftypefnx {Function File} {} colormap ("default") ! Set the current colormap. ! @code{colormap (@var{map})} sets the current colormap to @var{map}. The ! color map should be an @var{n} row by 3 column matrix. The columns ! contain red, green, and blue intensities respectively. All entries ! should be between 0 and 1 inclusive. The new colormap is returned. ! @code{colormap ("default")} restores the default colormap (the ! @code{jet} map with 64 entries). The default colormap is returned. ! With no arguments, @code{colormap} returns the current color map. ! @seealso{jet} @end deftypefn ! cool -*- texinfo -*- ! @deftypefn {Function File} {} cool (@var{n}) ! Create color colormap. The colormap is cyan to magenta. The argument ! @var{n} should be a scalar. If it is omitted, the length of the current ! colormap or 64 is assumed. ! @seealso{colormap} @end deftypefn ! copper -*- texinfo -*- ! @deftypefn {Function File} {} copper (@var{n}) ! Create color colormap. This colormap is black to a light copper tone. ! The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} @end deftypefn ! flag -*- texinfo -*- ! @deftypefn {Function File} {} flag (@var{n}) ! Create color colormap. This colormap cycles through red, white, blue ! and black. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! gmap40 ! -*- texinfo -*- ! @deftypefn {Function File} {} gmap40 (@var{n}) ! Create a color colormap. The colormap is red, green, blue, yellow, ! magneta and cyan. These are the colors that are allowed with patch ! objects using gnuplot 4.0, and so this colormap function is specially ! designed for users of gnuplot 4.0. The argument @var{n} should be ! a scalar. If it is omitted, a length of 6 is assumed. Larger values ! of @var{n} result in a repetition of the above colors ! @seealso{colormap} ! @end deftypefn ! gray ! -*- texinfo -*- ! @deftypefn {Function File} {} gray (@var{n}) ! Return a gray colormap with @var{n} entries corresponding to values from ! 0 to @var{n}-1. The argument @var{n} should be a scalar. If it is ! omitted, the length of the current colormap or 64 is assumed. ! @end deftypefn ! gray2ind ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{img}, @var{map}] =} gray2ind (@var{}) ! Convert a gray scale intensity image to an Octave indexed image. ! @end deftypefn ! hot ! -*- texinfo -*- ! @deftypefn {Function File} {} hot (@var{n}) ! Create color colormap. This colormap is black through dark red, red, ! orange, yellow to white. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! hsv ! -*- texinfo -*- ! @deftypefn {Function File} {} hsv (@var{n}) ! Create color colormap. This colormap is red through yellow, green, cyan, ! blue, magenta to red. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} @end deftypefn ! hsv2rgb -*- texinfo -*- ! @deftypefn {Function File} {@var{rgb_map} =} hsv2rgb (@var{hsv_map}) ! Transform a colormap from the hsv space to the rgb space. ! @seealso{rgb2hsv} @end deftypefn ! image -*- texinfo -*- ! @deftypefn {Function File} {} image (@var{img}) ! @deftypefnx {Function File} {} image (@var{x}, @var{y}, @var{img}) ! Display a matrix as a color image. The elements of @var{x} are indices ! into the current colormap, and the colormap will be scaled so that the ! extremes of @var{x} are mapped to the extremes of teh colormap. ! It first tries to use @code{gnuplot}, then @code{display} from ! @code{ImageMagick}, then @code{xv}, and then @code{xloadimage}. ! The actual program used can be changed using the @code{image_viewer} ! function. ! The axis values corresponding to the matrix elements are specified in ! @var{x} and @var{y}. If you're not using gnuplot 4.2 or later, these ! variables are ignored. ! @seealso{imshow, imagesc, colormap, image_viewer} @end deftypefn ! image_viewer -*- texinfo -*- ! @deftypefn {Function File} {[@var{fcn}, @var{default_zoom}] =} image_viewer (@var{fcn}, @var{default_zoom}) ! Change the program or function used for viewing images and return the ! previous values. ! ! When the @code{image} or @code{imshow} function is called it will ! launch an external program to display the image. The default behaviour ! is to use gnuplot if the installed version supports image viewing, ! and otherwise try the programs @code{display}, @code{xv}, and ! @code{xloadimage}. Using this function it is possible to change that ! behaviour. - When called with one input argument images will be displayed by saving - the image to a file and the system command @var{command} will called - to view the image. The @var{command} must be a string containing - @code{%s} and possibly @code{%f}. The @code{%s} will be replaced by - the filename of the image, and the @code{%f} will (if present) be - replaced by the zoom factor given to the @code{image} function. For example, @example ! image_viewer ("eog %s"); @end example ! changes the image viewer to the @code{eog} program. - With two input arguments, images will be displayed by calling - the function @var{function_handle}. For example, @example ! image_viewer (data, @@my_image_viewer); @end example ! sets the image viewer function to @code{my_image_viewer}. The image ! viewer function is called with @example ! my_image_viewer (@var{x}, @var{y}, @var{im}, @var{zoom}, @var{data}) @end example ! where @var{x} and @var{y} are the axis of the image, @var{im} is the image ! variable, and @var{data} is extra user-supplied data to be passed to ! the viewer function. ! With three input arguments it is possible to change the zooming. ! Some programs (like @code{xloadimage}) require the zoom factor to be ! between 0 and 100, and not 0 and 1 like Octave assumes. This is ! solved by setting the third argument to 100. ! @seealso{image, imshow} @end deftypefn ! imagesc -*- texinfo -*- ! @deftypefn {Function File} {} imagesc (@var{a}) ! @deftypefnx {Function File} {} imagesc (@var{x}, @var{y}, @var{a}) ! @deftypefnx {Function File} {} imagesc (@dots{}, @var{limits}) ! @deftypefnx {Function File} {} imagesc (@var{h}, @dots{}) ! @deftypefnx {Function File} { @var{h} = } imagesc (@dots{}) ! Display a scaled version of the matrix @var{a} as a color image. The ! colormap is scaled so that the entries of the matrix occupy the entire ! colormap. If @var{limits} = [@var{lo}, @var{hi}] are given, then that ! range is set to the 'clim' of the current axes. ! The axis values corresponding to the matrix elements are specified in ! @var{x} and @var{y}, either as pairs giving the minimum and maximum ! values for the respective axes, or as values for each row and column ! of the matrix @var{a}. ! @seealso{image, imshow, clim, caxis} @end deftypefn ! imshow -*- texinfo -*- ! @deftypefn {Function File} {} imshow (@var{im}) ! @deftypefnx {Function File} {} imshow (@var{im}, @var{limits}) ! @deftypefnx {Function File} {} imshow (@var{im}, @var{map}) ! @deftypefnx {Function File} {} imshow (@var{rgb}, @dots{}) ! @deftypefnx {Function File} {} imshow (@var{filename}) ! @deftypefnx {Function File} {} imshow (@dots{}, @var{string_param1}, @var{value1}, @dots{}) ! Display the image @var{im}, where @var{im} can be a 2-dimensional ! (gray-scale image) or a 3-dimensional (RGB image) matrix. ! If @var{limits} is a 2-element vector @code{[@var{low}, @var{high}]}, ! the image is shown using a display range between @var{low} and ! @var{high}. If an empty matrix is passed for @var{limits}, the ! display range is computed as the range between the minimal and the ! maximal value in the image. ! If @var{map} is a valid color map, the image will be shown as an indexed ! image using the supplied color map. ! If a file name is given instead of an image, the file will be read and ! shown. ! If given, the parameter @var{string_param1} has value ! @var{value1}. @var{string_param1} can be any of the following: ! @table @samp ! @item "displayrange" ! @var{value1} is the display range as described above. ! @end table ! @seealso{image, imagesc, colormap, gray2ind, rgb2ind} ! @end deftypefn ! ind2gray ! -*- texinfo -*- ! @deftypefn {Function File} {} ind2gray (@var{x}, @var{map}) ! Convert an Octave indexed image to a gray scale intensity image. ! If @var{map} is omitted, the current colormap is used to determine the ! intensities. ! @seealso{gray2ind, rgb2ntsc, image, colormap} ! @end deftypefn ! ind2rgb ! -*- texinfo -*- ! @deftypefn {Function File} {@var{rgb} =} ind2rgb (@var{x}, @var{map}) ! @deftypefnx {Function File} {[@var{r}, @var{g}, @var{b}] =} ind2rgb (@var{x}, @var{map}) ! Convert an indexed image to red, green, and blue color components. ! If the colormap doesn't contain enough colors, pad it with the ! last color in the map. ! If @var{map} is omitted, the current colormap is used for the conversion. ! @seealso{rgb2ind, image, imshow, ind2gray, gray2ind} ! @end deftypefn ! jet ! -*- texinfo -*- ! @deftypefn {Function File} {} jet (@var{n}) ! Create color colormap. This colormap is dark blue through blue, cyan, ! green, yellow, red to dark red. The argument @var{n} should be a scalar. ! If it is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! loadimage ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{map}] =} loadimage (@var{file}) ! Load an image file and it's associated color map from the specified ! @var{file}. The image must be stored in Octave's image format. ! @seealso{saveimage, load, save} ! @end deftypefn ! ntsc2rgb ! -*- texinfo -*- ! @deftypefn {Function File} {} ntsc2rgb (@var{yiq}) ! Image format conversion. ! @end deftypefn ! ocean ! -*- texinfo -*- ! @deftypefn {Function File} {} ocean (@var{n}) ! Create color colormap. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. @end deftypefn ! pink -*- texinfo -*- ! @deftypefn {Function File} {} pink (@var{n}) ! Create color colormap. This colormap gives a sephia tone on black and ! white images. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} @end deftypefn ! prism -*- texinfo -*- ! @deftypefn {Function File} {} prism (@var{n}) ! Create color colormap. This colormap cycles trough red, orange, yellow, ! green, blue and violet. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} @end deftypefn ! rainbow -*- texinfo -*- ! @deftypefn {Function File} {} rainbow (@var{n}) ! Create color colormap. This colormap is red through orange, yellow, green, ! blue to violet. The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} @end deftypefn ! rgb2hsv -*- texinfo -*- ! @deftypefn {Function File} {@var{hsv_map} =} rgb2hsv (@var{rgb_map}) ! Transform a colormap from the rgb space to the hsv space. ! A color n the RGB space consists of the red, green and blue intensities. ! In the HSV space each color is represented by their hue, saturation ! and value (brightness). Value gives the amount of light in the color. ! Hue describes the dominant wavelength. ! Saturation is the amount of Hue mixed into the color. ! @seealso{hsv2rgb} ! @end deftypefn ! rgb2ind ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{map}] =} rgb2ind (@var{rgb}) ! @deftypefnx {Function File} {[@var{x}, @var{map}] =} rgb2ind (@var{r}, @var{g}, @var{b}) ! Convert and RGB image to an Octave indexed image. ! @seealso{ind2rgb, rgb2ntsc} @end deftypefn ! rgb2ntsc -*- texinfo -*- ! @deftypefn {Function File} {} rgb2ntsc (@var{rgb}) ! Image format conversion. @end deftypefn ! saveimage -*- texinfo -*- ! @deftypefn {Function File} {} saveimage (@var{file}, @var{x}, @var{fmt}, @var{map}) ! Save the matrix @var{x} to @var{file} in image format @var{fmt}. Valid ! values for @var{fmt} are ! @table @code ! @item "img" ! Octave's image format. The current colormap is also saved in the file. ! @item "ppm" ! Portable pixmap format. ! @item "ps" ! PostScript format. Note that images saved in PostScript format can not ! be read back into Octave with loadimage. @end table ! If the fourth argument is supplied, the specified colormap will also be ! saved along with the image. ! Note: if the colormap contains only two entries and these entries are ! black and white, the bitmap ppm and PostScript formats are used. If the ! image is a gray scale image (the entries within each row of the colormap ! are equal) the gray scale ppm and PostScript image formats are used, ! otherwise the full color formats are used. ! @seealso{loadimage, save, load, colormap} ! @end deftypefn ! spring ! -*- texinfo -*- ! @deftypefn {Function File} {} spring (@var{n}) ! Create color colormap. This colormap is magenta to yellow. ! The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! summer ! -*- texinfo -*- ! @deftypefn {Function File} {} summer (@var{n}) ! Create color colormap. This colormap is green to yellow. ! The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! white ! -*- texinfo -*- ! @deftypefn {Function File} {} white (@var{n}) ! Create color colormap. This colormap is completely white. ! The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! winter ! -*- texinfo -*- ! @deftypefn {Function File} {} winter (@var{n}) ! Create color colormap. This colormap is blue to green. ! The argument @var{n} should be a scalar. If it ! is omitted, the length of the current colormap or 64 is assumed. ! @seealso{colormap} ! @end deftypefn ! beep ! -*- texinfo -*- ! @deftypefn {Function File} {} beep () ! Produce a beep from the speaker (or visual bell). ! @seealso{puts, fputs, printf, fprintf} @end deftypefn ! __norm__ Undocumented internal function. ! commutation_matrix ! -*- texinfo -*- ! @deftypefn {Function File} {} commutation_matrix (@var{m}, @var{n}) ! Return the commutation matrix ! @iftex ! @tex ! $K_{m,n}$ ! @end tex ! @end iftex ! @ifinfo ! K(m,n) ! @end ifinfo ! which is the unique ! @iftex ! @tex ! $m n \times m n$ ! @end tex ! @end iftex ! @ifinfo ! @var{m}*@var{n} by @var{m}*@var{n} ! @end ifinfo ! matrix such that ! @iftex ! @tex ! $K_{m,n} \cdot {\rm vec} (A) = {\rm vec} (A^T)$ ! @end tex ! @end iftex ! @ifinfo ! @math{K(m,n) * vec(A) = vec(A')} ! @end ifinfo ! for all ! @iftex ! @tex ! $m\times n$ ! @end tex ! @end iftex ! @ifinfo ! @math{m} by @math{n} ! @end ifinfo ! matrices ! @iftex ! @tex ! $A$. ! @end tex ! @end iftex ! @ifinfo ! @math{A}. ! @end ifinfo ! ! If only one argument @var{m} is given, ! @iftex ! @tex ! $K_{m,m}$ ! @end tex ! @end iftex ! @ifinfo ! @math{K(m,m)} ! @end ifinfo ! is returned. ! ! See Magnus and Neudecker (1988), Matrix differential calculus with ! applications in statistics and econometrics. ! @end deftypefn ! cond ! -*- texinfo -*- ! @deftypefn {Function File} {} cond (@var{a},@var{p}) ! Compute the @var{p}-norm condition number of a matrix. @code{cond (@var{a})} is ! defined as @code{norm (@var{a}, @var{p}) * norm (inv (@var{a}), @var{p})}. ! By default @code{@var{p}=2} is used which implies a (relatively slow) ! singular value decomposition. Other possible selections are ! @code{@var{p}= 1, Inf, inf, 'Inf', 'fro'} which are generally faster. ! @seealso{norm, inv, det, svd, rank} ! @end deftypefn ! condest -*- texinfo -*- ! @deftypefn {Function File} {[@var{est}, @var{v}] =} condest (@var{a}, @var{t}) ! @deftypefnx {Function File} {[@var{est}, @var{v}] =} condest (@var{a}, @var{solve}, @var{solve_t}, @var{t}) ! @deftypefnx {Function File} {[@var{est}, @var{v}] =} condest (@var{apply}, @var{apply_t}, @var{solve}, @var{solve_t}, @var{n}, @var{t}) ! ! Estimate the 1-norm condition number of a matrix matrix @var{A} ! using @var{t} test vectors using a randomized 1-norm estimator. ! If @var{t} exceeds 5, then only 5 test vectors are used. ! ! If the matrix is not explicit, e.g. when estimating the condition ! number of @var{a} given an LU factorization, @code{condest} uses the ! following functions: ! ! @table @var ! @item apply ! @code{A*x} for a matrix @code{x} of size @var{n} by @var{t}. ! @item apply_t ! @code{A'*x} for a matrix @code{x} of size @var{n} by @var{t}. ! @item solve ! @code{A \ b} for a matrix @code{b} of size @var{n} by @var{t}. ! @item solve_t ! @code{A' \ b} for a matrix @code{b} of size @var{n} by @var{t}. ! @end table ! The implicit version requires an explicit dimension @var{n}. ! @code{condest} uses a randomized algorithm to approximate ! the 1-norms. ! @code{condest} returns the 1-norm condition estimate @var{est} and ! a vector @var{v} satisfying @code{norm (A*v, 1) == norm (A, 1) * norm ! (@var{v}, 1) / @var{est}}. When @var{est} is large, @var{v} is an ! approximate null vector. ! References: ! @itemize ! @item Nicholas J. Higham and Françoise Tisseur, "A Block Algorithm ! for Matrix 1-Norm Estimation, with an Application to 1-Norm ! Pseudospectra." SIMAX vol 21, no 4, pp 1185-1201. ! @url{http://dx.doi.org/10.1137/S0895479899356080} ! @item Nicholas J. Higham and Françoise Tisseur, "A Block Algorithm ! for Matrix 1-Norm Estimation, with an Application to 1-Norm ! Pseudospectra." @url{http://citeseer.ist.psu.edu/223007.html} ! @end itemize ! @seealso{norm, cond, onenormest} @end deftypefn ! cross -*- texinfo -*- ! @deftypefn {Function File} {} cross (@var{x}, @var{y}, @var{dim}) ! Computes the vector cross product of the two 3-dimensional vectors ! @var{x} and @var{y}. @example @group ! cross ([1,1,0], [0,1,1]) ! @result{} [ 1; -1; 1 ] @end group @end example ! If @var{x} and @var{y} are matrices, the cross product is applied ! along the first dimension with 3 elements. The optional argument ! @var{dim} is used to force the cross product to be calculated along ! the dimension defined by @var{dim}. ! @end deftypefn ! dmult ! -*- texinfo -*- ! @deftypefn {Function File} {} dmult (@var{a}, @var{b}) ! If @var{a} is a vector of length @code{rows (@var{b})}, return ! @code{diag (@var{a}) * @var{b}} (but computed much more efficiently). @end deftypefn ! dot -*- texinfo -*- ! @deftypefn {Function File} {} dot (@var{x}, @var{y}, @var{dim}) ! Computes the dot product of two vectors. If @var{x} and @var{y} ! are matrices, calculate the dot-product along the first ! non-singleton dimension. If the optional argument @var{dim} is ! given, calculate the dot-product along this dimension. @end deftypefn ! duplication_matrix -*- texinfo -*- ! @deftypefn {Function File} {} duplication_matrix (@var{n}) ! Return the duplication matrix ! @iftex ! @tex ! $D_n$ ! @end tex ! @end iftex ! @ifinfo ! @math{Dn} ! @end ifinfo ! which is the unique ! @iftex ! @tex ! $n^2 \times n(n+1)/2$ ! @end tex ! @end iftex ! @ifinfo ! @math{n^2} by @math{n*(n+1)/2} ! @end ifinfo ! matrix such that ! @iftex ! @tex ! $D_n * {\rm vech} (A) = {\rm vec} (A)$ ! @end tex ! @end iftex ! @ifinfo ! @math{Dn vech (A) = vec (A)} ! @end ifinfo ! for all symmetric ! @iftex ! @tex ! $n \times n$ ! @end tex ! @end iftex ! @ifinfo ! @math{n} by @math{n} ! @end ifinfo ! matrices ! @iftex ! @tex ! $A$. ! @end tex ! @end iftex ! @ifinfo ! @math{A}. ! @end ifinfo ! See Magnus and Neudecker (1988), Matrix differential calculus with ! applications in statistics and econometrics. ! @end deftypefn ! housh ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{housv}, @var{beta}, @var{zer}] =} housh (@var{x}, @var{j}, @var{z}) ! Compute Householder reflection vector @var{housv} to reflect @var{x} ! to be the jth column of identity, i.e., @example @group ! (I - beta*housv*housv')x = norm(x)*e(j) if x(1) < 0, ! (I - beta*housv*housv')x = -norm(x)*e(j) if x(1) >= 0 @end group @end example ! @noindent ! Inputs ! ! @table @var ! @item x ! vector ! @item j ! index into vector ! @item z ! threshold for zero (usually should be the number 0) ! @end table ! ! @noindent ! Outputs (see Golub and Van Loan): ! @table @var ! @item beta ! If beta = 0, then no reflection need be applied (zer set to 0) ! @item housv ! householder vector ! @end table @end deftypefn ! krylov -*- texinfo -*- ! @deftypefn {Function File} {[@var{u}, @var{h}, @var{nu}] =} krylov (@var{a}, @var{v}, @var{k}, @var{eps1}, @var{pflg}) ! Construct an orthogonal basis @var{u} of block Krylov subspace @example ! [v a*v a^2*v ... a^(k+1)*v] @end example @noindent ! Using Householder reflections to guard against loss of orthogonality. ! ! If @var{v} is a vector, then @var{h} contains the Hessenberg matrix ! such that @code{a*u == u*h+rk*ek'}, in which @code{rk = ! a*u(:,k)-u*h(:,k)}, and @code{ek'} is the vector ! @code{[0, 0, @dots{}, 1]} of length @code{k}. Otherwise, @var{h} is ! meaningless. ! ! If @var{v} is a vector and @var{k} is greater than ! @code{length(A)-1}, then @var{h} contains the Hessenberg matrix such ! that @code{a*u == u*h}. ! The value of @var{nu} is the dimension of the span of the krylov ! subspace (based on @var{eps1}). ! If @var{b} is a vector and @var{k} is greater than @var{m-1}, then ! @var{h} contains the Hessenberg decomposition of @var{a}. ! The optional parameter @var{eps1} is the threshold for zero. The ! default value is 1e-12. ! If the optional parameter @var{pflg} is nonzero, row pivoting is used ! to improve numerical behavior. The default value is 0. ! Reference: Hodel and Misra, "Partial Pivoting in the Computation of ! Krylov Subspaces", to be submitted to Linear Algebra and its ! Applications ! @end deftypefn ! krylovb ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{u}, @var{ucols}] =} krylovb (@var{a}, @var{v}, @var{k}, @var{eps1}, @var{pflg}) ! See @code{krylov}. ! @end deftypefn ! logm ! -*- texinfo -*- ! @deftypefn {Function File} {} logm (@var{a}) ! Compute the matrix logarithm of the square matrix @var{a}. Note that ! this is currently implemented in terms of an eigenvalue expansion and ! needs to be improved to be more robust. ! @end deftypefn ! null ! -*- texinfo -*- ! @deftypefn {Function File} {} null (@var{a}, @var{tol}) ! Return an orthonormal basis of the null space of @var{a}. ! The dimension of the null space is taken as the number of singular ! values of @var{a} not greater than @var{tol}. If the argument @var{tol} ! is missing, it is computed as @example ! max (size (@var{a})) * max (svd (@var{a})) * eps @end example - @end deftypefn - onenormest - -*- texinfo -*- - @deftypefn {Function File} {[@var{est}, @var{v}, @var{w}, @var{iter}] =} onenormest (@var{a}, @var{t}) - @deftypefnx {Function File} {[@var{est}, @var{v}, @var{w}, @var{iter}] =} onenormest (@var{apply}, @var{apply_t}, @var{n}, @var{t}) ! Apply Higham and Tisseur's randomized block 1-norm estimator to ! matrix @var{a} using @var{t} test vectors. If @var{t} exceeds 5, then ! only 5 test vectors are used. ! If the matrix is not explicit, e.g. when estimating the norm of ! @code{inv (@var{A})} given an LU factorization, @code{onenormest} applies ! @var{A} and its conjugate transpose through a pair of functions ! @var{apply} and @var{apply_t}, respectively, to a dense matrix of size ! @var{n} by @var{t}. The implicit version requires an explicit dimension ! @var{n}. ! Returns the norm estimate @var{est}, two vectors @var{v} and ! @var{w} related by norm ! @code{(@var{w}, 1) = @var{est} * norm (@var{v}, 1)}, ! and the number of iterations @var{iter}. The number of ! iterations is limited to 10 and is at least 2. ! References: ! @itemize ! @item Nicholas J. Higham and Françoise Tisseur, "A Block Algorithm ! for Matrix 1-Norm Estimation, with an Application to 1-Norm ! Pseudospectra." SIMAX vol 21, no 4, pp 1185-1201. ! @url{http://dx.doi.org/10.1137/S0895479899356080} ! @item Nicholas J. Higham and Françoise Tisseur, "A Block Algorithm ! for Matrix 1-Norm Estimation, with an Application to 1-Norm ! Pseudospectra." @url{http://citeseer.ist.psu.edu/223007.html} ! @end itemize ! @seealso{condest, norm, cond} ! @end deftypefn ! orth ! -*- texinfo -*- ! @deftypefn {Function File} {} orth (@var{a}, @var{tol}) ! Return an orthonormal basis of the range space of @var{a}. ! The dimension of the range space is taken as the number of singular ! values of @var{a} greater than @var{tol}. If the argument @var{tol} is ! missing, it is computed as ! @example ! max (size (@var{a})) * max (svd (@var{a})) * eps ! @end example ! @end deftypefn ! qzhess ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{aa}, @var{bb}, @var{q}, @var{z}] =} qzhess (@var{a}, @var{b}) ! Compute the Hessenberg-triangular decomposition of the matrix pencil ! @code{(@var{a}, @var{b})}, returning ! @code{@var{aa} = @var{q} * @var{a} * @var{z}}, ! @code{@var{bb} = @var{q} * @var{b} * @var{z}}, with @var{q} and @var{z} ! orthogonal. For example, ! @example ! @group ! [aa, bb, q, z] = qzhess ([1, 2; 3, 4], [5, 6; 7, 8]) ! @result{} aa = [ -3.02244, -4.41741; 0.92998, 0.69749 ] ! @result{} bb = [ -8.60233, -9.99730; 0.00000, -0.23250 ] ! @result{} q = [ -0.58124, -0.81373; -0.81373, 0.58124 ] ! @result{} z = [ 1, 0; 0, 1 ] ! @end group ! @end example ! The Hessenberg-triangular decomposition is the first step in ! Moler and Stewart's QZ decomposition algorithm. ! Algorithm taken from Golub and Van Loan, @cite{Matrix Computations, 2nd ! edition}. ! @end deftypefn ! rank ! -*- texinfo -*- ! @deftypefn {Function File} {} rank (@var{a}, @var{tol}) ! Compute the rank of @var{a}, using the singular value decomposition. ! The rank is taken to be the number of singular values of @var{a} that ! are greater than the specified tolerance @var{tol}. If the second ! argument is omitted, it is taken to be @example ! tol = max (size (@var{a})) * sigma(1) * eps; @end example ! @noindent ! where @code{eps} is machine precision and @code{sigma(1)} is the largest ! singular value of @var{a}. ! @end deftypefn ! rref ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{r}, @var{k}] =} rref (@var{a}, @var{tol}) ! ! Returns the reduced row echelon form of @var{a}. @var{tol} defaults ! to @code{eps * max (size (@var{a})) * norm (@var{a}, inf)}. ! Called with two return arguments, @var{k} returns the vector of ! "bound variables", which are those columns on which elimination ! has been performed. ! @end deftypefn ! trace ! -*- texinfo -*- ! @deftypefn {Function File} {} trace (@var{a}) ! Compute the trace of @var{a}, @code{sum (diag (@var{a}))}. ! @end deftypefn ! vec ! -*- texinfo -*- ! @deftypefn {Function File} {} vec (@var{x}) ! Return the vector obtained by stacking the columns of the matrix @var{x} ! one above the other. ! @end deftypefn ! vech ! -*- texinfo -*- ! @deftypefn {Function File} {} vech (@var{x}) ! Return the vector obtained by eliminating all supradiagonal elements of ! the square matrix @var{x} and stacking the result one column above the ! other. ! @end deftypefn ! ans ! -*- texinfo -*- ! @defvr {Automatic Variable} ans ! The most recently computed result that was not ! explicitly assigned to a variable. For example, after the expression @example ! 3^2 + 4^2 @end example ! @noindent ! is evaluated, the value returned by @code{ans} is 25. ! @end defvr ! bincoeff -*- texinfo -*- ! @deftypefn {Mapping Function} {} bincoeff (@var{n}, @var{k}) ! Return the binomial coefficient of @var{n} and @var{k}, defined as @iftex @tex ! $$ ! {n \choose k} = {n (n-1) (n-2) \cdots (n-k+1) \over k!} ! $$ @end tex @end iftex ! @ifinfo @example ! @group ! / \ ! | n | n (n-1) (n-2) ... (n-k+1) ! | | = ------------------------- ! | k | k! ! \ / ! @end group @end example - @end ifinfo ! For example, @example ! @group ! bincoeff (5, 2) ! @result{} 10 ! @end group @end example @end deftypefn ! bug_report ! -*- texinfo -*- ! @deftypefn {Function File} {} bug_report () ! Have Octave create a bug report template file, invoke your favorite ! editor, and submit the report to the bug-octave mailing list when ! you are finished editing. ! @end deftypefn ! bunzip2 ! -*- texinfo -*- ! @deftypefn {Function File} {} bunzip2 (@var{bzfile}, @var{dir}) ! Unpack the bzip2 archive @var{bzfile} to the directory @var{dir}. If ! @var{dir} is not specified, it defaults to the current directory. ! @seealso{unpack, bzip2, tar, untar, gzip, gunzip, zip, unzip} ! @end deftypefn ! cast -*- texinfo -*- ! @deftypefn {Function File} {} cast (@var{val}, @var{type}) ! Convert @var{val} to data type @var{type}. ! @seealso{int8, uint8, int16, uint16, int32, uint32, int64, uint64, double} @end deftypefn ! comma ! -*- texinfo -*- ! @deffn {Operator} , ! Array index, function argument, or command separator. ! @seealso{semicolon} ! @end deffn ! compare_versions -*- texinfo -*- ! @deftypefn {Function File} {} compare_versions (@var{v1}, @var{v2}, @var{operator}) ! Compares to version strings using the given @var{operator}. ! This function assumes that versions @var{v1} and @var{v2} are ! arbitrarily long strings made of numeric and period characters ! possibly followed by an arbitrary string (e.g. "1.2.3", "0.3", ! "0.1.2+", or "1.2.3.4-test1"). ! The version is first split into the numeric and the character parts ! then the parts are padded to be the same length (i.e. "1.1" would be ! padded to be like "1.1.0" when being compared with "1.1.1", and ! separately, the character parts of the strings are padded with ! nulls). ! The operator can be any logical operator from the set ! ! @itemize @bullet ! @item ! "==" ! equal ! @item ! "<" ! less than ! @item ! "<=" ! less than or equal to ! @item ! ">" ! greater than ! @item ! ">=" ! greater than or equal to ! @item ! "!=" ! not equal ! @item ! "~=" ! not equal ! @end itemize ! ! Note that version "1.1-test2" would compare as greater than ! "1.1-test10". Also, since the numeric part is compared first, "a" ! compares less than "1a" because the second string starts with a ! numeric part even though double("a") is greater than double("1"). ! @end deftypefn ! computer ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{c}, @var{maxsize}, @var{endian}] =} computer () ! Print or return a string of the form @var{cpu}-@var{vendor}-@var{os} ! that identifies the kind of computer Octave is running on. If invoked ! with an output argument, the value is returned instead of printed. For ! example, @example @group ! computer () ! @print{} i586-pc-linux-gnu ! ! x = computer () ! @result{} x = "i586-pc-linux-gnu" @end group @end example ! If two output arguments are requested, also return the maximum number ! of elements for an array. ! ! If three output arguments are requested, also return the byte order ! of the current system as a character (@code{"B"} for big-endian or ! @code{"L"} for little-endian). @end deftypefn ! copyfile -*- texinfo -*- ! @deftypefn {Function File} {[@var{status}, @var{msg}, @var{msgid}] =} copyfile (@var{f1}, @var{f2}, @var{force}) ! Copy the file @var{f1} to the new name @var{f2}. The name @var{f1} ! may contain globbing patterns. If @var{f1} expands to multiple file ! names, @var{f2} must be a directory. If @var{force} is given and equals ! the string "f" the copy operation will be forced. ! If successful, @var{status} is 1, with @var{msg} and @var{msgid} empty\n\ ! character strings. Otherwise, @var{status} is 0, @var{msg} contains a\n\ ! system-dependent error message, and @var{msgid} contains a unique\n\ ! message identifier.\n\ ! @seealso{glob, movefile} @end deftypefn ! delete -*- texinfo -*- ! @deftypefn {Function File} {} delete (@var{file}) ! @deftypefnx {Function File} {} delete (@var{h}) ! Delete the named file or figure handle. @end deftypefn ! dir -*- texinfo -*- ! @deftypefn {Function File} {} dir (@var{directory}) ! @deftypefnx {Function File} {[@var{list}] =} dir (@var{directory}) ! Display file listing for directory @var{directory}. If a return ! value is requested, return a structure array with the fields @example @group ! name ! bytes ! date ! isdir ! statinfo @end group @end example ! @noindent ! in which @code{statinfo} is the structure returned from @code{stat}. ! ! If @var{directory} is not a directory, return information about the ! named @var{filename}. @var{directory} may be a list of directories ! specified either by name or with wildcard characters (like * and ?) ! which will be expanded with glob. ! Note that for symbolic links, @code{dir} returns information about ! the file that a symbolic link points to instead of the link itself. ! However, if the link points to a nonexistent file, @code{dir} returns ! information about the link. ! @seealso{ls, stat, lstat, readdir, glob, filesep} @end deftypefn ! doc -*- texinfo -*- ! @deftypefn {Command} doc @var{function_name} ! Display documentation for the function @var{function_name} ! directly from an on-line version of ! the printed manual, using the GNU Info browser. If invoked without ! any arguments, the manual is shown from the beginning. ! For example, the command @kbd{doc rand} starts the GNU Info browser ! at this node in the on-line version of the manual. ! Once the GNU Info browser is running, help for using it is available ! using the command @kbd{C-h}. ! @seealso{help} ! @end deftypefn ! dos ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{status}, @var{text}] =} dos (@var{command}) ! @deftypefnx {Function File} {[@var{status}, @var{text}] =} dos (@var{command}, "-echo") ! Execute a system command if running under a Windows-like operating ! system, otherwise do nothing. Return the exit status of the program ! in @var{status} and any output sent to the standard output in ! @var{text}. If the optional second argument @code{"-echo"} is given, ! then also send the output from the command to the standard output. ! @seealso{unix, isunix, ispc, system} ! @end deftypefn ! dump_prefs ! -*- texinfo -*- ! @deftypefn {Function File} {} dump_prefs (@var{file}) ! Have Octave dump all the current user preference variables to ! @var{file} in a format that can be parsed by Octave later. If ! @var{file} is omitted, the listing is printed to stdout. ! @end deftypefn ! edit ! -*- texinfo -*- ! @deftypefn {Command} edit @var{name} ! @deftypefnx {Command} edit @var{field} @var{value} ! @deftypefnx {Command} @var{value} = edit get @var{field} ! Edit the named function, or change editor settings. ! If @code{edit} is called with the name of a file or function as ! its argument it will be opened in a text editor. ! @itemize @bullet ! @item ! If the function @var{name} is available in a file on your path and ! that file is modifiable, then it will be edited in place. If it ! is a system function, then it will first be copied to the directory ! @code{HOME} (see further down) and then edited. ! @item ! If @var{name} is the name of a function defined in the interpreter but ! not in an m-file, then an m-file will be created in @code{HOME} ! to contain that function along with its current definition. ! @item ! If @code{name.cc} is specified, then it will search for @code{name.cc} ! in the path and try to modify it, otherwise it will create a new ! @file{.cc} file in @code{HOME}. If @var{name} happens to be an ! m-file or interpreter defined function, then the text of that ! function will be inserted into the .cc file as a comment. ! @item ! If @var{name.ext} is on your path then it will be editted, otherwise ! the editor will be started with @file{HOME/name.ext} as the ! filename. If @file{name.ext} is not modifiable, it will be copied to ! @code{HOME} before editing. ! @strong{WARNING!} You may need to clear name before the new definition ! is available. If you are editing a .cc file, you will need ! to mkoctfile @file{name.cc} before the definition will be available. ! @end itemize ! If @code{edit} is called with @var{field} and @var{value} variables, ! the value of the control field @var{field} will be @var{value}. ! If an output argument is requested and the first argument is @code{get} ! then @code{edit} will return the value of the control field @var{field}. ! The following control fields are used: ! @table @samp ! @item editor ! This is the editor to use to modify the functions. By default it uses ! Octave's @code{EDITOR} built-in function, which comes from ! @code{getenv("EDITOR")} and defaults to @code{emacs}. Use @code{%s} ! In place of the function name. For example, ! @table @samp ! @item [EDITOR, " %s"] ! Use the editor which Octave uses for @code{bug_report}. ! @item "xedit %s &" ! pop up simple X11 editor in a separate window ! @item "gnudoit -q \"(find-file \\\"%s\\\")\"" ! Send it to current Emacs; must have @code{(gnuserv-start)} in @file{.emacs}. ! @end table - On cygwin, you will need to convert the cygwin path to a windows - path if you are using a native Windows editor. For example @example ! '"C:/Program Files/Good Editor/Editor.exe" "$(cygpath -wa %s)"' @end example ! @item home ! This is the location of user local m-files. Be be sure it is in your ! path. The default is @file{~/octave}. ! @item author ! This is the name to put after the "## Author:" field of new functions. ! By default it guesses from the @code{gecos} field of password database. ! @item email ! This is the e-mail address to list after the name in the author field. ! By default it guesses @code{<$LOGNAME@@$HOSTNAME>}, and if @code{$HOSTNAME} ! is not defined it uses @code{uname -n}. You probably want to override this. ! Be sure to use @code{} as your format. ! @item license ! @table @samp ! @item gpl ! GNU General Public License (default). ! @item bsd ! BSD-style license without advertising clause. ! @item pd ! Public domain. ! @item "text" ! Your own default copyright and license. @end table ! @item mode ! This value determines whether the editor should be started in async mode ! or sync mode. Set it to "async" to start the editor in async mode. The ! default is "sync" (see also "system"). ! Unless you specify @samp{pd}, edit will prepend the copyright statement ! with "Copyright (C) yyyy Function Author". @end table - @end deftypefn - fileattrib - -*- texinfo -*- - @deftypefn {Function File} {[@var{status}, @var{msg}, @var{msgid}] =} fileattrib (@var{file}) - Return information about @var{file}. ! If successful, @var{status} is 1, with @var{result} containing a ! structure with the following fields: @table @code ! @item Name ! Full name of @var{file}. ! @item archive ! True if @var{file} is an archive (Windows). ! @item system ! True if @var{file} is a system file (Windows). ! @item hidden ! True if @var{file} is a hidden file (Windows). ! @item directory ! True if @var{file} is a directory. ! @item UserRead ! @itemx GroupRead ! @itemx OtherRead ! True if the user (group; other users) has read permission for ! @var{file}. ! @item UserWrite ! @itemx GroupWrite ! @itemx OtherWrite ! True if the user (group; other users) has write permission for ! @var{file}. ! @item UserExecute ! @itemx GroupExecute ! @itemx OtherExecute ! True if the user (group; other users) has execute permission for ! @var{file}. @end table ! If an attribute does not apply (i.e., archive on a Unix system) then ! the field is set to NaN. ! With no input arguments, return information about the current ! directory. ! If @var{file} contains globbing characters, return information about ! all the matching files. ! @seealso{glob} @end deftypefn ! fileparts -*- texinfo -*- ! @deftypefn {Function File} {[@var{dir}, @var{name}, @var{ext}, @var{ver}] =} fileparts (@var{filename}) ! Return the directory, name, extension, and version components of ! @var{filename}. ! @seealso{fullfile} @end deftypefn ! flops -*- texinfo -*- ! @deftypefn {Function File} {} flops () ! This function is provided for @sc{Matlab} compatibility, but it doesn't ! actually do anything. @end deftypefn ! fullfile -*- texinfo -*- ! @deftypefn {Function File} {@var{filename} =} fullfile (@var{dir1}, @var{dir2}, @dots{}, @var{file}) ! Return a complete filename constructed from the given components. ! @seealso{fileparts} ! @end deftypefn ! getfield ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{v1}, @dots{}] =} getfield (@var{s}, @var{key}, @dots{}) ! Extract fields from a structure. For example ! ! @example ! @group ! ss(1,2).fd(3).b=5; ! getfield (ss, @{1,2@}, "fd", @{3@}, "b") ! @result{} ans = 5 ! @end group ! @end example ! Note that the function call in the previous example is equivalent to ! the expression ! @example ! i1= @{1,2@}; i2= "fd"; i3= @{3@}; i4= "b"; ! ss(i1@{:@}).(i2)(i3@{:@}).(i4) ! @end example ! @seealso{setfield, rmfield, isfield, isstruct, fieldnames, struct} ! @end deftypefn ! gunzip ! -*- texinfo -*- ! @deftypefn {Function File} {} gunzip (@var{gzfile}, @var{dir}) ! Unpack the gzip archive @var{gzfile} to the directory @var{dir}. If ! @var{dir} is not specified, it defaults to the current directory. If ! the @var{gzfile} is a directory, all files in the directory will be ! recursively gunzipped. ! @seealso{unpack, bzip2, bunzip2, tar, untar, gzip, gunzip, zip, unzip} @end deftypefn ! gzip -*- texinfo -*- ! @deftypefn {Function File} {@var{entries} =} gzip (@var{files}) ! @deftypefnx {Function File} {@var{entries} =} gzip (@var{files}, @var{outdir}) ! Compress the list of files and/or directories specified in @var{files}. ! Each file is compressed separately and a new file with a '.gz' extension ! is created. The original file is not touched. If @var{rootdir} is defined ! the compressed versions of the files are placed in this directory. ! @seealso{gunzip, zip, tar} @end deftypefn ! inputname -*- texinfo -*- ! @deftypefn {Function File} {} inputname (@var{n}) ! Return the text defining @var{n}-th input to the function. @end deftypefn ! ismac -*- texinfo -*- ! @deftypefn {Function File} {} ismac () ! Return 1 if Octave is running on a Mac OS X system and 0 otherwise. ! @seealso{ispc, isunix} @end deftypefn ! ispc -*- texinfo -*- ! @deftypefn {Function File} {} ispc () ! Return 1 if Octave is running on a Windows system and 0 otherwise. ! @seealso{ismac, isunix} @end deftypefn ! isunix -*- texinfo -*- ! @deftypefn {Function File} {} isunix () ! Return 1 if Octave is running on a Unix-like system and 0 otherwise. ! @seealso{ismac, ispc} @end deftypefn ! license -*- texinfo -*- ! @deftypefn {Function File} {} license ! Display the license of Octave. ! ! @deftypefnx {Function File} {} license ("inuse") ! Display a list of packages currently being used. ! ! @deftypefnx {Function File} {@var{retval} =} license ("inuse") ! Return a structure containing the fields @code{feature} and @code{user}. ! ! @deftypefnx {Function File} {@var{retval} =} license ("test", @var{feature}) ! Return 1 if a license exists for the product identified by the string ! @var{feature} and 0 otherwise. The argument @var{feature} is case ! insensitive and only the first 27 characters are checked. ! ! @deftypefnx {Function File} {} license ("test", @var{feature}, @var{toggle}) ! Enable or disable license testing for @var{feature}, depending on ! @var{toggle}, which may be one of: ! ! @table @samp ! @item "enable" ! Future tests for the specified license of @var{feature} are conducted ! as usual. ! @item "disable" ! Future tests for the specified license of @var{feature} return 0. ! @end table ! @deftypefnx {Function File} {@var{retval} =} license ("checkout", @var{feature}) ! Check out a license for @var{feature}, returning 1 on success and 0 ! on failure. ! This function is provided for compatibility with @sc{Matlab}. ! @seealso{ver, version} ! @end deftypefn ! list_primes ! -*- texinfo -*- ! @deftypefn {Function File} {} list_primes (@var{n}) ! List the first @var{n} primes. If @var{n} is unspecified, the first ! 30 primes are listed. ! The algorithm used is from page 218 of the @iftex @tex ! {\TeX}book. @end tex @end iftex @ifinfo ! TeXbook. @end ifinfo @end deftypefn ! ls -*- texinfo -*- ! @deffn {Command} ls options ! List directory contents. For example, @example ! ls -l ! @print{} total 12 ! @print{} -rw-r--r-- 1 jwe users 4488 Aug 19 04:02 foo.m ! @print{} -rw-r--r-- 1 jwe users 1315 Aug 17 23:14 bar.m @end example ! The @code{dir} and @code{ls} commands are implemented by calling your ! system's directory listing command, so the available options may vary ! from system to system. ! @seealso{dir, stat, readdir, glob, filesep, ls_command} ! @end deffn ! ls_command ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{old_cmd} =} ls_command (@var{cmd}) ! Set or return the shell command used by Octave's @code{ls} command. ! The value of @var{cmd} must be a character string. ! With no arguments, simply return the previous value. ! @seealso{ls} @end deftypefn ! menu -*- texinfo -*- ! @deftypefn {Function File} {} menu (@var{title}, @var{opt1}, @dots{}) ! Print a title string followed by a series of options. Each option will ! be printed along with a number. The return value is the number of the ! option selected by the user. This function is useful for interactive ! programs. There is no limit to the number of options that may be passed ! in, but it may be confusing to present more than will fit easily on one ! screen. ! @seealso{disp, printf, input} @end deftypefn ! mex -*- texinfo -*- ! @deftypefn {Function File} {} mex [options] file @dots{} ! Compile source code written in C, C++, or Fortran, to a MEX file. ! This is equivalent to @code{mkoctfile --mex [options] file}. ! @seealso{mkoctfile} @end deftypefn ! mexext -*- texinfo -*- ! @deftypefn {Function File} {} mexext () ! Return the filename extension used for MEX files. @end deftypefn ! mkoctfile -*- texinfo -*- ! @deftypefn {Function File} {} mkoctfile [-options] file @dots{} ! ! The @code{mkoctfile} function compiles source code written in C, ! C++, or Fortran. Depending on the options used with @code{mkoctfile}, the ! compiled code can be called within Octave or can be used as a stand-alone ! application. ! @code{mkoctfile} can be called from the shell prompt or from the Octave ! prompt. ! @code{mkoctfile} accepts the following options, all of which are optional ! except for the file name of the code you wish to compile: ! @table @samp ! @item -I DIR ! Add the include directory DIR to compile commands. ! @item -D DEF ! Add the definition DEF to the compiler call. ! @item -l LIB ! Add the library LIB to the link command. ! ! @item -L DIR ! Add the library directory DIR to the link command. ! @item -M ! @itemx --depend ! Generate dependency files (.d) for C and C++ source files. ! ! @item -c ! Compile but do not link. ! @item -g ! Enable debugging options for compilers. ! @item -o FILE ! @itemx --output FILE ! Output file name. Default extension is .oct ! (or .mex if --mex is specified) unless linking ! a stand-alone executable. ! @item -p VAR ! @itemx --print VAR ! Print the configuration variable VAR. Recognized variables are: ! @example ! ALL_CFLAGS FFTW_LIBS ! ALL_CXXFLAGS FLIBS ! ALL_FFLAGS FPICFLAG ! ALL_LDFLAGS INCFLAGS ! BLAS_LIBS LDFLAGS ! CC LD_CXX ! CFLAGS LD_STATIC_FLAG ! CPICFLAG LFLAGS ! CPPFLAGS LIBCRUFT ! CXX LIBOCTAVE ! CXXFLAGS LIBOCTINTERP ! CXXPICFLAG LIBREADLINE ! DEPEND_EXTRA_SED_PATTERN LIBS ! DEPEND_FLAGS OCTAVE_LIBS ! DL_LD RDYNAMIC_FLAG ! DL_LDFLAGS RLD_FLAG ! F2C SED ! F2CFLAGS XTRA_CFLAGS ! F77 XTRA_CXXFLAGS ! FFLAGS @end example ! @item --link-stand-alone ! Link a stand-alone executable file. ! ! @item --mex ! Assume we are creating a MEX file. Set the default output extension ! to ".mex". ! @item -s ! @itemx --strip ! Strip the output file. ! @item -v ! @itemx --verbose ! Echo commands as they are executed. ! @item file ! The file to compile or link. Recognised file types are @example ! .c C source ! .cc C++ source ! .C C++ source ! .cpp C++ source ! .f Fortran source ! .F Fortran source ! .o object file @end example @end table @end deftypefn ! movefile -*- texinfo -*- ! @deftypefn {Function File} {[@var{status}, @var{msg}, @var{msgid}] =} movefile (@var{f1}, @var{f2}) ! Move the file @var{f1} to the new name @var{f2}. The name @var{f1} may contain globbing patterns. If @var{f1} expands to multiple file ! names, @var{f2} must be a directory. If successful, @var{status} is 1, with @var{msg} and @var{msgid} empty\n\ character strings. Otherwise, @var{status} is 0, @var{msg} contains a\n\ system-dependent error message, and @var{msgid} contains a unique\n\ message identifier.\n\ ! @seealso{glob} @end deftypefn ! news -*- texinfo -*- ! @deftypefn {Function File} {} news () ! Display the current NEWS file for Octave. ! @end deftypefn ! orderfields ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{t}, @var{p}] =} orderfields (@var{s1}, @var{s2}) ! Return a struct with fields arranged alphabetically or as specified ! by @var{s2} and a corresponding permutation vector. ! ! Given one struct, arrange field names in @var{s1} alphabetically. ! ! Given two structs, arrange field names in @var{s1} as they appear ! in @var{s2}. The second argument may also specify the order in ! a permutation vector or a cell array of strings. ! ! @seealso{getfield, rmfield, isfield, isstruct, fieldnames, struct} ! @end deftypefn ! pack ! -*- texinfo -*- ! @deftypefn {Function File} {} pack () ! This function is provided for compatibility with @sc{Matlab}, but it ! doesn't actually do anything. ! @end deftypefn ! paren ! -*- texinfo -*- ! @deffn {Operator} ( ! @deffnx {Operator} ) ! Array index or function argument delimeter. ! @end deffn ! parseparams ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{reg}, @var{prop}] =} parseparams (@var{params}) ! Return in @var{reg} the cell elements of @var{param} up to the first ! string element and in @var{prop} all remaining elements beginning ! with the first string element. For example @example ! @group ! [reg, prop] = parseparams (@{1, 2, "linewidth", 10@}) ! reg = ! @{ ! [1,1] = 1 ! [1,2] = 2 ! @} ! prop = ! @{ ! [1,1] = linewidth ! [1,2] = 10 ! @} ! @end group @end example ! The parseparams function may be used to separate 'regular' ! arguments and additional arguments given as property/value pairs of ! the @var{varargin} cell array. ! @seealso{varargin} ! @end deftypefn ! run -*- texinfo -*- ! @deftypefn {Function File} {} run (@var{f}) ! @deftypefnx {Command} {} run @var{f} ! Run scripts in the current workspace that are not necessarily on the ! path. If @var{f} is the script to run, including its path, then @code{run} ! change the directory to the directory where @var{f} is found. @code{run} ! then executes the script, and returns to the original directory. ! @seealso{system} @end deftypefn ! semicolon -*- texinfo -*- ! @deffn {Operator} ; ! Array row or command separator. ! @seealso{comma} ! @end deffn ! setfield -*- texinfo -*- ! @deftypefn {Function File} {[@var{k1}, @dots{}, @var{v1}] =} setfield (@var{s}, @var{k1}, @var{v1}, @dots{}) ! Set field members in a structure. @example @group ! oo(1,1).f0= 1; ! oo = setfield(oo,@{1,2@},'fd',@{3@},'b', 6); ! oo(1,2).fd(3).b == 6 ! @result{} ans = 1 @end group @end example ! Note that this function could be written @example ! i1= @{1,2@}; i2= 'fd'; i3= @{3@}; i4= 'b'; ! oo( i1@{:@} ).( i2 )( i3@{:@} ).( i4 ) == 6; @end example - @seealso{getfield, rmfield, isfield, isstruct, fieldnames, struct} - @end deftypefn - single - -*- texinfo -*- - @deftypefn {Function File} {} single (@var{val}) - Convert the numeric value @var{val} to single precision. - - @strong{Note}: this function currently returns its argument converted - to double precision because Octave does not yet have a single-precision - numeric data type. @end deftypefn ! substruct -*- texinfo -*- ! @deftypefn {Function File} {} substruct (@var{type}, @var{subs}, @dots{}) ! Create a subscript structure for use with @code{subsref} or ! @code{subsasgn}. ! @seealso{subsref, subsasgn} @end deftypefn ! swapbytes -*- texinfo -*- ! @deftypefn {Function File} {} swapbytes (@var{x}) ! Swaps the byte order on values, converting from little endian to big ! endian and visa-versa. For example @example @group ! swapbytes (uint16 (1:4)) ! @result{} [ 256 512 768 1024] @end group @end example ! @seealso{typecast, cast} ! @end deftypefn ! tar ! -*- texinfo -*- ! @deftypefn {Function File} {@var{entries} =} tar (@var{tarfile}, @var{files}, @var{root}) ! Pack @var{files} @var{files} into the TAR archive @var{tarfile}. The ! list of files must be a string or a cell array of strings. ! ! The optional argument @var{root} changes the relative path of @var{files} ! from the current directory. ! ! If an output argument is requested the entries in the archive are ! returned in a cell array. ! @seealso{untar, gzip, gunzip, zip, unzip} ! @end deftypefn ! tempdir ! -*- texinfo -*- ! @deftypefn {Function File} {@var{dir} =} tempdir () ! Return the name of the system's directory for temporary files. ! @end deftypefn ! tempname ! -*- texinfo -*- ! @deftypefn {Function File} {filename = } tempname () ! This function is an alias for @code{tmpnam}. ! @end deftypefn ! texas_lotto ! -*- texinfo -*- ! @deftypefn {Function File} {} texas_lotto () ! Pick 6 unique numbers between 1 and 50 that are guaranteed to win ! the Texas Lotto. ! @seealso{rand} ! @end deftypefn ! unix ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{status}, @var{text}]} unix (@var{command}) ! @deftypefnx {Function File} {[@var{status}, @var{text}]} unix (@var{command}, "-echo") ! Execute a system command if running under a Unix-like operating ! system, otherwise do nothing. Return the exit status of the program ! in @var{status} and any output sent to the standard output in ! @var{text}. If the optional second argument @code{"-echo"} is given, ! then also send the output from the command to the standard output. ! @seealso{isunix, ispc, system} ! @end deftypefn ! unpack ! -*- texinfo -*- ! @deftypefn {Function File} {@var{files} =} unpack (@var{file}, @var{dir}) ! @deftypefnx {Function File} {@var{files} =} unpack (@var{file}, @var{dir}, @var{filetype}) ! Unpack the archive @var{file} based on its extension to the directory ! @var{dir}. If @var{file} is a cellstr, then all files will be ! handled individually. If @var{dir} is not specified, it defaults to ! the current directory. It returns a list of @var{files} ! unpacked. If a directory is in the file list, then the ! @var{filetype} to unpack must also be specified. ! The @var{files} includes the entire path to the output files. ! @seealso{bzip2,bunzip2,tar,untar,gzip,gunzip,zip,unzip} ! @end deftypefn ! untar ! -*- texinfo -*- ! @deftypefn {Function File} {} untar (@var{tarfile}, @var{dir}) ! Unpack the TAR archive @var{tarfile} to the directory @var{dir}. ! If @var{dir} is not specified, it defaults to the current directory. ! @seealso{unpack, bzip2, bunzip2, tar, gzip, gunzip, zip, unzip} ! @end deftypefn ! unzip ! -*- texinfo -*- ! @deftypefn {Function File} {} unzip (@var{zipfile}, @var{dir}) ! Unpack the ZIP archive @var{zipfile} to the directory @var{dir}. ! If @var{dir} is not specified, it defaults to the current directory. ! @seealso{unpack, bzip2, bunzip2, tar, untar, gzip, gunzip, zip} ! @end deftypefn ! ver ! -*- texinfo -*- ! @deftypefn {Function File} {} ver () ! Display a header containing the current Octave version ! number, license string and operating system. ! @seealso{license, version} ! @end deftypefn ! version ! -*- texinfo -*- ! @deftypefn {Function File} {} version () ! Return Octave's version number as a string. This is also the value of ! the built-in variable @code{OCTAVE_VERSION}. @end deftypefn warning_ids -*- texinfo -*- --- 3793,8335 ---- If @var{r} and @var{c} are omitted, the size of the result matrix is the common size of @var{a} and @var{b}. @end deftypefn ! lognpdf -*- texinfo -*- ! @deftypefn {Function File} {} lognpdf (@var{x}, @var{mu}, @var{sigma}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the lognormal distribution with parameters ! @var{mu} and @var{sigma}. If a random variable follows this distribution, ! its logarithm is normally distributed with mean @var{mu} ! and standard deviation @var{sigma}. ! ! Default values are @var{mu} = 1, @var{sigma} = 1. @end deftypefn ! binopdf -*- texinfo -*- ! @deftypefn {Function File} {} binopdf (@var{x}, @var{n}, @var{p}) For each element of @var{x}, compute the probability density function (PDF) at @var{x} of the binomial distribution with parameters @var{n} and @var{p}. @end deftypefn ! logistic_inv -*- texinfo -*- ! @deftypefn {Function File} {} logistic_inv (@var{x}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the logistic distribution. @end deftypefn ! discrete_pdf -*- texinfo -*- ! @deftypefn {Function File} {} discrete_pdf (@var{x}, @var{v}, @var{p}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of a univariate discrete distribution which assumes ! the values in @var{v} with probabilities @var{p}. @end deftypefn ! stdnormal_cdf -*- texinfo -*- ! @deftypefn {Function File} {} stdnormal_cdf (@var{x}) ! For each component of @var{x}, compute the CDF of the standard normal ! distribution at @var{x}. @end deftypefn ! gamrnd -*- texinfo -*- ! @deftypefn {Function File} {} gamrnd (@var{a}, @var{b}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} gamrnd (@var{a}, @var{b}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the Gamma distribution with parameters @var{a} ! and @var{b}. Both @var{a} and @var{b} must be scalar or of size ! @var{r} by @var{c}. If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{a} and @var{b}. ! @seealso{gamma, gammaln, gammainc, gampdf, gamcdf, gaminv} @end deftypefn ! poisspdf -*- texinfo -*- ! @deftypefn {Function File} {} poisspdf (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the poisson distribution with parameter @var{lambda}. @end deftypefn ! exprnd -*- texinfo -*- ! @deftypefn {Function File} {} exprnd (@var{lambda}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} exprnd (@var{lambda}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! exponential distribution with mean @var{lambda}, which must be a ! scalar or of size @var{r} by @var{c}. Or if @var{sz} is a vector, ! create a matrix of size @var{sz}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{lambda}. @end deftypefn ! nbincdf -*- texinfo -*- ! @deftypefn {Function File} {} nbincdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the CDF at x of the Pascal ! (negative binomial) distribution with parameters @var{n} and @var{p}. ! The number of failures in a Bernoulli experiment with success ! probability @var{p} before the @var{n}-th success follows this ! distribution. @end deftypefn ! logistic_rnd -*- texinfo -*- ! @deftypefn {Function File} {} logistic_rnd (@var{r}, @var{c}) ! @deftypefnx {Function File} {} logistic_rnd (@var{sz}) ! Return an @var{r} by @var{c} matrix of random numbers from the ! logistic distribution. Or if @var{sz} is a vector, create a matrix of ! @var{sz}. @end deftypefn ! unidpdf -*- texinfo -*- ! @deftypefn {Function File} {} unidpdf (@var{x}, @var{v}) For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of a univariate discrete distribution which assumes ! the values in @var{v} with equal probability. @end deftypefn ! unidrnd -*- texinfo -*- ! @deftypefn {Function File} {} unidrnd (@var{mx}); ! @deftypefnx {Function File} {} unidrnd (@var{mx}, @var{v}); ! @deftypefnx {Function File} {} unidrnd (@var{mx}, @var{m}, @var{n}, @dots{}); ! Return random values from discrete uniform distribution, with maximum ! value(s) given by the integer @var{mx}, which may be a scalar or ! multidimensional array. ! If @var{mx} is a scalar, the size of the result is specified by ! the vector @var{v}, or by the optional arguments @var{m}, @var{n}, ! @dots{}. Otherwise, the size of the result is the same as the size ! of @var{mx}. @end deftypefn ! wblinv -*- texinfo -*- ! @deftypefn {Function File} {} wblinv (@var{x}, @var{scale}, @var{shape}) ! Compute the quantile (the inverse of the CDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape}. ! @end deftypefn ! fcdf ! -*- texinfo -*- ! @deftypefn {Function File} {} fcdf (@var{x}, @var{m}, @var{n}) For each element of @var{x}, compute the CDF at @var{x} of the F distribution with @var{m} and @var{n} degrees of freedom, i.e., PROB (F (@var{m}, @var{n}) <= @var{x}). @end deftypefn ! binoinv -*- texinfo -*- ! @deftypefn {Function File} {} binoinv (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! binomial distribution with parameters @var{n} and @var{p}. @end deftypefn ! chi2inv -*- texinfo -*- ! @deftypefn {Function File} {} chi2inv (@var{x}, @var{n}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the chisquare distribution with @var{n} degrees of ! freedom. @end deftypefn ! geopdf -*- texinfo -*- ! @deftypefn {Function File} {} geopdf (@var{x}, @var{p}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the geometric distribution with parameter @var{p}. @end deftypefn ! logncdf -*- texinfo -*- ! @deftypefn {Function File} {} logncdf (@var{x}, @var{mu}, @var{sigma}) For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the lognormal distribution with ! parameters @var{mu} and @var{sigma}. If a random variable follows this ! distribution, its logarithm is normally distributed with mean ! @var{mu} and standard deviation @var{sigma}. ! ! Default values are @var{mu} = 1, @var{sigma} = 1. @end deftypefn ! unifrnd -*- texinfo -*- ! @deftypefn {Function File} {} unifrnd (@var{a}, @var{b}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} unifrnd (@var{a}, @var{b}, @var{sz}) Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the uniform distribution on [@var{a}, @var{b}]. ! Both @var{a} and @var{b} must be scalar or of size @var{r} by @var{c}. If @var{r} and @var{c} are omitted, the size of the result matrix is the common size of @var{a} and @var{b}. @end deftypefn ! wienrnd -*- texinfo -*- ! @deftypefn {Function File} {} wienrnd (@var{t}, @var{d}, @var{n}) ! Return a simulated realization of the @var{d}-dimensional Wiener Process ! on the interval [0, @var{t}]. If @var{d} is omitted, @var{d} = 1 is ! used. The first column of the return matrix contains time, the ! remaining columns contain the Wiener process. ! ! The optional parameter @var{n} gives the number of summands used for ! simulating the process over an interval of length 1. If @var{n} is ! omitted, @var{n} = 1000 is used. @end deftypefn ! discrete_inv -*- texinfo -*- ! @deftypefn {Function File} {} discrete_inv (@var{x}, @var{v}, @var{p}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the univariate distribution which assumes the ! values in @var{v} with probabilities @var{p}. @end deftypefn ! poissrnd -*- texinfo -*- ! @deftypefn {Function File} {} poissrnd (@var{lambda}, @var{r}, @var{c}) Return an @var{r} by @var{c} matrix of random samples from the ! Poisson distribution with parameter @var{lambda}, which must be a ! scalar or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{lambda}. @end deftypefn ! finv -*- texinfo -*- ! @deftypefn {Function File} {} finv (@var{x}, @var{m}, @var{n}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the F distribution with parameters @var{m} and @var{n}. @end deftypefn ! hygernd -*- texinfo -*- ! @deftypefn {Function File} {} hygernd (@var{t}, @var{m}, @var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} hygernd (@var{t}, @var{m}, @var{n}, @var{sz}) ! @deftypefnx {Function File} {} hygernd (@var{t}, @var{m}, @var{n}) Return an @var{r} by @var{c} matrix of random samples from the ! hypergeometric distribution with parameters @var{t}, @var{m}, and @var{n}. ! The parameters @var{t}, @var{m}, and @var{n} must positive integers with @var{m} and @var{n} not greater than @var{t}. + + The parameter @var{sz} must be scalar or a vector of matrix + dimensions. If @var{sz} is scalar, then a @var{sz} by @var{sz} + matrix of random samples is generated. @end deftypefn ! nbininv -*- texinfo -*- ! @deftypefn {Function File} {} nbininv (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! Pascal (negative binomial) distribution with parameters @var{n} and ! @var{p}. ! ! The number of failures in a Bernoulli experiment with success ! probability @var{p} before the @var{n}-th success follows this ! distribution. @end deftypefn ! unidinv -*- texinfo -*- ! @deftypefn {Function File} {} unidinv (@var{x}, @var{v}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the univariate discrete distribution which assumes the ! values in @var{v} with equal probability @end deftypefn ! laplace_pdf -*- texinfo -*- ! @deftypefn {Function File} {} laplace_pdf (@var{x}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the Laplace distribution. @end deftypefn ! logistic_regression -*- texinfo -*- ! @deftypefn {Function File} {[@var{theta}, @var{beta}, @var{dev}, @var{dl}, @var{d2l}, @var{p}] =} logistic_regression (@var{y}, @var{x}, @var{print}, @var{theta}, @var{beta}) ! Perform ordinal logistic regression. ! ! Suppose @var{y} takes values in @var{k} ordered categories, and let ! @code{gamma_i (@var{x})} be the cumulative probability that @var{y} ! falls in one of the first @var{i} categories given the covariate ! @var{x}. Then ! ! @example ! [theta, beta] = logistic_regression (y, x) ! @end example ! ! @noindent ! fits the model ! ! @example ! logit (gamma_i (x)) = theta_i - beta' * x, i = 1...k-1 ! @end example ! ! The number of ordinal categories, @var{k}, is taken to be the number ! of distinct values of @code{round (@var{y})}. If @var{k} equals 2, ! @var{y} is binary and the model is ordinary logistic regression. The ! matrix @var{x} is assumed to have full column rank. ! ! Given @var{y} only, @code{theta = logistic_regression (y)} ! fits the model with baseline logit odds only. ! ! The full form is ! ! @example ! [theta, beta, dev, dl, d2l, gamma] ! = logistic_regression (y, x, print, theta, beta) ! @end example ! ! @noindent ! in which all output arguments and all input arguments except @var{y} ! are optional. ! ! Setting @var{print} to 1 requests summary information about the fitted ! model to be displayed. Setting @var{print} to 2 requests information ! about convergence at each iteration. Other values request no ! information to be displayed. The input arguments @var{theta} and ! @var{beta} give initial estimates for @var{theta} and @var{beta}. ! ! The returned value @var{dev} holds minus twice the log-likelihood. ! ! The returned values @var{dl} and @var{d2l} are the vector of first ! and the matrix of second derivatives of the log-likelihood with ! respect to @var{theta} and @var{beta}. ! ! @var{p} holds estimates for the conditional distribution of @var{y} ! given @var{x}. @end deftypefn ! logistic_regression_derivatives -*- texinfo -*- ! @deftypefn {Function File} {[@var{dl}, @var{d2l}] =} logistic_regression_derivatives (@var{x}, @var{z}, @var{z1}, @var{g}, @var{g1}, @var{p}) ! Called by logistic_regression. Calculates derivates of the ! log-likelihood for ordinal logistic regression model. @end deftypefn ! logistic_regression_likelihood -*- texinfo -*- ! @deftypefn {Function File} {[@var{g}, @var{g1}, @var{p}, @var{dev}] =} logistic_regression_likelihood (@var{y}, @var{x}, @var{beta}, @var{z}, @var{z1}) ! Calculates likelihood for the ordinal logistic regression model. ! Called by logistic_regression. @end deftypefn ! logit -*- texinfo -*- ! @deftypefn {Function File} {} logit (@var{p}) ! For each component of @var{p}, return the logit of @var{p} defined as ! @iftex ! @tex ! $$ ! {\rm logit}(p) = \log\Big({p \over 1-p}\Big) ! $$ ! @end tex ! @end iftex ! @ifnottex ! @example ! logit(@var{p}) = log (@var{p} / (1-@var{p})) ! @end example ! @end ifnottex @end deftypefn ! cov -*- texinfo -*- ! @deftypefn {Function File} {} cov (@var{x}, @var{y}) ! Compute covariance. ! If each row of @var{x} and @var{y} is an observation and each column is ! a variable, the (@var{i}, @var{j})-th entry of ! @code{cov (@var{x}, @var{y})} is the covariance between the @var{i}-th ! variable in @var{x} and the @var{j}-th variable in @var{y}. ! @iftex ! @tex ! $$ ! \sigma_{ij} = {1 \over N-1} \sum_{i=1}^N (x_i - \bar{x})(y_i - \bar{y}) ! $$ ! where $\bar{x}$ and $\bar{y}$ are the mean values of $x$ and $y$. ! @end tex ! @end iftex ! If called with one argument, compute @code{cov (@var{x}, @var{x})}. @end deftypefn ! iqr -*- texinfo -*- ! @deftypefn {Function File} {} iqr (@var{x}, @var{dim}) ! If @var{x} is a vector, return the interquartile range, i.e., the ! difference between the upper and lower quartile, of the input data. ! If @var{x} is a matrix, do the above for first non singleton ! dimension of @var{x}. If the option @var{dim} argument is given, ! then operate along this dimension. @end deftypefn ! studentize -*- texinfo -*- ! @deftypefn {Function File} {} studentize (@var{x}, @var{dim}) ! If @var{x} is a vector, subtract its mean and divide by its standard ! deviation. ! If @var{x} is a matrix, do the above along the first non-singleton ! dimension. If the optional argument @var{dim} is given then operate ! along this dimension. @end deftypefn ! moment -*- texinfo -*- ! @deftypefn {Function File} {} moment (@var{x}, @var{p}, @var{opt}, @var{dim}) ! If @var{x} is a vector, compute the @var{p}-th moment of @var{x}. ! If @var{x} is a matrix, return the row vector containing the ! @var{p}-th moment of each column. ! With the optional string opt, the kind of moment to be computed can ! be specified. If opt contains @code{"c"} or @code{"a"}, central ! and/or absolute moments are returned. For example, ! @example ! moment (x, 3, "ac") ! @end example ! @noindent ! computes the third central absolute moment of @var{x}. ! If the optional argument @var{dim} is supplied, work along dimension ! @var{dim}. @end deftypefn ! corrcoef -*- texinfo -*- ! @deftypefn {Function File} {} corrcoef (@var{x}, @var{y}) ! Compute correlation. ! If each row of @var{x} and @var{y} is an observation and each column is ! a variable, the (@var{i}, @var{j})-th entry of ! @code{corrcoef (@var{x}, @var{y})} is the correlation between the ! @var{i}-th variable in @var{x} and the @var{j}-th variable in @var{y}. ! ! @iftex ! @tex ! $$ ! {\rm corrcoef}(x,y) = {{\rm cov}(x,y) \over {\rm std}(x) {\rm std}(y)} ! $$ ! @end tex ! @end iftex ! @ifnottex ! @example ! corrcoef(x,y) = cov(x,y)/(std(x)*std(y)) ! @end example ! @end ifnottex ! ! If called with one argument, compute @code{corrcoef (@var{x}, @var{x})}. @end deftypefn ! cor -*- texinfo -*- ! @deftypefn {Function File} {} cor (@var{x}, @var{y}) ! Compute correlation. ! The (@var{i}, @var{j})-th entry of @code{cor (@var{x}, @var{y})} is ! the correlation between the @var{i}-th variable in @var{x} and the ! @var{j}-th variable in @var{y}. ! ! @iftex ! @tex ! $$ ! {\rm corrcoef}(x,y) = {{\rm cov}(x,y) \over {\rm std}(x) {\rm std}(y)} ! $$ ! @end tex ! @end iftex ! @ifnottex ! @example ! corrcoef(x,y) = cov(x,y)/(std(x)*std(y)) ! @end example ! @end ifnottex ! ! For matrices, each row is an observation and each column a variable; ! vectors are always observations and may be row or column vectors. ! ! @code{cor (@var{x})} is equivalent to @code{cor (@var{x}, @var{x})}. ! ! Note that the @code{corrcoef} function does the same as @code{cor}. @end deftypefn ! values -*- texinfo -*- ! @deftypefn {Function File} {} values (@var{x}) ! Return the different values in a column vector, arranged in ascending ! order. ! As an example, @code{values([1, 2, 3, 1])} returns the vector ! @code{[1, 2, 3]}. @end deftypefn ! statistics -*- texinfo -*- ! @deftypefn {Function File} {} statistics (@var{x}) ! If @var{x} is a matrix, return a matrix with the minimum, first ! quartile, median, third quartile, maximum, mean, standard deviation, ! skewness and kurtosis of the columns of @var{x} as its rows. ! If @var{x} is a vector, treat it as a column vector. @end deftypefn ! mahalanobis -*- texinfo -*- ! @deftypefn {Function File} {} mahalanobis (@var{x}, @var{y}) ! Return the Mahalanobis' D-square distance between the multivariate ! samples @var{x} and @var{y}, which must have the same number of ! components (columns), but may have a different number of observations ! (rows). @end deftypefn ! kendall -*- texinfo -*- ! @deftypefn {Function File} {} kendall (@var{x}, @var{y}) ! Compute Kendall's @var{tau} for each of the variables specified by ! the input arguments. ! For matrices, each row is an observation and each column a variable; ! vectors are always observations and may be row or column vectors. ! @code{kendall (@var{x})} is equivalent to @code{kendall (@var{x}, ! @var{x})}. ! For two data vectors @var{x}, @var{y} of common length @var{n}, ! Kendall's @var{tau} is the correlation of the signs of all rank ! differences of @var{x} and @var{y}; i.e., if both @var{x} and ! @var{y} have distinct entries, then ! @iftex ! @tex ! $$ \tau = {1 \over n(n-1)} \sum_{i,j} {\rm sign}(q_i-q_j) {\rm sign}(r_i-r_j) $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! 1 ! tau = ------- SUM sign (q(i) - q(j)) * sign (r(i) - r(j)) ! n (n-1) i,j ! @end example ! @end ifinfo ! @noindent ! in which the ! @iftex ! @tex ! $q_i$ and $r_i$ ! @end tex ! @end iftex ! @ifinfo ! @var{q}(@var{i}) and @var{r}(@var{i}) ! @end ifinfo ! are the ranks of ! @var{x} and @var{y}, respectively. ! If @var{x} and @var{y} are drawn from independent distributions, ! Kendall's @var{tau} is asymptotically normal with mean 0 and variance ! @iftex ! @tex ! ${2 (2n+5) \over 9n(n-1)}$. ! @end tex ! @end iftex ! @ifnottex ! @code{(2 * (2@var{n}+5)) / (9 * @var{n} * (@var{n}-1))}. ! @end ifnottex @end deftypefn ! ols -*- texinfo -*- ! @deftypefn {Function File} {[@var{beta}, @var{sigma}, @var{r}] =} ols (@var{y}, @var{x}) ! Ordinary least squares estimation for the multivariate model ! @iftex ! @tex ! $y = x b + e$ ! with ! $\bar{e} = 0$, and cov(vec($e$)) = kron ($s, I$) ! @end tex ! @end iftex ! @ifinfo ! @math{y = x b + e} with ! @math{mean (e) = 0} and @math{cov (vec (e)) = kron (s, I)}. ! @end ifinfo ! where ! @iftex ! @tex ! $y$ is a $t \times p$ matrix, $x$ is a $t \times k$ matrix, ! $b$ is a $k \times p$ matrix, and $e$ is a $t \times p$ matrix. ! @end tex ! @end iftex ! @ifinfo ! @math{y} is a @math{t} by @math{p} matrix, @math{x} is a @math{t} by ! @math{k} matrix, @math{b} is a @math{k} by @math{p} matrix, and ! @math{e} is a @math{t} by @math{p} matrix. ! @end ifinfo ! Each row of @var{y} and @var{x} is an observation and each column a ! variable. ! ! The return values @var{beta}, @var{sigma}, and @var{r} are defined as ! follows. ! ! @table @var ! @item beta ! The OLS estimator for @var{b}, @code{@var{beta} = pinv (@var{x}) * ! @var{y}}, where @code{pinv (@var{x})} denotes the pseudoinverse of ! @var{x}. ! ! @item sigma ! The OLS estimator for the matrix @var{s}, @example ! @group ! @var{sigma} = (@var{y}-@var{x}*@var{beta})' ! * (@var{y}-@var{x}*@var{beta}) ! / (@var{t}-rank(@var{x})) ! @end group @end example ! @item r ! The matrix of OLS residuals, @code{@var{r} = @var{y} - @var{x} * ! @var{beta}}. ! @end table @end deftypefn ! cloglog -*- texinfo -*- ! @deftypefn {Function File} {} cloglog (@var{x}) ! Return the complementary log-log function of @var{x}, defined as + @iftex + @tex + $$ + {\rm cloglog}(x) = - \log (- \log (x)) + $$ + @end tex + @end iftex + @ifnottex @example ! cloglog(x) = - log (- log (@var{x})) @end example ! @end ifnottex @end deftypefn ! meansq -*- texinfo -*- ! @deftypefn {Function File} {} meansq (@var{x}) ! @deftypefnx {Function File} {} meansq (@var{x}, @var{dim}) ! For vector arguments, return the mean square of the values. ! For matrix arguments, return a row vector containing the mean square ! of each column. With the optional @var{dim} argument, returns the ! mean squared of the values along this dimension. @end deftypefn ! mode -*- texinfo -*- ! @deftypefn {Function File} {[@var{m}, @var{f}, @var{c}] =} mode (@var{x}, @var{dim}) ! Count the most frequently appearing value. @code{mode} counts the ! frequency along the first non-singleton dimension and if two or more ! values have te same frequency returns the smallest of the two in ! @var{m}. The dimension along which to count can be specified by the ! @var{dim} parameter. ! The variable @var{f} counts the frequency of each of the most frequently ! occurring elements. The cell array @var{c} contains all of the elements ! with the maximum frequency . ! @end deftypefn ! range ! -*- texinfo -*- ! @deftypefn {Function File} {} range (@var{x}) ! @deftypefnx {Function File} {} range (@var{x}, @var{dim}) ! If @var{x} is a vector, return the range, i.e., the difference ! between the maximum and the minimum, of the input data. ! If @var{x} is a matrix, do the above for each column of @var{x}. ! ! If the optional argument @var{dim} is supplied, work along dimension ! @var{dim}. @end deftypefn ! cut -*- texinfo -*- ! @deftypefn {Function File} {} cut (@var{x}, @var{breaks}) ! Create categorical data out of numerical or continuous data by ! cutting into intervals. ! ! If @var{breaks} is a scalar, the data is cut into that many ! equal-width intervals. If @var{breaks} is a vector of break points, ! the category has @code{length (@var{breaks}) - 1} groups. ! ! The returned value is a vector of the same size as @var{x} telling ! which group each point in @var{x} belongs to. Groups are labelled ! from 1 to the number of groups; points outside the range of ! @var{breaks} are labelled by @code{NaN}. @end deftypefn ! std -*- texinfo -*- ! @deftypefn {Function File} {} std (@var{x}) ! @deftypefnx {Function File} {} std (@var{x}, @var{opt}) ! @deftypefnx {Function File} {} std (@var{x}, @var{opt}, @var{dim}) ! If @var{x} is a vector, compute the standard deviation of the elements ! of @var{x}. ! @iftex ! @tex ! $$ ! {\rm std} (x) = \sigma (x) = \sqrt{{\sum_{i=1}^N (x_i - \bar{x})^2 \over N - 1}} ! $$ ! where $\bar{x}$ is the mean value of $x$. ! @end tex ! @end iftex ! @ifnottex @example ! @group ! std (x) = sqrt (sumsq (x - mean (x)) / (n - 1)) ! @end group @end example + @end ifnottex + If @var{x} is a matrix, compute the standard deviation for + each column and return them in a row vector. ! The argument @var{opt} determines the type of normalization to use. Valid values ! are ! @table @asis ! @item 0: ! normalizes with @math{N-1}, provides the square root of best unbiased estimator of ! the variance [default] ! @item 1: ! normalizes with @math{N}, this provides the square root of the second moment around ! the mean ! @end table ! The third argument @var{dim} determines the dimension along which the standard ! deviation is calculated. ! @seealso{mean, median} @end deftypefn ! mean -*- texinfo -*- ! @deftypefn {Function File} {} mean (@var{x}, @var{dim}, @var{opt}) ! If @var{x} is a vector, compute the mean of the elements of @var{x} ! @iftex ! @tex ! $$ {\rm mean}(x) = \bar{x} = {1\over N} \sum_{i=1}^N x_i $$ ! @end tex ! @end iftex ! @ifinfo ! ! @example ! mean (x) = SUM_i x(i) / N ! @end example ! @end ifinfo ! If @var{x} is a matrix, compute the mean for each column and return them ! in a row vector. ! ! With the optional argument @var{opt}, the kind of mean computed can be ! selected. The following options are recognized: ! ! @table @code ! @item "a" ! Compute the (ordinary) arithmetic mean. This is the default. ! ! @item "g" ! Compute the geometric mean. ! ! @item "h" ! Compute the harmonic mean. ! @end table ! ! If the optional argument @var{dim} is supplied, work along dimension ! @var{dim}. ! ! Both @var{dim} and @var{opt} are optional. If both are supplied, ! either may appear first. @end deftypefn ! run_count -*- texinfo -*- ! @deftypefn {Function File} {} run_count (@var{x}, @var{n}) ! Count the upward runs along the first non-singleton dimension of ! @var{x} of length 1, 2, @dots{}, @var{n}-1 and greater than or equal ! to @var{n}. If the optional argument @var{dim} is given operate ! along this dimension @end deftypefn ! qqplot -*- texinfo -*- ! @deftypefn {Function File} {[@var{q}, @var{s}] =} qqplot (@var{x}, @var{dist}, @var{params}) ! Perform a QQ-plot (quantile plot). ! ! If F is the CDF of the distribution @var{dist} with parameters ! @var{params} and G its inverse, and @var{x} a sample vector of length ! @var{n}, the QQ-plot graphs ordinate @var{s}(@var{i}) = @var{i}-th ! largest element of x versus abscissa @var{q}(@var{i}f) = G((@var{i} - ! 0.5)/@var{n}). ! ! If the sample comes from F except for a transformation of location ! and scale, the pairs will approximately follow a straight line. ! ! The default for @var{dist} is the standard normal distribution. The ! optional argument @var{params} contains a list of parameters of ! @var{dist}. For example, for a quantile plot of the uniform ! distribution on [2,4] and @var{x}, use ! ! @example ! qqplot (x, "uniform", 2, 4) ! @end example ! ! @noindent ! @var{dist} can be any string for which a function @var{dist_inv} ! that calculates the inverse CDF of distribution @var{dist} exists. ! ! If no output arguments are given, the data are plotted directly. @end deftypefn ! gls -*- texinfo -*- ! @deftypefn {Function File} {[@var{beta}, @var{v}, @var{r}] =} gls (@var{y}, @var{x}, @var{o}) ! Generalized least squares estimation for the multivariate model ! @iftex ! @tex ! $y = x b + e$ ! with $\bar{e} = 0$ and cov(vec($e$)) = $(s^2)o$, ! @end tex ! @end iftex ! @ifinfo ! @math{y = x b + e} with @math{mean (e) = 0} and ! @math{cov (vec (e)) = (s^2) o}, ! @end ifinfo ! where ! @iftex ! @tex ! $y$ is a $t \times p$ matrix, $x$ is a $t \times k$ matrix, $b$ is a $k ! \times p$ matrix, $e$ is a $t \times p$ matrix, and $o$ is a $tp \times ! tp$ matrix. ! @end tex ! @end iftex ! @ifinfo ! @math{y} is a @math{t} by @math{p} matrix, @math{x} is a @math{t} by ! @math{k} matrix, @math{b} is a @math{k} by @math{p} matrix, @math{e} ! is a @math{t} by @math{p} matrix, and @math{o} is a @math{t p} by ! @math{t p} matrix. ! @end ifinfo ! ! @noindent ! Each row of @var{y} and @var{x} is an observation and each column a ! variable. The return values @var{beta}, @var{v}, and @var{r} are ! defined as follows. ! ! @table @var ! @item beta ! The GLS estimator for @math{b}. ! ! @item v ! The GLS estimator for @math{s^2}. ! ! @item r ! The matrix of GLS residuals, @math{r = y - x beta}. ! @end table @end deftypefn ! ppplot -*- texinfo -*- ! @deftypefn {Function File} {[@var{p}, @var{y}] =} ppplot (@var{x}, @var{dist}, @var{params}) ! Perform a PP-plot (probability plot). ! ! If F is the CDF of the distribution @var{dist} with parameters ! @var{params} and @var{x} a sample vector of length @var{n}, the ! PP-plot graphs ordinate @var{y}(@var{i}) = F (@var{i}-th largest ! element of @var{x}) versus abscissa @var{p}(@var{i}) = (@var{i} - ! 0.5)/@var{n}. If the sample comes from F, the pairs will ! approximately follow a straight line. ! ! The default for @var{dist} is the standard normal distribution. The ! optional argument @var{params} contains a list of parameters of ! @var{dist}. For example, for a probability plot of the uniform ! distribution on [2,4] and @var{x}, use ! ! @example ! ppplot (x, "uniform", 2, 4) ! @end example ! ! @noindent ! @var{dist} can be any string for which a function @var{dist_cdf} ! that calculates the CDF of distribution @var{dist} exists. ! ! If no output arguments are given, the data are plotted directly. @end deftypefn ! kurtosis -*- texinfo -*- ! @deftypefn {Function File} {} kurtosis (@var{x}, @var{dim}) ! If @var{x} is a vector of length @math{N}, return the kurtosis ! @iftex ! @tex ! $$ ! {\rm kurtosis} (x) = {1\over N \sigma(x)^4} \sum_{i=1}^N (x_i-\bar{x})^4 - 3 ! $$ ! where $\bar{x}$ is the mean value of $x$. ! @end tex ! @end iftex ! @ifinfo ! ! @example ! kurtosis (x) = N^(-1) std(x)^(-4) sum ((x - mean(x)).^4) - 3 ! @end example ! @end ifinfo ! ! @noindent ! of @var{x}. If @var{x} is a matrix, return the kurtosis over the ! first non-singleton dimension. The optional argument @var{dim} ! can be given to force the kurtosis to be given over that ! dimension. @end deftypefn ! spearman -*- texinfo -*- ! @deftypefn {Function File} {} spearman (@var{x}, @var{y}) ! Compute Spearman's rank correlation coefficient @var{rho} for each of ! the variables specified by the input arguments. ! ! For matrices, each row is an observation and each column a variable; ! vectors are always observations and may be row or column vectors. ! ! @code{spearman (@var{x})} is equivalent to @code{spearman (@var{x}, ! @var{x})}. ! ! For two data vectors @var{x} and @var{y}, Spearman's @var{rho} is the ! correlation of the ranks of @var{x} and @var{y}. ! ! If @var{x} and @var{y} are drawn from independent distributions, ! @var{rho} has zero mean and variance @code{1 / (n - 1)}, and is ! asymptotically normally distributed. @end deftypefn ! skewness -*- texinfo -*- ! @deftypefn {Function File} {} skewness (@var{x}, @var{dim}) ! If @var{x} is a vector of length @math{n}, return the skewness ! @iftex ! @tex ! $$ ! {\rm skewness} (x) = {1\over N \sigma(x)^3} \sum_{i=1}^N (x_i-\bar{x})^3 ! $$ ! where $\bar{x}$ is the mean value of $x$. ! @end tex ! @end iftex ! @ifinfo ! ! @example ! skewness (x) = N^(-1) std(x)^(-3) sum ((x - mean(x)).^3) ! @end example ! @end ifinfo ! ! @noindent ! of @var{x}. If @var{x} is a matrix, return the skewness along the ! first non-singleton dimension of the matrix. If the optional ! @var{dim} argument is given, operate along this dimension. @end deftypefn ! table -*- texinfo -*- ! @deftypefn {Function File} {[@var{t}, @var{l_x}] =} table (@var{x}) ! @deftypefnx {Function File} {[@var{t}, @var{l_x}, @var{l_y}] =} table (@var{x}, @var{y}) ! Create a contingency table @var{t} from data vectors. The @var{l} ! vectors are the corresponding levels. ! ! Currently, only 1- and 2-dimensional tables are supported. @end deftypefn ! probit -*- texinfo -*- ! @deftypefn {Function File} {} probit (@var{p}) ! For each component of @var{p}, return the probit (the quantile of the ! standard normal distribution) of @var{p}. @end deftypefn ! ranks -*- texinfo -*- ! @deftypefn {Function File} {} ranks (@var{x}, @var{dim}) ! If @var{x} is a vector, return the (column) vector of ranks of ! @var{x} adjusted for ties. ! ! If @var{x} is a matrix, do the above for along the first ! non-singleton dimension. If the optional argument @var{dim} is ! given, operate along this dimension. @end deftypefn ! var -*- texinfo -*- ! @deftypefn {Function File} {} var (@var{x}) ! For vector arguments, return the (real) variance of the values. ! For matrix arguments, return a row vector containing the variance for ! each column. ! ! The argument @var{opt} determines the type of normalization to use. ! Valid values are ! ! @table @asis ! @item 0: ! Normalizes with @math{N-1}, provides the best unbiased estimator of the ! variance [default]. ! @item 1: ! Normalizes with @math{N}, this provides the second moment around the mean. ! @end table ! ! The third argument @var{dim} determines the dimension along which the ! variance is calculated. @end deftypefn ! center -*- texinfo -*- ! @deftypefn {Function File} {} center (@var{x}) ! @deftypefnx {Function File} {} center (@var{x}, @var{dim}) ! If @var{x} is a vector, subtract its mean. ! If @var{x} is a matrix, do the above for each column. ! If the optional argument @var{dim} is given, perform the above ! operation along this dimension @end deftypefn ! median -*- texinfo -*- ! @deftypefn {Function File} {} median (@var{x}, @var{dim}) ! If @var{x} is a vector, compute the median value of the elements of ! @var{x}. If the elements of @var{x} are sorted, the median is defined ! as ! @iftex ! @tex ! $$ ! {\rm median} (x) = ! \cases{x(\lceil N/2\rceil), & $N$ odd;\cr ! (x(N/2)+x(N/2+1))/2, & $N$ even.} ! $$ ! @end tex ! @end iftex ! @ifinfo ! ! @example ! @group ! x(ceil(N/2)), N odd ! median(x) = ! (x(N/2) + x((N/2)+1))/2, N even ! @end group ! @end example ! @end ifinfo ! If @var{x} is a matrix, compute the median value for each ! column and return them in a row vector. If the optional @var{dim} ! argument is given, operate along this dimension. ! @seealso{std, mean} @end deftypefn ! union -*- texinfo -*- ! @deftypefn {Function File} {} union (@var{x}, @var{y}) ! Return the set of elements that are in either of the sets @var{x} and ! @var{y}. For example, ! ! @example ! @group ! union ([ 1, 2, 4 ], [ 2, 3, 5 ]) ! @result{} [ 1, 2, 3, 4, 5 ] ! @end group ! @end example ! @seealso{create_set, intersection, complement} @end deftypefn ! ismember -*- texinfo -*- ! @deftypefn {Function File} {[@var{tf}, @var{a_idx}] =} ismember (@var{A}, @var{S}) ! @deftypefnx {Function File} {[@var{tf}, @var{a_idx}] =} ismember (@var{A}, @var{S}, "rows") ! Return a matrix @var{tf} the same shape as @var{A} which has 1 if ! @code{A(i,j)} is in @var{S} or 0 if it isn't. If a second output argument ! is requested, the indexes into @var{S} of the matching elements are ! also returned. @example ! @group ! a = [3, 10, 1]; ! s = [0:9]; ! [tf, a_idx] = residue (a, s); ! @result{} tf = [1, 0, 1] ! @result{} a_idx = [4, 0, 2] ! @end group @end example ! The inputs, @var{A} and @var{S}, may also be cell arrays. @example ! @group ! a = @{'abc'@}; ! s = @{'abc', 'def'@}; ! [tf, a_idx] = residue (a, s); ! @result{} tf = [1, 0] ! @result{} a_idx = [1, 0] ! @end group @end example ! With the optional third argument @code{"rows"}, and matrices ! @var{A} and @var{S} with the same number of columns, compare rows in ! @var{A} with the rows in @var{S}. ! ! @example ! @group ! a = [1:3; 5:7; 4:6]; ! s = [0:2; 1:3; 2:4; 3:5; 4:6]; ! [tf, a_idx] = ismember(a, s, 'rows'); ! @result{} tf = logical ([1; 0; 1]) ! @result{} a_idx = [2; 0; 5]; ! @end group ! @end example ! ! @seealso{unique, union, intersection, setxor, setdiff} @end deftypefn ! complement -*- texinfo -*- ! @deftypefn {Function File} {} complement (@var{x}, @var{y}) ! Return the elements of set @var{y} that are not in set @var{x}. For ! example, ! ! @example ! @group ! complement ([ 1, 2, 3 ], [ 2, 3, 5 ]) ! @result{} 5 ! @end group ! @end example ! @seealso{create_set, union, intersection} @end deftypefn ! intersect -*- texinfo -*- ! @deftypefn {Function File} {} intersect (@var{a}, @var{b}) ! @deftypefnx {Function File} {[@var{c}, @var{ia}, @var{ib}] =} intersect (@var{a}, @var{b}) ! ! Return the elements in both @var{a} and @var{b}, sorted in ascending ! order. If @var{a} and @var{b} are both column vectors return a column ! vector, otherwise return a row vector. ! ! Return index vectors @var{ia} and @var{ib} such that @code{a(ia)==c} and ! @code{b(ib)==c}. ! @end deftypefn ! @seealso{unique, union, setxor, setdiff, ismember} ! setxor -*- texinfo -*- ! @deftypefn {Function File} {} setxor (@var{a}, @var{b}) ! ! Return the elements exclusive to @var{a} or @var{b}, sorted in ascending ! order. If @var{a} and @var{b} are both column vectors return a column ! vector, otherwise return a row vector. ! ! @seealso{unique, union, intersect, setdiff, ismember} @end deftypefn ! create_set -*- texinfo -*- ! @deftypefn {Function File} {} create_set (@var{x}) ! Return a row vector containing the unique values in @var{x}, sorted in ! ascending order. For example, ! ! @example ! @group ! create_set ([ 1, 2; 3, 4; 4, 2 ]) ! @result{} [ 1, 2, 3, 4 ] ! @end group ! @end example ! @seealso{union, intersection, complement} @end deftypefn ! setdiff -*- texinfo -*- ! @deftypefn {Function File} {} setdiff (@var{a}, @var{b}) ! @deftypefnx {Function File} {} setdiff (@var{a}, @var{b}, "rows") ! Return the elements in @var{a} that are not in @var{b}, sorted in ! ascending order. If @var{a} and @var{b} are both column vectors ! return a column vector, otherwise return a row vector. ! ! Given the optional third argument @samp{"rows"}, return the rows in ! @var{a} that are not in @var{b}, sorted in ascending order by rows. ! @seealso{unique, union, intersect, setxor, ismember} @end deftypefn ! unique -*- texinfo -*- ! @deftypefn {Function File} {} unique (@var{x}) ! Return the unique elements of @var{x}, sorted in ascending order. ! If @var{x} is a row vector, return a row vector, but if @var{x} ! is a column vector or a matrix return a column vector. ! @deftypefnx {Function File} {} unique (@var{A}, 'rows') ! Return the unique rows of @var{A}, sorted in ascending order. ! @deftypefnx {Function File} {[@var{y}, @var{i}, @var{j}] = } unique (@var{x}) ! ! Return index vectors @var{i} and @var{j} such that @code{x(i)==y} and ! @code{y(j)==x}. ! @seealso{union, intersect, setdiff, setxor, ismember} @end deftypefn ! primes -*- texinfo -*- ! @deftypefn {Function File} {} primes (@var{n}) ! Return all primes up to @var{n}. ! Note that if you need a specific number of primes, you can use the ! fact the distance from one prime to the next is on average ! proportional to the logarithm of the prime. Integrating, you find ! that there are about @math{k} primes less than @math{k \log ( 5 k )}. ! The algorithm used is called the Sieve of Erastothenes. @end deftypefn ! log2 -*- texinfo -*- ! @deftypefn {Mapping Function} {} log2 (@var{x}) ! @deftypefnx {Mapping Function} {[@var{f}, @var{e}] =} log2 (@var{x}) ! Compute the base-2 logarithm of @var{x}. With two outputs, returns ! @var{f} and @var{e} such that ! @iftex ! @tex ! $1/2 <= |f| < 1$ and $x = f \cdot 2^e$. ! @end tex ! @end iftex ! @ifinfo ! 1/2 <= abs(f) < 1 and x = f * 2^e. ! @end ifinfo ! @seealso{log, log10, logspace, exp} @end deftypefn ! factorial -*- texinfo -*- ! @deftypefn {Function File} {} factorial (@var{n}) ! Return the factorial of @var{n}. If @var{n} is scalar, this is ! equivalent to @code{prod (1:@var{n})}. If @var{n} is an array, ! the factorial of the elements of the array are returned. @end deftypefn ! isprime -*- texinfo -*- ! @deftypefn {Function File} {} isprime (@var{n}) ! Return true if @var{n} is a prime number, false otherwise. ! Something like the following is much faster if you need to test a lot ! of small numbers: ! @example ! @var{t} = ismember (@var{n}, primes (max (@var{n} (:)))); ! @end example ! If max(n) is very large, then you should be using special purpose ! factorization code. ! ! @seealso{primes, factor, gcd, lcm} @end deftypefn ! perms -*- texinfo -*- ! @deftypefn {Function File} {} perms (@var{v}) ! Generate all permutations of @var{v}, one row per permutation. The ! result has size @code{factorial (@var{n}) * @var{n}}, where @var{n} ! is the length of @var{v}. ! As an example, @code{perms([1, 2, 3])} returns the matrix ! @example ! 1 2 3 ! 2 1 3 ! 1 3 2 ! 2 3 1 ! 3 1 2 ! 3 2 1 ! @end example @end deftypefn ! betaln -*- texinfo -*- ! @deftypefn {Mapping Function} {} betaln (@var{a}, @var{b}) ! Return the log of the Beta function, ! @iftex ! @tex ! $$ ! B (a, b) = \log {\Gamma (a) \Gamma (b) \over \Gamma (a + b)}. ! $$ ! @end tex ! @end iftex ! @ifinfo ! ! @example ! betaln (a, b) = gammaln (a) + gammaln (b) - gammaln (a + b) ! @end example ! @end ifinfo ! @seealso{beta, betai, gammaln} @end deftypefn ! bessel -*- texinfo -*- ! @deftypefn {Loadable Function} {[@var{j}, @var{ierr}] =} besselj (@var{alpha}, @var{x}, @var{opt}) ! @deftypefnx {Loadable Function} {[@var{y}, @var{ierr}] =} bessely (@var{alpha}, @var{x}, @var{opt}) ! @deftypefnx {Loadable Function} {[@var{i}, @var{ierr}] =} besseli (@var{alpha}, @var{x}, @var{opt}) ! @deftypefnx {Loadable Function} {[@var{k}, @var{ierr}] =} besselk (@var{alpha}, @var{x}, @var{opt}) ! @deftypefnx {Loadable Function} {[@var{h}, @var{ierr}] =} besselh (@var{alpha}, @var{k}, @var{x}, @var{opt}) ! Compute Bessel or Hankel functions of various kinds: ! @table @code ! @item besselj ! Bessel functions of the first kind. ! @item bessely ! Bessel functions of the second kind. ! @item besseli ! Modified Bessel functions of the first kind. ! @item besselk ! Modified Bessel functions of the second kind. ! @item besselh ! Compute Hankel functions of the first (@var{k} = 1) or second (@var{k} ! = 2) kind. ! @end table ! If the argument @var{opt} is supplied, the result is scaled by the ! @code{exp (-I*@var{x})} for @var{k} = 1 or @code{exp (I*@var{x})} for ! @var{k} = 2. ! If @var{alpha} is a scalar, the result is the same size as @var{x}. ! If @var{x} is a scalar, the result is the same size as @var{alpha}. ! If @var{alpha} is a row vector and @var{x} is a column vector, the ! result is a matrix with @code{length (@var{x})} rows and ! @code{length (@var{alpha})} columns. Otherwise, @var{alpha} and ! @var{x} must conform and the result will be the same size. ! The value of @var{alpha} must be real. The value of @var{x} may be ! complex. ! If requested, @var{ierr} contains the following status information ! and is the same size as the result. ! @enumerate 0 ! @item ! Normal return. ! @item ! Input error, return @code{NaN}. ! @item ! Overflow, return @code{Inf}. ! @item ! Loss of significance by argument reduction results in less than ! half of machine accuracy. ! @item ! Complete loss of significance by argument reduction, return @code{NaN}. ! @item ! Error---no computation, algorithm termination condition not met, ! return @code{NaN}. ! @end enumerate ! @end deftypefn ! nchoosek ! -*- texinfo -*- ! @deftypefn {Function File} {@var{c} =} nchoosek (@var{n}, @var{k}) ! ! Compute the binomial coefficient or all combinations of @var{n}. ! If @var{n} is a scalar then, calculate the binomial coefficient ! of @var{n} and @var{k}, defined as ! ! @iftex ! @tex ! $$ ! {n \choose k} = {n (n-1) (n-2) \cdots (n-k+1) \over k!} ! = {n! \over k! (n-k)!} ! $$ ! @end tex ! @end iftex ! @ifinfo @example @group ! / \ ! | n | n (n-1) (n-2) ... (n-k+1) n! ! | | = ------------------------- = --------- ! | k | k! k! (n-k)! ! \ / @end group @end example ! @end ifinfo ! If @var{n} is a vector generate all combinations of the elements ! of @var{n}, taken @var{k} at a time, one row per combination. The ! resulting @var{c} has size @code{[nchoosek (length (@var{n}), ! @var{k}), @var{k}]}. ! @seealso{bincoeff} @end deftypefn ! beta -*- texinfo -*- ! @deftypefn {Mapping Function} {} beta (@var{a}, @var{b}) ! Return the Beta function, ! @iftex ! @tex ! $$ ! B (a, b) = {\Gamma (a) \Gamma (b) \over \Gamma (a + b)}. ! $$ ! @end tex ! @end iftex ! @ifinfo @example ! beta (a, b) = gamma (a) * gamma (b) / gamma (a + b). @end example ! @end ifinfo @end deftypefn ! factor -*- texinfo -*- ! @deftypefn {Function File} {@var{p} =} factor (@var{q}) ! @deftypefnx {Function File} {[@var{p}, @var{n}] =} factor (@var{q}) ! ! Return prime factorization of @var{q}. That is @code{prod (@var{p}) ! == @var{q}}. If @code{@var{q} == 1}, returns 1. ! ! With two output arguments, returns the unique primes @var{p} and ! their multiplicities. That is @code{prod (@var{p} .^ @var{n}) == ! @var{q}}. @end deftypefn ! legendre -*- texinfo -*- ! @deftypefn {Function File} {@var{L} =} legendre (@var{n}, @var{X}) ! ! Legendre Function of degree n and order m ! where all values for m = 0..@var{n} are returned. ! @var{n} must be a scalar in the range [0..255]. ! The return value has one dimension more than @var{x}. @example ! The Legendre Function of degree n and order m ! ! @group ! m m 2 m/2 d^m ! P(x) = (-1) * (1-x ) * ---- P (x) ! n dx^m n ! @end group ! ! with: ! Legendre polynomial of degree n ! ! @group ! 1 d^n 2 n ! P (x) = ------ [----(x - 1) ] ! n 2^n n! dx^n ! @end group ! ! legendre(3,[-1.0 -0.9 -0.8]) returns the matrix ! ! @group ! x | -1.0 | -0.9 | -0.8 ! ------------------------------------ ! m=0 | -1.00000 | -0.47250 | -0.08000 ! m=1 | 0.00000 | -1.99420 | -1.98000 ! m=2 | 0.00000 | -2.56500 | -4.32000 ! m=3 | 0.00000 | -1.24229 | -3.24000 ! @end group @end example @end deftypefn ! erfinv -*- texinfo -*- ! @deftypefn {Mapping Function} {} erfinv (@var{z}) ! Computes the inverse of the error function. ! @seealso{erf, erfc} @end deftypefn ! betai -*- texinfo -*- ! @deftypefn {Function File} {} betai (@var{a}, @var{b}, @var{x}) ! This function is provided for compatibility with older versions of ! Octave. New programs should use betainc instead. ! ! @code{betai (@var{a}, @var{b}, @var{x})} is the same as @code{betainc ! (@var{x}, @var{a}, @var{b})}. @end deftypefn ! pow2 -*- texinfo -*- ! @deftypefn {Mapping Function} {} pow2 (@var{x}) ! @deftypefnx {Mapping Function} {} pow2 (@var{f}, @var{e}) ! With one argument, computes ! @iftex ! @tex ! $2^x$ ! @end tex ! @end iftex ! @ifinfo ! 2 .^ x ! @end ifinfo ! for each element of @var{x}. With two arguments, returns ! @iftex ! @tex ! $f \cdot 2^e$. ! @end tex ! @end iftex ! @ifinfo ! f .* (2 .^ e). ! @end ifinfo ! @seealso{nextpow2} @end deftypefn ! gammai -*- texinfo -*- ! @deftypefn {Function File} {} gammai (@var{a}, @var{x}) ! This function is provided for compatibility with older versions of ! Octave. New programs should use @code{gammainc} instead. ! ! @code{gammai (@var{a}, @var{x})} is the same as @code{gammainc ! (@var{x}, @var{a})}. @end deftypefn ! residue -*- texinfo -*- ! @deftypefn {Function File} {[@var{r}, @var{p}, @var{k}, @var{e}] =} residue (@var{b}, @var{a}) ! Compute the partial fraction expansion for the quotient of the ! polynomials, @var{b} and @var{a}. ! ! @iftex ! @tex ! $$ ! {B(s)\over A(s)} = \sum_{m=1}^M {r_m\over (s-p_m)^e_m} ! + \sum_{i=1}^N k_i s^{N-i}. ! $$ ! @end tex ! @end iftex ! @ifinfo @example ! B(s) M r(m) N ! ---- = SUM ------------- + SUM k(i)*s^(N-i) ! A(s) m=1 (s-p(m))^e(m) i=1 @end example ! @end ifinfo ! ! @noindent ! where @math{M} is the number of poles (the length of the @var{r}, ! @var{p}, and @var{e}), the @var{k} vector is a polynomial of order @math{N-1} ! representing the direct contribution, and the @var{e} vector specifies ! the multiplicity of the mth residue's pole. ! ! For example, @example @group ! b = [1, 1, 1]; ! a = [1, -5, 8, -4]; ! [r, p, k, e] = residue (b, a); ! @result{} r = [-2; 7; 3] ! @result{} p = [2; 2; 1] ! @result{} k = [](0x0) ! @result{} e = [1; 2; 1] @end group @end example @noindent ! which represents the following partial fraction expansion ! @iftex ! @tex ! $$ ! {s^2+s+1\over s^3-5s^2+8s-4} = {-2\over s-2} + {7\over (s-2)^2} + {3\over s-1} ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! s^2 + s + 1 -2 7 3 ! ------------------- = ----- + ------- + ----- ! s^3 - 5s^2 + 8s - 4 (s-2) (s-2)^2 (s-1) ! @end example ! @end ifinfo ! @deftypefnx {Function File} {[@var{b}, @var{a}] =} residue (@var{r}, @var{p}, @var{k}) ! @deftypefnx {Function File} {[@var{b}, @var{a}] =} residue (@var{r}, @var{p}, @var{k}, @var{e}) ! Compute the reconstituted quotient of polynomials, ! @var{b}(s)/@var{a}(s), from the partial fraction expansion; ! represented by the residues, poles, and a direct polynomial specified ! by @var{r}, @var{p} and @var{k}, and the pole multiplicity @var{e}. ! If the multiplicity, @var{e}, is not explicitly specified the multiplicity is ! determined by the script mpoles.m. For example, @example ! @group ! r = [-2; 7; 3]; ! p = [2; 2; 1]; ! k = [1, 0]; ! [b, a] = residue (r, p, k); ! @result{} b = [1, -5, 9, -3, 1] ! @result{} a = [1, -5, 8, -4] ! where mpoles.m is used to determine e = [1; 2; 1] @end group @end example ! Alternatively the multiplicity may be defined explicitly, for example, @example ! @group ! r = [7; 3; -2]; ! p = [2; 1; 2]; ! k = [1, 0]; ! e = [2; 1; 1]; ! [b, a] = residue (r, p, k, e); ! @result{} b = [1, -5, 9, -3, 1] ! @result{} a = [1, -5, 8, -4] ! @end group @end example @noindent ! which represents the following partial fraction expansion @iftex @tex ! $$ ! {-2\over s-2} + {7\over (s-2)^2} + {3\over s-1} + s = {s^4-5s^3+9s^2-3s+1\over s^3-5s^2+8s-4} ! $$ @end tex @end iftex ! @ifinfo ! @example ! -2 7 3 s^4 - 5s^3 + 9s^2 - 3s + 1 ! ----- + ------- + ----- + s = -------------------------- ! (s-2) (s-2)^2 (s-1) s^3 - 5s^2 + 8s - 4 @end example ! @end ifinfo ! @seealso{poly, roots, conv, deconv, mpoles, polyval, polyderiv, polyinteg} ! @end deftypefn ! polyint ! -*- texinfo -*- ! @deftypefn {Function File} {} polyint (@var{c}, @var{k}) ! Return the coefficients of the integral of the polynomial whose ! coefficients are represented by the vector @var{c}. The variable ! @var{k} is the constant of integration, which by default is set to zero. ! @seealso{poly, polyderiv, polyreduce, roots, conv, deconv, residue, ! filter, polyval, and polyvalm} ! @end deftypefn ! unmkpp ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{p}, @var{n}, @var{k}, @var{d}] =} unmkpp (@var{pp}) ! Extract the components of a piece-wise polynomial structure @var{pp}. ! These are as follows: ! @table @asis ! @item @var{x} ! Samples points. ! @item @var{p} ! Polynomial coefficients for points in sample interval. @code{@var{p} ! (@var{i}, :)} contains the coefficients for the polynomial over ! interval @var{i} ordered from highest to lowest. If @code{@var{d} > ! 1}, @code{@var{p} (@var{r}, @var{i}, :)} contains the coefficients for ! the r-th polynomial defined on interval @var{i}. However, this is ! stored as a 2-D array such that @code{@var{c} = reshape (@var{p} (:, ! @var{j}), @var{n}, @var{d})} gives @code{@var{c} (@var{i}, @var{r})} ! is the j-th coefficient of the r-th polynomial over the i-th interval. ! @item @var{n} ! Number of polynomial pieces. ! @item @var{k} ! Order of the polynomial plus 1. ! @item @var{d} ! Number of polynomials defined for each interval. ! @end table ! @seealso{mkpp, ppval, spline} ! @end deftypefn ! deconv ! -*- texinfo -*- ! @deftypefn {Function File} {} deconv (@var{y}, @var{a}) ! Deconvolve two vectors. ! @code{[b, r] = deconv (y, a)} solves for @var{b} and @var{r} such that ! @code{y = conv (a, b) + r}. ! ! If @var{y} and @var{a} are polynomial coefficient vectors, @var{b} will ! contain the coefficients of the polynomial quotient and @var{r} will be ! a remainder polynomial of lowest order. ! @seealso{conv, poly, roots, residue, polyval, polyderiv, polyinteg} @end deftypefn ! polyfit -*- texinfo -*- ! @deftypefn {Function File} {[@var{p}, @var{s}] =} polyfit (@var{x}, @var{y}, @var{n}) ! Return the coefficients of a polynomial @var{p}(@var{x}) of degree ! @var{n} that minimizes @iftex @tex ! $$ ! \sum_{i=1}^N (p(x_i) - y_i)^2 ! $$ @end tex @end iftex @ifinfo ! @code{sumsq (p(x(i)) - y(i))}, @end ifinfo + to best fit the data in the least squares sense. ! The polynomial coefficients are returned in a row vector. ! If two output arguments are requested, the second is a structure ! containing the following fields: ! @table @code ! @item R ! The Cholesky factor of the Vandermonde matrix used to compute the ! polynomial coefficients. ! @item X ! The Vandermonde matrix used to compute the polynomial coefficients. ! @item df ! The degrees of freedom. ! @item normr ! The norm of the residuals. ! @item yf ! The values of the polynomial for each value of @var{x}. ! @end table @end deftypefn ! poly -*- texinfo -*- ! @deftypefn {Function File} {} poly (@var{a}) ! If @var{a} is a square @math{N}-by-@math{N} matrix, @code{poly (@var{a})} ! is the row vector of the coefficients of @code{det (z * eye (N) - a)}, ! the characteristic polynomial of @var{a}. As an example we can use ! this to find the eigenvalues of @var{a} as the roots of @code{poly (@var{a})}. @example ! roots(poly(eye(3))) ! @result{} 1.00000 + 0.00000i ! @result{} 1.00000 - 0.00000i ! @result{} 1.00000 + 0.00000i @end example ! In real-life examples you should, however, use the @code{eig} function ! for computing eigenvalues. ! ! If @var{x} is a vector, @code{poly (@var{x})} is a vector of coefficients ! of the polynomial whose roots are the elements of @var{x}. That is, ! of @var{c} is a polynomial, then the elements of ! @code{@var{d} = roots (poly (@var{c}))} are contained in @var{c}. ! The vectors @var{c} and @var{d} are, however, not equal due to sorting ! and numerical errors. ! @seealso{eig, roots} @end deftypefn ! polyvalm -*- texinfo -*- ! @deftypefn {Function File} {} polyvalm (@var{c}, @var{x}) ! Evaluate a polynomial in the matrix sense. ! @code{polyvalm (@var{c}, @var{x})} will evaluate the polynomial in the ! matrix sense, i.e. matrix multiplication is used instead of element by ! element multiplication as is used in polyval. ! The argument @var{x} must be a square matrix. ! @seealso{polyval, poly, roots, conv, deconv, residue, filter, ! polyderiv, and polyinteg} @end deftypefn ! polyder -*- texinfo -*- ! @deftypefn {Function File} {} polyder (@var{c}) ! @deftypefnx {Function File} {[@var{q}] =} polyder (@var{b}, @var{a}) ! @deftypefnx {Function File} {[@var{q}, @var{r}] =} polyder (@var{b}, @var{a}) ! See polyderiv. @end deftypefn ! polyderiv -*- texinfo -*- ! @deftypefn {Function File} {} polyderiv (@var{c}) ! @deftypefnx {Function File} {[@var{q}] =} polyderiv (@var{b}, @var{a}) ! @deftypefnx {Function File} {[@var{q}, @var{r}] =} polyderiv (@var{b}, @var{a}) ! Return the coefficients of the derivative of the polynomial whose ! coefficients are given by vector @var{c}. If a pair of polynomials ! is given @var{b} and @var{a}, the derivative of the product is ! returned in @var{q}, or the quotient numerator in @var{q} and the ! quotient denominator in @var{r}. ! @seealso{poly, polyinteg, polyreduce, roots, conv, deconv, residue, ! filter, polygcd, polyval, polyvalm} @end deftypefn ! compan -*- texinfo -*- ! @deftypefn {Function File} {} compan (@var{c}) ! Compute the companion matrix corresponding to polynomial coefficient ! vector @var{c}. ! The companion matrix is ! @iftex ! @tex ! $$ ! A = \left[\matrix{ ! -c_2/c_1 & -c_3/c_1 & \cdots & -c_N/c_1 & -c_{N+1}/c_1\cr ! 1 & 0 & \cdots & 0 & 0 \cr ! 0 & 1 & \cdots & 0 & 0 \cr ! \vdots & \vdots & \ddots & \vdots & \vdots \cr ! 0 & 0 & \cdots & 1 & 0}\right]. ! $$ ! @end tex ! @end iftex ! @ifnottex ! @smallexample ! _ _ ! | -c(2)/c(1) -c(3)/c(1) ... -c(N)/c(1) -c(N+1)/c(1) | ! | 1 0 ... 0 0 | ! | 0 1 ... 0 0 | ! A = | . . . . . | ! | . . . . . | ! | . . . . . | ! |_ 0 0 ... 1 0 _| ! @end smallexample ! @end ifnottex ! The eigenvalues of the companion matrix are equal to the roots of the ! polynomial. ! @seealso{poly, roots, residue, conv, deconv, polyval, polyderiv, ! polyinteg} ! @end deftypefn ! roots ! -*- texinfo -*- ! @deftypefn {Function File} {} roots (@var{v}) ! ! For a vector @var{v} with @math{N} components, return ! the roots of the polynomial ! @iftex ! @tex ! $$ ! v_1 z^{N-1} + \cdots + v_{N-1} z + v_N. ! $$ ! @end tex ! @end iftex ! @ifnottex @example ! v(1) * z^(N-1) + ... + v(N-1) * z + v(N) @end example + @end ifnottex + As an example, the following code finds the roots of the quadratic + polynomial + @iftex + @tex + $$ p(x) = x^2 - 5. $$ + @end tex + @end iftex + @ifnottex + @example + p(x) = x^2 - 5. + @end example + @end ifnottex + @example + c = [1, 0, -5]; + roots(c) + @result{} 2.2361 + @result{} -2.2361 + @end example + Note that the true result is + @iftex + @tex + $\pm \sqrt{5}$ + @end tex + @end iftex + @ifnottex + @math{+/- sqrt(5)} + @end ifnottex + which is roughly + @iftex + @tex + $\pm 2.2361$. + @end tex + @end iftex + @ifnottex + @math{+/- 2.2361}. + @end ifnottex + @seealso{compan} @end deftypefn ! conv -*- texinfo -*- ! @deftypefn {Function File} {} conv (@var{a}, @var{b}) ! Convolve two vectors. ! @code{y = conv (a, b)} returns a vector of length equal to ! @code{length (a) + length (b) - 1}. ! If @var{a} and @var{b} are polynomial coefficient vectors, @code{conv} ! returns the coefficients of the product polynomial. ! @seealso{deconv, poly, roots, residue, polyval, polyderiv, polyinteg} @end deftypefn ! ppval -*- texinfo -*- ! @deftypefn {Function File} {@var{yi} =} ppval (@var{pp}, @var{xi}) ! Evaluate piece-wise polynomial @var{pp} at the points @var{xi}. ! If @code{@var{pp}.d} is a scalar greater than 1, or an array, ! then the returned value @var{yi} will be an array that is ! @code{d1, d1, @dots{}, dk, length (@var{xi})]}. ! @seealso{mkpp, unmkpp, spline} ! @end deftypefn ! polyval ! -*- texinfo -*- ! @deftypefn {Function File} {} polyval (@var{c}, @var{x}) ! Evaluate a polynomial. ! ! @code{polyval (@var{c}, @var{x})} will evaluate the polynomial at the ! specified value of @var{x}. ! ! If @var{x} is a vector or matrix, the polynomial is evaluated at each of ! the elements of @var{x}. ! @seealso{polyvalm, poly, roots, conv, deconv, residue, filter, ! polyderiv, polyinteg} @end deftypefn ! pchip -*- texinfo -*- ! @deftypefn {Function File} {@var{pp} = } pchip (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{yi} = } pchip (@var{x}, @var{y}, @var{xi}) ! Piecewise Cubic Hermite interpolating polynomial. Called with two ! arguments, the piece-wise polynomial @var{pp} is returned, that may ! later be used with @code{ppval} to evaluate the polynomial at ! specific points. ! The variable @var{x} must be a strictly monotonic vector (either ! increasing or decreasing). While @var{y} can be either a vector or ! array. In the case where @var{y} is a vector, it must have a length ! of @var{n}. If @var{y} is an array, then the size of @var{y} must ! have the form ! @iftex ! @tex ! $$[s_1, s_2, \cdots, s_k, n]$$ ! @end tex ! @end iftex ! @ifinfo ! @code{[@var{s1}, @var{s2}, @dots{}, @var{sk}, @var{n}]} ! @end ifinfo ! The array is then reshaped internally to a matrix where the leading ! dimension is given by ! @iftex ! @tex ! $$s_1 s_2 \cdots s_k$$ ! @end tex ! @end iftex ! @ifinfo ! @code{@var{s1} * @var{s2} * @dots{} * @var{sk}} ! @end ifinfo ! and each row in this matrix is then treated separately. Note that this ! is exactly the opposite treatment than @code{interp1} and is done ! for compatibility. ! Called with a third input argument, @code{pchip} evaluates the ! piece-wise polynomial at the points @var{xi}. There is an equivalence ! between @code{ppval (pchip (@var{x}, @var{y}), @var{xi})} and ! @code{pchip (@var{x}, @var{y}, @var{xi})}. ! @seealso{spline, ppval, mkpp, unmkpp} ! @end deftypefn ! mpoles ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{multp}, @var{indx}] =} mpoles (@var{p}) ! @deftypefnx {Function File} {[@var{multp}, @var{indx}] =} mpoles (@var{p}, @var{tol}) ! @deftypefnx {Function File} {[@var{multp}, @var{indx}] =} mpoles (@var{p}, @var{tol}, @var{reorder}) ! Identifiy unique poles in @var{p} and associates their multiplicity, ! ordering them from largest to smallest. ! If the relative difference of the poles is less than @var{tol}, then ! they are considered to be multiples. The default value for @var{tol} ! is 0.001. ! If the optional parameter @var{reorder} is zero, poles are not sorted. ! The value @var{multp} is a vector specifying the multiplicity of the ! poles. @var{multp}(:) refers to mulitplicity of @var{p}(@var{indx}(:)). ! ! For example, @example @group ! p = [2 3 1 1 2]; ! [m, n] = mpoles(p); ! @result{} m = [1; 1; 2; 1; 2] ! @result{} n = [2; 5; 1; 4; 3] ! @result{} p(n) = [3, 2, 2, 1, 1] @end group @end example ! @seealso{poly, roots, conv, deconv, polyval, polyderiv, polyinteg, residue} @end deftypefn ! spline -*- texinfo -*- ! @deftypefn {Function File} {@var{pp} = } spline (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{yi} = } spline (@var{x}, @var{y}, @var{xi}) ! Returns the cubic spline interpolation of @var{y} at the point ! @var{x}. Called with two arguments the piece-wise polynomial @var{pp} ! that may later be used with @code{ppval} to evaluate the polynomial ! at specific points. ! The variable @var{x} must be a vector of length @var{n}, and @var{y} ! can be either a vector or array. In the case where @var{y} is a ! vector, it can have a length of either @var{n} or @code{@var{n} + 2}. ! If the length of @var{y} is @var{n}, then the 'not-a-knot' end ! condition is used. If the length of @var{y} is @code{@var{n} + 2}, ! then the first and last values of the vector @var{y} are the first ! derivative of the cubic spline at the end-points. ! If @var{y} is an array, then the size of @var{y} must have the form @iftex @tex ! $$[s_1, s_2, \cdots, s_k, n]$$ @end tex @end iftex @ifinfo ! @code{[@var{s1}, @var{s2}, @dots{}, @var{sk}, @var{n}]} @end ifinfo ! or @iftex @tex ! $$[s_1, s_2, \cdots, s_k, n + 2]$$. @end tex @end iftex @ifinfo ! @code{[@var{s1}, @var{s2}, @dots{}, @var{sk}, @var{n} + 2]}. @end ifinfo ! The array is then reshaped internally to a matrix where to leading ! dimension is given by @iftex @tex ! $$s_1 s_2 \cdots s_k$$ @end tex @end iftex @ifinfo ! @code{@var{s1} * @var{s2} * @dots{} * @var{sk}} @end ifinfo ! and each row this matrix is then treated separately. Note that this ! is exactly the opposite treatment than @code{interp1} and is done ! for compatibility. ! Called with a third input argument, @code{spline} evaluates the ! piece-wise spline at the points @var{xi}. There is an equivalence ! between @code{ppval (spline (@var{x}, @var{y}), @var{xi})} and ! @code{spline (@var{x}, @var{y}, @var{xi})}. ! ! @seealso{ppval, mkpp, unmkpp} @end deftypefn ! mkpp -*- texinfo -*- ! @deftypefn {Function File} {@var{pp} = } mkpp (@var{x}, @var{p}) ! @deftypefnx {Function File} {@var{pp} = } mkpp (@var{x}, @var{p}, @var{d}) ! Construct a piece-wise polynomial structure from sample points ! @var{x} and coefficients @var{p}. The ith row of @var{p}, ! @code{@var{p} (@var{i},:)}, contains the coefficients for the polynomial ! over the @var{i}-th interval, ordered from highest to ! lowest. There must be one row for each interval in @var{x}, so ! @code{rows (@var{p}) == length (@var{x}) - 1}. ! You can concatenate multiple polynomials of the same order over the ! same set of intervals using @code{@var{p} = [ @var{p1}; @var{p2}; ! @dots{}; @var{pd} ]}. In this case, @code{rows (@var{p}) == @var{d} ! * (length (@var{x}) - 1)}. ! @var{d} specifies the shape of the matrix @var{p} for all except the ! last dimension. If @var{d} is not specified it will be computed as ! @code{round (rows (@var{p}) / (length (@var{x}) - 1))} instead. ! @seealso{unmkpp, ppval, spline} @end deftypefn ! polyout -*- texinfo -*- ! @deftypefn {Function File} {} polyout (@var{c}, @var{x}) ! Write formatted polynomial @iftex @tex ! $$ c(x) = c_1 x^n + \ldots + c_n x + c_{n+1} $$ @end tex @end iftex @ifinfo ! @example ! c(x) = c(1) * x^n + ... + c(n) x + c(n+1) ! @end example @end ifinfo ! and return it as a string or write it to the screen (if ! @var{nargout} is zero). ! @var{x} defaults to the string @code{"s"}. ! @seealso{polyval, polyvalm, poly, roots, conv, deconv, residue, ! filter, polyderiv, and polyinteg} @end deftypefn ! polyreduce -*- texinfo -*- ! @deftypefn {Function File} {} polyreduce (@var{c}) ! Reduces a polynomial coefficient vector to a minimum number of terms by ! stripping off any leading zeros. ! @seealso{poly, roots, conv, deconv, residue, filter, polyval, ! polyvalm, polyderiv, polyinteg} ! @end deftypefn ! polygcd ! -*- texinfo -*- ! @deftypefn {Function File} {@var{q} =} polygcd (@var{b}, @var{a}, @var{tol}) ! Find greatest common divisor of two polynomials. This is equivalent ! to the polynomial found by multiplying together all the common roots. ! Together with deconv, you can reduce a ratio of two polynomials. ! Tolerance defaults to ! @example ! sqrt(eps). ! @end example ! Note that this is an unstable ! algorithm, so don't try it on large polynomials. + Example @example ! polygcd (poly(1:8), poly(3:12)) - poly(3:8) ! @result{} [ 0, 0, 0, 0, 0, 0, 0 ] ! deconv (poly(1:8), polygcd (poly(1:8), poly(3:12))) ... ! - poly(1:2) ! @result{} [ 0, 0, 0 ] @end example + @seealso{poly, polyinteg, polyderiv, polyreduce, roots, conv, deconv, + residue, filter, polyval, and polyvalm} + @end deftypefn + saveaudio + -*- texinfo -*- + @deftypefn {Function File} {} saveaudio (@var{name}, @var{x}, @var{ext}, @var{bps}) + Saves a vector @var{x} of audio data to the file + @file{@var{name}.@var{ext}}. The optional parameters @var{ext} and + @var{bps} determine the encoding and the number of bits per sample used + in the audio file (see @code{loadaudio}); defaults are @file{lin} and + 8, respectively. + @seealso{lin2mu, mu2lin, loadaudio, playaudio, setaudio, record} + @end deftypefn + loadaudio + -*- texinfo -*- + @deftypefn {Function File} {} loadaudio (@var{name}, @var{ext}, @var{bps}) + Loads audio data from the file @file{@var{name}.@var{ext}} into the + vector @var{x}. + + The extension @var{ext} determines how the data in the audio file is + interpreted; the extensions @file{lin} (default) and @file{raw} + correspond to linear, the extensions @file{au}, @file{mu}, or @file{snd} + to mu-law encoding. + The argument @var{bps} can be either 8 (default) or 16, and specifies + the number of bits per sample used in the audio file. + @seealso{lin2mu, mu2lin, saveaudio, playaudio, setaudio, record} @end deftypefn ! setaudio -*- texinfo -*- ! @deftypefn {Function File} {} setaudio ([@var{w_type} [, @var{value}]]) ! Execute the shell command @samp{mixer [@var{w_type} [, @var{value}]]} @end deftypefn ! record -*- texinfo -*- ! @deftypefn {Function File} {} record (@var{sec}, @var{sampling_rate}) ! Records @var{sec} seconds of audio input into the vector @var{x}. The ! default value for @var{sampling_rate} is 8000 samples per second, or ! 8kHz. The program waits until the user types @key{RET} and then ! immediately starts to record. ! @seealso{lin2mu, mu2lin, loadaudio, saveaudio, playaudio, setaudio} @end deftypefn ! playaudio -*- texinfo -*- ! @deftypefn {Function File} {} playaudio (@var{name}, @var{ext}) ! @deftypefnx {Function File} {} playaudio (@var{x}) ! Plays the audio file @file{@var{name}.@var{ext}} or the audio data ! stored in the vector @var{x}. ! @seealso{lin2mu, mu2lin, loadaudio, saveaudio, setaudio, record} @end deftypefn ! mu2lin -*- texinfo -*- ! @deftypefn {Function File} {} mu2lin (@var{x}, @var{bps}) ! Converts audio data from linear to mu-law. Mu-law values are 8-bit ! unsigned integers. Linear values use @var{n}-bit signed integers ! or floating point values in the range -1<=y<=1 if @var{n} is 0. If ! @var{n} is not specified it defaults to 8. ! @seealso{lin2mu, loadaudio, saveaudio, playaudio, setaudio, record} @end deftypefn ! wavwrite -*- texinfo -*- ! @deftypefn {Function File} {} wavwrite (@var{y}, @var{filename}) ! @deftypefnx {Function File} {} wavwrite (@var{y}, @var{fs}, @var{filename}) ! @deftypefnx {Function File} {} wavwrite (@var{y}, @var{fs}, @var{bits}, @var{filename}) ! Write @var{y} to the canonical RIFF/WAVE sound file @var{filename} ! with sample rate @var{fs} and bits per sample @var{bits}. The ! default sample rate is 8000 Hz with 16-bits per sample. Each column ! of the data represents a separate channel. ! @seealso{wavread} @end deftypefn ! lin2mu -*- texinfo -*- ! @deftypefn {Function File} {} lin2mu (@var{x}, @var{n}) ! Converts audio data from linear to mu-law. Mu-law values use 8-bit ! unsigned integers. Linear values use @var{n}-bit signed integers or ! floating point values in the range -1<=@var{x}<=1 if @var{n} is 0. ! If @var{n} is not specified it defaults to 0, 8 or 16 depending on ! the range values in @var{x}. ! @seealso{mu2lin, loadaudio, saveaudio, playaudio, setaudio, record} ! @end deftypefn ! wavread ! -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} wavread (@var{filename}) ! Load the RIFF/WAVE sound file @var{filename}, and return the samples ! in vector @var{y}. If the file contains multichannel data, then ! @var{y} is a matrix with the channels represented as columns. ! @deftypefnx {Function File} {[@var{y}, @var{Fs}, @var{bits}] =} wavread (@var{filename}) ! Additionally return the sample rate (@var{fs}) in Hz and the number of bits ! per sample (@var{bits}). ! @deftypefnx {Function File} {[@dots{}] =} wavread (@var{filename}, @var{n}) ! Read only the first @var{n} samples from each channel. ! @deftypefnx {Function File} {[@dots{}] =} wavread (@var{filename},[@var{n1} @var{n2}]) ! Read only samples @var{n1} through @var{n2} from each channel. ! @deftypefnx {Function File} {[@var{samples}, @var{channels}] =} wavread (@var{filename}, "size") ! Return the number of samples (@var{n}) and channels (@var{ch}) ! instead of the audio data. ! @seealso{wavwrite} @end deftypefn ! __pltopt__ ! Undocumented internal function. ! quiver -*- texinfo -*- ! @deftypefn {Function File} {} quiver (@var{u}, @var{v}) ! @deftypefnx {Function File} {} quiver (@var{x}, @var{y}, @var{u}, @var{v}) ! @deftypefnx {Function File} {} quiver (@dots{}, @var{s}) ! @deftypefnx {Function File} {} quiver (@dots{}, @var{style}) ! @deftypefnx {Function File} {} quiver (@dots{}, 'filled') ! @deftypefnx {Function File} {} quiver (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} quiver (@dots{}) ! Plot the @code{(@var{u}, @var{v})} components of a vector field in ! an @code{(@var{x}, @var{y})} meshgrid. If the grid is uniform, you can ! specify @var{x} and @var{y} as vectors. ! If @var{x} and @var{y} are undefined they are assumed to be ! @code{(1:@var{m}, 1:@var{n})} where @code{[@var{m}, @var{n}] = ! size(@var{u})}. ! The variable @var{s} is a scalar defining a scaling factor to use for ! the arrows of the field relative to the mesh spacing. A value of 0 ! disables all scaling. The default value is 1. ! The style to use for the plot can be defined with a line style @var{style} ! in a similar manner to the line styles used with the @code{plot} command. ! If a marker is specified then markers at the grid points of the vectors are ! printed rather than arrows. If the argument 'filled' is given then the ! markers as filled. ! ! The optional return value @var{h} provides a list of handles to the ! the parts of the vector field (body, arrow and marker). + @example + @group + [x, y] = meshgrid (1:2:20); + quiver (x, y, sin (2*pi*x/10), sin (2*pi*y/10)); + @end group + @end example + + @seealso{plot} @end deftypefn ! clf -*- texinfo -*- ! @deftypefn {Function File} {} clf () ! Clear the current figure. ! @seealso{close, delete} @end deftypefn ! meshc -*- texinfo -*- ! @deftypefn {Function File} {} meshc (@var{x}, @var{y}, @var{z}) ! Plot a mesh and contour given matrices @var{x}, and @var{y} from ! @code{meshgrid} and a matrix @var{z} corresponding to the @var{x} and ! @var{y} coordinates of the mesh. If @var{x} and @var{y} are vectors, ! then a typical vertex is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, ! columns of @var{z} correspond to different @var{x} values and rows of ! @var{z} correspond to different @var{y} values. ! @seealso{meshgrid, mesh, contour} ! @end deftypefn ! __axis_label__ ! Undocumented internal function. ! zlabel ! -*- texinfo -*- ! @deftypefn {Function File} {} zlabel (@var{string}) ! @deftypefnx {Function File} {} zlabel (@var{h}, @var{string}) ! See xlabel. ! @end deftypefn ! gcf ! -*- texinfo -*- ! @deftypefn {Function File} {} gcf () ! Return the current figure handle. If a figure does not exist, create ! one and return its handle. The handle may then be used to examine or ! set properties of the figure. For example, @example ! @group ! fplot (@@sin, [-10, 10]); ! fig = gcf (); ! set (fig, "visible", "off"); ! @end group @end example ! @noindent ! plots a sine wave, finds the handle of the current figure, and then ! makes that figure invisible. Setting the visible property of the ! figure to @code{"on"} will cause it to be displayed again. ! @seealso{get, set} @end deftypefn ! colorbar -*- texinfo -*- ! @deftypefn {Function File} {} colorbar (@var{s}) ! @deftypefnx {Function File} {} colorbar ('peer', @var{h}, @dots{}) ! Adds a colorbar to the current axes. Valid values for @var{s} are ! @table @asis ! @item 'EastOutside' ! Place the colorbar outside the plot to the right. This is the default. ! @item 'East' ! Place the colorbar inside the plot to the right. ! @item 'WestOutside' ! Place the colorbar outside the plot to the left. ! @item 'West' ! Place the colorbar inside the plot to the left. ! @item 'NorthOutside' ! Place the colorbar above the plot. ! @item 'North' ! Place the colorbar at the top of the plot. ! @item 'SouthOutside' ! Place the colorbar under the plot. ! @item 'South' ! Place the colorbar at the bottom of the plot. ! @item 'Off', 'None' ! Remove any existing colorbar from the plot. ! @end table ! If the argument 'peer' is given, then the following argument is treated ! as the axes handle on which to add the colorbar. @end deftypefn ! box -*- texinfo -*- ! @deftypefn {Function File} {} box (@var{arg}) ! @deftypefnx {Function File} {} box (@var{h}, @dots{}) ! Control the display of a border around the plot. ! The argument may be either @code{"on"} or @code{"off"}. If it is ! omitted, the current box state is toggled. ! @seealso{grid} @end deftypefn ! ndgrid -*- texinfo -*- ! @deftypefn {Function File} {[@var{y1}, @var{y2}, @dots{}, @var{y}n] =} ndgrid (@var{x1}, @var{x2}, @dots{}, @var{x}n) ! @deftypefnx {Function File} {[@var{y1}, @var{y2}, @dots{}, @var{y}n] =} ndgrid (@var{x}) ! Given n vectors @var{x1}, @dots{} @var{x}n, @code{ndgrid} returns ! n arrays of dimension n. The elements of the ith output argument ! contains the elements of the vector @var{x}i repeated over all ! dimensions different from the ith dimension. Calling ndgrid with ! only one input argument @var{x} is equivalent of calling ndgrid with ! all n input arguments equal to @var{x}: ! ! [@var{y1}, @var{y2}, @dots{}, @var{y}n] = ndgrid (@var{x}, @dots{}, @var{x}) ! @seealso{meshgrid} ! @end deftypefn ! isfigure ! -*- texinfo -*- ! @deftypefn {Function File} {} isfigure (@var{h}) ! Return true if @var{h} is a graphics handle that contains a figure ! object and false otherwise. ! @end deftypefn ! __go_draw_axes__ ! Undocumented internal function. ! __patch__ ! Undocumented internal function. ! loglog ! -*- texinfo -*- ! @deftypefn {Function File} {} loglog (@var{args}) ! Produce a two-dimensional plot using log scales for both axes. See ! the description of @code{plot} for a description of the arguments ! that @code{loglog} will accept. ! @seealso{plot, semilogx, semilogy} ! @end deftypefn ! pie ! -*- texinfo -*- ! @deftypefn {Function File} {} pie (@var{y}) ! @deftypefnx {Function File} {} pie (@var{y}, @var{explode}) ! @deftypefnx {Function File} {} pie (@dots{}, @var{labels}) ! @deftypefnx {Function File} {} pie (@var{h}, @dots{}); ! @deftypefnx {Function File} {@var{h} =} pie (@dots{}); ! Produce a pie chart. ! ! Called with a single vector arrgument, produces a pie chart of the ! elements in @var{x}, with the size of the slice determined by percentage ! size of the values of @var{x}. ! ! The variable @var{explode} is a vector of the same length as @var{x} that ! if non zero 'explodes' the slice from the pie chart. ! ! If given @var{labels} is a cell array of strings of the same length as ! @var{x}, giving the labels of each of the slices of the pie chart. ! ! The optional return value @var{h} provides a handle to the patch object. ! ! @seealso{bar, stem} ! @end deftypefn ! __area__ ! Undocumented internal function. ! stairs ! -*- texinfo -*- ! @deftypefn {Function File} {} stairs (@var{x}, @var{y}) ! Produce a stairstep plot. The arguments may be vectors or matrices. ! ! If only one argument is given, it is taken as a vector of y-values ! and the x coordinates are taken to be the indices of the elements. ! ! If two output arguments are specified, the data are generated but ! not plotted. For example, @example ! stairs (x, y); @end example @noindent ! and @example @group ! [xs, ys] = stairs (x, y); ! plot (xs, ys); @end group @end example ! @noindent ! are equivalent. ! @seealso{plot, semilogx, semilogy, loglog, polar, mesh, contour, ! bar, xlabel, ylabel, title} @end deftypefn ! plotyy -*- texinfo -*- ! @deftypefn {Function File} {} plotyy (@var{x1}, @var{y1}, @var{x2}, @var{y2}) ! @deftypefnx {Function File} {} plotyy (@dots{}, @var{fun}) ! @deftypefnx {Function File} {} plotyy (@dots{}, @var{fun1}, @var{fun2}) ! @deftypefnx {Function File} {} plotyy (@var{h}, @dots{}) ! @deftypefnx {Function File} {[@var{ax}, @var{h1}, @var{h2}] =} plotyy (@dots{}) ! Plots two sets of data with independent y-axes. The arguments @var{x1} and ! @var{y1} define the arguments for the first plot and @var{x1} and @var{y2} ! for the second. ! By default the arguments are evaluated with ! @code{feval (@@plot, @var{x}, @var{y})}. However the type of plot can be ! modified with the @var{fun} argument, in which case the plots are ! generated by @code{feval (@var{fun}, @var{x}, @var{y})}. @var{fun} can be ! a function handle, an inline function or a string of a function name. ! The function to use for each of the plots can be independently defined ! with @var{fun1} and @var{fun2}. ! If given, @var{h} defines the principal axis in which to plot the @var{x1} ! and @var{y1} data. The return value @var{ax} is a two element vector with ! the axis handles of the two plots. @var{h1} and @var{h2} are handles to ! the objects generated by the plot commands. @example @group ! x = 0:0.1:2*pi; ! y1 = sin (x); ! y2 = exp (x - 1); ! ax = plotyy (x, y1, x - 1, y2, @@plot, @@semilogy); ! xlabel ("X"); ! ylabel (ax(1), "Axis 1"); ! ylabel (ax(2), "Axis 2"); @end group @end example @end deftypefn ! __plt2mm__ ! Undocumented internal function. ! legend -*- texinfo -*- ! @deftypefn {Function File} {} legend (@var{st1}, @var{st2}, @dots{}) ! @deftypefnx {Function File} {} legend (@var{st1}, @var{st2}, @dots{}, "location", @var{pos}) ! @deftypefnx {Function File} {} legend (@var{matstr}) ! @deftypefnx {Function File} {} legend (@var{matstr}, "location", @var{pos}) ! @deftypefnx {Function File} {} legend (@var{cell}) ! @deftypefnx {Function File} {} legend (@var{cell}, "location", @var{pos}) ! @deftypefnx {Function File} {} legend ('@var{func}') ! Display a legend for the current axes using the specified strings ! as labels. Legend entries may be specified as individual character ! string arguments, a character array, or a cell array of character ! strings. Legend works on line graphs, bar graphs, etc. A plot must ! exist before legend is called. ! The optional parameter @var{pos} specifies the location of the legend ! as follows: ! ! @multitable @columnfractions 0.06 0.14 0.80 ! @item @tab north @tab ! center top ! @item @tab south @tab ! center bottom ! @item @tab east @tab ! right center ! @item @tab west @tab ! left center ! @item @tab northeast @tab ! right top (default) ! @item @tab northwest @tab ! left top ! @item @tab southeast @tab ! right bottom ! @item @tab southwest @tab ! left bottom ! @item ! @item @tab outside @tab ! can be appended to any location string ! @end multitable ! ! Some specific functions are directly available using @var{func}: ! ! @table @asis ! @item "show" ! Show legends from the plot ! @item "hide" ! @itemx "off" ! Hide legends from the plot ! @item "boxon" ! Draw a box around legends ! @item "boxoff" ! Withdraw the box around legends ! @item "left" ! Text is to the left of the keys ! @item "right" ! Text is to the right of the keys ! @end table @end deftypefn ! print -*- texinfo -*- ! @deftypefn {Function File} {} print (@var{filename}, @var{options}) ! Print a graph, or save it to a file ! @var{filename} defines the file name of the output file. If no ! filename is specified, output is sent to the printer. ! @var{options}: ! @table @code ! @item -P@var{printer} ! Set the @var{printer} name to which the graph is sent if no ! @var{filename} is specified. ! @item -color ! @itemx -mono ! Monochrome or colour lines. ! @item -solid ! @itemx -dashed ! Solid or dashed lines. ! @item -portrait ! @itemx -landscape ! Plot orientation, as returned by "orient". ! @item -d@var{device} ! Output device, where @var{device} is one of: ! @table @code ! @item ps ! @itemx ps2 ! @itemx psc ! @itemx psc2 ! Postscript (level 1 and 2, mono and color) ! @item eps ! @itemx eps2 ! @itemx epsc ! @itemx epsc2 ! Encapsulated postscript (level 1 and 2, mono and color) ! @item tex ! @itemx epslatex ! @itemx epslatexstandalone ! @itemx pstex ! @itemx pslatex ! Generate a LaTeX (or TeX) file for labels, and eps/ps for ! graphics. The file produced by @code{epslatexstandalone} can be ! processed directly by LaTeX. The other formats are intended to ! be included in a LaTeX (or TeX) document. The @code{tex} device ! is the same as the @code{epslatex} device. ! @item ill ! @itemx aifm ! Adobe Illustrator ! @item cdr ! @itemx corel ! CorelDraw ! @item dxf ! AutoCAD ! @item emf ! Microsoft Enhanced Metafile ! @item fig ! XFig. If this format is selected the additional options ! @code{-textspecial} or @code{-textnormal} can be used to control ! whether the special flag should be set for the text in the figure ! (default is @code{-textnormal}). ! @item hpgl ! HP plotter language ! @item mf ! Metafont ! @item png ! Portable network graphics ! @item jpg ! @itemx jpeg ! JPEG image ! @item gif ! GIF image ! @item pbm ! PBMplus ! @item svg ! Scalable vector graphics ! @item pdf ! Portable document format ! @end table ! Other devices are supported by "convert" from ImageMagick. Type ! system("convert") to see what formats are available. ! ! If the device is omitted, it is inferred from the file extension, ! or if there is no filename it is sent to the printer as postscript. ! ! @itemx -S@var{xsize},@var{ysize} ! Plot size in pixels for PNG and SVG. If using the command form of ! the print function, you must quote the @var{xsize},@var{ysize} ! option. For example, by writing @code{"-S640,480"}. ! ! @item -F@var{fontname} ! @itemx -F@var{fontname}:@var{size} ! @itemx -F:@var{size} ! @var{fontname} set the postscript font (for use with postscript, ! aifm, corel and fig). By default, 'Helvetica' is set for PS/Aifm, ! and 'SwitzerlandLight' for Corel. It can also be 'Times-Roman'. ! @var{size} is given in points. @var{fontname} is ignored for the ! fig device. ! @end table ! ! The filename and options can be given in any order. @end deftypefn ! __pltopt1__ ! Undocumented internal function. ! replot -*- texinfo -*- ! @deftypefn {Function File} {} replot () ! Refresh the plot window. @end deftypefn ! __plt2vm__ ! Undocumented internal function. ! sphere -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{y}, @var{z}] =} sphere (@var{n}) ! @deftypefnx {Function File} {} sphere (@var{h}, @dots{}) ! Generates three matrices in @code{meshgrid} format, such that ! @code{surf (@var{x}, @var{y}, @var{z})} generates a unit sphere. ! The matrices of @code{@var{n}+1}-by-@code{@var{n}+1}. If @var{n} is ! omitted then a default value of 20 is assumed. ! ! Called with no return arguments, @code{sphere} call directly ! @code{surf (@var{x}, @var{y}, @var{z})}. If an axes handle is passed ! as the first argument, the the surface is plotted to this set of axes. ! @seealso{peaks} @end deftypefn ! hist -*- texinfo -*- ! @deftypefn {Function File} {} hist (@var{y}, @var{x}, @var{norm}) ! Produce histogram counts or plots. ! With one vector input argument, plot a histogram of the values with ! 10 bins. The range of the histogram bins is determined by the range ! of the data. ! Given a second scalar argument, use that as the number of bins. ! Given a second vector argument, use that as the centers of the bins, ! with the width of the bins determined from the adjacent values in ! the vector. ! If third argument is provided, the histogram is normalised such that ! the sum of the bars is equal to @var{norm}. ! Extreme values are lumped in the first and last bins. ! ! With two output arguments, produce the values @var{nn} and @var{xx} such ! that @code{bar (@var{xx}, @var{nn})} will plot the histogram. ! @seealso{bar} ! @end deftypefn ! __errcomm__ ! Undocumented internal function. ! hold ! -*- texinfo -*- ! @deftypefn {Function File} {} hold @var{args} ! Tell Octave to `hold' the current data on the plot when executing ! subsequent plotting commands. This allows you to execute a series of ! plot commands and have all the lines end up on the same figure. The ! default is for each new plot command to clear the plot device first. ! For example, the command @example ! hold on @end example ! @noindent ! turns the hold state on. An argument of @code{"off"} turns the hold ! state off, and @code{hold} with no arguments toggles the current hold ! state. @end deftypefn ! __axes_limits__ ! Undocumented internal function. ! __default_plot_options__ ! Undocumented internal function. ! loglogerr -*- texinfo -*- ! @deftypefn {Function File} {} loglogerr (@var{args}) ! Produce two-dimensional plots on double logarithm axis with ! errorbars. Many different combinations of arguments are possible. ! The most used form is @example ! loglogerr (@var{x}, @var{y}, @var{ey}, @var{fmt}) @end example ! ! @noindent ! which produces a double logarithm plot of @var{y} versus @var{x} ! with errors in the @var{y}-scale defined by @var{ey} and the plot ! format defined by @var{fmt}. See errorbar for available formats and ! additional information. ! @seealso{errorbar, semilogxerr, semilogyerr} @end deftypefn ! area -*- texinfo -*- ! @deftypefn {Function File} {} area (@var{x}, @var{y}) ! @deftypefnx {Function File} {} area (@var{x}, @var{y}, @var{lvl}) ! @deftypefnx {Function File} {} area (@dots{}, @var{prop}, @var{val}, @dots{}) ! @deftypefnx {Function File} {} area (@var{y}, @dots{}) ! @deftypefnx {Function File} {} area (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} area (@dots{}) ! Area plot of cummulative sum of the columns of @var{y}. This shows the ! contributions of a value to a sum, and is functionally similar to ! @code{plot (@var{x}, cumsum (@var{y}, 2))}, except that the area under ! the curve is shaded. ! If the @var{x} argument is ommitted it is assumed to be given by ! @code{1 : rows (@var{y})}. A value @var{lvl} can be defined that determines ! where the base level of the shading under the curve should be defined. ! ! Additional arguments to the @code{area} function are passed to the ! @code{patch}. The optional return value @var{h} provides a handle to ! the list of patch objects. ! @seealso{plot, patch} @end deftypefn ! quiver3 -*- texinfo -*- ! @deftypefn {Function File} {} quiver3 (@var{u}, @var{v}, @var{w}) ! @deftypefnx {Function File} {} quiver3 (@var{x}, @var{y}, @var{z}, @var{u}, @var{v}, @var{w}) ! @deftypefnx {Function File} {} quiver3 (@dots{}, @var{s}) ! @deftypefnx {Function File} {} quiver3 (@dots{}, @var{style}) ! @deftypefnx {Function File} {} quiver3 (@dots{}, 'filled') ! @deftypefnx {Function File} {} quiver3 (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} quiver3 (@dots{}) ! Plot the @code{(@var{u}, @var{v}, @var{w})} components of a vector field in ! an @code{(@var{x}, @var{y}), @var{z}} meshgrid. If the grid is uniform, you ! can specify @var{x}, @var{y} @var{z} as vectors. ! If @var{x}, @var{y} and @var{z} are undefined they are assumed to be ! @code{(1:@var{m}, 1:@var{n}, 1:@var{p})} where @code{[@var{m}, @var{n}] = ! size(@var{u})} and @code{@var{p} = max (size (@var{w}))}. ! The variable @var{s} is a scalar defining a scaling factor to use for ! the arrows of the field relative to the mesh spacing. A value of 0 ! disables all scaling. The default value is 1. ! The style to use for the plot can be defined with a line style @var{style} ! in a similar manner to the line styles used with the @code{plot} command. ! If a marker is specified then markers at the grid points of the vectors are ! printed rather than arrows. If the argument 'filled' is given then the ! markers as filled. ! The optional return value @var{h} provides a list of handles to the ! the parts of the vector field (body, arrow and marker). @example @group ! [x, y, z] = peaks (25); ! surf (x, y, z); ! hold on; ! [u, v, w] = surfnorm (x, y, z / 10); ! quiver3 (x, y, z, u, v, w); @end group @end example ! ! @seealso{plot} @end deftypefn ! text -*- texinfo -*- ! @deftypefn {Function File} {@var{h} =} text (@var{x}, @var{y}, @var{label}) ! @deftypefnx {Function File} {@var{h} =} text (@var{x}, @var{y}, @var{z}, @var{label}) ! @deftypefnx {Function File} {@var{h} =} text (@var{x}, @var{y}, @var{label}, @var{p1}, @var{v1}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} text (@var{x}, @var{y}, @var{z}, @var{label}, @var{p1}, @var{v1}, @dots{}) ! Create a text object with text @var{label} at position @var{x}, ! @var{y}, @var{z} on the current axes. Property-value pairs following ! @var{label} may be used to specify the appearance of the text. @end deftypefn ! surface -*- texinfo -*- ! @deftypefn {Function File} {} surface (@var{x}, @var{y}, @var{z}, @var{c}) ! @deftypefnx {Function File} {} surface (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {} surface (@var{z}, @var{c}) ! @deftypefnx {Function File} {} surface (@var{z}) ! @deftypefnx {Function File} {} surface (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} surface (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} = } surface (@dots{}) ! Plot a surface graphic object given matrices @var{x}, and @var{y} from ! @code{meshgrid} and a matrix @var{z} corresponding to the @var{x} and ! @var{y} coordinates of the surface. If @var{x} and @var{y} are vectors, ! then a typical vertex is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, ! columns of @var{z} correspond to different @var{x} values and rows of ! @var{z} correspond to different @var{y} values. If @var{x} and @var{y} ! are missing, they are constructed from size of the matrix @var{z}. ! Any additional properties passed are assigned the the surface.. ! @seealso{surf, mesh, patch, line} @end deftypefn ! __plt2ss__ ! Undocumented internal function. ! orient ! -*- texinfo -*- ! @deftypefn {Function File} {} orient (@var{orientation}) ! Set the default print orientation. Valid values for ! @var{orientation} include @code{"landscape"} and @code{"portrait"}. ! If called with no arguments, return the default print orientation. @end deftypefn ! polar -*- texinfo -*- ! @deftypefn {Function File} {} polar (@var{theta}, @var{rho}, @var{fmt}) ! Make a two-dimensional plot given the polar coordinates @var{theta} and ! @var{rho}. ! The optional third argument specifies the line type. ! @seealso{plot} @end deftypefn ! ylim -*- texinfo -*- ! @deftypefn {Function File} {@var{xl} =} ylim () ! @deftypefnx {Function File} {} ylim (@var{xl}) ! @deftypefnx {Function File} {@var{m} =} ylim ('mode') ! @deftypefnx {Function File} {} ylim (@var{m}) ! @deftypefnx {Function File} {} ylim (@var{h}, @dots{}) ! Get or set the limits of the y axis of the current plot. Called without ! argumenst @code{ylim] returns the y axis limits of the current plot. ! If passed a two element vector @var{xl}, the limits of the y axis are set ! to this value. ! The current mode for calculation of the y axis can be returned with a ! call @code{ylim ('mode')}, and can be either 'auto' or 'manual'. The ! current plotting mode can be set by passing either 'auto' or 'manual' ! as the argument. + If passed an handle as the first argument, then operate on this handle + rather than the current axes handle. + @seealso{xlim, zlim, set, get, gca} @end deftypefn ! sombrero -*- texinfo -*- ! @deftypefn {Function File} {} sombrero (@var{n}) ! Produce the familiar three-dimensional sombrero plot using @var{n} ! grid lines. If @var{n} is omitted, a value of 41 is assumed. ! The function plotted is ! @example ! z = sin (sqrt (x^2 + y^2)) / (sqrt (x^2 + y^2)) ! @end example ! @seealso{surf, meshgrid, mesh} @end deftypefn ! caxis -*- texinfo -*- ! @deftypefn {Function File} {} caxis (@var{limits}) ! @deftypefnx {Function File} {} caxis (@var{h}, @dots{}) ! Set color axis limits for plots. ! The argument @var{limits} should be a 2 element vector specifying the ! lower and upper limits to assign to the first and last value in the ! colormap. Values outside this range are clamped to the first and last ! colormap entries. ! If @var{limits} is 'auto', then automatic colormap scaling is applied, ! whereas if @var{limits} is 'manual' the colormap scaling is set to manual. ! Called without any arguments to current color axis limits are returned. ! If an axes handle is passed as the first argument, then operate on ! this axes rather than the current axes. @end deftypefn ! zlim -*- texinfo -*- ! @deftypefn {Function File} {@var{xl} =} zlim () ! @deftypefnx {Function File} {} zlim (@var{xl}) ! @deftypefnx {Function File} {@var{m} =} zlim ('mode') ! @deftypefnx {Function File} {} zlim (@var{m}) ! @deftypefnx {Function File} {} zlim (@var{h}, @dots{}) ! Get or set the limits of the z axis of the current plot. Called without ! argumenst @code{zlim] returns the z axis limits of the current plot. ! If passed a two element vector @var{xl}, the limits of the z axis are set ! to this value. ! The current mode for calculation of the z axis can be returned with a ! call @code{zlim ('mode')}, and can be either 'auto' or 'manual'. The ! current plotting mode can be set by passing either 'auto' or 'manual' ! as the argument. + If passed an handle as the first argument, then operate on this handle + rather than the current axes handle. + @seealso{xlim, ylim, set, get, gca} @end deftypefn ! ellipsoid -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{y}, @var{z}] =} ellipsoid (@var{xc},@var{yc}, @var{zc}, @var{xr}, @var{yr}, @var{zr}, @var{n}) ! @deftypefnx {Function File} {} ellipsoid (@var{h}, @dots{}) ! Generate three matrices in @code{meshgrid} format that define an ! ellipsoid. Called with no return arguments, @code{ellipsoid} calls ! directly @code{surf (@var{x}, @var{y}, @var{z})}. If an axes handle ! is passed as the first argument, the the surface is plotted to this ! set of axes. ! @seealso{sphere} @end deftypefn ! xlabel -*- texinfo -*- ! @deftypefn {Function File} {} xlabel (@var{string}) ! @deftypefnx {Function File} {} ylabel (@var{string}) ! @deftypefnx {Function File} {} zlabel (@var{string}) ! @deftypefnx {Function File} {} xlabel (@var{h}, @var{string}) ! Specify x, y, and z axis labels for the current figure. If @var{h} is ! specified then label the axis defined by @var{h}. ! @seealso{plot, semilogx, semilogy, loglog, polar, mesh, contour, ! bar, stairs, ylabel, title} @end deftypefn ! __go_close_all__ ! Undocumented internal function. ! ribbon -*- texinfo -*- ! @deftypefn {Function File} ribbon (@var{x}, @var{y}, @var{width}) ! @deftypefnx {Function File} ribbon (@var{y}) ! @deftypefnx {Function File} @var{h} = ribbon (@dots{}) ! Plot a ribbon plot for the columns of @var{y} vs. @var{x}. The ! optional parameter @var{width} specifies the width of a single ribbon ! (default is 0.75). If @var{x} is omitted, a vector containing the ! row numbers is assumed (1:rows(Y)). If requested, return a vector ! @var{h} of the handles to the surface objects. ! @seealso{gca, colorbar} @end deftypefn ! __plt2vv__ ! Undocumented internal function. ! barh -*- texinfo -*- ! @deftypefn {Function File} {} barh (@var{x}, @var{y}) ! @deftypefnx {Function File} {} barh (@var{y}) ! @deftypefnx {Function File} {} barh (@var{x}, @var{y}, @var{w}) ! @deftypefnx {Function File} {} barh (@var{x}, @var{y}, @var{w}, @var{style}) ! @deftypefnx {Function File} {@var{h} =} barh (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} barh (@var{h}, @dots{}) ! Produce a horizontal bar graph from two vectors of x-y data. ! If only one argument is given, it is taken as a vector of y-values ! and the x coordinates are taken to be the indices of the elements. ! The default width of 0.8 for the bars can be changed using @var{w}. ! If @var{y} is a matrix, then each column of @var{y} is taken to be a ! separate bar graph plotted on the same graph. By default the columns ! are plotted side-by-side. This behavior can be changed by the @var{style} ! argument, which can take the values @code{"grouped"} (the default), ! or @code{"stacked"}. ! ! The optional return value @var{h} provides a handle to the patch object. ! Whereas the option input handle @var{h} allows an axis handle to be passed. ! Properties of the patch graphics object can be changed using ! @var{prop}, @var{val} pairs. ! ! @seealso{bar, plot} @end deftypefn ! hidden -*- texinfo -*- ! @deftypefn {Function File} {} hidden (@var{mode}) ! @deftypefnx {Function File} {} hidden () ! Manipulation the mesh hidden line removal. Called with no argument ! the hidden line removal is toggled. The argument @var{mode} can be either ! 'on' or 'off' and the set of the hidden line removal is set accordingly. ! @seealso{mesh, meshc, surf} @end deftypefn ! errorbar -*- texinfo -*- ! @deftypefn {Function File} {} errorbar (@var{args}) ! This function produces two-dimensional plots with errorbars. Many ! different combinations of arguments are possible. The simplest form is ! @example ! errorbar (@var{y}, @var{ey}) ! @end example ! @noindent ! where the first argument is taken as the set of @var{y} coordinates ! and the second argument @var{ey} is taken as the errors of the ! @var{y} values. @var{x} coordinates are taken to be the indices ! of the elements, starting with 1. ! ! If more than two arguments are given, they are interpreted as ! ! @example ! errorbar (@var{x}, @var{y}, @dots{}, @var{fmt}, @dots{}) ! @end example ! ! @noindent ! where after @var{x} and @var{y} there can be up to four error ! parameters such as @var{ey}, @var{ex}, @var{ly}, @var{uy} etc., ! depending on the plot type. Any number of argument sets may appear, ! as long as they are separated with a format string @var{fmt}. ! ! If @var{y} is a matrix, @var{x} and error parameters must also be matrices ! having same dimensions. The columns of @var{y} are plotted versus the ! corresponding columns of @var{x} and errorbars are drawn from ! the corresponding columns of error parameters. ! ! If @var{fmt} is missing, yerrorbars ("~") plot style is assumed. ! ! If the @var{fmt} argument is supplied, it is interpreted as in ! normal plots. In addition the following plot styles are supported by ! errorbar: ! ! @table @samp ! @item ~ ! Set yerrorbars plot style (default). ! ! @item > ! Set xerrorbars plot style. ! ! @item ~> ! Set xyerrorbars plot style. ! ! @item # ! Set boxes plot style. ! ! @item #~ ! Set boxerrorbars plot style. ! ! @item #~> ! Set boxxyerrorbars plot style. ! @end table ! ! Examples: ! ! @example ! errorbar (@var{x}, @var{y}, @var{ex}, ">") ! @end example ! ! produces an xerrorbar plot of @var{y} versus @var{x} with @var{x} ! errorbars drawn from @var{x}-@var{ex} to @var{x}+@var{ex}. ! ! @example ! errorbar (@var{x}, @var{y1}, @var{ey}, "~", ! @var{x}, @var{y2}, @var{ly}, @var{uy}) ! @end example ! ! produces yerrorbar plots with @var{y1} and @var{y2} versus @var{x}. ! Errorbars for @var{y1} are drawn from @var{y1}-@var{ey} to ! @var{y1}+@var{ey}, errorbars for @var{y2} from @var{y2}-@var{ly} to ! @var{y2}+@var{uy}. ! ! @example ! errorbar (@var{x}, @var{y}, @var{lx}, @var{ux}, ! @var{ly}, @var{uy}, "~>") ! @end example ! ! produces an xyerrorbar plot of @var{y} versus @var{x} in which ! @var{x} errorbars are drawn from @var{x}-@var{lx} to @var{x}+@var{ux} ! and @var{y} errorbars from @var{y}-@var{ly} to @var{y}+@var{uy}. ! @seealso{semilogxerr, semilogyerr, loglogerr} @end deftypefn ! contour -*- texinfo -*- ! @deftypefn {Function File} {} contour (@var{z}) ! @deftypefnx {Function File} {} contour (@var{z}, @var{vn}) ! @deftypefnx {Function File} {} contour (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {} contour (@var{x}, @var{y}, @var{z}, @var{vn}) ! @deftypefnx {Function File} {} contour (@dots{}, @var{style}) ! @deftypefnx {Function File} {} contour (@var{h}, @dots{}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contour (@dots{}) ! Plot level curves (contour lines) of the matrix @var{z}, using the ! contour matrix @var{c} computed by @code{contourc} from the same ! arguments; see the latter for their interpretation. The set of ! contour levels, @var{c}, is only returned if requested. For example: ! @example ! @group ! x = 0:2; ! y = x; ! z = x' * y; ! contour (x, y, z, 2:3) ! @end group ! @end example ! The style to use for the plot can be defined with a line style @var{style} ! in a similar manner to the line styles used with the @code{plot} command. ! Any markers defined by @var{style} are ignored. ! The optional input and output argument @var{h} allows an axis handle to ! be passed to @code{contour} and the handles to the contour objects to be ! returned. ! @seealso{contourc, patch, plot} @end deftypefn ! title -*- texinfo -*- ! @deftypefn {Function File} {} title (@var{title}) ! Create a title object and return a handle to it. @end deftypefn ! bar -*- texinfo -*- ! @deftypefn {Function File} {} bar (@var{x}, @var{y}) ! @deftypefnx {Function File} {} bar (@var{y}) ! @deftypefnx {Function File} {} bar (@var{x}, @var{y}, @var{w}) ! @deftypefnx {Function File} {} bar (@var{x}, @var{y}, @var{w}, @var{style}) ! @deftypefnx {Function File} {@var{h} =} bar (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} bar (@var{h}, @dots{}) ! Produce a bar graph from two vectors of x-y data. ! ! If only one argument is given, it is taken as a vector of y-values ! and the x coordinates are taken to be the indices of the elements. ! ! The default width of 0.8 for the bars can be changed using @var{w}. ! ! If @var{y} is a matrix, then each column of @var{y} is taken to be a ! separate bar graph plotted on the same graph. By default the columns ! are plotted side-by-side. This behavior can be changed by the @var{style} ! argument, which can take the values @code{"grouped"} (the default), ! or @code{"stacked"}. ! ! The optional return value @var{h} provides a handle to the patch object. ! Whereas the option input handle @var{h} allows an axis handle to be passed. ! Properties of the patch graphics object can be changed using ! @var{prop}, @var{val} pairs. ! ! @seealso{barh, plot} @end deftypefn ! semilogyerr -*- texinfo -*- ! @deftypefn {Function File} {} semilogyerr (@var{args}) ! Produce two-dimensional plots on a semilogarithm axis with errorbars. ! Many different combinations of arguments are possible. The most used ! form is ! ! @example ! semilogyerr (@var{x}, @var{y}, @var{ey}, @var{fmt}) ! @end example ! ! @noindent ! which produces a semi-logarithm plot of @var{y} versus @var{x} ! with errors in the @var{y}-scale defined by @var{ey} and the plot ! format defined by @var{fmt}. See errorbar for available formats and ! additional information. ! @seealso{errorbar, loglogerr semilogxerr} @end deftypefn ! semilogxerr -*- texinfo -*- ! @deftypefn {Function File} {} semilogxerr (@var{args}) ! Produce two-dimensional plots on a semilogarithm axis with errorbars. ! Many different combinations of arguments are possible. The most used ! form is ! ! @example ! semilogxerr (@var{x}, @var{y}, @var{ey}, @var{fmt}) ! @end example ! ! @noindent ! which produces a semi-logarithm plot of @var{y} versus @var{x} ! with errors in the @var{y}-scale defined by @var{ey} and the plot ! format defined by @var{fmt}. See errorbar for available formats and ! additional information. ! @seealso{errorbar, loglogerr semilogyerr} @end deftypefn ! pareto -*- texinfo -*- ! @deftypefn {Function File} {} pareto (@var{x}) ! @deftypefnx {Function File} {} pareto (@var{x}, @var{y}) ! @deftypefnx {Function File} {} pareto (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} pareto (@dots{}) ! Draw a Pareto chart, also called ABC chart. A Pareto chart is a bar graph ! used to arrange information in such a way that priorities for process ! improvement can be established. It organizes and displays information ! to show the relative importance of data. The chart is similar to the ! histogram or bar chart, except that the bars are arranged in decreasing ! order from left to right along the abscissa. ! The fundamental idea (Pareto principle) behind the use of Pareto ! diagrams is that the majority of an effect is due to a small subset of the ! causes, so for quality improvement the first few (as presented on the ! diagram) contributing causes to a problem usually account for the majority ! of the result. Thus, targeting these "major causes" for elimination ! results in the most cost-effective improvement scheme. ! The data are passed as @var{x} and the abscissa as @var{y}. If @var{y} is ! absent, then the abscissa are assumed to be @code{1 : length (@var{x})}. ! @var{y} can be a string array, a cell array of strings or a numerical ! vector. ! ! An example of the use of @code{pareto} is ! ! @example ! @group ! Cheese = @{"Cheddar", "Swiss", "Camembert", "Munster", "Stilton", ... ! "Blue"@}; ! Sold = [105, 30, 70, 10, 15, 20]; ! pareto(Sold, Cheese); ! @end group ! @end example @end deftypefn ! __bars__ ! Undocumented internal function. ! stem -*- texinfo -*- ! @deftypefn {Function File} {@var{h} =} stem (@var{x}, @var{y}, @var{linespec}) ! Plot a stem graph and return the handles of the line and marker ! objects used to draw the stems. The default color is @code{"r"} ! (red). The default line style is @code{"-"} and the default marker is ! @code{"o"}. For example, @example ! x = 1:10; ! stem (x); @end example ! @noindent ! plots 10 stems with heights from 1 to 10; @example ! x = 1:10; ! y = ones (1, length (x))*2.*x; ! stem (x, y); @end example ! @noindent ! plots 10 stems with heights from 2 to 20; ! @example ! x = 1:10; ! y = ones (size (x))*2.*x; ! h = stem (x, y, "b"); @end example ! @noindent ! plots 10 bars with heights from 2 to 20 ! (the color is blue, and @var{h} is a 2-by-10 array of handles in ! which the first row holds the line handles and ! the second row holds the marker handles); ! @example ! x = 1:10; ! y = ones (size (x))*2.*x; ! h = stem (x, y, "-.k"); ! @end example ! @noindent ! plots 10 stems with heights from 2 to 20 ! (the color is black, line style is @code{"-."}, and @var{h} is a 2-by-10 ! array of handles in which the first row holds the line handles and ! the second row holds the marker handles); ! @example ! x = 1:10; ! y = ones (size (x))*2.*x; ! h = stem (x, y, "-.k."); ! @end example ! @noindent ! plots 10 stems with heights from 2 to 20 ! (the color is black, line style is @code{"-."} and the marker style ! is @code{"."}, and @var{h} is a 2-by-10 array of handles in which the ! first row holds the line handles and the second row holds the marker ! handles); ! ! @example ! x = 1:10; ! y = ones (size (x))*2.*x; ! h = stem (x, y, "fill"); ! @end example ! @noindent ! plots 10 stems with heights from 2 to 20 ! (the color is rgb-triple defined, the line style is @code{"-"}, ! the marker style is @code{"o"}, and @var{h} is a 2-by-10 array of ! handles in which the first row holds the line handles and the second ! row holds the marker handles). ! ! Color definitions with rgb-triples are not valid! ! @seealso{bar, barh, plot} @end deftypefn ! stem3 -*- texinfo -*- ! @deftypefn {Function File} {@var{h} =} stem3 (@var{x}, @var{y}, @var{z}, @var{linespec}) ! Plot a three-dimensional stem graph and return the handles of the line ! and marker objects used to draw the stems. The default color is @code{"r"} ! (red). The default line style is @code{"-"} and the default marker is ! @code{"o"}. ! For example, ! @example ! theta = 0:0.2:6; ! stem3 (cos (theta), sin (theta), theta) ! @end example ! @noindent ! plots 31 stems with heights from 0 to 6 lying on a circle. Color ! definitions with rgb-triples are not valid! ! @seealso{bar, barh, stem, plot} @end deftypefn ! __plt2mv__ ! Undocumented internal function. ! __errplot__ ! Undocumented internal function. ! closereq -*- texinfo -*- ! @deftypefn {Function File} {} closereq () ! Close the current figure and delete all graphics objects associated ! with it. ! @seealso{close, delete} ! @end deftypefn ! __plt2vs__ ! Undocumented internal function. ! findobj ! -*- texinfo -*- ! @deftypefn {Function File} {@var{h} =} findobj () ! @deftypefnx {Function File} {@var{h} =} findobj (@var{propName}, @var{propValue}) ! @deftypefnx {Function File} {@var{h} =} findobj ('-property', @var{propName}) ! @deftypefnx {Function File} {@var{h} =} findobj ('-regexp', @var{propName},, @var{pattern}) ! @deftypefnx {Function File} {@var{h} =} findobj ('flat', @dots{}) ! @deftypefnx {Function File} {@var{h} =} findobj (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} findobj (@var{h}, '-depth', @var{d}, @dots{}) ! Find object with specified property values. The simplest form is ! @example ! findobj (@var{propName}, @var{propValue}) ! @end example ! @noindent ! which returns all of the handles to the objects with the name ! @var{propName} and the name @var{propValue}. The search can be limited ! to a particular object or set of objects and their descendants by ! passing a handle or set of handles @var{h} as the first argument to ! @code{findobj}. ! The depth of hierarchy of objects to which to search to can be limited ! with the '-depth' argument. To limit the number depth of the hierarchy ! to search to @var{d} generations of children, and example is ! @example ! findobj (@var{h}, '-depth', @var{d}, @var{propName}, @var{propValue}) ! @end example ! ! Specifying a depth @var{d} of 0, limits the search to the set of object ! passed in @var{h}. A depth @var{d} of 0 is equivalent to the '-flat' ! argument. ! ! A specified logical operator may be applied to the pairs of @var{propName} ! and @var{propValue}. The supported logical operators are '-and', '-or', ! '-xor', '-not'. ! ! The objects may also be matched by comparing a regular expression to the ! property values, where property values that match @code{regexp ! (@var{propValue}, @var{pattern})} are returned. Finally, objects may be ! matched by property name only, using the '-property' option. ! @seealso{get, set} @end deftypefn ! __plr1__ ! Undocumented internal function. ! __plt2sv__ ! Undocumented internal function. ! ishold -*- texinfo -*- ! @deftypefn {Function File} {} ishold ! Return true if the next line will be added to the current plot, or ! false if the plot device will be cleared before drawing the next line. @end deftypefn ! ylabel -*- texinfo -*- ! @deftypefn {Function File} {} ylabel (@var{string}) ! @deftypefnx {Function File} {} ylabel (@var{h}, @var{string}) ! See xlabel. @end deftypefn ! grid -*- texinfo -*- ! @deftypefn {Function File} {} grid (@var{arg}) ! @deftypefnx {Function File} {} grid ("minor", @var{arg2}) ! Force the display of a grid on the plot. ! The argument may be either @code{"on"} or @code{"off"}. If it is ! omitted, the current grid state is toggled. ! ! If @var{arg} is @code{"minor"} then the minor grid is toggled. When ! using a minor grid a second argument @var{arg2} is allowed, which can ! be either @code{"on"} or @code{"off"} to explicitly set the state of ! the minor grid. ! @seealso{plot} @end deftypefn ! ancestor -*- texinfo -*- ! @deftypefn {Function File} {@var{parent} =} ancestor (@var{h}, @var{type}) ! @deftypefnx {Function File} {@var{parent} =} ancestor (@var{h}, @var{type}, 'toplevel') ! Return the first ancestor of handle object @var{h} whose type matches ! @var{type}, where @var{type} is a character string. If @var{type} is a ! cell array of strings, return the first parent whose type matches ! any of the given type strings. ! If the handle object @var{h} is of type @var{type}, return @var{h}. ! If @code{"toplevel"} is given as a 3rd argument, return the highest ! parent in the object hierarchy that matches the condition, instead ! of the first (nearest) one. ! @seealso{get, set} @end deftypefn ! meshgrid -*- texinfo -*- ! @deftypefn {Function File} {[@var{xx}, @var{yy}, @var{zz}] =} meshgrid (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {[@var{xx}, @var{yy}] =} meshgrid (@var{x}, @var{y}) ! @deftypefnx {Function File} {[@var{xx}, @var{yy}] =} meshgrid (@var{x}) ! Given vectors of @var{x} and @var{y} and @var{z} coordinates, and ! returning 3 arguments, return three dimensional arrays corresponding ! to the @var{x}, @var{y}, and @var{z} coordinates of a mesh. When ! returning only 2 arguments, return matrices corresponding to the ! @var{x} and @var{y} coordinates of a mesh. The rows of @var{xx} are ! copies of @var{x}, and the columns of @var{yy} are copies of @var{y}. ! If @var{y} is omitted, then it is assumed to be the same as @var{x}, ! and @var{z} is assumed the same as @var{y}. ! @seealso{mesh, contour} @end deftypefn ! slice -*- texinfo -*- ! @deftypefn {Function File} {} slice (@var{x}, @var{y}, @var{z}, @var{v}, @var{sx}, @var{sy}, @var{sz}) ! @deftypefnx {Function File} {} slice (@var{x}, @var{y}, @var{z}, @var{v}, @var{xi}, @var{yi}, @var{zi}) ! @deftypefnx {Function File} {} slice (@var{v}, @var{sx}, @var{sy}, @var{sz}) ! @deftypefnx {Function File} {} slice (@var{v}, @var{xi}, @var{yi}, @var{zi}) ! @deftypefnx {Function File} {@var{h} =} slice (@dots{}) ! @deftypefnx {Function File} {@var{h} =} slice (@dots{}, @var{method}) ! Plot slices of 3D data/scalar fields. Each element of the 3-dimensional ! array @var{v} represents a scalar value at a location given by the ! parameters @var{x}, @var{y}, and @var{z}. The parameters @var{x}, ! @var{x}, and @var{z} are either 3-dimensional arrays of the same size ! as the array @var{v} in the "meshgrid" format or vectors. The ! parameters @var{xi}, etc respect a similar format to @var{x}, etc, ! and they represent the points at which the array @var{vi} is ! interpolated using interp3. The vectors @var{sx}, @var{sy}, and ! @var{sz} contain points of orthogonal slices of the respective axes. ! If @var{x}, @var{y}, @var{z} are omitted, they are assumed to be ! @code{x = 1:size (@var{v}, 2)}, @code{y = 1:size (@var{v}, 1)} and ! @code{z = 1:size (@var{v}, 3)}. ! @var{Method} is one of: ! @table @code ! @item "nearest" ! Return the nearest neighbour. ! @item "linear" ! Linear interpolation from nearest neighbours. ! @item "cubic" ! Cubic interpolation from four nearest neighbours (not implemented yet). ! @item "spline" ! Cubic spline interpolation---smooth first and second derivatives ! throughout the curve. @end table ! The default method is @code{"linear"}. ! The optional return value @var{h} is a vector of handles to the ! surface graphic objects. ! Examples: ! @example ! [x, y, z] = meshgrid (linspace (-8, 8, 32)); ! v = sin (sqrt (x.^2 + y.^2 + z.^2)) ./ (sqrt (x.^2 + y.^2 + z.^2)); ! slice (x, y, z, v, [], 0, []); ! [xi, yi] = meshgrid (linspace (-7, 7)); ! zi = xi + yi; ! slice (x, y, z, v, xi, yi, zi); ! @end example ! @seealso{interp3, surface, pcolor} @end deftypefn ! __bar__ Undocumented internal function. ! contourf -*- texinfo -*- ! @deftypefn {Function File} {[@var{c}, @var{h}] =} contourf (@var{x}, @var{y}, @var{z}, @var{lvl}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@var{x}, @var{y}, @var{z}, @var{n}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@var{z}, @var{n}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@var{z}, @var{lvl}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@var{z}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@var{ax}, @dots{}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@dots{}, @var{"property"}, @var{val}) ! Compute and plot filled contours of the matrix @var{z}. ! Parameters @var{x}, @var{y} and @var{n} or @var{lvl} are optional. ! The return value @var{c} is a 2xn matrix containing the contour lines ! as described in the help to the contourc function. ! The return value @var{h} is handle-vector to the patch objects creating ! the filled contours. ! If @var{x} and @var{y} are ommited they are taken as the row/column ! index of @var{z}. @var{n} is a scalar denoting the number of lines ! to compute. Alternatively @var{lvl} is a vector containing the ! contour levels. If only one value (e.g. lvl0) is wanted, set ! @var{lvl} to [lvl0, lvl0]. If both @var{n} or @var{lvl} are omitted ! a default value of 10 contour level is assumed. ! If provided, the filled contours are added to the axes object ! @var{ax} instead of the current axis. ! The following example plots filled contours of the @code{peaks} ! function. ! @example ! [x, y, z] = peaks (50); ! contourf (x, y, z, -7:9) ! @end example ! @seealso{contour, contourc, patch} @end deftypefn ! gca -*- texinfo -*- ! @deftypefn {Function File} {} gca () ! Return a handle to the current axis object. If no axis object ! exists, create one and return its handle. The handle may then be ! used to examine or set properties of the axes. For example, @example @group ! ax = gca (); ! set (ax, "position", [0.5, 0.5, 0.5, 0.5]); @end group @end example ! @noindent ! creates an empty axes object, then changes its location and size in ! the figure window. ! @seealso{get, set} @end deftypefn ! __go_draw_figure__ ! Undocumented internal function. ! patch -*- texinfo -*- ! @deftypefn {Function File} {} patch () ! @deftypefnx {Function File} {} patch (@var{x}, @var{y}, @var{c}) ! @deftypefnx {Function File} {} patch (@var{x}, @var{y}, @var{c}, @var{opts}) ! @deftypefnx {Function File} {} patch ('Faces', @var{f}, 'Vertices', @var{v}, @dots{}) ! @deftypefnx {Function File} {} patch (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} patch (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} = } patch (@dots{}) ! Create patch object from @var{x} and @var{y} with color @var{c} and ! insert in the current axes object. Return handle to patch object. ! ! For a uniform colored patch, @var{c} can be given as an RGB vector, ! scalar value referring to the current colormap, or string value (for ! example, "r" or "red"). @end deftypefn ! scatter3 -*- texinfo -*- ! @deftypefn {Function File} {} scatter3 (@var{x}, @var{y}, @var{s}, @var{c}) ! @deftypefnx {Function File} {} scatter3 (@dots{}, 'filled') ! @deftypefnx {Function File} {} scatter3 (@dots{}, @var{style}) ! @deftypefnx {Function File} {} scatter3 (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} scatter3 (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} scatter3 (@dots{}) ! Plot a scatter plot of the data in 3D. A marker is ploted at each point ! defined by the points in the vectors @var{x} and @var{y}. The size of ! the markers used is determined by the @var{s}, which can be a scalar, ! a vector of the same length of @var{x} and @var{y}. If @var{s} is not ! given or is an empty matrix, then the default value of 8 points is used. ! ! The color of the markers is determined by @var{c}, which can be a string ! defining a fixed color, a 3 element vector giving the red, green and blue ! components of the color, a vector of the same length as @var{x} that gives ! a scaled index into the current colormap, or a @var{n}-by-3 matrix defining ! the colors of each of the markers individually. ! ! The marker to use can be changed with the @var{style} argument, that is a ! string defining a marker in the same manner as the @code{plot} command. ! If the argument 'filled' is given then the markers as filled. All ! additional arguments are passed to the underlying patch command. ! ! The optional return value @var{h} provides a handle to the patch object @example @group ! [x, y, z] = peaks (20); ! scatter3 (x(:), y(:), z(:), [], z(:)); @end group @end example ! @seealso{plot, patch, scatter} ! @end deftypefn ! figure ! -*- texinfo -*- ! @deftypefn {Function File} {} figure (@var{n}) ! @deftypefnx {Function File} {} figure (@var{n}, @var{property}, @var{value}, @dots{}) ! Set the current plot window to plot window @var{n}. If no arguments are ! specified, the next available window number is chosen. ! Multiple property-value pairs may be specified for the figure, but they ! must appear in pairs. @end deftypefn ! __plr2__ ! Undocumented internal function. ! plot -*- texinfo -*- ! @deftypefn {Function File} {} plot (@var{y}) ! @deftypefnx {Function File} {} plot (@var{x}, @var{y}) ! @deftypefnx {Function File} {} plot (@var{x}, @var{y}, @var{property}, @var{value}, @dots{}) ! @deftypefnx {Function File} {} plot (@var{x}, @var{y}, @var{fmt}) ! @deftypefnx {Function File} {} plot (@var{h}, @dots{}) ! Produces two-dimensional plots. Many different combinations of ! arguments are possible. The simplest form is @example ! plot (@var{y}) @end example @noindent ! where the argument is taken as the set of @var{y} coordinates and the ! @var{x} coordinates are taken to be the indices of the elements, ! starting with 1. ! To save a plot, in one of several image formats such as PostScript ! or PNG, use the @code{print} command. ! If more than one argument is given, they are interpreted as ! @example ! plot (@var{y}, @var{property}, @var{value}, @dots{}) ! @end example ! @noindent ! or ! @example ! plot (@var{x}, @var{y}, @var{property}, @var{value}, @dots{}) ! @end example ! @noindent ! or @example ! plot (@var{x}, @var{y}, @var{fmt}, @dots{}) @end example ! @noindent ! and so on. Any number of argument sets may appear. The @var{x} and ! @var{y} values are interpreted as follows: ! @itemize @bullet ! @item ! If a single data argument is supplied, it is taken as the set of @var{y} ! coordinates and the @var{x} coordinates are taken to be the indices of ! the elements, starting with 1. ! @item ! If the @var{x} is a vector and @var{y} is a matrix, then ! the columns (or rows) of @var{y} are plotted versus @var{x}. ! (using whichever combination matches, with columns tried first.) ! @item ! If the @var{x} is a matrix and @var{y} is a vector, ! @var{y} is plotted versus the columns (or rows) of @var{x}. ! (using whichever combination matches, with columns tried first.) ! @item ! If both arguments are vectors, the elements of @var{y} are plotted versus ! the elements of @var{x}. ! @item ! If both arguments are matrices, the columns of @var{y} are plotted ! versus the columns of @var{x}. In this case, both matrices must have ! the same number of rows and columns and no attempt is made to transpose ! the arguments to make the number of rows match. ! If both arguments are scalars, a single point is plotted. ! @end itemize ! Multiple property-value pairs may be specified, but they must appear ! in pairs. These arguments are applied to the lines drawn by ! @code{plot}. ! If the @var{fmt} argument is supplied, it is interpreted as ! follows. If @var{fmt} is missing, the default gnuplot line style ! is assumed. ! @table @samp ! @item - ! Set lines plot style (default). ! ! @item . ! Set dots plot style. ! ! @item ^ ! Set impulses plot style. ! ! @item L ! Set steps plot style. ! ! @item @var{n} ! Interpreted as the plot color if @var{n} is an integer in the range 1 to ! 6. ! ! @item @var{nm} ! If @var{nm} is a two digit integer and @var{m} is an integer in the ! range 1 to 6, @var{m} is interpreted as the point style. This is only ! valid in combination with the @code{@@} or @code{-@@} specifiers. ! ! @item @var{c} ! If @var{c} is one of @code{"k"} (black), @code{"r"} (red), @code{"g"} ! (green), @code{"b"} (blue), @code{"m"} (magenta), @code{"c"} (cyan), ! or @code{"w"} (white), it is interpreted as the line plot color. ! ! @item ";title;" ! Here @code{"title"} is the label for the key. ! ! @item + ! @itemx * ! @itemx o ! @itemx x ! Used in combination with the points or linespoints styles, set the point ! style. ! @end table ! ! The @var{fmt} argument may also be used to assign key titles. ! To do so, include the desired title between semi-colons after the ! formatting sequence described above, e.g. "+3;Key Title;" ! Note that the last semi-colon is required and will generate an error if ! it is left out. ! ! Here are some plot examples: @example ! plot (x, y, "@@12", x, y2, x, y3, "4", x, y4, "+") @end example ! This command will plot @code{y} with points of type 2 (displayed as ! @samp{+}) and color 1 (red), @code{y2} with lines, @code{y3} with lines of ! color 4 (magenta) and @code{y4} with points displayed as @samp{+}. ! @example ! plot (b, "*", "markersize", 3) ! @end example ! This command will plot the data in the variable @code{b}, ! with points displayed as @samp{*} with a marker size of 3. @example ! t = 0:0.1:6.3; ! plot (t, cos(t), "-;cos(t);", t, sin(t), "+3;sin(t);"); @end example ! This will plot the cosine and sine functions and label them accordingly ! in the key. ! ! If the first argument is an axis handle, then plot into these axes, ! rather than the current axis handle returned by @code{gca}. ! @seealso{semilogx, semilogy, loglog, polar, mesh, contour, bar, ! stairs, errorbar, xlabel, ylabel, title, print} ! @end deftypefn ! peaks -*- texinfo -*- ! @deftypefn {Function File} {} peaks () ! @deftypefnx {Function File} {} peaks (@var{n}) ! @deftypefnx {Function File} {} peaks (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{z} =} peaks (@dots{}) ! @deftypefnx {Function File} {[@var{x}, @var{y}, @var{z}] =} peaks (@dots{}) ! Generate a function with lots of local maxima and minima. The function ! has the form ! @iftex @tex ! $f(x,y) = 3 (1 - x) ^ 2 e ^ {\left(-x^2 - (y+1)^2\right)} - 10 \left({x \over 5} - x^3 - y^5)\right) - {1 \over 3} e^{\left(-(x+1)^2 - y^2\right)}$ @end tex @end iftex ! @ifnottex ! @verbatim ! f(x,y) = 3*(1-x)^2*exp(-x^2 - (y+1)^2) ... ! - 10*(x/5 - x^3 - y^5)*exp(-x^2-y^2) ... ! - 1/3*exp(-(x+1)^2 - y^2) ! @end verbatim ! @end ifnottex ! ! Called without a return argument, @code{peaks} plots the surface of the ! above function using @code{mesh}. If @var{n} is a scalar, the @code{peaks} ! returns the values of the above function on a @var{n}-by-@var{n} mesh over ! the range @code{[-3,3]}. The default value for @var{n} is 49. ! ! If @var{n} is a vector, then it represents the @var{x} and @var{y} values ! of the grid on which to calculate the above function. The @var{x} and ! @var{y} values can be specified separately. ! @seealso{surf, mesh, meshgrid} ! @end deftypefn ! __plt__ ! Undocumented internal function. ! surfnorm ! -*- texinfo -*- ! @deftypefn {Function File} {} surfnorm (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {} surfnorm (@var{z}) ! @deftypefnx {Function File} {[@var{nx}, @var{ny}, @var{nz}] =} surfnorm (@dots{}) ! @deftypefnx {Function File} {} surfnorm (@var{h}, @dots{}) ! Find the vectors normal to a meshgridded surface. The meshed gridded ! surface is defined by @var{x}, @var{y}, and @var{z}. If @var{x} and ! @var{y} are not defined, then it is assumed that they are given by @example ! [@var{x}, @var{y}] = meshgrid (1:size(@var{z}, 1), ! 1:size(@var{z}, 2)); @end example ! If no return arguments are requested, a surface plot with the normal ! vectors to the surface is plotted. Otherwise the componets of the normal ! vectors at the mesh gridded points are returned in @var{nx}, @var{ny}, ! and @var{nz}. ! ! The normal vectors are calculated by taking the cross product of the ! diagonals of eash of teh quadrilaterals in the meshgrid to find the ! normal vectors of the centers of these quadrilaterals. The four nearest ! normal vectors to the meshgrid points are then averaged to obtain the ! normal to the surface at the meshgridded points. ! ! An example of the use of @code{surfnorm} is @example ! surfnorm (peaks (25)); @end example + @seealso{surf, quiver3} @end deftypefn ! semilogy -*- texinfo -*- ! @deftypefn {Function File} {} semilogy (@var{args}) ! Produce a two-dimensional plot using a log scale for the @var{y} ! axis. See the description of @code{plot} for a description of the ! arguments that @code{semilogy} will accept. ! @seealso{plot, semilogx, loglog} @end deftypefn ! __line__ ! Undocumented internal function. ! feather -*- texinfo -*- ! @deftypefn {Function File} {} feather (@var{u}, @var{v}) ! @deftypefnx {Function File} {} feather (@var{z}) ! @deftypefnx {Function File} {} feather (@dots{}, @var{style}) ! @deftypefnx {Function File} {} feather (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} feather (@dots{}) ! Plot the @code{(@var{u}, @var{v})} components of a vector field emanating ! from equidistant points on the x-axis. If a single complex argument ! @var{z} is given, then @code{@var{u} = real (@var{z})} and ! @code{@var{v} = imag (@var{z})}. ! The style to use for the plot can be defined with a line style @var{style} ! in a similar manner to the line styles used with the @code{plot} command. ! The optional return value @var{h} provides a list of handles to the ! the parts of the vector field (body, arrow and marker). @example @group ! phi = [0 : 15 : 360] * pi / 180; ! feather (sin (phi), cos (phi)) @end group @end example ! @seealso{plot, quiver, compass} @end deftypefn ! drawnow -*- texinfo -*- ! @deftypefn {Function File} {} drawnow () ! Update and display the current graphics. ! Octave automatically calls drawnow just before printing a prompt, ! when @code{sleep} or @code{pause} is called, or while waiting for ! command-line input. @end deftypefn ! __next_line_color__ ! Undocumented internal function. ! shg -*- texinfo -*- ! @deftypefn {Function File} {} shg ! Show the graph window. Currently, this is the same as executing ! @code{drawnow}. ! @seealso{drawnow, figure} @end deftypefn ! axes -*- texinfo -*- ! @deftypefn {Function File} {} axes () ! @deftypefnx {Function File} {} axes (@var{property}, @var{value}, @dots{}) ! @deftypefnx {Function File} {} axes (@var{h}) ! Create an axes object and return a handle to it. ! @end deftypefn ! contour3 ! -*- texinfo -*- ! @deftypefn {Function File} {} contour3 (@var{z}) ! @deftypefnx {Function File} {} contour3 (@var{z}, @var{vn}) ! @deftypefnx {Function File} {} contour3 (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {} contour3 (@var{x}, @var{y}, @var{z}, @var{vn}) ! @deftypefnx {Function File} {} contour3 (@dots{}, @var{style}) ! @deftypefnx {Function File} {} contour3 (@var{h}, @dots{}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contour3 (@dots{}) ! Plot level curves (contour lines) of the matrix @var{z}, using the ! contour matrix @var{c} computed by @code{contourc} from the same ! arguments; see the latter for their interpretation. The contours are ! ploted at the Z level corresponding to their contour. The set of ! contour levels, @var{c}, is only returned if requested. For example: @example @group ! contour3 (peaks (19)); ! hold on ! surface (peaks (19), 'FaceColor', 'none', 'EdgeColor', 'black') ! colormap hot @end group @end example ! The style to use for the plot can be defined with a line style @var{style} ! in a similar manner to the line styles used with the @code{plot} command. ! Any markers defined by @var{style} are ignored. ! The optional input and output argument @var{h} allows an axis handle to ! be passed to @code{contour} and the handles to the contour objects to be ! returned. ! @seealso{contourc, patch, plot} @end deftypefn ! contourc -*- texinfo -*- ! @deftypefn {Function File} {[@var{c}, @var{lev}] =} contourc (@var{x}, @var{y}, @var{z}, @var{vn}) ! Compute isolines (countour lines) of the matrix @var{z}. ! Parameters @var{x}, @var{y} and @var{vn} are optional. ! The return value @var{lev} is a vector of the contour levels. ! The return value @var{c} is a 2 by @var{n} matrix containing the ! contour lines in the following format ! @example ! @var{c} = [lev1, x1, x2, ..., levn, x1, x2, ... ! len1, y1, y2, ..., lenn, y1, y2, ...] ! @end example ! @noindent ! in which contour line @var{n} has a level (height) of @var{levn} and ! length of @var{lenn}. ! If @var{x} and @var{y} are omitted they are taken as the row/column ! index of @var{z}. @var{vn} is either a scalar denoting the number of lines ! to compute or a vector containing the values of the lines. If only one ! value is wanted, set @code{@var{vn} = [val, val]}; ! If @var{vn} is omitted it defaults to 10. ! For example, ! @example ! @group ! x = 0:2; ! y = x; ! z = x' * y; ! contourc (x, y, z, 2:3) ! @result{} 2.0000 2.0000 1.0000 3.0000 1.5000 2.0000 ! 2.0000 1.0000 2.0000 2.0000 2.0000 1.5000 ! @end group ! @end example ! @seealso{contour} ! @end deftypefn ! spinmap ! -*- texinfo -*- ! @deftypefn {Function File} spinmap (@var{t}, @var{inc}) ! Cycle the colormap for @var{t} seconds with an increment ! of @var{inc}. Both parameters are optional. The default cycle time ! is 5 seconds and the default increment is 2. ! A higher value of @var{inc} causes a faster cycle through the ! colormap. ! @seealso{gca, colorbar} ! @end deftypefn ! rose ! -*- texinfo -*- ! @deftypefn {Function File} {} rose (@var{th}, @var{r}) ! @deftypefnx {Function File} {} rose (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} compass (@dots{}) ! @deftypefnx {Function File} {[@var{r}, @var{th}] =} compass (@dots{}) ! Plot an angular histogram. With one vector argument @var{th}, plots the ! histogram with 20 angular bins. If @var{th} is a matrix, then each column ! of @var{th} produces a separate histogram. ! If @var{r} is given and is a scalar, then the histogram is produced with ! @var{r} bins. If @var{r} is a vector, then the center of each bin are ! defined by the values of @var{r}. ! The optional return value @var{h} provides a list of handles to the ! the parts of the vector field (body, arrow and marker). ! ! If two output arguments are requested, then rather than plotting the ! histogram, the polar vectors necessary to plot the histogram are ! returned. ! surfc ! -*- texinfo -*- ! @deftypefn {Function File} {} surfc (@var{x}, @var{y}, @var{z}) ! Plot a surface and contour given matrices @var{x}, and @var{y} from ! @code{meshgrid} and a matrix @var{z} corresponding to the @var{x} and ! @var{y} coordinates of the mesh. If @var{x} and @var{y} are vectors, ! then a typical vertex is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, ! columns of @var{z} correspond to different @var{x} values and rows of ! @var{z} correspond to different @var{y} values. ! @seealso{meshgrid, surf, contour} ! @end deftypefn ! surf ! -*- texinfo -*- ! @deftypefn {Function File} {} surf (@var{x}, @var{y}, @var{z}) ! Plot a surface given matrices @var{x}, and @var{y} from @code{meshgrid} and ! a matrix @var{z} corresponding to the @var{x} and @var{y} coordinates of ! the mesh. If @var{x} and @var{y} are vectors, then a typical vertex ! is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, columns of @var{z} ! correspond to different @var{x} values and rows of @var{z} correspond ! to different @var{y} values. ! @seealso{mesh, surface} ! @end deftypefn ! fill ! -*- texinfo -*- ! @deftypefn {Function File} {} fill (@var{x}, @var{y}, @var{c}) ! @deftypefnx {Function File} {} fill (@var{x1}, @var{y1}, @var{c1}, @var{x2}, @var{y2}, @var{c2}) ! @deftypefnx {Function File} {} fill (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} fill (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} = } fill (@dots{}) ! Create one or more filled patch objects, returning a patch object for each. ! @end deftypefn ! compass ! -*- texinfo -*- ! @deftypefn {Function File} {} compass (@var{u}, @var{v}) ! @deftypefnx {Function File} {} compass (@var{z}) ! @deftypefnx {Function File} {} compass (@dots{}, @var{style}) ! @deftypefnx {Function File} {} compass (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} compass (@dots{}) ! ! Plot the @code{(@var{u}, @var{v})} components of a vector field emanating ! from the origin of a polar polt. If a single complex argument @var{z} is ! given, then @code{@var{u} = real (@var{z})} and @code{@var{v} = imag ! (@var{z})}. ! ! The style to use for the plot can be defined with a line style @var{style} ! in a similar manner to the line styles used with the @code{plot} command. ! ! The optional return value @var{h} provides a list of handles to the ! the parts of the vector field (body, arrow and marker). @example ! @group ! a = toeplitz([1;randn(9,1)],[1,randn(1,9)]); ! compass (eig (a)) ! @end group @end example ! @seealso{plot, polar, quiver, feather} ! @end deftypefn ! __plt1__ ! Undocumented internal function. ! axis ! -*- texinfo -*- ! @deftypefn {Function File} {} axis (@var{limits}) ! Set axis limits for plots. ! The argument @var{limits} should be a 2, 4, or 6 element vector. The ! first and second elements specify the lower and upper limits for the x ! axis. The third and fourth specify the limits for the y axis, and the ! fifth and sixth specify the limits for the z axis. ! Without any arguments, @code{axis} turns autoscaling on. ! With one output argument, @code{x=axis} returns the current axes ! ! The vector argument specifying limits is optional, and additional ! string arguments may be used to specify various axis properties. For ! example, ! ! @example ! axis ([1, 2, 3, 4], "square"); ! @end example ! ! @noindent ! forces a square aspect ratio, and ! ! @example ! axis ("labely", "tic"); ! @end example ! ! @noindent ! turns tic marks on for all axes and tic mark labels on for the y-axis ! only. ! ! @noindent ! The following options control the aspect ratio of the axes. ! ! @table @code ! @item "square" ! Force a square aspect ratio. ! @item "equal" ! Force x distance to equal y-distance. ! @item "normal" ! Restore the balance. @end table ! @noindent ! The following options control the way axis limits are interpreted. ! @table @code ! @item "auto" ! Set the specified axes to have nice limits around the data ! or all if no axes are specified. ! @item "manual" ! Fix the current axes limits. ! @item "tight" ! Fix axes to the limits of the data (not implemented). @end table ! @noindent ! The option @code{"image"} is equivalent to @code{"tight"} and ! @code{"equal"}. ! ! @noindent ! The following options affect the appearance of tic marks. @table @code ! @item "on" ! Turn tic marks and labels on for all axes. ! @item "off" ! Turn tic marks off for all axes. ! @item "tic[xyz]" ! Turn tic marks on for all axes, or turn them on for the ! specified axes and off for the remainder. ! @item "label[xyz]" ! Turn tic labels on for all axes, or turn them on for the ! specified axes and off for the remainder. ! @item "nolabel" ! Turn tic labels off for all axes. @end table ! Note, if there are no tic marks for an axis, there can be no labels. ! @noindent ! The following options affect the direction of increasing values on ! the axes. ! @table @code ! @item "ij" ! Reverse y-axis, so lower values are nearer the top. ! @item "xy" ! Restore y-axis, so higher values are nearer the top. ! @end table ! ! If an axes handle is passed as the first argument, then operate on ! this axes rather than the current axes. @end deftypefn ! view -*- texinfo -*- ! @deftypefn {Function File} {} view (@var{azimuth}, @var{elevation}) ! @deftypefnx {Function File} {} view (@var{dims}) ! @deftypefnx {Function File} {[@var{azimuth}, @var{elevation}] =} view () ! Set or get the viewpoint for the current axes. @end deftypefn ! __plt2__ ! Undocumented internal function. ! shading -*- texinfo -*- ! @deftypefn {Function File} {} shading (@var{type}) ! @deftypefnx {Function File} {} shading (@var{ax}, @dots{}) ! Set the shading of surface or patch graphic objects. Valid arguments ! for @var{type} are @code{"flat"}, @code{"interp"}, or ! @code{"faceted"}. If @var{ax} is given the shading is applied to ! axis @var{ax} instead of the current axis. @end deftypefn ! xlim -*- texinfo -*- ! @deftypefn {Function File} {@var{xl} =} xlim () ! @deftypefnx {Function File} {} xlim (@var{xl}) ! @deftypefnx {Function File} {@var{m} =} xlim ('mode') ! @deftypefnx {Function File} {} xlim (@var{m}) ! @deftypefnx {Function File} {} xlim (@var{h}, @dots{}) ! Get or set the limits of the x axis of the current plot. Called without ! argumenst @code{xlim] returns the x axis limits of the current plot. ! If passed a two element vector @var{xl}, the limits of the x axis are set ! to this value. ! The current mode for calculation of the x axis can be returned with a ! call @code{xlim ('mode')}, and can be either 'auto' or 'manual'. The ! current plotting mode can be set by passing either 'auto' or 'manual' ! as the argument. ! If passed an handle as the first argument, then operate on this handle ! rather than the current axes handle. ! @seealso{ylim, zlim, set, get, gca} @end deftypefn ! __gnuplot_version__ ! Undocumented internal function. ! line -*- texinfo -*- ! @deftypefn {Function File} {} line () ! @deftypefnx {Function File} {} line (@var{x}, @var{y}) ! @deftypefnx {Function File} {} line (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {} line (@var{x}, @var{y}, @var{z}, @var{property}, @var{value}, @dots{}) ! Create line object from @var{x} and @var{y} and insert in current ! axes object. Return a handle (or vector of handles) to the line ! objects created. ! ! Multiple property-value pairs may be specified for the line, but they ! must appear in pairs. @end deftypefn ! cylinder -*- texinfo -*- ! @deftypefn {Function File} {} cylinder ! @deftypefnx {Function File} {} cylinder (@var{r}) ! @deftypefnx {Function File} {} cylinder (@var{r}, @var{n}) ! @deftypefnx {Function File} {[@var{x}, @var{y}, @var{z}] =} cylinder (@dots{}) ! @deftypefnx {Function File} {} cylinder (@var{ax}, @dots{}) ! Generates three matrices in @code{meshgrid} format, such that ! @code{surf (@var{x}, @var{y}, @var{z})} generates a unit cylinder. ! The matrices are of size @code{@var{n}+1}-by-@code{@var{n}+1}. ! @var{r} is a vector containing the radius along the z-axis. ! If @var{n} or @var{r} are omitted then default values of 20 or [1 1] ! are assumed. ! ! Called with no return arguments, @code{cylinder} calls directly ! @code{surf (@var{x}, @var{y}, @var{z})}. If an axes handle @var{ax} ! is passed as the first argument, the surface is plotted to this set ! of axes. ! ! Examples: ! @example ! disp ("plotting a cone") ! [x, y, z] = cylinder (10:-1:0,50); ! surf (x, y, z); ! @end example ! @seealso{sphere} @end deftypefn ! newplot -*- texinfo -*- ! @deftypefn {Function File} {} newplot () ! Prepare graphics engine to produce a new plot. This function should ! be called at the beginning of all high-level plotting functions. @end deftypefn ! meshz -*- texinfo -*- ! @deftypefn {Function File} {} meshz (@var{x}, @var{y}, @var{z}) ! Plot a curtain mesh given matrices @var{x}, and @var{y} from ! @code{meshgrid} and a matrix @var{z} corresponding to the @var{x} and ! @var{y} coordinates of the mesh. If @var{x} and @var{y} are vectors, ! then a typical vertex is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, ! columns of @var{z} correspond to different @var{x} values and rows of ! @var{z} correspond to different @var{y} values. ! @seealso{meshgrid, mesh, contour} @end deftypefn ! __contour__ ! Undocumented internal function. ! semilogx -*- texinfo -*- ! @deftypefn {Function File} {} semilogx (@var{args}) ! Produce a two-dimensional plot using a log scale for the @var{x} ! axis. See the description of @code{plot} for a description of the ! arguments that @code{semilogx} will accept. ! @seealso{plot, semilogy, loglog} @end deftypefn ! __scatter__ ! Undocumented internal function. ! __plt_get_axis_arg__ ! Undocumented internal function. ! subplot -*- texinfo -*- ! @deftypefn {Function File} {} subplot (@var{rows}, @var{cols}, @var{index}) ! @deftypefnx {Function File} {} subplot (@var{rcn}) ! Set up a plot grid with @var{cols} by @var{rows} subwindows and plot ! in location given by @var{index}. ! If only one argument is supplied, then it must be a three digit value ! specifying the location in digits 1 (rows) and 2 (columns) and the plot ! index in digit 3. ! The plot index runs row-wise. First all the columns in a row are filled ! and then the next row is filled. ! For example, a plot with 2 by 3 grid will have plot indices running as ! follows: @iftex @tex ! \vskip 10pt ! \hfil\vbox{\offinterlineskip\hrule ! \halign{\vrule#&&\qquad\hfil#\hfil\qquad\vrule\cr ! height13pt&1&2&3\cr height12pt&&&\cr\noalign{\hrule} ! height13pt&4&5&6\cr height12pt&&&\cr\noalign{\hrule}}} ! \hfil ! \vskip 10pt @end tex @end iftex @ifinfo ! @display ! @group ! @example ! ! +-----+-----+-----+ ! | 1 | 2 | 3 | ! +-----+-----+-----+ ! | 4 | 5 | 6 | ! +-----+-----+-----+ ! @end example ! @end group ! @end display @end ifinfo + @seealso{plot} @end deftypefn ! scatter -*- texinfo -*- ! @deftypefn {Function File} {} scatter (@var{x}, @var{y}, @var{s}, @var{c}) ! @deftypefnx {Function File} {} scatter (@dots{}, 'filled') ! @deftypefnx {Function File} {} scatter (@dots{}, @var{style}) ! @deftypefnx {Function File} {} scatter (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} scatter (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} scatter (@dots{}) ! ! Plot a scatter plot of the data. A marker is ploted at each point ! defined by the points in the vectors @var{x} and @var{y}. The size of ! the markers used is determined by the @var{s}, which can be a scalar, ! a vector of the same length of @var{x} and @var{y}. If @var{s} is not ! given or is an empty matrix, then the default value of 8 points is used. ! ! The color of the markers is determined by @var{c}, which can be a string ! defining a fixed color, a 3 element vector giving the red, green and blue ! components of the color, a vector of the same length as @var{x} that gives ! a scaled index into the current colormap, or a @var{n}-by-3 matrix defining ! the colors of each of the markers individually. ! ! The marker to use can be changed with the @var{style} argument, that is a ! string defining a marker in the same manner as the @code{plot} command. ! If the argument 'filled' is given then the markers as filled. All ! additional arguments are passed to the underlying patch command. ! ! The optional return value @var{h} provides a handle to the patch object @example ! @group ! x = randn (100, 1); ! y = randn (100, 1); ! scatter (x, y, [], sqrt(x.^2 + y.^2)); ! @end group @end example ! @seealso{plot, patch, scatter3} @end deftypefn ! fplot -*- texinfo -*- ! @deftypefn {Function File} {} fplot (@var{fn}, @var{limits}) ! @deftypefnx {Function File} {} fplot (@var{fn}, @var{limits}, @var{tol}) ! @deftypefnx {Function File} {} fplot (@var{fn}, @var{limits}, @var{n}) ! @deftypefnx {Function File} {} fplot (@dots{}, @var{fmt}) ! Plot a function @var{fn}, within the defined limits. @var{fn} ! an be either a string, a function handle or an inline function. ! The limits of the plot are given by @var{limits} of the form ! @code{[@var{xlo}, @var{xhi}]} or @code{[@var{xlo}, @var{xhi}, ! @var{ylo}, @var{yhi}]}. @var{tol} is the default tolerance to use for the ! plot, and if @var{tol} is an integer it is assumed that it defines the ! number points to use in the plot. The @var{fmt} argument is passed ! to the plot command. ! ! @example ! fplot ("cos", [0, 2*pi]) ! fplot ("[cos(x), sin(x)]", [0, 2*pi]) ! @end example ! @seealso{plot} @end deftypefn ! pcolor -*- texinfo -*- ! @deftypefn {Function File} {} pcolor (@var{x}, @var{y}, @var{c}) ! @deftypefnx {Function File} {} pcolor (@var{c}) ! Density plot for given matrices @var{x}, and @var{y} from @code{meshgrid} and ! a matrix @var{c} corresponding to the @var{x} and @var{y} coordinates of ! the mesh. If @var{x} and @var{y} are vectors, then a typical vertex ! is (@var{x}(j), @var{y}(i), @var{c}(i,j)). Thus, columns of @var{c} ! correspond to different @var{x} values and rows of @var{c} correspond ! to different @var{y} values. ! @seealso{meshgrid, contour} @end deftypefn ! close -*- texinfo -*- ! @deftypefn {Command} {} close ! @deftypefnx {Command} {} close (@var{n}) ! @deftypefnx {Command} {} close all ! @deftypefnx {Command} {} close all hidden ! Close figure window(s) by calling the function specified by the ! @code{"closerequestfcn"} property for each figure. By default, the ! function @code{closereq} is used. ! @seealso{closereq} @end deftypefn ! plot3 -*- texinfo -*- ! @deftypefn {Function File} {} plot3 (@var{args}) ! Produce three-dimensional plots. Many different combinations of ! arguments are possible. The simplest form is ! @example ! plot3 (@var{x}, @var{y}, @var{z}) ! @end example ! @noindent ! in which the arguments are taken to be the vertices of the points to ! be plotted in three dimensions. If all arguments are vectors of the ! same length, then a single continuous line is drawn. If all arguments ! are matrices, then each column of the matrices is treated as a ! separate line. No attempt is made to transpose the arguments to make ! the number of rows match. ! If only two arguments are given, as ! @example ! plot3 (@var{x}, @var{c}) ! @end example ! @noindent ! the real and imaginary parts of the second argument are used ! as the @var{y} and @var{z} coordinates, respectively. ! If only one argument is given, as ! @example ! plot3 (@var{c}) ! @end example ! @noindent ! the real and imaginary parts of the argument are used as the @var{y} ! and @var{z} values, and they are plotted versus their index. ! Arguments may also be given in groups of three as ! @example ! plot3 (@var{x1}, @var{y1}, @var{z1}, @var{x2}, @var{y2}, @var{z2}, @dots{}) @end example ! @noindent ! in which each set of three arguments is treated as a separate line or ! set of lines in three dimensions. ! To plot multiple one- or two-argument groups, separate each group ! with an empty format string, as ! @example ! plot3 (@var{x1}, @var{c1}, "", @var{c2}, "", @dots{}) ! @end example ! An example of the use of @code{plot3} is @example ! @group ! z = [0:0.05:5]; ! plot3 (cos(2*pi*z), sin(2*pi*z), z, ";helix;"); ! plot3 (z, exp(2i*pi*z), ";complex sinusoid;"); ! @end group @end example + @seealso{plot} + @end deftypefn + __stem__ + Undocumented internal function + mesh + -*- texinfo -*- + @deftypefn {Function File} {} mesh (@var{x}, @var{y}, @var{z}) + Plot a mesh given matrices @var{x}, and @var{y} from @code{meshgrid} and + a matrix @var{z} corresponding to the @var{x} and @var{y} coordinates of + the mesh. If @var{x} and @var{y} are vectors, then a typical vertex + is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, columns of @var{z} + correspond to different @var{x} values and rows of @var{z} correspond + to different @var{y} values. + @seealso{meshgrid, contour} + @end deftypefn + __quiver__ + Undocumented internal function + fileattrib + -*- texinfo -*- + @deftypefn {Function File} {[@var{status}, @var{msg}, @var{msgid}] =} fileattrib (@var{file}) + Return information about @var{file}. + + If successful, @var{status} is 1, with @var{result} containing a + structure with the following fields: + @table @code + @item Name + Full name of @var{file}. + @item archive + True if @var{file} is an archive (Windows). + @item system + True if @var{file} is a system file (Windows). + @item hidden + True if @var{file} is a hidden file (Windows). + @item directory + True if @var{file} is a directory. + @item UserRead + @itemx GroupRead + @itemx OtherRead + True if the user (group; other users) has read permission for + @var{file}. + @item UserWrite + @itemx GroupWrite + @itemx OtherWrite + True if the user (group; other users) has write permission for + @var{file}. + @item UserExecute + @itemx GroupExecute + @itemx OtherExecute + True if the user (group; other users) has execute permission for + @var{file}. @end table + If an attribute does not apply (i.e., archive on a Unix system) then + the field is set to NaN. + + With no input arguments, return information about the current + directory. + + If @var{file} contains globbing characters, return information about + all the matching files. + @seealso{glob} @end deftypefn ! ispc -*- texinfo -*- ! @deftypefn {Function File} {} ispc () ! Return 1 if Octave is running on a Windows system and 0 otherwise. ! @seealso{ismac, isunix} ! @end deftypefn ! copyfile ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{status}, @var{msg}, @var{msgid}] =} copyfile (@var{f1}, @var{f2}, @var{force}) ! Copy the file @var{f1} to the new name @var{f2}. The name @var{f1} may contain globbing patterns. If @var{f1} expands to multiple file ! names, @var{f2} must be a directory. If @var{force} is given and equals ! the string "f" the copy operation will be forced. If successful, @var{status} is 1, with @var{msg} and @var{msgid} empty\n\ character strings. Otherwise, @var{status} is 0, @var{msg} contains a\n\ system-dependent error message, and @var{msgid} contains a unique\n\ message identifier.\n\ ! @seealso{glob, movefile} @end deftypefn ! ls -*- texinfo -*- ! @deffn {Command} ls options ! List directory contents. For example, @example ! ls -l ! @print{} total 12 ! @print{} -rw-r--r-- 1 jwe users 4488 Aug 19 04:02 foo.m ! @print{} -rw-r--r-- 1 jwe users 1315 Aug 17 23:14 bar.m @end example ! The @code{dir} and @code{ls} commands are implemented by calling your ! system's directory listing command, so the available options may vary ! from system to system. ! @seealso{dir, stat, readdir, glob, filesep, ls_command} ! @end deffn ! dos -*- texinfo -*- ! @deftypefn {Function File} {[@var{status}, @var{text}] =} dos (@var{command}) ! @deftypefnx {Function File} {[@var{status}, @var{text}] =} dos (@var{command}, "-echo") ! Execute a system command if running under a Windows-like operating ! system, otherwise do nothing. Return the exit status of the program ! in @var{status} and any output sent to the standard output in ! @var{text}. If the optional second argument @code{"-echo"} is given, ! then also send the output from the command to the standard output. ! @seealso{unix, isunix, ispc, system} @end deftypefn ! movefile -*- texinfo -*- ! @deftypefn {Function File} {[@var{status}, @var{msg}, @var{msgid}] =} movefile (@var{f1}, @var{f2}) ! Move the file @var{f1} to the new name @var{f2}. The name @var{f1} ! may contain globbing patterns. If @var{f1} expands to multiple file ! names, @var{f2} must be a directory. ! ! If successful, @var{status} is 1, with @var{msg} and @var{msgid} empty\n\ ! character strings. Otherwise, @var{status} is 0, @var{msg} contains a\n\ ! system-dependent error message, and @var{msgid} contains a unique\n\ ! message identifier.\n\ ! @seealso{glob} ! @end deftypefn ! bincoeff -*- texinfo -*- ! @deftypefn {Mapping Function} {} bincoeff (@var{n}, @var{k}) ! Return the binomial coefficient of @var{n} and @var{k}, defined as ! @iftex ! @tex ! $$ ! {n \choose k} = {n (n-1) (n-2) \cdots (n-k+1) \over k!} ! $$ ! @end tex ! @end iftex ! @ifinfo @example @group ! / \ ! | n | n (n-1) (n-2) ... (n-k+1) ! | | = ------------------------- ! | k | k! ! \ / @end group @end example + @end ifinfo ! For example, @example ! @group ! bincoeff (5, 2) ! @result{} 10 ! @end group @end example @end deftypefn ! news -*- texinfo -*- ! @deftypefn {Function File} {} news () ! Display the current NEWS file for Octave. @end deftypefn ! getfield -*- texinfo -*- ! @deftypefn {Function File} {[@var{v1}, @dots{}] =} getfield (@var{s}, @var{key}, @dots{}) ! Extract fields from a structure. For example @example @group ! ss(1,2).fd(3).b=5; ! getfield (ss, @{1,2@}, "fd", @{3@}, "b") ! @result{} ans = 5 @end group @end example ! Note that the function call in the previous example is equivalent to ! the expression ! @example ! i1= @{1,2@}; i2= "fd"; i3= @{3@}; i4= "b"; ! ss(i1@{:@}).(i2)(i3@{:@}).(i4) ! @end example ! @seealso{setfield, rmfield, isfield, isstruct, fieldnames, struct} @end deftypefn warning_ids -*- texinfo -*- *************** *** 9380,16252 **** expression. By default, the @code{Octave:variable-switch-label} warning is disabled. @end table ! what -*- texinfo -*- ! @deftypefn {Command} {} what ! @deftypefnx {Command} {} what @var{dir} ! @deftypefnx {Function File} {w =} what (@var{dir}) ! List the Octave specific files in a directory. If the variable @var{dir} ! is given then check that directory rather than the current directory. If ! a return argument is requested, the files found are returned in the ! structure @var{w}. ! @seealso{which} ! @end deftypefn ! xor ! -*- texinfo -*- ! @deftypefn {Mapping Function} {} xor (@var{x}, @var{y}) ! Return the `exclusive or' of the entries of @var{x} and @var{y}. ! For boolean expressions @var{x} and @var{y}, ! @code{xor (@var{x}, @var{y})} is true if and only if @var{x} or @var{y} ! is true, but not if both @var{x} and @var{y} are true. ! @end deftypefn ! zip ! -*- texinfo -*- ! @deftypefn {Function File} {@var{entries} =} zip (@var{zipfile}, @var{files}) ! @deftypefnx {Function File} {@var{entries} =} zip (@var{zipfile}, @var{files}, @var{rootdir}) ! Compress the list of files and/or directories specified in @var{files} ! into the archive @var{zipfiles} in the same directory. If @var{rootdir} ! is defined the @var{files} is located relative to @var{rootdir} rather ! than the current directory ! @seealso{unzip,tar} ! @end deftypefn ! __fsolve_defopts__ ! Undocumented internal function. ! glpk ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{xopt}, @var{fmin}, @var{status}, @var{extra}] =} glpk (@var{c}, @var{a}, @var{b}, @var{lb}, @var{ub}, @var{ctype}, @var{vartype}, @var{sense}, @var{param}) ! Solve a linear program using the GNU GLPK library. Given three ! arguments, @code{glpk} solves the following standard LP: - @iftex - @tex - $$ - \min_x C^T x - $$ - @end tex - @end iftex - @ifnottex @example ! min C'*x @end example - @end ifnottex ! subject to @iftex @tex ! $$ ! Ax = b \qquad x \geq 0 ! $$ @end tex @end iftex ! @ifnottex ! @example ! @group ! A*x = b ! x >= 0 ! @end group ! @end example ! @end ifnottex ! but may also solve problems of the form ! @iftex ! @tex ! $$ ! [ \min_x | \max_x ] C^T x ! $$ ! @end tex ! @end iftex ! @ifnottex ! @example ! [ min | max ] C'*x ! @end example ! @end ifnottex ! subject to ! @iftex ! @tex ! $$ ! Ax [ = | \leq | \geq ] b \qquad LB \leq x \leq UB ! $$ ! @end tex ! @end iftex ! @ifnottex ! @example ! @group ! A*x [ "=" | "<=" | ">=" ] b ! x >= LB ! x <= UB ! @end group ! @end example ! @end ifnottex ! Input arguments: ! @table @var ! @item c ! A column array containing the objective function coefficients. ! @item a ! A matrix containing the constraints coefficients. ! @item b ! A column array containing the right-hand side value for each constraint ! in the constraint matrix. ! @item lb ! An array containing the lower bound on each of the variables. If ! @var{lb} is not supplied, the default lower bound for the variables is ! zero. ! @item ub ! An array containing the upper bound on each of the variables. If ! @var{ub} is not supplied, the default upper bound is assumed to be ! infinite. ! @item ctype ! An array of characters containing the sense of each constraint in the ! constraint matrix. Each element of the array may be one of the ! following values ! @table @code ! @item "F" ! A free (unbounded) constraint (the constraint is ignored). ! @item "U" ! An inequality constraint with an upper bound (@code{A(i,:)*x <= b(i)}). ! @item "S" ! An equality constraint (@code{A(i,:)*x = b(i)}). ! @item "L" ! An inequality with a lower bound (@code{A(i,:)*x >= b(i)}). ! @item "D" ! An inequality constraint with both upper and lower bounds ! (@code{A(i,:)*x >= -b(i)} @emph{and} (@code{A(i,:)*x <= b(i)}). ! @end table ! @item vartype ! A column array containing the types of the variables. ! @table @code ! @item "C" ! A continuous variable. ! @item "I" ! An integer variable. @end table ! @item sense ! If @var{sense} is 1, the problem is a minimization. If @var{sense} is ! -1, the problem is a maximization. The default value is 1. ! @item param ! A structure containing the following parameters used to define the ! behavior of solver. Missing elements in the structure take on default ! values, so you only need to set the elements that you wish to change ! from the default. ! Integer parameters: ! @table @code ! @item msglev (@code{LPX_K_MSGLEV}, default: 1) ! Level of messages output by solver routines: ! @table @asis ! @item 0 ! No output. ! @item 1 ! Error messages only. ! @item 2 ! Normal output . ! @item 3 ! Full output (includes informational messages). ! @end table ! @item scale (@code{LPX_K_SCALE}, default: 1) ! Scaling option: ! @table @asis ! @item 0 ! No scaling. ! @item 1 ! Equilibration scaling. ! @item 2 ! Geometric mean scaling, then equilibration scaling. ! @end table ! @item dual (@code{LPX_K_DUAL}, default: 0) ! Dual simplex option: ! @table @asis ! @item 0 ! Do not use the dual simplex. ! @item 1 ! If initial basic solution is dual feasible, use the dual simplex. ! @end table ! @item price (@code{LPX_K_PRICE}, default: 1) ! Pricing option (for both primal and dual simplex): ! @table @asis ! @item 0 ! Textbook pricing. ! @item 1 ! Steepest edge pricing. ! @end table ! ! @item round (@code{LPX_K_ROUND}, default: 0) ! Solution rounding option: ! @table @asis ! @item 0 ! Report all primal and dual values "as is". ! @item 1 ! Replace tiny primal and dual values by exact zero. ! @end table ! @item itlim (@code{LPX_K_ITLIM}, default: -1) ! Simplex iterations limit. If this value is positive, it is decreased by ! one each time when one simplex iteration has been performed, and ! reaching zero value signals the solver to stop the search. Negative ! value means no iterations limit. ! @item itcnt (@code{LPX_K_OUTFRQ}, default: 200) ! Output frequency, in iterations. This parameter specifies how ! frequently the solver sends information about the solution to the ! standard output. ! @item branch (@code{LPX_K_BRANCH}, default: 2) ! Branching heuristic option (for MIP only): ! @table @asis ! @item 0 ! Branch on the first variable. ! @item 1 ! Branch on the last variable. ! @item 2 ! Branch using a heuristic by Driebeck and Tomlin. ! @end table ! @item btrack (@code{LPX_K_BTRACK}, default: 2) ! Backtracking heuristic option (for MIP only): ! @table @asis ! @item 0 ! Depth first search. ! @item 1 ! Breadth first search. ! @item 2 ! Backtrack using the best projection heuristic. ! @end table ! @item presol (@code{LPX_K_PRESOL}, default: 1) ! If this flag is set, the routine lpx_simplex solves the problem using ! the built-in LP presolver. Otherwise the LP presolver is not used. ! @item lpsolver (default: 1) ! Select which solver to use. If the problem is a MIP problem this flag ! will be ignored. ! @table @asis ! @item 1 ! Revised simplex method. ! @item 2 ! Interior point method. ! @end table ! @item save (default: 0) ! If this parameter is nonzero, save a copy of the problem in ! CPLEX LP format to the file @file{"outpb.lp"}. There is currently no ! way to change the name of the output file. ! @end table ! Real parameters: ! @table @code ! @item relax (@code{LPX_K_RELAX}, default: 0.07) ! Relaxation parameter used in the ratio test. If it is zero, the textbook ! ratio test is used. If it is non-zero (should be positive), Harris' ! two-pass ratio test is used. In the latter case on the first pass of the ! ratio test basic variables (in the case of primal simplex) or reduced ! costs of non-basic variables (in the case of dual simplex) are allowed ! to slightly violate their bounds, but not more than ! @code{relax*tolbnd} or @code{relax*toldj (thus, @code{relax} is a ! percentage of @code{tolbnd} or @code{toldj}}. ! @item tolbnd (@code{LPX_K_TOLBND}, default: 10e-7) ! Relative tolerance used to check if the current basic solution is primal ! feasible. It is not recommended that you change this parameter unless you ! have a detailed understanding of its purpose. ! @item toldj (@code{LPX_K_TOLDJ}, default: 10e-7) ! Absolute tolerance used to check if the current basic solution is dual ! feasible. It is not recommended that you change this parameter unless you ! have a detailed understanding of its purpose. ! @item tolpiv (@code{LPX_K_TOLPIV}, default: 10e-9) ! Relative tolerance used to choose eligible pivotal elements of the ! simplex table. It is not recommended that you change this parameter unless you ! have a detailed understanding of its purpose. ! @item objll (@code{LPX_K_OBJLL}, default: -DBL_MAX) ! Lower limit of the objective function. If on the phase II the objective ! function reaches this limit and continues decreasing, the solver stops ! the search. This parameter is used in the dual simplex method only. ! @item objul (@code{LPX_K_OBJUL}, default: +DBL_MAX) ! Upper limit of the objective function. If on the phase II the objective ! function reaches this limit and continues increasing, the solver stops ! the search. This parameter is used in the dual simplex only. ! @item tmlim (@code{LPX_K_TMLIM}, default: -1.0) ! Searching time limit, in seconds. If this value is positive, it is ! decreased each time when one simplex iteration has been performed by the ! amount of time spent for the iteration, and reaching zero value signals ! the solver to stop the search. Negative value means no time limit. ! @item outdly (@code{LPX_K_OUTDLY}, default: 0.0) ! Output delay, in seconds. This parameter specifies how long the solver ! should delay sending information about the solution to the standard ! output. Non-positive value means no delay. ! @item tolint (@code{LPX_K_TOLINT}, default: 10e-5) ! Relative tolerance used to check if the current basic solution is integer ! feasible. It is not recommended that you change this parameter unless ! you have a detailed understanding of its purpose. ! @item tolobj (@code{LPX_K_TOLOBJ}, default: 10e-7) ! Relative tolerance used to check if the value of the objective function ! is not better than in the best known integer feasible solution. It is ! not recommended that you change this parameter unless you have a ! detailed understanding of its purpose. ! @end table @end table ! Output values: ! ! @table @var ! @item xopt ! The optimizer (the value of the decision variables at the optimum). ! @item fopt ! The optimum value of the objective function. ! @item status ! Status of the optimization. ! Simplex Method: ! @table @asis ! @item 180 (@code{LPX_OPT}) ! Solution is optimal. ! @item 181 (@code{LPX_FEAS}) ! Solution is feasible. ! @item 182 (@code{LPX_INFEAS}) ! Solution is infeasible. ! @item 183 (@code{LPX_NOFEAS}) ! Problem has no feasible solution. ! @item 184 (@code{LPX_UNBND}) ! Problem has no unbounded solution. ! @item 185 (@code{LPX_UNDEF}) ! Solution status is undefined. ! @end table ! Interior Point Method: ! @table @asis ! @item 150 (@code{LPX_T_UNDEF}) ! The interior point method is undefined. ! @item 151 (@code{LPX_T_OPT}) ! The interior point method is optimal. ! @end table ! Mixed Integer Method: ! @table @asis ! @item 170 (@code{LPX_I_UNDEF}) ! The status is undefined. ! @item 171 (@code{LPX_I_OPT}) ! The solution is integer optimal. ! @item 172 (@code{LPX_I_FEAS}) ! Solution integer feasible but its optimality has not been proven ! @item 173 (@code{LPX_I_NOFEAS}) ! No integer feasible solution. ! @end table ! @noindent ! If an error occurs, @var{status} will contain one of the following ! codes: ! @table @asis ! @item 204 (@code{LPX_E_FAULT}) ! Unable to start the search. ! @item 205 (@code{LPX_E_OBJLL}) ! Objective function lower limit reached. ! @item 206 (@code{LPX_E_OBJUL}) ! Objective function upper limit reached. ! @item 207 (@code{LPX_E_ITLIM}) ! Iterations limit exhausted. ! @item 208 (@code{LPX_E_TMLIM}) ! Time limit exhausted. ! @item 209 (@code{LPX_E_NOFEAS}) ! No feasible solution. ! @item 210 (@code{LPX_E_INSTAB}) ! Numerical instability. ! @item 211 (@code{LPX_E_SING}) ! Problems with basis matrix. ! @item 212 (@code{LPX_E_NOCONV}) ! No convergence (interior). ! @item 213 (@code{LPX_E_NOPFS}) ! No primal feasible solution (LP presolver). ! @item 214 (@code{LPX_E_NODFS}) ! No dual feasible solution (LP presolver). ! @end table ! @item extra ! A data structure containing the following fields: ! @table @code ! @item lambda ! Dual variables. ! @item redcosts ! Reduced Costs. ! @item time ! Time (in seconds) used for solving LP/MIP problem. ! @item mem ! Memory (in bytes) used for solving LP/MIP problem (this is not ! available if the version of GLPK is 4.15 or later). ! @end table ! @end table ! Example: ! @example ! @group ! c = [10, 6, 4]'; ! a = [ 1, 1, 1; ! 10, 4, 5; ! 2, 2, 6]; ! b = [100, 600, 300]'; ! lb = [0, 0, 0]'; ! ub = []; ! ctype = "UUU"; ! vartype = "CCC"; ! s = -1; ! param.msglev = 1; ! param.itlim = 100; ! [xmin, fmin, status, extra] = ... ! glpk (c, a, b, lb, ub, ctype, vartype, s, param); @end group @end example @end deftypefn ! glpkmex ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{xopt}, @var{fmin}, @var{status}, @var{extra}] =} glpkmex (@var{sense}, @var{c}, @var{a}, @var{b}, @var{ctype}, @var{lb}, @var{ub}, @var{vartype}, @var{param}, @var{lpsolver}, @var{save_pb}) ! This function is provided for compatibility with the old @sc{Matlab} ! interface to the GNU GLPK library. For Octave code, you should use ! the @code{glpk} function instead. ! @end deftypefn ! optimset ! -*- texinfo -*- ! @deftypefn {Function File} {} optimset () ! @deftypefnx {Function File} {} optimset (@var{par}, @var{val}, @dots{}) ! @deftypefnx {Function File} {} optimset (@var{old}, @var{par}, @var{val}, @dots{}) ! @deftypefnx {Function File} {} optimset (@var{old}, @var{new}) ! Create options struct for optimization functions. ! @end deftypefn ! qp -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{obj}, @var{info}, @var{lambda}] =} qp (@var{x0}, @var{H}, @var{q}, @var{A}, @var{b}, @var{lb}, @var{ub}, @var{A_lb}, @var{A_in}, @var{A_ub}) ! Solve the quadratic program ! @iftex @tex $$ ! \min_x {1 \over 2} x^T H x + x^T q $$ @end tex ! @end iftex ! @ifnottex @example ! min 0.5 x'*H*x + x'*q ! x @end example ! @end ifnottex ! subject to @iftex @tex $$ ! Ax = b \qquad lb \leq x \leq ub \qquad A_{lb} \leq A_{in} \leq A_{ub} $$ @end tex @end iftex ! @ifnottex @example ! A*x = b ! lb <= x <= ub ! A_lb <= A_in*x <= A_ub @end example ! @end ifnottex ! @noindent ! using a null-space active-set method. ! Any bound (@var{A}, @var{b}, @var{lb}, @var{ub}, @var{A_lb}, ! @var{A_ub}) may be set to the empty matrix (@code{[]}) if not ! present. If the initial guess is feasible the algorithm is faster. - The value @var{info} is a structure with the following fields: - @table @code - @item solveiter - The number of iterations required to find the solution. - @item info - An integer indicating the status of the solution, as follows: - @table @asis - @item 0 - The problem is feasible and convex. Global solution found. - @item 1 - The problem is not convex. Local solution found. - @item 2 - The problem is not convex and unbounded. - @item 3 - Maximum number of iterations reached. - @item 6 - The problem is infeasible. - @end table - @end table @end deftypefn ! sqp -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{obj}, @var{info}, @var{iter}, @var{nf}, @var{lambda}] =} sqp (@var{x}, @var{phi}, @var{g}, @var{h}) ! Solve the nonlinear program @iftex @tex $$ ! \min_x \phi (x) $$ @end tex @end iftex ! @ifnottex @example ! min phi (x) ! x @end example ! @end ifnottex ! subject to @iftex @tex $$ ! g(x) = 0 \qquad h(x) \geq 0 $$ @end tex @end iftex ! @ifnottex @example ! g(x) = 0 ! h(x) >= 0 @end example ! @end ifnottex ! @noindent ! using a successive quadratic programming method. ! The first argument is the initial guess for the vector @var{x}. ! The second argument is a function handle pointing to the objective ! function. The objective function must be of the form @example ! y = phi (x) @end example ! @noindent ! in which @var{x} is a vector and @var{y} is a scalar. ! ! The second argument may also be a 2- or 3-element cell array of ! function handles. The first element should point to the objective ! function, the second should point to a function that computes the ! gradient of the objective function, and the third should point to a ! function to compute the hessian of the objective function. If the ! gradient function is not supplied, the gradient is computed by finite ! differences. If the hessian function is not supplied, a BFGS update ! formula is used to approximate the hessian. ! If supplied, the gradient function must be of the form @example ! g = gradient (x) @end example - @noindent - in which @var{x} is a vector and @var{g} is a vector. - - If supplied, the hessian function must be of the form - @example ! h = hessian (x) @end example ! @noindent ! in which @var{x} is a vector and @var{h} is a matrix. ! The third and fourth arguments are function handles pointing to ! functions that compute the equality constraints and the inequality ! constraints, respectively. ! If your problem does not have equality (or inequality) constraints, ! you may pass an empty matrix for @var{cef} (or @var{cif}). ! If supplied, the equality and inequality constraint functions must be ! of the form @example ! r = f (x) @end example ! @noindent ! in which @var{x} is a vector and @var{r} is a vector. ! The third and fourth arguments may also be 2-element cell arrays of ! function handles. The first element should point to the constraint ! function and the second should point to a function that computes the ! gradient of the constraint function: - @iftex - @tex - $$ - \Bigg( {\partial f(x) \over \partial x_1}, - {\partial f(x) \over \partial x_2}, \ldots, - {\partial f(x) \over \partial x_N} \Bigg)^T - $$ - @end tex - @end iftex - @ifnottex @example ! [ d f(x) d f(x) d f(x) ] ! transpose ( [ ------ ----- ... ------ ] ) ! [ dx_1 dx_2 dx_N ] @end example - @end ifnottex ! Here is an example of calling @code{sqp}: ! @example ! function r = g (x) ! r = [ sumsq(x)-10; ! x(2)*x(3)-5*x(4)*x(5); ! x(1)^3+x(2)^3+1 ]; ! endfunction ! function obj = phi (x) ! obj = exp(prod(x)) - 0.5*(x(1)^3+x(2)^3+1)^2; ! endfunction ! x0 = [-1.8; 1.7; 1.9; -0.8; -0.8]; ! [x, obj, info, iter, nf, lambda] = sqp (x0, @@phi, @@g, []) ! x = ! ! -1.71714 ! 1.59571 ! 1.82725 ! -0.76364 ! -0.76364 ! ! obj = 0.053950 ! info = 101 ! iter = 8 ! nf = 10 ! lambda = ! ! -0.0401627 ! 0.0379578 ! -0.0052227 @end example ! The value returned in @var{info} may be one of the following: ! @table @asis ! @item 101 ! The algorithm terminated because the norm of the last step was less ! than @code{tol * norm (x))} (the value of tol is currently fixed at ! @code{sqrt (eps)}---edit @file{sqp.m} to modify this value. ! @item 102 ! The BFGS update failed. ! @item 103 ! The maximum number of iterations was reached (the maximum number of ! allowed iterations is currently fixed at 100---edit @file{sqp.m} to ! increase this value). ! @end table ! @seealso{qp} @end deftypefn ! savepath -*- texinfo -*- ! @deftypefn {Function File} {} savepath (@var{file}) ! Save the current function search path to @var{file}. If @var{file} ! is omitted, @file{~/.octaverc} is used. If successful, ! @code{savepath} returns 0. ! @seealso{path, addpath, rmpath, genpath, pathdef, pathsep} @end deftypefn ! pkg -*- texinfo -*- ! @deftypefn {Command} pkg @var{command} @var{pkg_name} ! @deftypefnx {Command} pkg @var{command} @var{option} @var{pkg_name} ! This command interacts with the package manager. Different actions will ! be taken depending on the value of @var{command}. - @table @samp - @item install - Install named packages. For example, @example ! pkg install image-1.0.0.tar.gz @end example - @noindent - installs the package found in the file @code{image-1.0.0.tar.gz}. ! The @var{option} variable can contain options that affect the manner ! in which a package is installed. These options can be one or more of ! @table @code ! @item -nodeps ! The package manager will disable the dependency checking. That way it ! is possible to install a package even if it depends on another package ! that's not installed on the system. @strong{Use this option with care.} ! @item -noauto ! The package manager will not automatically load the installed package ! when starting Octave, even if the package requests that it is. ! @item -auto ! The package manager will automatically load the installed package when ! starting Octave, even if the package requests that it isn't. ! @item -local ! A local installation is forced, even if the user has system privileges. ! @item -global ! A global installation is forced, even if the user doesn't normally have ! system privileges ! @item -verbose ! The package manager will print the output of all of the commands that are ! performed. ! @end table - @item uninstall - Uninstall named packages. For example, - @example - pkg uninstall image - @end example - @noindent - removes the @code{image} package from the system. If another installed - package depends on the @code{image} package an error will be issued. - The package can be uninstalled anyway by using the @code{-nodeps} option. - @item load - Add named packages to the path. After loading a package it is - possible to use the functions provided by the package. For example, - @example - pkg load image - @end example - @noindent - adds the @code{image} package to the path. It is possible to load all - installed packages at once with the command - @example - pkg load all - @end example - @item unload - Removes named packages from the path. After unloading a package it is - no longer possible to use the functions provided by the package. - This command behaves like the @code{load} command. - @item list - Show a list of the currently installed packages. By requesting one or two - output argument it is possible to get a list of the currently installed - packages. For example, - @example - installed_packages = pkg list; - @end example - @noindent - returns a cell array containing a structure for each installed package. - The command - @example - [@var{user_packages}, @var{system_packages}] = pkg list - @end example - @noindent - splits the list of installed packages into those who are installed by - the current user, and those installed by the system administrator. - @item describe - Show a short description of the named installed packages, with the option - '-verbose' also list functions provided by the package, e.g.: - @example - pkg describe -verbose all - @end example - @noindent - will describe all installed packages and the functions they provide. - If one output is requested a cell of structure containing the - description and list of functions of each package is returned as - output rather than printed on screen: - @example - desc = pkg ("describe", "secs1d", "image") - @end example - @noindent - If any of the requested packages is not installed, pkg returns an - error, unless a second output is requested: - @example - [ desc, flag] = pkg ("describe", "secs1d", "image") - @end example - @noindent - @var{flag} will take one of the values "Not installed", "Loaded" or - "Not loaded" for each of the named packages. - @item prefix - Set the installation prefix directory. For example, @example ! pkg prefix ~/my_octave_packages @end example - @noindent - sets the installation prefix to @code{~/my_octave_packages}. - Packages will be installed in this directory. ! It is possible to get the current installation prefix by requesting an ! output argument. For example, ! @example ! p = pkg prefix ! @end example ! The location in which to install the architecture dependent files can be ! independent specified with an addition argument. For example ! @example ! pkg prefix ~/my_octave_packages ~/my_octave_packages_for_my_pc ! @end example ! @item local_list ! Set the file in which to look for information on the locally ! installed packages. Locally installed packages are those that are ! typically available only to the current user. For example ! @example ! pkg local_list ~/.octave_packages ! @end example ! It is possible to get the current value of local_list with the following ! @example ! pkg local_list ! @end example ! @item global_list ! Set the file in which to look for, for information on the globally ! installed packages. Globally installed packages are those that are ! typically available to all users. For example ! @example ! pkg global_list /usr/share/octave/octave_packages ! @end example ! It is possible to get the current value of global_list with the following ! @example ! pkg global_list ! @end example ! @item rebuild ! Rebuilds the package database from the installed directories. This can ! be used in cases where for some reason the package database is corrupted. ! It can also take the @code{-auto} and @code{-noauto} options to allow the ! autolaoding state of a package to be changed. For example ! @example ! pkg rebuild -noauto image ! @end example ! will remove the autoloading status of the image package. ! @item build ! Builds a binary form of a package or packages. The binary file produced ! will itself be an Octave package that can be installed normally with ! @code{pkg}. The form of the command to build a binary package is @example ! pkg build builddir image-1.0.0.tar.gz @dots{} ! @end example ! @noindent ! where @code{buiddir} is the name of a directory where the temporary ! installation will be produced and the binary packages will be found. ! The options @code{-verbose} and @code{-nodeps} are respected, while ! the other options are ignored. ! @end table ! @end deftypefn ! __area__ ! Undocumented internal function. ! __axes_limits__ ! Undocumented internal function. ! __axis_label__ ! Undocumented internal function. ! __bar__ ! Undocumented internal function. ! __bars__ ! Undocumented internal function. ! __contour__ ! Undocumented internal function. ! __default_plot_options__ ! Undocumented internal function. ! __errcomm__ ! Undocumented internal function. ! __errplot__ ! Undocumented internal function. ! drawnow ! -*- texinfo -*- ! @deftypefn {Function File} {} drawnow () ! Update and display the current graphics. ! Octave automatically calls drawnow just before printing a prompt, ! when @code{sleep} or @code{pause} is called, or while waiting for ! command-line input. @end deftypefn ! __gnuplot_version__ ! Undocumented internal function. ! __go_close_all__ ! Undocumented internal function. ! __go_draw_axes__ ! Undocumented internal function. ! __go_draw_figure__ ! Undocumented internal function. ! __line__ ! Undocumented internal function. ! __next_line_color__ ! Undocumented internal function. ! __patch__ ! Undocumented internal function. ! __plr1__ ! Undocumented internal function. ! __plr2__ ! Undocumented internal function. ! __plt1__ ! Undocumented internal function. ! __plt2__ ! Undocumented internal function. ! __plt2mm__ ! Undocumented internal function. ! __plt2mv__ ! Undocumented internal function. ! __plt2ss__ ! Undocumented internal function. ! __plt2sv__ ! Undocumented internal function. ! __plt2vm__ ! Undocumented internal function. ! __plt2vs__ ! Undocumented internal function. ! __plt2vv__ ! Undocumented internal function. ! __plt__ ! Undocumented internal function. ! __plt_get_axis_arg__ ! Undocumented internal function. ! __pltopt1__ ! Undocumented internal function. ! __pltopt__ ! Undocumented internal function. ! __quiver__ ! Undocumented internal function ! __scatter__ ! Undocumented internal function. ! __stem__ ! Undocumented internal function ! ancestor -*- texinfo -*- ! @deftypefn {Function File} {@var{parent} =} ancestor (@var{h}, @var{type}) ! @deftypefnx {Function File} {@var{parent} =} ancestor (@var{h}, @var{type}, 'toplevel') ! Return the first ancestor of handle object @var{h} whose type matches ! @var{type}, where @var{type} is a character string. If @var{type} is a ! cell array of strings, return the first parent whose type matches ! any of the given type strings. ! If the handle object @var{h} is of type @var{type}, return @var{h}. ! If @code{"toplevel"} is given as a 3rd argument, return the highest ! parent in the object hierarchy that matches the condition, instead ! of the first (nearest) one. ! @seealso{get, set} @end deftypefn ! area -*- texinfo -*- ! @deftypefn {Function File} {} area (@var{x}, @var{y}) ! @deftypefnx {Function File} {} area (@var{x}, @var{y}, @var{lvl}) ! @deftypefnx {Function File} {} area (@dots{}, @var{prop}, @var{val}, @dots{}) ! @deftypefnx {Function File} {} area (@var{y}, @dots{}) ! @deftypefnx {Function File} {} area (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} area (@dots{}) ! Area plot of cummulative sum of the columns of @var{y}. This shows the ! contributions of a value to a sum, and is functionally similar to ! @code{plot (@var{x}, cumsum (@var{y}, 2))}, except that the area under ! the curve is shaded. ! If the @var{x} argument is ommitted it is assumed to be given by ! @code{1 : rows (@var{y})}. A value @var{lvl} can be defined that determines ! where the base level of the shading under the curve should be defined. ! Additional arguments to the @code{area} function are passed to the ! @code{patch}. The optional return value @var{h} provides a handle to ! the list of patch objects. ! @seealso{plot, patch} @end deftypefn ! axes -*- texinfo -*- ! @deftypefn {Function File} {} axes () ! @deftypefnx {Function File} {} axes (@var{property}, @var{value}, @dots{}) ! @deftypefnx {Function File} {} axes (@var{h}) ! Create an axes object and return a handle to it. @end deftypefn ! axis -*- texinfo -*- ! @deftypefn {Function File} {} axis (@var{limits}) ! Set axis limits for plots. ! The argument @var{limits} should be a 2, 4, or 6 element vector. The ! first and second elements specify the lower and upper limits for the x ! axis. The third and fourth specify the limits for the y axis, and the ! fifth and sixth specify the limits for the z axis. ! Without any arguments, @code{axis} turns autoscaling on. ! With one output argument, @code{x=axis} returns the current axes ! The vector argument specifying limits is optional, and additional ! string arguments may be used to specify various axis properties. For ! example, @example ! axis ([1, 2, 3, 4], "square"); @end example ! @noindent ! forces a square aspect ratio, and @example ! axis ("labely", "tic"); @end example ! @noindent ! turns tic marks on for all axes and tic mark labels on for the y-axis ! only. ! @noindent ! The following options control the aspect ratio of the axes. @table @code ! @item "square" ! Force a square aspect ratio. ! @item "equal" ! Force x distance to equal y-distance. ! @item "normal" ! Restore the balance. @end table ! @noindent ! The following options control the way axis limits are interpreted. ! @table @code ! @item "auto" ! Set the specified axes to have nice limits around the data ! or all if no axes are specified. ! @item "manual" ! Fix the current axes limits. ! @item "tight" ! Fix axes to the limits of the data (not implemented). @end table ! @noindent ! The option @code{"image"} is equivalent to @code{"tight"} and ! @code{"equal"}. ! @noindent ! The following options affect the appearance of tic marks. @table @code ! @item "on" ! Turn tic marks and labels on for all axes. ! @item "off" ! Turn tic marks off for all axes. ! @item "tic[xyz]" ! Turn tic marks on for all axes, or turn them on for the ! specified axes and off for the remainder. ! @item "label[xyz]" ! Turn tic labels on for all axes, or turn them on for the ! specified axes and off for the remainder. ! @item "nolabel" ! Turn tic labels off for all axes. @end table - Note, if there are no tic marks for an axis, there can be no labels. ! @noindent ! The following options affect the direction of increasing values on ! the axes. ! @table @code ! @item "ij" ! Reverse y-axis, so lower values are nearer the top. ! @item "xy" ! Restore y-axis, so higher values are nearer the top. @end table ! If an axes handle is passed as the first argument, then operate on ! this axes rather than the current axes. ! @end deftypefn ! bar ! -*- texinfo -*- ! @deftypefn {Function File} {} bar (@var{x}, @var{y}) ! @deftypefnx {Function File} {} bar (@var{y}) ! @deftypefnx {Function File} {} bar (@var{x}, @var{y}, @var{w}) ! @deftypefnx {Function File} {} bar (@var{x}, @var{y}, @var{w}, @var{style}) ! @deftypefnx {Function File} {@var{h} =} bar (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} bar (@var{h}, @dots{}) ! Produce a bar graph from two vectors of x-y data. ! If only one argument is given, it is taken as a vector of y-values ! and the x coordinates are taken to be the indices of the elements. ! The default width of 0.8 for the bars can be changed using @var{w}. ! If @var{y} is a matrix, then each column of @var{y} is taken to be a ! separate bar graph plotted on the same graph. By default the columns ! are plotted side-by-side. This behavior can be changed by the @var{style} ! argument, which can take the values @code{"grouped"} (the default), ! or @code{"stacked"}. ! The optional return value @var{h} provides a handle to the patch object. ! Whereas the option input handle @var{h} allows an axis handle to be passed. ! Properties of the patch graphics object can be changed using ! @var{prop}, @var{val} pairs. ! @seealso{barh, plot} ! @end deftypefn ! barh ! -*- texinfo -*- ! @deftypefn {Function File} {} barh (@var{x}, @var{y}) ! @deftypefnx {Function File} {} barh (@var{y}) ! @deftypefnx {Function File} {} barh (@var{x}, @var{y}, @var{w}) ! @deftypefnx {Function File} {} barh (@var{x}, @var{y}, @var{w}, @var{style}) ! @deftypefnx {Function File} {@var{h} =} barh (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} barh (@var{h}, @dots{}) ! Produce a horizontal bar graph from two vectors of x-y data. ! If only one argument is given, it is taken as a vector of y-values ! and the x coordinates are taken to be the indices of the elements. ! The default width of 0.8 for the bars can be changed using @var{w}. ! If @var{y} is a matrix, then each column of @var{y} is taken to be a ! separate bar graph plotted on the same graph. By default the columns ! are plotted side-by-side. This behavior can be changed by the @var{style} ! argument, which can take the values @code{"grouped"} (the default), ! or @code{"stacked"}. ! The optional return value @var{h} provides a handle to the patch object. ! Whereas the option input handle @var{h} allows an axis handle to be passed. ! Properties of the patch graphics object can be changed using ! @var{prop}, @var{val} pairs. ! @seealso{bar, plot} ! @end deftypefn ! box ! -*- texinfo -*- ! @deftypefn {Function File} {} box (@var{arg}) ! @deftypefnx {Function File} {} box (@var{h}, @dots{}) ! Control the display of a border around the plot. ! The argument may be either @code{"on"} or @code{"off"}. If it is ! omitted, the current box state is toggled. ! @seealso{grid} ! @end deftypefn ! caxis ! -*- texinfo -*- ! @deftypefn {Function File} {} caxis (@var{limits}) ! @deftypefnx {Function File} {} caxis (@var{h}, @dots{}) ! Set color axis limits for plots. ! The argument @var{limits} should be a 2 element vector specifying the ! lower and upper limits to assign to the first and last value in the ! colormap. Values outside this range are clamped to the first and last ! colormap entries. ! If @var{limits} is 'auto', then automatic colormap scaling is applied, ! whereas if @var{limits} is 'manual' the colormap scaling is set to manual. ! Called without any arguments to current color axis limits are returned. ! If an axes handle is passed as the first argument, then operate on ! this axes rather than the current axes. ! @end deftypefn ! clf ! -*- texinfo -*- ! @deftypefn {Function File} {} clf () ! Clear the current figure. ! @seealso{close, delete} ! @end deftypefn ! close ! -*- texinfo -*- ! @deftypefn {Command} {} close ! @deftypefnx {Command} {} close (@var{n}) ! @deftypefnx {Command} {} close all ! @deftypefnx {Command} {} close all hidden ! Close figure window(s) by calling the function specified by the ! @code{"closerequestfcn"} property for each figure. By default, the ! function @code{closereq} is used. ! @seealso{closereq} ! @end deftypefn ! closereq ! -*- texinfo -*- ! @deftypefn {Function File} {} closereq () ! Close the current figure and delete all graphics objects associated ! with it. ! @seealso{close, delete} ! @end deftypefn ! colorbar ! -*- texinfo -*- ! @deftypefn {Function File} {} colorbar (@var{s}) ! @deftypefnx {Function File} {} colorbar ('peer', @var{h}, @dots{}) ! Adds a colorbar to the current axes. Valid values for @var{s} are @table @asis ! @item 'EastOutside' ! Place the colorbar outside the plot to the right. This is the default. ! @item 'East' ! Place the colorbar inside the plot to the right. ! @item 'WestOutside' ! Place the colorbar outside the plot to the left. ! @item 'West' ! Place the colorbar inside the plot to the left. ! @item 'NorthOutside' ! Place the colorbar above the plot. ! @item 'North' ! Place the colorbar at the top of the plot. ! @item 'SouthOutside' ! Place the colorbar under the plot. ! @item 'South' ! Place the colorbar at the bottom of the plot. ! @item 'Off', 'None' ! Remove any existing colorbar from the plot. @end table ! If the argument 'peer' is given, then the following argument is treated ! as the axes handle on which to add the colorbar. ! @end deftypefn ! compass ! -*- texinfo -*- ! @deftypefn {Function File} {} compass (@var{u}, @var{v}) ! @deftypefnx {Function File} {} compass (@var{z}) ! @deftypefnx {Function File} {} compass (@dots{}, @var{style}) ! @deftypefnx {Function File} {} compass (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} compass (@dots{}) ! ! Plot the @code{(@var{u}, @var{v})} components of a vector field emanating ! from the origin of a polar polt. If a single complex argument @var{z} is ! given, then @code{@var{u} = real (@var{z})} and @code{@var{v} = imag ! (@var{z})}. ! ! The style to use for the plot can be defined with a line style @var{style} ! in a similar manner to the line styles used with the @code{plot} command. ! The optional return value @var{h} provides a list of handles to the ! the parts of the vector field (body, arrow and marker). @example @group ! a = toeplitz([1;randn(9,1)],[1,randn(1,9)]); ! compass (eig (a)) ! @end group ! @end example ! @seealso{plot, polar, quiver, feather} ! @end deftypefn ! contour ! -*- texinfo -*- ! @deftypefn {Function File} {} contour (@var{z}) ! @deftypefnx {Function File} {} contour (@var{z}, @var{vn}) ! @deftypefnx {Function File} {} contour (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {} contour (@var{x}, @var{y}, @var{z}, @var{vn}) ! @deftypefnx {Function File} {} contour (@dots{}, @var{style}) ! @deftypefnx {Function File} {} contour (@var{h}, @dots{}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contour (@dots{}) ! Plot level curves (contour lines) of the matrix @var{z}, using the ! contour matrix @var{c} computed by @code{contourc} from the same ! arguments; see the latter for their interpretation. The set of ! contour levels, @var{c}, is only returned if requested. For example: ! @example ! @group ! x = 0:2; ! y = x; ! z = x' * y; ! contour (x, y, z, 2:3) @end group @end example - - The style to use for the plot can be defined with a line style @var{style} - in a similar manner to the line styles used with the @code{plot} command. - Any markers defined by @var{style} are ignored. - - The optional input and output argument @var{h} allows an axis handle to - be passed to @code{contour} and the handles to the contour objects to be - returned. - @seealso{contourc, patch, plot} @end deftypefn ! contour3 -*- texinfo -*- ! @deftypefn {Function File} {} contour3 (@var{z}) ! @deftypefnx {Function File} {} contour3 (@var{z}, @var{vn}) ! @deftypefnx {Function File} {} contour3 (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {} contour3 (@var{x}, @var{y}, @var{z}, @var{vn}) ! @deftypefnx {Function File} {} contour3 (@dots{}, @var{style}) ! @deftypefnx {Function File} {} contour3 (@var{h}, @dots{}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contour3 (@dots{}) ! Plot level curves (contour lines) of the matrix @var{z}, using the ! contour matrix @var{c} computed by @code{contourc} from the same ! arguments; see the latter for their interpretation. The contours are ! ploted at the Z level corresponding to their contour. The set of ! contour levels, @var{c}, is only returned if requested. For example: @example ! @group ! contour3 (peaks (19)); ! hold on ! surface (peaks (19), 'FaceColor', 'none', 'EdgeColor', 'black') ! colormap hot ! @end group @end example ! The style to use for the plot can be defined with a line style @var{style} ! in a similar manner to the line styles used with the @code{plot} command. ! Any markers defined by @var{style} are ignored. ! ! The optional input and output argument @var{h} allows an axis handle to ! be passed to @code{contour} and the handles to the contour objects to be ! returned. ! @seealso{contourc, patch, plot} ! @end deftypefn ! contourc ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{c}, @var{lev}] =} contourc (@var{x}, @var{y}, @var{z}, @var{vn}) ! Compute isolines (countour lines) of the matrix @var{z}. ! Parameters @var{x}, @var{y} and @var{vn} are optional. ! ! The return value @var{lev} is a vector of the contour levels. ! The return value @var{c} is a 2 by @var{n} matrix containing the ! contour lines in the following format @example ! @var{c} = [lev1, x1, x2, ..., levn, x1, x2, ... ! len1, y1, y2, ..., lenn, y1, y2, ...] @end example @noindent ! in which contour line @var{n} has a level (height) of @var{levn} and ! length of @var{lenn}. ! ! If @var{x} and @var{y} are omitted they are taken as the row/column ! index of @var{z}. @var{vn} is either a scalar denoting the number of lines ! to compute or a vector containing the values of the lines. If only one ! value is wanted, set @code{@var{vn} = [val, val]}; ! If @var{vn} is omitted it defaults to 10. ! For example, ! @example ! @group ! x = 0:2; ! y = x; ! z = x' * y; ! contourc (x, y, z, 2:3) ! @result{} 2.0000 2.0000 1.0000 3.0000 1.5000 2.0000 ! 2.0000 1.0000 2.0000 2.0000 2.0000 1.5000 ! @end group ! @end example ! @seealso{contour} @end deftypefn ! contourf -*- texinfo -*- ! @deftypefn {Function File} {[@var{c}, @var{h}] =} contourf (@var{x}, @var{y}, @var{z}, @var{lvl}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@var{x}, @var{y}, @var{z}, @var{n}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@var{z}, @var{n}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@var{z}, @var{lvl}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@var{z}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@var{ax}, @dots{}) ! @deftypefnx {Function File} {[@var{c}, @var{h}] =} contourf (@dots{}, @var{"property"}, @var{val}) ! Compute and plot filled contours of the matrix @var{z}. ! Parameters @var{x}, @var{y} and @var{n} or @var{lvl} are optional. ! ! The return value @var{c} is a 2xn matrix containing the contour lines ! as described in the help to the contourc function. ! ! The return value @var{h} is handle-vector to the patch objects creating ! the filled contours. ! ! If @var{x} and @var{y} are ommited they are taken as the row/column ! index of @var{z}. @var{n} is a scalar denoting the number of lines ! to compute. Alternatively @var{lvl} is a vector containing the ! contour levels. If only one value (e.g. lvl0) is wanted, set ! @var{lvl} to [lvl0, lvl0]. If both @var{n} or @var{lvl} are omitted ! a default value of 10 contour level is assumed. ! ! If provided, the filled contours are added to the axes object ! @var{ax} instead of the current axis. - The following example plots filled contours of the @code{peaks} - function. @example ! [x, y, z] = peaks (50); ! contourf (x, y, z, -7:9) @end example - @seealso{contour, contourc, patch} - @end deftypefn - cylinder - -*- texinfo -*- - @deftypefn {Function File} {} cylinder - @deftypefnx {Function File} {} cylinder (@var{r}) - @deftypefnx {Function File} {} cylinder (@var{r}, @var{n}) - @deftypefnx {Function File} {[@var{x}, @var{y}, @var{z}] =} cylinder (@dots{}) - @deftypefnx {Function File} {} cylinder (@var{ax}, @dots{}) - Generates three matrices in @code{meshgrid} format, such that - @code{surf (@var{x}, @var{y}, @var{z})} generates a unit cylinder. - The matrices are of size @code{@var{n}+1}-by-@code{@var{n}+1}. - @var{r} is a vector containing the radius along the z-axis. - If @var{n} or @var{r} are omitted then default values of 20 or [1 1] - are assumed. - - Called with no return arguments, @code{cylinder} calls directly - @code{surf (@var{x}, @var{y}, @var{z})}. If an axes handle @var{ax} - is passed as the first argument, the surface is plotted to this set - of axes. ! Examples: ! @example ! disp ("plotting a cone") ! [x, y, z] = cylinder (10:-1:0,50); ! surf (x, y, z); ! @end example ! @seealso{sphere} ! @end deftypefn ! ellipsoid ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{y}, @var{z}] =} ellipsoid (@var{xc},@var{yc}, @var{zc}, @var{xr}, @var{yr}, @var{zr}, @var{n}) ! @deftypefnx {Function File} {} ellipsoid (@var{h}, @dots{}) ! Generate three matrices in @code{meshgrid} format that define an ! ellipsoid. Called with no return arguments, @code{ellipsoid} calls ! directly @code{surf (@var{x}, @var{y}, @var{z})}. If an axes handle ! is passed as the first argument, the the surface is plotted to this ! set of axes. ! @seealso{sphere} ! @end deftypefn ! errorbar ! -*- texinfo -*- ! @deftypefn {Function File} {} errorbar (@var{args}) ! This function produces two-dimensional plots with errorbars. Many ! different combinations of arguments are possible. The simplest form is @example ! errorbar (@var{y}, @var{ey}) @end example @noindent ! where the first argument is taken as the set of @var{y} coordinates ! and the second argument @var{ey} is taken as the errors of the ! @var{y} values. @var{x} coordinates are taken to be the indices ! of the elements, starting with 1. ! If more than two arguments are given, they are interpreted as @example ! errorbar (@var{x}, @var{y}, @dots{}, @var{fmt}, @dots{}) @end example @noindent ! where after @var{x} and @var{y} there can be up to four error ! parameters such as @var{ey}, @var{ex}, @var{ly}, @var{uy} etc., ! depending on the plot type. Any number of argument sets may appear, ! as long as they are separated with a format string @var{fmt}. ! ! If @var{y} is a matrix, @var{x} and error parameters must also be matrices ! having same dimensions. The columns of @var{y} are plotted versus the ! corresponding columns of @var{x} and errorbars are drawn from ! the corresponding columns of error parameters. ! ! If @var{fmt} is missing, yerrorbars ("~") plot style is assumed. ! ! If the @var{fmt} argument is supplied, it is interpreted as in ! normal plots. In addition the following plot styles are supported by ! errorbar: ! ! @table @samp ! @item ~ ! Set yerrorbars plot style (default). ! ! @item > ! Set xerrorbars plot style. ! ! @item ~> ! Set xyerrorbars plot style. ! ! @item # ! Set boxes plot style. ! ! @item #~ ! Set boxerrorbars plot style. ! @item #~> ! Set boxxyerrorbars plot style. ! @end table ! Examples: @example ! errorbar (@var{x}, @var{y}, @var{ex}, ">") @end example ! produces an xerrorbar plot of @var{y} versus @var{x} with @var{x} ! errorbars drawn from @var{x}-@var{ex} to @var{x}+@var{ex}. ! ! @example ! errorbar (@var{x}, @var{y1}, @var{ey}, "~", ! @var{x}, @var{y2}, @var{ly}, @var{uy}) ! @end example ! produces yerrorbar plots with @var{y1} and @var{y2} versus @var{x}. ! Errorbars for @var{y1} are drawn from @var{y1}-@var{ey} to ! @var{y1}+@var{ey}, errorbars for @var{y2} from @var{y2}-@var{ly} to ! @var{y2}+@var{uy}. @example ! errorbar (@var{x}, @var{y}, @var{lx}, @var{ux}, ! @var{ly}, @var{uy}, "~>") @end example ! produces an xyerrorbar plot of @var{y} versus @var{x} in which ! @var{x} errorbars are drawn from @var{x}-@var{lx} to @var{x}+@var{ux} ! and @var{y} errorbars from @var{y}-@var{ly} to @var{y}+@var{uy}. ! @seealso{semilogxerr, semilogyerr, loglogerr} ! @end deftypefn ! feather ! -*- texinfo -*- ! @deftypefn {Function File} {} feather (@var{u}, @var{v}) ! @deftypefnx {Function File} {} feather (@var{z}) ! @deftypefnx {Function File} {} feather (@dots{}, @var{style}) ! @deftypefnx {Function File} {} feather (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} feather (@dots{}) ! ! Plot the @code{(@var{u}, @var{v})} components of a vector field emanating ! from equidistant points on the x-axis. If a single complex argument ! @var{z} is given, then @code{@var{u} = real (@var{z})} and ! @code{@var{v} = imag (@var{z})}. ! ! The style to use for the plot can be defined with a line style @var{style} ! in a similar manner to the line styles used with the @code{plot} command. ! ! The optional return value @var{h} provides a list of handles to the ! the parts of the vector field (body, arrow and marker). ! @example ! @group ! phi = [0 : 15 : 360] * pi / 180; ! feather (sin (phi), cos (phi)) ! @end group ! @end example ! @seealso{plot, quiver, compass} ! @end deftypefn ! figure ! -*- texinfo -*- ! @deftypefn {Function File} {} figure (@var{n}) ! @deftypefnx {Function File} {} figure (@var{n}, @var{property}, @var{value}, @dots{}) ! Set the current plot window to plot window @var{n}. If no arguments are ! specified, the next available window number is chosen. ! Multiple property-value pairs may be specified for the figure, but they ! must appear in pairs. ! @end deftypefn ! fill ! -*- texinfo -*- ! @deftypefn {Function File} {} fill (@var{x}, @var{y}, @var{c}) ! @deftypefnx {Function File} {} fill (@var{x1}, @var{y1}, @var{c1}, @var{x2}, @var{y2}, @var{c2}) ! @deftypefnx {Function File} {} fill (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} fill (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} = } fill (@dots{}) ! Create one or more filled patch objects, returning a patch object for each. ! @end deftypefn ! findobj ! -*- texinfo -*- ! @deftypefn {Function File} {@var{h} =} findobj () ! @deftypefnx {Function File} {@var{h} =} findobj (@var{propName}, @var{propValue}) ! @deftypefnx {Function File} {@var{h} =} findobj ('-property', @var{propName}) ! @deftypefnx {Function File} {@var{h} =} findobj ('-regexp', @var{propName},, @var{pattern}) ! @deftypefnx {Function File} {@var{h} =} findobj ('flat', @dots{}) ! @deftypefnx {Function File} {@var{h} =} findobj (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} findobj (@var{h}, '-depth', @var{d}, @dots{}) ! Find object with specified property values. The simplest form is @example ! findobj (@var{propName}, @var{propValue}) @end example @noindent ! which returns all of the handles to the objects with the name ! @var{propName} and the name @var{propValue}. The search can be limited ! to a particular object or set of objects and their descendants by ! passing a handle or set of handles @var{h} as the first argument to ! @code{findobj}. ! The depth of hierarchy of objects to which to search to can be limited ! with the '-depth' argument. To limit the number depth of the hierarchy ! to search to @var{d} generations of children, and example is @example ! findobj (@var{h}, '-depth', @var{d}, @var{propName}, @var{propValue}) @end example ! Specifying a depth @var{d} of 0, limits the search to the set of object ! passed in @var{h}. A depth @var{d} of 0 is equivalent to the '-flat' ! argument. ! ! A specified logical operator may be applied to the pairs of @var{propName} ! and @var{propValue}. The supported logical operators are '-and', '-or', ! '-xor', '-not'. ! ! The objects may also be matched by comparing a regular expression to the ! property values, where property values that match @code{regexp ! (@var{propValue}, @var{pattern})} are returned. Finally, objects may be ! matched by property name only, using the '-property' option. ! @seealso{get, set} ! @end deftypefn ! fplot ! -*- texinfo -*- ! @deftypefn {Function File} {} fplot (@var{fn}, @var{limits}) ! @deftypefnx {Function File} {} fplot (@var{fn}, @var{limits}, @var{tol}) ! @deftypefnx {Function File} {} fplot (@var{fn}, @var{limits}, @var{n}) ! @deftypefnx {Function File} {} fplot (@dots{}, @var{fmt}) ! Plot a function @var{fn}, within the defined limits. @var{fn} ! an be either a string, a function handle or an inline function. ! The limits of the plot are given by @var{limits} of the form ! @code{[@var{xlo}, @var{xhi}]} or @code{[@var{xlo}, @var{xhi}, ! @var{ylo}, @var{yhi}]}. @var{tol} is the default tolerance to use for the ! plot, and if @var{tol} is an integer it is assumed that it defines the ! number points to use in the plot. The @var{fmt} argument is passed ! to the plot command. @example ! fplot ("cos", [0, 2*pi]) ! fplot ("[cos(x), sin(x)]", [0, 2*pi]) ! @end example ! @seealso{plot} ! @end deftypefn ! gca ! -*- texinfo -*- ! @deftypefn {Function File} {} gca () ! Return a handle to the current axis object. If no axis object ! exists, create one and return its handle. The handle may then be ! used to examine or set properties of the axes. For example, ! @example ! @group ! ax = gca (); ! set (ax, "position", [0.5, 0.5, 0.5, 0.5]); ! @end group ! @end example ! @noindent ! creates an empty axes object, then changes its location and size in ! the figure window. ! @seealso{get, set} ! @end deftypefn ! gcf ! -*- texinfo -*- ! @deftypefn {Function File} {} gcf () ! Return the current figure handle. If a figure does not exist, create ! one and return its handle. The handle may then be used to examine or ! set properties of the figure. For example, ! @example ! @group ! fplot (@@sin, [-10, 10]); ! fig = gcf (); ! set (fig, "visible", "off"); ! @end group @end example ! @noindent ! plots a sine wave, finds the handle of the current figure, and then ! makes that figure invisible. Setting the visible property of the ! figure to @code{"on"} will cause it to be displayed again. ! @seealso{get, set} @end deftypefn ! grid -*- texinfo -*- ! @deftypefn {Function File} {} grid (@var{arg}) ! @deftypefnx {Function File} {} grid ("minor", @var{arg2}) ! Force the display of a grid on the plot. ! The argument may be either @code{"on"} or @code{"off"}. If it is ! omitted, the current grid state is toggled. ! ! If @var{arg} is @code{"minor"} then the minor grid is toggled. When ! using a minor grid a second argument @var{arg2} is allowed, which can ! be either @code{"on"} or @code{"off"} to explicitly set the state of ! the minor grid. ! @seealso{plot} @end deftypefn ! hidden -*- texinfo -*- ! @deftypefn {Function File} {} hidden (@var{mode}) ! @deftypefnx {Function File} {} hidden () ! Manipulation the mesh hidden line removal. Called with no argument ! the hidden line removal is toggled. The argument @var{mode} can be either ! 'on' or 'off' and the set of the hidden line removal is set accordingly. ! @seealso{mesh, meshc, surf} @end deftypefn ! hist ! -*- texinfo -*- ! @deftypefn {Function File} {} hist (@var{y}, @var{x}, @var{norm}) ! Produce histogram counts or plots. ! With one vector input argument, plot a histogram of the values with ! 10 bins. The range of the histogram bins is determined by the range ! of the data. ! Given a second scalar argument, use that as the number of bins. ! Given a second vector argument, use that as the centers of the bins, ! with the width of the bins determined from the adjacent values in ! the vector. ! If third argument is provided, the histogram is normalised such that ! the sum of the bars is equal to @var{norm}. ! Extreme values are lumped in the first and last bins. ! With two output arguments, produce the values @var{nn} and @var{xx} such ! that @code{bar (@var{xx}, @var{nn})} will plot the histogram. ! @seealso{bar} ! @end deftypefn ! hold -*- texinfo -*- ! @deftypefn {Function File} {} hold @var{args} ! Tell Octave to `hold' the current data on the plot when executing ! subsequent plotting commands. This allows you to execute a series of ! plot commands and have all the lines end up on the same figure. The ! default is for each new plot command to clear the plot device first. ! For example, the command ! ! @example ! hold on ! @end example ! ! @noindent ! turns the hold state on. An argument of @code{"off"} turns the hold ! state off, and @code{hold} with no arguments toggles the current hold ! state. @end deftypefn ! isfigure -*- texinfo -*- ! @deftypefn {Function File} {} isfigure (@var{h}) ! Return true if @var{h} is a graphics handle that contains a figure ! object and false otherwise. @end deftypefn ! ishold -*- texinfo -*- ! @deftypefn {Function File} {} ishold ! Return true if the next line will be added to the current plot, or ! false if the plot device will be cleared before drawing the next line. @end deftypefn ! legend ! -*- texinfo -*- ! @deftypefn {Function File} {} legend (@var{st1}, @var{st2}, @dots{}) ! @deftypefnx {Function File} {} legend (@var{st1}, @var{st2}, @dots{}, "location", @var{pos}) ! @deftypefnx {Function File} {} legend (@var{matstr}) ! @deftypefnx {Function File} {} legend (@var{matstr}, "location", @var{pos}) ! @deftypefnx {Function File} {} legend (@var{cell}) ! @deftypefnx {Function File} {} legend (@var{cell}, "location", @var{pos}) ! @deftypefnx {Function File} {} legend ('@var{func}') ! ! Display a legend for the current axes using the specified strings ! as labels. Legend entries may be specified as individual character ! string arguments, a character array, or a cell array of character ! strings. Legend works on line graphs, bar graphs, etc. A plot must ! exist before legend is called. ! The optional parameter @var{pos} specifies the location of the legend ! as follows: ! @multitable @columnfractions 0.06 0.14 0.80 ! @item @tab north @tab ! center top ! @item @tab south @tab ! center bottom ! @item @tab east @tab ! right center ! @item @tab west @tab ! left center ! @item @tab northeast @tab ! right top (default) ! @item @tab northwest @tab ! left top ! @item @tab southeast @tab ! right bottom ! @item @tab southwest @tab ! left bottom ! @item ! @item @tab outside @tab ! can be appended to any location string ! @end multitable ! Some specific functions are directly available using @var{func}: ! @table @asis ! @item "show" ! Show legends from the plot ! @item "hide" ! @itemx "off" ! Hide legends from the plot ! @item "boxon" ! Draw a box around legends ! @item "boxoff" ! Withdraw the box around legends ! @item "left" ! Text is to the left of the keys ! @item "right" ! Text is to the right of the keys @end table @end deftypefn ! line -*- texinfo -*- ! @deftypefn {Function File} {} line () ! @deftypefnx {Function File} {} line (@var{x}, @var{y}) ! @deftypefnx {Function File} {} line (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {} line (@var{x}, @var{y}, @var{z}, @var{property}, @var{value}, @dots{}) ! Create line object from @var{x} and @var{y} and insert in current ! axes object. Return a handle (or vector of handles) to the line ! objects created. ! Multiple property-value pairs may be specified for the line, but they ! must appear in pairs. @end deftypefn ! loglog -*- texinfo -*- ! @deftypefn {Function File} {} loglog (@var{args}) ! Produce a two-dimensional plot using log scales for both axes. See ! the description of @code{plot} for a description of the arguments ! that @code{loglog} will accept. ! @seealso{plot, semilogx, semilogy} @end deftypefn ! loglogerr -*- texinfo -*- ! @deftypefn {Function File} {} loglogerr (@var{args}) ! Produce two-dimensional plots on double logarithm axis with ! errorbars. Many different combinations of arguments are possible. ! The most used form is ! @example ! loglogerr (@var{x}, @var{y}, @var{ey}, @var{fmt}) ! @end example ! @noindent ! which produces a double logarithm plot of @var{y} versus @var{x} ! with errors in the @var{y}-scale defined by @var{ey} and the plot ! format defined by @var{fmt}. See errorbar for available formats and ! additional information. ! @seealso{errorbar, semilogxerr, semilogyerr} @end deftypefn ! mesh -*- texinfo -*- ! @deftypefn {Function File} {} mesh (@var{x}, @var{y}, @var{z}) ! Plot a mesh given matrices @var{x}, and @var{y} from @code{meshgrid} and ! a matrix @var{z} corresponding to the @var{x} and @var{y} coordinates of ! the mesh. If @var{x} and @var{y} are vectors, then a typical vertex ! is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, columns of @var{z} ! correspond to different @var{x} values and rows of @var{z} correspond ! to different @var{y} values. ! @seealso{meshgrid, contour} @end deftypefn ! meshc -*- texinfo -*- ! @deftypefn {Function File} {} meshc (@var{x}, @var{y}, @var{z}) ! Plot a mesh and contour given matrices @var{x}, and @var{y} from ! @code{meshgrid} and a matrix @var{z} corresponding to the @var{x} and ! @var{y} coordinates of the mesh. If @var{x} and @var{y} are vectors, ! then a typical vertex is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, ! columns of @var{z} correspond to different @var{x} values and rows of ! @var{z} correspond to different @var{y} values. ! @seealso{meshgrid, mesh, contour} @end deftypefn ! meshgrid -*- texinfo -*- ! @deftypefn {Function File} {[@var{xx}, @var{yy}, @var{zz}] =} meshgrid (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {[@var{xx}, @var{yy}] =} meshgrid (@var{x}, @var{y}) ! @deftypefnx {Function File} {[@var{xx}, @var{yy}] =} meshgrid (@var{x}) ! Given vectors of @var{x} and @var{y} and @var{z} coordinates, and ! returning 3 arguments, return three dimensional arrays corresponding ! to the @var{x}, @var{y}, and @var{z} coordinates of a mesh. When ! returning only 2 arguments, return matrices corresponding to the ! @var{x} and @var{y} coordinates of a mesh. The rows of @var{xx} are ! copies of @var{x}, and the columns of @var{yy} are copies of @var{y}. ! If @var{y} is omitted, then it is assumed to be the same as @var{x}, ! and @var{z} is assumed the same as @var{y}. ! @seealso{mesh, contour} @end deftypefn ! meshz -*- texinfo -*- ! @deftypefn {Function File} {} meshz (@var{x}, @var{y}, @var{z}) ! Plot a curtain mesh given matrices @var{x}, and @var{y} from ! @code{meshgrid} and a matrix @var{z} corresponding to the @var{x} and ! @var{y} coordinates of the mesh. If @var{x} and @var{y} are vectors, ! then a typical vertex is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, ! columns of @var{z} correspond to different @var{x} values and rows of ! @var{z} correspond to different @var{y} values. ! @seealso{meshgrid, mesh, contour} @end deftypefn ! ndgrid -*- texinfo -*- ! @deftypefn {Function File} {[@var{y1}, @var{y2}, @dots{}, @var{y}n] =} ndgrid (@var{x1}, @var{x2}, @dots{}, @var{x}n) ! @deftypefnx {Function File} {[@var{y1}, @var{y2}, @dots{}, @var{y}n] =} ndgrid (@var{x}) ! Given n vectors @var{x1}, @dots{} @var{x}n, @code{ndgrid} returns ! n arrays of dimension n. The elements of the ith output argument ! contains the elements of the vector @var{x}i repeated over all ! dimensions different from the ith dimension. Calling ndgrid with ! only one input argument @var{x} is equivalent of calling ndgrid with ! all n input arguments equal to @var{x}: ! ! [@var{y1}, @var{y2}, @dots{}, @var{y}n] = ndgrid (@var{x}, @dots{}, @var{x}) ! @seealso{meshgrid} @end deftypefn ! newplot -*- texinfo -*- ! @deftypefn {Function File} {} newplot () ! Prepare graphics engine to produce a new plot. This function should ! be called at the beginning of all high-level plotting functions. @end deftypefn ! orient -*- texinfo -*- ! @deftypefn {Function File} {} orient (@var{orientation}) ! Set the default print orientation. Valid values for ! @var{orientation} include @code{"landscape"} and @code{"portrait"}. ! If called with no arguments, return the default print orientation. @end deftypefn ! pareto -*- texinfo -*- ! @deftypefn {Function File} {} pareto (@var{x}) ! @deftypefnx {Function File} {} pareto (@var{x}, @var{y}) ! @deftypefnx {Function File} {} pareto (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} pareto (@dots{}) ! Draw a Pareto chart, also called ABC chart. A Pareto chart is a bar graph ! used to arrange information in such a way that priorities for process ! improvement can be established. It organizes and displays information ! to show the relative importance of data. The chart is similar to the ! histogram or bar chart, except that the bars are arranged in decreasing ! order from left to right along the abscissa. ! ! The fundamental idea (Pareto principle) behind the use of Pareto ! diagrams is that the majority of an effect is due to a small subset of the ! causes, so for quality improvement the first few (as presented on the ! diagram) contributing causes to a problem usually account for the majority ! of the result. Thus, targeting these "major causes" for elimination ! results in the most cost-effective improvement scheme. ! ! The data are passed as @var{x} and the abscissa as @var{y}. If @var{y} is ! absent, then the abscissa are assumed to be @code{1 : length (@var{x})}. ! @var{y} can be a string array, a cell array of strings or a numerical ! vector. ! ! An example of the use of @code{pareto} is ! @example ! @group ! Cheese = @{"Cheddar", "Swiss", "Camembert", "Munster", "Stilton", ... ! "Blue"@}; ! Sold = [105, 30, 70, 10, 15, 20]; ! pareto(Sold, Cheese); ! @end group @end example @end deftypefn ! patch -*- texinfo -*- ! @deftypefn {Function File} {} patch () ! @deftypefnx {Function File} {} patch (@var{x}, @var{y}, @var{c}) ! @deftypefnx {Function File} {} patch (@var{x}, @var{y}, @var{c}, @var{opts}) ! @deftypefnx {Function File} {} patch ('Faces', @var{f}, 'Vertices', @var{v}, @dots{}) ! @deftypefnx {Function File} {} patch (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} patch (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} = } patch (@dots{}) ! Create patch object from @var{x} and @var{y} with color @var{c} and ! insert in the current axes object. Return handle to patch object. ! For a uniform colored patch, @var{c} can be given as an RGB vector, ! scalar value referring to the current colormap, or string value (for ! example, "r" or "red"). @end deftypefn ! pcolor -*- texinfo -*- ! @deftypefn {Function File} {} pcolor (@var{x}, @var{y}, @var{c}) ! @deftypefnx {Function File} {} pcolor (@var{c}) ! Density plot for given matrices @var{x}, and @var{y} from @code{meshgrid} and ! a matrix @var{c} corresponding to the @var{x} and @var{y} coordinates of ! the mesh. If @var{x} and @var{y} are vectors, then a typical vertex ! is (@var{x}(j), @var{y}(i), @var{c}(i,j)). Thus, columns of @var{c} ! correspond to different @var{x} values and rows of @var{c} correspond ! to different @var{y} values. ! @seealso{meshgrid, contour} @end deftypefn ! peaks -*- texinfo -*- ! @deftypefn {Function File} {} peaks () ! @deftypefnx {Function File} {} peaks (@var{n}) ! @deftypefnx {Function File} {} peaks (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{z} =} peaks (@dots{}) ! @deftypefnx {Function File} {[@var{x}, @var{y}, @var{z}] =} peaks (@dots{}) ! Generate a function with lots of local maxima and minima. The function ! has the form ! @iftex @tex ! $f(x,y) = 3 (1 - x) ^ 2 e ^ {\left(-x^2 - (y+1)^2\right)} - 10 \left({x \over 5} - x^3 - y^5)\right) - {1 \over 3} e^{\left(-(x+1)^2 - y^2\right)}$ @end tex @end iftex ! @ifnottex ! @verbatim ! f(x,y) = 3*(1-x)^2*exp(-x^2 - (y+1)^2) ... ! - 10*(x/5 - x^3 - y^5)*exp(-x^2-y^2) ... ! - 1/3*exp(-(x+1)^2 - y^2) ! @end verbatim ! @end ifnottex ! ! Called without a return argument, @code{peaks} plots the surface of the ! above function using @code{mesh}. If @var{n} is a scalar, the @code{peaks} ! returns the values of the above function on a @var{n}-by-@var{n} mesh over ! the range @code{[-3,3]}. The default value for @var{n} is 49. ! ! If @var{n} is a vector, then it represents the @var{x} and @var{y} values ! of the grid on which to calculate the above function. The @var{x} and ! @var{y} values can be specified separately. ! @seealso{surf, mesh, meshgrid} ! @end deftypefn ! pie ! -*- texinfo -*- ! @deftypefn {Function File} {} pie (@var{y}) ! @deftypefnx {Function File} {} pie (@var{y}, @var{explode}) ! @deftypefnx {Function File} {} pie (@dots{}, @var{labels}) ! @deftypefnx {Function File} {} pie (@var{h}, @dots{}); ! @deftypefnx {Function File} {@var{h} =} pie (@dots{}); ! Produce a pie chart. ! ! Called with a single vector arrgument, produces a pie chart of the ! elements in @var{x}, with the size of the slice determined by percentage ! size of the values of @var{x}. ! ! The variable @var{explode} is a vector of the same length as @var{x} that ! if non zero 'explodes' the slice from the pie chart. ! ! If given @var{labels} is a cell array of strings of the same length as ! @var{x}, giving the labels of each of the slices of the pie chart. ! ! The optional return value @var{h} provides a handle to the patch object. ! @seealso{bar, stem} @end deftypefn ! plot -*- texinfo -*- ! @deftypefn {Function File} {} plot (@var{y}) ! @deftypefnx {Function File} {} plot (@var{x}, @var{y}) ! @deftypefnx {Function File} {} plot (@var{x}, @var{y}, @var{property}, @var{value}, @dots{}) ! @deftypefnx {Function File} {} plot (@var{x}, @var{y}, @var{fmt}) ! @deftypefnx {Function File} {} plot (@var{h}, @dots{}) ! Produces two-dimensional plots. Many different combinations of ! arguments are possible. The simplest form is ! ! @example ! plot (@var{y}) ! @end example ! ! @noindent ! where the argument is taken as the set of @var{y} coordinates and the ! @var{x} coordinates are taken to be the indices of the elements, ! starting with 1. ! ! To save a plot, in one of several image formats such as PostScript ! or PNG, use the @code{print} command. ! ! If more than one argument is given, they are interpreted as @example ! plot (@var{y}, @var{property}, @var{value}, @dots{}) @end example ! @noindent ! or ! @example ! plot (@var{x}, @var{y}, @var{property}, @var{value}, @dots{}) ! @end example ! @noindent ! or ! @example ! plot (@var{x}, @var{y}, @var{fmt}, @dots{}) ! @end example ! @noindent ! and so on. Any number of argument sets may appear. The @var{x} and ! @var{y} values are interpreted as follows: @itemize @bullet ! @item ! If a single data argument is supplied, it is taken as the set of @var{y} ! coordinates and the @var{x} coordinates are taken to be the indices of ! the elements, starting with 1. ! ! @item ! If the @var{x} is a vector and @var{y} is a matrix, then ! the columns (or rows) of @var{y} are plotted versus @var{x}. ! (using whichever combination matches, with columns tried first.) ! ! @item ! If the @var{x} is a matrix and @var{y} is a vector, ! @var{y} is plotted versus the columns (or rows) of @var{x}. ! (using whichever combination matches, with columns tried first.) ! ! @item ! If both arguments are vectors, the elements of @var{y} are plotted versus ! the elements of @var{x}. ! ! @item ! If both arguments are matrices, the columns of @var{y} are plotted ! versus the columns of @var{x}. In this case, both matrices must have ! the same number of rows and columns and no attempt is made to transpose ! the arguments to make the number of rows match. ! ! If both arguments are scalars, a single point is plotted. @end itemize ! Multiple property-value pairs may be specified, but they must appear ! in pairs. These arguments are applied to the lines drawn by ! @code{plot}. ! ! If the @var{fmt} argument is supplied, it is interpreted as ! follows. If @var{fmt} is missing, the default gnuplot line style ! is assumed. ! ! @table @samp ! @item - ! Set lines plot style (default). ! ! @item . ! Set dots plot style. ! ! @item ^ ! Set impulses plot style. ! ! @item L ! Set steps plot style. ! ! @item @var{n} ! Interpreted as the plot color if @var{n} is an integer in the range 1 to ! 6. ! ! @item @var{nm} ! If @var{nm} is a two digit integer and @var{m} is an integer in the ! range 1 to 6, @var{m} is interpreted as the point style. This is only ! valid in combination with the @code{@@} or @code{-@@} specifiers. ! ! @item @var{c} ! If @var{c} is one of @code{"k"} (black), @code{"r"} (red), @code{"g"} ! (green), @code{"b"} (blue), @code{"m"} (magenta), @code{"c"} (cyan), ! or @code{"w"} (white), it is interpreted as the line plot color. ! ! @item ";title;" ! Here @code{"title"} is the label for the key. ! ! @item + ! @itemx * ! @itemx o ! @itemx x ! Used in combination with the points or linespoints styles, set the point ! style. ! @end table ! ! The @var{fmt} argument may also be used to assign key titles. ! To do so, include the desired title between semi-colons after the ! formatting sequence described above, e.g. "+3;Key Title;" ! Note that the last semi-colon is required and will generate an error if ! it is left out. ! ! Here are some plot examples: ! @example ! plot (x, y, "@@12", x, y2, x, y3, "4", x, y4, "+") ! @end example ! This command will plot @code{y} with points of type 2 (displayed as ! @samp{+}) and color 1 (red), @code{y2} with lines, @code{y3} with lines of ! color 4 (magenta) and @code{y4} with points displayed as @samp{+}. @example ! plot (b, "*", "markersize", 3) @end example ! This command will plot the data in the variable @code{b}, ! with points displayed as @samp{*} with a marker size of 3. ! @example ! t = 0:0.1:6.3; ! plot (t, cos(t), "-;cos(t);", t, sin(t), "+3;sin(t);"); @end example ! This will plot the cosine and sine functions and label them accordingly ! in the key. ! If the first argument is an axis handle, then plot into these axes, ! rather than the current axis handle returned by @code{gca}. ! @seealso{semilogx, semilogy, loglog, polar, mesh, contour, bar, ! stairs, errorbar, xlabel, ylabel, title, print} @end deftypefn ! plot3 -*- texinfo -*- ! @deftypefn {Function File} {} plot3 (@var{args}) ! Produce three-dimensional plots. Many different combinations of ! arguments are possible. The simplest form is @example ! plot3 (@var{x}, @var{y}, @var{z}) @end example ! @noindent ! in which the arguments are taken to be the vertices of the points to ! be plotted in three dimensions. If all arguments are vectors of the ! same length, then a single continuous line is drawn. If all arguments ! are matrices, then each column of the matrices is treated as a ! separate line. No attempt is made to transpose the arguments to make ! the number of rows match. ! ! If only two arguments are given, as ! @example ! plot3 (@var{x}, @var{c}) @end example ! @noindent ! the real and imaginary parts of the second argument are used ! as the @var{y} and @var{z} coordinates, respectively. ! If only one argument is given, as ! @example ! plot3 (@var{c}) ! @end example ! @noindent ! the real and imaginary parts of the argument are used as the @var{y} ! and @var{z} values, and they are plotted versus their index. ! Arguments may also be given in groups of three as @example ! plot3 (@var{x1}, @var{y1}, @var{z1}, @var{x2}, @var{y2}, @var{z2}, @dots{}) @end example ! @noindent ! in which each set of three arguments is treated as a separate line or ! set of lines in three dimensions. ! To plot multiple one- or two-argument groups, separate each group ! with an empty format string, as @example ! plot3 (@var{x1}, @var{c1}, "", @var{c2}, "", @dots{}) @end example ! An example of the use of @code{plot3} is ! @example ! @group ! z = [0:0.05:5]; ! plot3 (cos(2*pi*z), sin(2*pi*z), z, ";helix;"); ! plot3 (z, exp(2i*pi*z), ";complex sinusoid;"); ! @end group ! @end example ! @seealso{plot} ! @end deftypefn ! plotyy ! -*- texinfo -*- ! @deftypefn {Function File} {} plotyy (@var{x1}, @var{y1}, @var{x2}, @var{y2}) ! @deftypefnx {Function File} {} plotyy (@dots{}, @var{fun}) ! @deftypefnx {Function File} {} plotyy (@dots{}, @var{fun1}, @var{fun2}) ! @deftypefnx {Function File} {} plotyy (@var{h}, @dots{}) ! @deftypefnx {Function File} {[@var{ax}, @var{h1}, @var{h2}] =} plotyy (@dots{}) ! Plots two sets of data with independent y-axes. The arguments @var{x1} and ! @var{y1} define the arguments for the first plot and @var{x1} and @var{y2} ! for the second. ! By default the arguments are evaluated with ! @code{feval (@@plot, @var{x}, @var{y})}. However the type of plot can be ! modified with the @var{fun} argument, in which case the plots are ! generated by @code{feval (@var{fun}, @var{x}, @var{y})}. @var{fun} can be ! a function handle, an inline function or a string of a function name. ! The function to use for each of the plots can be independently defined ! with @var{fun1} and @var{fun2}. ! If given, @var{h} defines the principal axis in which to plot the @var{x1} ! and @var{y1} data. The return value @var{ax} is a two element vector with ! the axis handles of the two plots. @var{h1} and @var{h2} are handles to ! the objects generated by the plot commands. @example ! @group ! x = 0:0.1:2*pi; ! y1 = sin (x); ! y2 = exp (x - 1); ! ax = plotyy (x, y1, x - 1, y2, @@plot, @@semilogy); ! xlabel ("X"); ! ylabel (ax(1), "Axis 1"); ! ylabel (ax(2), "Axis 2"); ! @end group @end example @end deftypefn ! polar -*- texinfo -*- ! @deftypefn {Function File} {} polar (@var{theta}, @var{rho}, @var{fmt}) ! Make a two-dimensional plot given the polar coordinates @var{theta} and ! @var{rho}. ! ! The optional third argument specifies the line type. ! @seealso{plot} @end deftypefn ! print -*- texinfo -*- ! @deftypefn {Function File} {} print (@var{filename}, @var{options}) ! Print a graph, or save it to a file ! @var{filename} defines the file name of the output file. If no ! filename is specified, output is sent to the printer. ! @var{options}: ! @table @code ! @item -P@var{printer} ! Set the @var{printer} name to which the graph is sent if no ! @var{filename} is specified. ! @item -color ! @itemx -mono ! Monochrome or colour lines. ! @item -solid ! @itemx -dashed ! Solid or dashed lines. ! @item -portrait ! @itemx -landscape ! Plot orientation, as returned by "orient". ! @item -d@var{device} ! Output device, where @var{device} is one of: ! @table @code ! @item ps ! @itemx ps2 ! @itemx psc ! @itemx psc2 ! Postscript (level 1 and 2, mono and color) ! @item eps ! @itemx eps2 ! @itemx epsc ! @itemx epsc2 ! Encapsulated postscript (level 1 and 2, mono and color) ! @item tex ! @itemx epslatex ! @itemx epslatexstandalone ! @itemx pstex ! @itemx pslatex ! Generate a LaTeX (or TeX) file for labels, and eps/ps for ! graphics. The file produced by @code{epslatexstandalone} can be ! processed directly by LaTeX. The other formats are intended to ! be included in a LaTeX (or TeX) document. The @code{tex} device ! is the same as the @code{epslatex} device. ! @item ill ! @itemx aifm ! Adobe Illustrator ! @item cdr ! @itemx corel ! CorelDraw ! @item dxf ! AutoCAD ! @item emf ! Microsoft Enhanced Metafile ! @item fig ! XFig. If this format is selected the additional options ! @code{-textspecial} or @code{-textnormal} can be used to control ! whether the special flag should be set for the text in the figure ! (default is @code{-textnormal}). ! @item hpgl ! HP plotter language ! @item mf ! Metafont ! @item png ! Portable network graphics ! @item jpg ! @itemx jpeg ! JPEG image ! @item gif ! GIF image ! @item pbm ! PBMplus ! @item svg ! Scalable vector graphics ! @item pdf ! Portable document format @end table ! ! Other devices are supported by "convert" from ImageMagick. Type ! system("convert") to see what formats are available. ! ! If the device is omitted, it is inferred from the file extension, ! or if there is no filename it is sent to the printer as postscript. ! ! @itemx -S@var{xsize},@var{ysize} ! Plot size in pixels for PNG and SVG. If using the command form of ! the print function, you must quote the @var{xsize},@var{ysize} ! option. For example, by writing @code{"-S640,480"}. ! ! @item -F@var{fontname} ! @itemx -F@var{fontname}:@var{size} ! @itemx -F:@var{size} ! @var{fontname} set the postscript font (for use with postscript, ! aifm, corel and fig). By default, 'Helvetica' is set for PS/Aifm, ! and 'SwitzerlandLight' for Corel. It can also be 'Times-Roman'. ! @var{size} is given in points. @var{fontname} is ignored for the ! fig device. @end table ! The filename and options can be given in any order. @end deftypefn ! quiver -*- texinfo -*- ! @deftypefn {Function File} {} quiver (@var{u}, @var{v}) ! @deftypefnx {Function File} {} quiver (@var{x}, @var{y}, @var{u}, @var{v}) ! @deftypefnx {Function File} {} quiver (@dots{}, @var{s}) ! @deftypefnx {Function File} {} quiver (@dots{}, @var{style}) ! @deftypefnx {Function File} {} quiver (@dots{}, 'filled') ! @deftypefnx {Function File} {} quiver (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} quiver (@dots{}) ! ! Plot the @code{(@var{u}, @var{v})} components of a vector field in ! an @code{(@var{x}, @var{y})} meshgrid. If the grid is uniform, you can ! specify @var{x} and @var{y} as vectors. ! If @var{x} and @var{y} are undefined they are assumed to be ! @code{(1:@var{m}, 1:@var{n})} where @code{[@var{m}, @var{n}] = ! size(@var{u})}. ! The variable @var{s} is a scalar defining a scaling factor to use for ! the arrows of the field relative to the mesh spacing. A value of 0 ! disables all scaling. The default value is 1. ! The style to use for the plot can be defined with a line style @var{style} ! in a similar manner to the line styles used with the @code{plot} command. ! If a marker is specified then markers at the grid points of the vectors are ! printed rather than arrows. If the argument 'filled' is given then the ! markers as filled. ! The optional return value @var{h} provides a list of handles to the ! the parts of the vector field (body, arrow and marker). @example ! @group ! [x, y] = meshgrid (1:2:20); ! quiver (x, y, sin (2*pi*x/10), sin (2*pi*y/10)); ! @end group @end example ! @seealso{plot} ! @end deftypefn ! quiver3 ! -*- texinfo -*- ! @deftypefn {Function File} {} quiver3 (@var{u}, @var{v}, @var{w}) ! @deftypefnx {Function File} {} quiver3 (@var{x}, @var{y}, @var{z}, @var{u}, @var{v}, @var{w}) ! @deftypefnx {Function File} {} quiver3 (@dots{}, @var{s}) ! @deftypefnx {Function File} {} quiver3 (@dots{}, @var{style}) ! @deftypefnx {Function File} {} quiver3 (@dots{}, 'filled') ! @deftypefnx {Function File} {} quiver3 (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} quiver3 (@dots{}) ! ! Plot the @code{(@var{u}, @var{v}, @var{w})} components of a vector field in ! an @code{(@var{x}, @var{y}), @var{z}} meshgrid. If the grid is uniform, you ! can specify @var{x}, @var{y} @var{z} as vectors. ! ! If @var{x}, @var{y} and @var{z} are undefined they are assumed to be ! @code{(1:@var{m}, 1:@var{n}, 1:@var{p})} where @code{[@var{m}, @var{n}] = ! size(@var{u})} and @code{@var{p} = max (size (@var{w}))}. ! The variable @var{s} is a scalar defining a scaling factor to use for ! the arrows of the field relative to the mesh spacing. A value of 0 ! disables all scaling. The default value is 1. ! The style to use for the plot can be defined with a line style @var{style} ! in a similar manner to the line styles used with the @code{plot} command. ! If a marker is specified then markers at the grid points of the vectors are ! printed rather than arrows. If the argument 'filled' is given then the ! markers as filled. ! The optional return value @var{h} provides a list of handles to the ! the parts of the vector field (body, arrow and marker). @example @group ! [x, y, z] = peaks (25); ! surf (x, y, z); ! hold on; ! [u, v, w] = surfnorm (x, y, z / 10); ! quiver3 (x, y, z, u, v, w); @end group @end example ! @seealso{plot} ! @end deftypefn ! replot ! -*- texinfo -*- ! @deftypefn {Function File} {} replot () ! Refresh the plot window. ! @end deftypefn ! ribbon ! -*- texinfo -*- ! @deftypefn {Function File} ribbon (@var{x}, @var{y}, @var{width}) ! @deftypefnx {Function File} ribbon (@var{y}) ! @deftypefnx {Function File} @var{h} = ribbon (@dots{}) ! Plot a ribbon plot for the columns of @var{y} vs. @var{x}. The ! optional parameter @var{width} specifies the width of a single ribbon ! (default is 0.75). If @var{x} is omitted, a vector containing the ! row numbers is assumed (1:rows(Y)). If requested, return a vector ! @var{h} of the handles to the surface objects. ! @seealso{gca, colorbar} @end deftypefn ! rose -*- texinfo -*- ! @deftypefn {Function File} {} rose (@var{th}, @var{r}) ! @deftypefnx {Function File} {} rose (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} compass (@dots{}) ! @deftypefnx {Function File} {[@var{r}, @var{th}] =} compass (@dots{}) ! ! Plot an angular histogram. With one vector argument @var{th}, plots the ! histogram with 20 angular bins. If @var{th} is a matrix, then each column ! of @var{th} produces a separate histogram. ! If @var{r} is given and is a scalar, then the histogram is produced with ! @var{r} bins. If @var{r} is a vector, then the center of each bin are ! defined by the values of @var{r}. ! The optional return value @var{h} provides a list of handles to the ! the parts of the vector field (body, arrow and marker). ! If two output arguments are requested, then rather than plotting the ! histogram, the polar vectors necessary to plot the histogram are ! returned. ! scatter ! -*- texinfo -*- ! @deftypefn {Function File} {} scatter (@var{x}, @var{y}, @var{s}, @var{c}) ! @deftypefnx {Function File} {} scatter (@dots{}, 'filled') ! @deftypefnx {Function File} {} scatter (@dots{}, @var{style}) ! @deftypefnx {Function File} {} scatter (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} scatter (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} scatter (@dots{}) ! Plot a scatter plot of the data. A marker is ploted at each point ! defined by the points in the vectors @var{x} and @var{y}. The size of ! the markers used is determined by the @var{s}, which can be a scalar, ! a vector of the same length of @var{x} and @var{y}. If @var{s} is not ! given or is an empty matrix, then the default value of 8 points is used. ! The color of the markers is determined by @var{c}, which can be a string ! defining a fixed color, a 3 element vector giving the red, green and blue ! components of the color, a vector of the same length as @var{x} that gives ! a scaled index into the current colormap, or a @var{n}-by-3 matrix defining ! the colors of each of the markers individually. ! The marker to use can be changed with the @var{style} argument, that is a ! string defining a marker in the same manner as the @code{plot} command. ! If the argument 'filled' is given then the markers as filled. All ! additional arguments are passed to the underlying patch command. ! The optional return value @var{h} provides a handle to the patch object ! @example ! @group ! x = randn (100, 1); ! y = randn (100, 1); ! scatter (x, y, [], sqrt(x.^2 + y.^2)); ! @end group ! @end example ! @seealso{plot, patch, scatter3} @end deftypefn ! scatter3 -*- texinfo -*- ! @deftypefn {Function File} {} scatter3 (@var{x}, @var{y}, @var{s}, @var{c}) ! @deftypefnx {Function File} {} scatter3 (@dots{}, 'filled') ! @deftypefnx {Function File} {} scatter3 (@dots{}, @var{style}) ! @deftypefnx {Function File} {} scatter3 (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} scatter3 (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} scatter3 (@dots{}) ! Plot a scatter plot of the data in 3D. A marker is ploted at each point ! defined by the points in the vectors @var{x} and @var{y}. The size of ! the markers used is determined by the @var{s}, which can be a scalar, ! a vector of the same length of @var{x} and @var{y}. If @var{s} is not ! given or is an empty matrix, then the default value of 8 points is used. ! The color of the markers is determined by @var{c}, which can be a string ! defining a fixed color, a 3 element vector giving the red, green and blue ! components of the color, a vector of the same length as @var{x} that gives ! a scaled index into the current colormap, or a @var{n}-by-3 matrix defining ! the colors of each of the markers individually. ! The marker to use can be changed with the @var{style} argument, that is a ! string defining a marker in the same manner as the @code{plot} command. ! If the argument 'filled' is given then the markers as filled. All ! additional arguments are passed to the underlying patch command. ! The optional return value @var{h} provides a handle to the patch object @example ! @group ! [x, y, z] = peaks (20); ! scatter3 (x(:), y(:), z(:), [], z(:)); ! @end group @end example ! @seealso{plot, patch, scatter} @end deftypefn ! semilogx -*- texinfo -*- ! @deftypefn {Function File} {} semilogx (@var{args}) ! Produce a two-dimensional plot using a log scale for the @var{x} ! axis. See the description of @code{plot} for a description of the ! arguments that @code{semilogx} will accept. ! @seealso{plot, semilogy, loglog} @end deftypefn ! semilogxerr -*- texinfo -*- ! @deftypefn {Function File} {} semilogxerr (@var{args}) ! Produce two-dimensional plots on a semilogarithm axis with errorbars. ! Many different combinations of arguments are possible. The most used ! form is @example ! semilogxerr (@var{x}, @var{y}, @var{ey}, @var{fmt}) @end example ! @noindent ! which produces a semi-logarithm plot of @var{y} versus @var{x} ! with errors in the @var{y}-scale defined by @var{ey} and the plot ! format defined by @var{fmt}. See errorbar for available formats and ! additional information. ! @seealso{errorbar, loglogerr semilogyerr} ! @end deftypefn ! semilogy ! -*- texinfo -*- ! @deftypefn {Function File} {} semilogy (@var{args}) ! Produce a two-dimensional plot using a log scale for the @var{y} ! axis. See the description of @code{plot} for a description of the ! arguments that @code{semilogy} will accept. ! @seealso{plot, semilogx, loglog} ! @end deftypefn ! semilogyerr ! -*- texinfo -*- ! @deftypefn {Function File} {} semilogyerr (@var{args}) ! Produce two-dimensional plots on a semilogarithm axis with errorbars. ! Many different combinations of arguments are possible. The most used ! form is @example ! semilogyerr (@var{x}, @var{y}, @var{ey}, @var{fmt}) @end example @noindent ! which produces a semi-logarithm plot of @var{y} versus @var{x} ! with errors in the @var{y}-scale defined by @var{ey} and the plot ! format defined by @var{fmt}. See errorbar for available formats and ! additional information. ! @seealso{errorbar, loglogerr semilogxerr} ! @end deftypefn ! shading ! -*- texinfo -*- ! @deftypefn {Function File} {} shading (@var{type}) ! @deftypefnx {Function File} {} shading (@var{ax}, @dots{}) ! Set the shading of surface or patch graphic objects. Valid arguments ! for @var{type} are @code{"flat"}, @code{"interp"}, or ! @code{"faceted"}. If @var{ax} is given the shading is applied to ! axis @var{ax} instead of the current axis. ! @end deftypefn ! shg ! -*- texinfo -*- ! @deftypefn {Function File} {} shg ! Show the graph window. Currently, this is the same as executing ! @code{drawnow}. ! @seealso{drawnow, figure} ! @end deftypefn ! slice ! -*- texinfo -*- ! @deftypefn {Function File} {} slice (@var{x}, @var{y}, @var{z}, @var{v}, @var{sx}, @var{sy}, @var{sz}) ! @deftypefnx {Function File} {} slice (@var{x}, @var{y}, @var{z}, @var{v}, @var{xi}, @var{yi}, @var{zi}) ! @deftypefnx {Function File} {} slice (@var{v}, @var{sx}, @var{sy}, @var{sz}) ! @deftypefnx {Function File} {} slice (@var{v}, @var{xi}, @var{yi}, @var{zi}) ! @deftypefnx {Function File} {@var{h} =} slice (@dots{}) ! @deftypefnx {Function File} {@var{h} =} slice (@dots{}, @var{method}) ! Plot slices of 3D data/scalar fields. Each element of the 3-dimensional ! array @var{v} represents a scalar value at a location given by the ! parameters @var{x}, @var{y}, and @var{z}. The parameters @var{x}, ! @var{x}, and @var{z} are either 3-dimensional arrays of the same size ! as the array @var{v} in the "meshgrid" format or vectors. The ! parameters @var{xi}, etc respect a similar format to @var{x}, etc, ! and they represent the points at which the array @var{vi} is ! interpolated using interp3. The vectors @var{sx}, @var{sy}, and ! @var{sz} contain points of orthogonal slices of the respective axes. ! If @var{x}, @var{y}, @var{z} are omitted, they are assumed to be ! @code{x = 1:size (@var{v}, 2)}, @code{y = 1:size (@var{v}, 1)} and ! @code{z = 1:size (@var{v}, 3)}. ! @var{Method} is one of: ! @table @code ! @item "nearest" ! Return the nearest neighbour. ! @item "linear" ! Linear interpolation from nearest neighbours. ! @item "cubic" ! Cubic interpolation from four nearest neighbours (not implemented yet). ! @item "spline" ! Cubic spline interpolation---smooth first and second derivatives ! throughout the curve. @end table ! The default method is @code{"linear"}. ! The optional return value @var{h} is a vector of handles to the ! surface graphic objects. - Examples: @example ! [x, y, z] = meshgrid (linspace (-8, 8, 32)); ! v = sin (sqrt (x.^2 + y.^2 + z.^2)) ./ (sqrt (x.^2 + y.^2 + z.^2)); ! slice (x, y, z, v, [], 0, []); ! [xi, yi] = meshgrid (linspace (-7, 7)); ! zi = xi + yi; ! slice (x, y, z, v, xi, yi, zi); @end example - @seealso{interp3, surface, pcolor} - @end deftypefn - sombrero - -*- texinfo -*- - @deftypefn {Function File} {} sombrero (@var{n}) - Produce the familiar three-dimensional sombrero plot using @var{n} - grid lines. If @var{n} is omitted, a value of 41 is assumed. ! The function plotted is @example ! z = sin (sqrt (x^2 + y^2)) / (sqrt (x^2 + y^2)) @end example - @seealso{surf, meshgrid, mesh} - @end deftypefn - sphere - -*- texinfo -*- - @deftypefn {Function File} {[@var{x}, @var{y}, @var{z}] =} sphere (@var{n}) - @deftypefnx {Function File} {} sphere (@var{h}, @dots{}) - Generates three matrices in @code{meshgrid} format, such that - @code{surf (@var{x}, @var{y}, @var{z})} generates a unit sphere. - The matrices of @code{@var{n}+1}-by-@code{@var{n}+1}. If @var{n} is - omitted then a default value of 20 is assumed. ! Called with no return arguments, @code{sphere} call directly ! @code{surf (@var{x}, @var{y}, @var{z})}. If an axes handle is passed ! as the first argument, the the surface is plotted to this set of axes. ! @seealso{peaks} ! @end deftypefn ! spinmap ! -*- texinfo -*- ! @deftypefn {Function File} spinmap (@var{t}, @var{inc}) ! Cycle the colormap for @var{t} seconds with an increment ! of @var{inc}. Both parameters are optional. The default cycle time ! is 5 seconds and the default increment is 2. ! A higher value of @var{inc} causes a faster cycle through the ! colormap. ! @seealso{gca, colorbar} @end deftypefn ! stairs -*- texinfo -*- ! @deftypefn {Function File} {} stairs (@var{x}, @var{y}) ! Produce a stairstep plot. The arguments may be vectors or matrices. ! ! If only one argument is given, it is taken as a vector of y-values ! and the x coordinates are taken to be the indices of the elements. ! If two output arguments are specified, the data are generated but ! not plotted. For example, @example ! stairs (x, y); @end example @noindent ! and ! @example ! @group ! [xs, ys] = stairs (x, y); ! plot (xs, ys); ! @end group ! @end example ! @noindent ! are equivalent. ! @seealso{plot, semilogx, semilogy, loglog, polar, mesh, contour, ! bar, xlabel, ylabel, title} @end deftypefn ! stem -*- texinfo -*- ! @deftypefn {Function File} {@var{h} =} stem (@var{x}, @var{y}, @var{linespec}) ! Plot a stem graph and return the handles of the line and marker ! objects used to draw the stems. The default color is @code{"r"} ! (red). The default line style is @code{"-"} and the default marker is ! @code{"o"}. ! For example, @example ! x = 1:10; ! stem (x); @end example @noindent ! plots 10 stems with heights from 1 to 10; ! @example ! x = 1:10; ! y = ones (1, length (x))*2.*x; ! stem (x, y); @end example @noindent ! plots 10 stems with heights from 2 to 20; ! @example ! x = 1:10; ! y = ones (size (x))*2.*x; ! h = stem (x, y, "b"); ! @end example ! @noindent ! plots 10 bars with heights from 2 to 20 ! (the color is blue, and @var{h} is a 2-by-10 array of handles in ! which the first row holds the line handles and ! the second row holds the marker handles); @example ! x = 1:10; ! y = ones (size (x))*2.*x; ! h = stem (x, y, "-.k"); @end example ! @noindent ! plots 10 stems with heights from 2 to 20 ! (the color is black, line style is @code{"-."}, and @var{h} is a 2-by-10 ! array of handles in which the first row holds the line handles and ! the second row holds the marker handles); @example ! x = 1:10; ! y = ones (size (x))*2.*x; ! h = stem (x, y, "-.k."); @end example ! @noindent ! plots 10 stems with heights from 2 to 20 ! (the color is black, line style is @code{"-."} and the marker style ! is @code{"."}, and @var{h} is a 2-by-10 array of handles in which the ! first row holds the line handles and the second row holds the marker ! handles); ! @example ! x = 1:10; ! y = ones (size (x))*2.*x; ! h = stem (x, y, "fill"); @end example ! @noindent ! plots 10 stems with heights from 2 to 20 ! (the color is rgb-triple defined, the line style is @code{"-"}, ! the marker style is @code{"o"}, and @var{h} is a 2-by-10 array of ! handles in which the first row holds the line handles and the second ! row holds the marker handles). ! Color definitions with rgb-triples are not valid! ! @seealso{bar, barh, plot} @end deftypefn ! stem3 -*- texinfo -*- ! @deftypefn {Function File} {@var{h} =} stem3 (@var{x}, @var{y}, @var{z}, @var{linespec}) ! Plot a three-dimensional stem graph and return the handles of the line ! and marker objects used to draw the stems. The default color is @code{"r"} ! (red). The default line style is @code{"-"} and the default marker is ! @code{"o"}. ! For example, @example ! theta = 0:0.2:6; ! stem3 (cos (theta), sin (theta), theta) @end example ! ! @noindent ! plots 31 stems with heights from 0 to 6 lying on a circle. Color ! definitions with rgb-triples are not valid! ! @seealso{bar, barh, stem, plot} @end deftypefn ! subplot -*- texinfo -*- ! @deftypefn {Function File} {} subplot (@var{rows}, @var{cols}, @var{index}) ! @deftypefnx {Function File} {} subplot (@var{rcn}) ! Set up a plot grid with @var{cols} by @var{rows} subwindows and plot ! in location given by @var{index}. ! If only one argument is supplied, then it must be a three digit value ! specifying the location in digits 1 (rows) and 2 (columns) and the plot ! index in digit 3. ! The plot index runs row-wise. First all the columns in a row are filled ! and then the next row is filled. ! For example, a plot with 2 by 3 grid will have plot indices running as ! follows: @iftex @tex ! \vskip 10pt ! \hfil\vbox{\offinterlineskip\hrule ! \halign{\vrule#&&\qquad\hfil#\hfil\qquad\vrule\cr ! height13pt&1&2&3\cr height12pt&&&\cr\noalign{\hrule} ! height13pt&4&5&6\cr height12pt&&&\cr\noalign{\hrule}}} ! \hfil ! \vskip 10pt @end tex @end iftex @ifinfo ! @display ! @group ! @example ! ! +-----+-----+-----+ ! | 1 | 2 | 3 | ! +-----+-----+-----+ ! | 4 | 5 | 6 | ! +-----+-----+-----+ ! @end example ! @end group ! @end display @end ifinfo ! @seealso{plot} ! @end deftypefn ! surf ! -*- texinfo -*- ! @deftypefn {Function File} {} surf (@var{x}, @var{y}, @var{z}) ! Plot a surface given matrices @var{x}, and @var{y} from @code{meshgrid} and ! a matrix @var{z} corresponding to the @var{x} and @var{y} coordinates of ! the mesh. If @var{x} and @var{y} are vectors, then a typical vertex ! is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, columns of @var{z} ! correspond to different @var{x} values and rows of @var{z} correspond ! to different @var{y} values. ! @seealso{mesh, surface} ! @end deftypefn ! surface ! -*- texinfo -*- ! @deftypefn {Function File} {} surface (@var{x}, @var{y}, @var{z}, @var{c}) ! @deftypefnx {Function File} {} surface (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {} surface (@var{z}, @var{c}) ! @deftypefnx {Function File} {} surface (@var{z}) ! @deftypefnx {Function File} {} surface (@dots{}, @var{prop}, @var{val}) ! @deftypefnx {Function File} {} surface (@var{h}, @dots{}) ! @deftypefnx {Function File} {@var{h} = } surface (@dots{}) ! Plot a surface graphic object given matrices @var{x}, and @var{y} from ! @code{meshgrid} and a matrix @var{z} corresponding to the @var{x} and ! @var{y} coordinates of the surface. If @var{x} and @var{y} are vectors, ! then a typical vertex is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, ! columns of @var{z} correspond to different @var{x} values and rows of ! @var{z} correspond to different @var{y} values. If @var{x} and @var{y} ! are missing, they are constructed from size of the matrix @var{z}. ! ! Any additional properties passed are assigned the the surface.. ! @seealso{surf, mesh, patch, line} ! @end deftypefn ! surfc ! -*- texinfo -*- ! @deftypefn {Function File} {} surfc (@var{x}, @var{y}, @var{z}) ! Plot a surface and contour given matrices @var{x}, and @var{y} from ! @code{meshgrid} and a matrix @var{z} corresponding to the @var{x} and ! @var{y} coordinates of the mesh. If @var{x} and @var{y} are vectors, ! then a typical vertex is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, ! columns of @var{z} correspond to different @var{x} values and rows of ! @var{z} correspond to different @var{y} values. ! @seealso{meshgrid, surf, contour} @end deftypefn ! surfnorm -*- texinfo -*- ! @deftypefn {Function File} {} surfnorm (@var{x}, @var{y}, @var{z}) ! @deftypefnx {Function File} {} surfnorm (@var{z}) ! @deftypefnx {Function File} {[@var{nx}, @var{ny}, @var{nz}] =} surfnorm (@dots{}) ! @deftypefnx {Function File} {} surfnorm (@var{h}, @dots{}) ! Find the vectors normal to a meshgridded surface. The meshed gridded ! surface is defined by @var{x}, @var{y}, and @var{z}. If @var{x} and ! @var{y} are not defined, then it is assumed that they are given by ! @example ! [@var{x}, @var{y}] = meshgrid (1:size(@var{z}, 1), ! 1:size(@var{z}, 2)); @end example ! ! If no return arguments are requested, a surface plot with the normal ! vectors to the surface is plotted. Otherwise the componets of the normal ! vectors at the mesh gridded points are returned in @var{nx}, @var{ny}, ! and @var{nz}. ! ! The normal vectors are calculated by taking the cross product of the ! diagonals of eash of teh quadrilaterals in the meshgrid to find the ! normal vectors of the centers of these quadrilaterals. The four nearest ! normal vectors to the meshgrid points are then averaged to obtain the ! normal to the surface at the meshgridded points. ! ! An example of the use of @code{surfnorm} is ! @example ! surfnorm (peaks (25)); @end example ! @seealso{surf, quiver3} ! @end deftypefn ! text ! -*- texinfo -*- ! @deftypefn {Function File} {@var{h} =} text (@var{x}, @var{y}, @var{label}) ! @deftypefnx {Function File} {@var{h} =} text (@var{x}, @var{y}, @var{z}, @var{label}) ! @deftypefnx {Function File} {@var{h} =} text (@var{x}, @var{y}, @var{label}, @var{p1}, @var{v1}, @dots{}) ! @deftypefnx {Function File} {@var{h} =} text (@var{x}, @var{y}, @var{z}, @var{label}, @var{p1}, @var{v1}, @dots{}) ! Create a text object with text @var{label} at position @var{x}, ! @var{y}, @var{z} on the current axes. Property-value pairs following ! @var{label} may be used to specify the appearance of the text. ! @end deftypefn ! title ! -*- texinfo -*- ! @deftypefn {Function File} {} title (@var{title}) ! Create a title object and return a handle to it. ! @end deftypefn ! view ! -*- texinfo -*- ! @deftypefn {Function File} {} view (@var{azimuth}, @var{elevation}) ! @deftypefnx {Function File} {} view (@var{dims}) ! @deftypefnx {Function File} {[@var{azimuth}, @var{elevation}] =} view () ! Set or get the viewpoint for the current axes. ! @end deftypefn ! xlabel ! -*- texinfo -*- ! @deftypefn {Function File} {} xlabel (@var{string}) ! @deftypefnx {Function File} {} ylabel (@var{string}) ! @deftypefnx {Function File} {} zlabel (@var{string}) ! @deftypefnx {Function File} {} xlabel (@var{h}, @var{string}) ! Specify x, y, and z axis labels for the current figure. If @var{h} is ! specified then label the axis defined by @var{h}. ! @seealso{plot, semilogx, semilogy, loglog, polar, mesh, contour, ! bar, stairs, ylabel, title} @end deftypefn ! xlim -*- texinfo -*- ! @deftypefn {Function File} {@var{xl} =} xlim () ! @deftypefnx {Function File} {} xlim (@var{xl}) ! @deftypefnx {Function File} {@var{m} =} xlim ('mode') ! @deftypefnx {Function File} {} xlim (@var{m}) ! @deftypefnx {Function File} {} xlim (@var{h}, @dots{}) ! Get or set the limits of the x axis of the current plot. Called without ! argumenst @code{xlim] returns the x axis limits of the current plot. ! If passed a two element vector @var{xl}, the limits of the x axis are set ! to this value. ! The current mode for calculation of the x axis can be returned with a ! call @code{xlim ('mode')}, and can be either 'auto' or 'manual'. The ! current plotting mode can be set by passing either 'auto' or 'manual' ! as the argument. ! If passed an handle as the first argument, then operate on this handle ! rather than the current axes handle. ! @seealso{ylim, zlim, set, get, gca} @end deftypefn ! ylabel -*- texinfo -*- ! @deftypefn {Function File} {} ylabel (@var{string}) ! @deftypefnx {Function File} {} ylabel (@var{h}, @var{string}) ! See xlabel. @end deftypefn ! ylim -*- texinfo -*- ! @deftypefn {Function File} {@var{xl} =} ylim () ! @deftypefnx {Function File} {} ylim (@var{xl}) ! @deftypefnx {Function File} {@var{m} =} ylim ('mode') ! @deftypefnx {Function File} {} ylim (@var{m}) ! @deftypefnx {Function File} {} ylim (@var{h}, @dots{}) ! Get or set the limits of the y axis of the current plot. Called without ! argumenst @code{ylim] returns the y axis limits of the current plot. ! If passed a two element vector @var{xl}, the limits of the y axis are set ! to this value. ! The current mode for calculation of the y axis can be returned with a ! call @code{ylim ('mode')}, and can be either 'auto' or 'manual'. The ! current plotting mode can be set by passing either 'auto' or 'manual' ! as the argument. ! If passed an handle as the first argument, then operate on this handle ! rather than the current axes handle. ! @seealso{xlim, zlim, set, get, gca} @end deftypefn ! zlabel -*- texinfo -*- ! @deftypefn {Function File} {} zlabel (@var{string}) ! @deftypefnx {Function File} {} zlabel (@var{h}, @var{string}) ! See xlabel. @end deftypefn ! zlim -*- texinfo -*- ! @deftypefn {Function File} {@var{xl} =} zlim () ! @deftypefnx {Function File} {} zlim (@var{xl}) ! @deftypefnx {Function File} {@var{m} =} zlim ('mode') ! @deftypefnx {Function File} {} zlim (@var{m}) ! @deftypefnx {Function File} {} zlim (@var{h}, @dots{}) ! Get or set the limits of the z axis of the current plot. Called without ! argumenst @code{zlim] returns the z axis limits of the current plot. ! If passed a two element vector @var{xl}, the limits of the z axis are set ! to this value. ! The current mode for calculation of the z axis can be returned with a ! call @code{zlim ('mode')}, and can be either 'auto' or 'manual'. The ! current plotting mode can be set by passing either 'auto' or 'manual' ! as the argument. ! If passed an handle as the first argument, then operate on this handle ! rather than the current axes handle. ! @seealso{xlim, ylim, set, get, gca} @end deftypefn ! compan -*- texinfo -*- ! @deftypefn {Function File} {} compan (@var{c}) ! Compute the companion matrix corresponding to polynomial coefficient ! vector @var{c}. ! ! The companion matrix is @iftex @tex ! $$ ! A = \left[\matrix{ ! -c_2/c_1 & -c_3/c_1 & \cdots & -c_N/c_1 & -c_{N+1}/c_1\cr ! 1 & 0 & \cdots & 0 & 0 \cr ! 0 & 1 & \cdots & 0 & 0 \cr ! \vdots & \vdots & \ddots & \vdots & \vdots \cr ! 0 & 0 & \cdots & 1 & 0}\right]. ! $$ @end tex @end iftex ! @ifnottex @smallexample ! _ _ ! | -c(2)/c(1) -c(3)/c(1) ... -c(N)/c(1) -c(N+1)/c(1) | ! | 1 0 ... 0 0 | ! | 0 1 ... 0 0 | ! A = | . . . . . | ! | . . . . . | ! | . . . . . | ! |_ 0 0 ... 1 0 _| @end smallexample ! @end ifnottex ! The eigenvalues of the companion matrix are equal to the roots of the ! polynomial. ! @seealso{poly, roots, residue, conv, deconv, polyval, polyderiv, ! polyinteg} @end deftypefn ! conv -*- texinfo -*- ! @deftypefn {Function File} {} conv (@var{a}, @var{b}) ! Convolve two vectors. ! ! @code{y = conv (a, b)} returns a vector of length equal to ! @code{length (a) + length (b) - 1}. ! If @var{a} and @var{b} are polynomial coefficient vectors, @code{conv} ! returns the coefficients of the product polynomial. ! @seealso{deconv, poly, roots, residue, polyval, polyderiv, polyinteg} @end deftypefn ! deconv -*- texinfo -*- ! @deftypefn {Function File} {} deconv (@var{y}, @var{a}) ! Deconvolve two vectors. ! ! @code{[b, r] = deconv (y, a)} solves for @var{b} and @var{r} such that ! @code{y = conv (a, b) + r}. ! ! If @var{y} and @var{a} are polynomial coefficient vectors, @var{b} will ! contain the coefficients of the polynomial quotient and @var{r} will be ! a remainder polynomial of lowest order. ! @seealso{conv, poly, roots, residue, polyval, polyderiv, polyinteg} @end deftypefn ! mkpp -*- texinfo -*- ! @deftypefn {Function File} {@var{pp} = } mkpp (@var{x}, @var{p}) ! @deftypefnx {Function File} {@var{pp} = } mkpp (@var{x}, @var{p}, @var{d}) ! ! Construct a piece-wise polynomial structure from sample points ! @var{x} and coefficients @var{p}. The ith row of @var{p}, ! @code{@var{p} (@var{i},:)}, contains the coefficients for the polynomial ! over the @var{i}-th interval, ordered from highest to ! lowest. There must be one row for each interval in @var{x}, so ! @code{rows (@var{p}) == length (@var{x}) - 1}. ! You can concatenate multiple polynomials of the same order over the ! same set of intervals using @code{@var{p} = [ @var{p1}; @var{p2}; ! @dots{}; @var{pd} ]}. In this case, @code{rows (@var{p}) == @var{d} ! * (length (@var{x}) - 1)}. ! @var{d} specifies the shape of the matrix @var{p} for all except the ! last dimension. If @var{d} is not specified it will be computed as ! @code{round (rows (@var{p}) / (length (@var{x}) - 1))} instead. ! @seealso{unmkpp, ppval, spline} @end deftypefn ! mpoles -*- texinfo -*- ! @deftypefn {Function File} {[@var{multp}, @var{indx}] =} mpoles (@var{p}) ! @deftypefnx {Function File} {[@var{multp}, @var{indx}] =} mpoles (@var{p}, @var{tol}) ! @deftypefnx {Function File} {[@var{multp}, @var{indx}] =} mpoles (@var{p}, @var{tol}, @var{reorder}) ! Identifiy unique poles in @var{p} and associates their multiplicity, ! ordering them from largest to smallest. ! If the relative difference of the poles is less than @var{tol}, then ! they are considered to be multiples. The default value for @var{tol} ! is 0.001. ! If the optional parameter @var{reorder} is zero, poles are not sorted. ! The value @var{multp} is a vector specifying the multiplicity of the ! poles. @var{multp}(:) refers to mulitplicity of @var{p}(@var{indx}(:)). ! For example, ! @example ! @group ! p = [2 3 1 1 2]; ! [m, n] = mpoles(p); ! @result{} m = [1; 1; 2; 1; 2] ! @result{} n = [2; 5; 1; 4; 3] ! @result{} p(n) = [3, 2, 2, 1, 1] ! @end group ! @end example ! @seealso{poly, roots, conv, deconv, polyval, polyderiv, polyinteg, residue} ! @end deftypefn ! pchip ! -*- texinfo -*- ! @deftypefn {Function File} {@var{pp} = } pchip (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{yi} = } pchip (@var{x}, @var{y}, @var{xi}) ! Piecewise Cubic Hermite interpolating polynomial. Called with two ! arguments, the piece-wise polynomial @var{pp} is returned, that may ! later be used with @code{ppval} to evaluate the polynomial at ! specific points. ! The variable @var{x} must be a strictly monotonic vector (either ! increasing or decreasing). While @var{y} can be either a vector or ! array. In the case where @var{y} is a vector, it must have a length ! of @var{n}. If @var{y} is an array, then the size of @var{y} must ! have the form ! @iftex ! @tex ! $$[s_1, s_2, \cdots, s_k, n]$$ ! @end tex ! @end iftex ! @ifinfo ! @code{[@var{s1}, @var{s2}, @dots{}, @var{sk}, @var{n}]} ! @end ifinfo ! The array is then reshaped internally to a matrix where the leading ! dimension is given by ! @iftex ! @tex ! $$s_1 s_2 \cdots s_k$$ ! @end tex ! @end iftex ! @ifinfo ! @code{@var{s1} * @var{s2} * @dots{} * @var{sk}} ! @end ifinfo ! and each row in this matrix is then treated separately. Note that this ! is exactly the opposite treatment than @code{interp1} and is done ! for compatibility. ! Called with a third input argument, @code{pchip} evaluates the ! piece-wise polynomial at the points @var{xi}. There is an equivalence ! between @code{ppval (pchip (@var{x}, @var{y}), @var{xi})} and ! @code{pchip (@var{x}, @var{y}, @var{xi})}. ! @seealso{spline, ppval, mkpp, unmkpp} @end deftypefn ! poly -*- texinfo -*- ! @deftypefn {Function File} {} poly (@var{a}) ! If @var{a} is a square @math{N}-by-@math{N} matrix, @code{poly (@var{a})} ! is the row vector of the coefficients of @code{det (z * eye (N) - a)}, ! the characteristic polynomial of @var{a}. As an example we can use ! this to find the eigenvalues of @var{a} as the roots of @code{poly (@var{a})}. @example ! roots(poly(eye(3))) ! @result{} 1.00000 + 0.00000i ! @result{} 1.00000 - 0.00000i ! @result{} 1.00000 + 0.00000i @end example ! In real-life examples you should, however, use the @code{eig} function ! for computing eigenvalues. ! ! If @var{x} is a vector, @code{poly (@var{x})} is a vector of coefficients ! of the polynomial whose roots are the elements of @var{x}. That is, ! of @var{c} is a polynomial, then the elements of ! @code{@var{d} = roots (poly (@var{c}))} are contained in @var{c}. ! The vectors @var{c} and @var{d} are, however, not equal due to sorting ! and numerical errors. ! @seealso{eig, roots} ! @end deftypefn ! polyder ! -*- texinfo -*- ! @deftypefn {Function File} {} polyder (@var{c}) ! @deftypefnx {Function File} {[@var{q}] =} polyder (@var{b}, @var{a}) ! @deftypefnx {Function File} {[@var{q}, @var{r}] =} polyder (@var{b}, @var{a}) ! See polyderiv. ! @end deftypefn ! polyderiv ! -*- texinfo -*- ! @deftypefn {Function File} {} polyderiv (@var{c}) ! @deftypefnx {Function File} {[@var{q}] =} polyderiv (@var{b}, @var{a}) ! @deftypefnx {Function File} {[@var{q}, @var{r}] =} polyderiv (@var{b}, @var{a}) ! Return the coefficients of the derivative of the polynomial whose ! coefficients are given by vector @var{c}. If a pair of polynomials ! is given @var{b} and @var{a}, the derivative of the product is ! returned in @var{q}, or the quotient numerator in @var{q} and the ! quotient denominator in @var{r}. ! @seealso{poly, polyinteg, polyreduce, roots, conv, deconv, residue, ! filter, polygcd, polyval, polyvalm} @end deftypefn ! polyfit -*- texinfo -*- ! @deftypefn {Function File} {[@var{p}, @var{s}] =} polyfit (@var{x}, @var{y}, @var{n}) ! Return the coefficients of a polynomial @var{p}(@var{x}) of degree ! @var{n} that minimizes ! @iftex ! @tex ! $$ ! \sum_{i=1}^N (p(x_i) - y_i)^2 ! $$ ! @end tex ! @end iftex ! @ifinfo ! @code{sumsq (p(x(i)) - y(i))}, ! @end ifinfo ! to best fit the data in the least squares sense. ! ! The polynomial coefficients are returned in a row vector. ! ! If two output arguments are requested, the second is a structure ! containing the following fields: ! @table @code ! @item R ! The Cholesky factor of the Vandermonde matrix used to compute the ! polynomial coefficients. ! @item X ! The Vandermonde matrix used to compute the polynomial coefficients. ! @item df ! The degrees of freedom. ! @item normr ! The norm of the residuals. ! @item yf ! The values of the polynomial for each value of @var{x}. ! @end table ! @end deftypefn ! polygcd ! -*- texinfo -*- ! @deftypefn {Function File} {@var{q} =} polygcd (@var{b}, @var{a}, @var{tol}) ! Find greatest common divisor of two polynomials. This is equivalent ! to the polynomial found by multiplying together all the common roots. ! Together with deconv, you can reduce a ratio of two polynomials. ! Tolerance defaults to ! @example ! sqrt(eps). ! @end example ! Note that this is an unstable ! algorithm, so don't try it on large polynomials. ! Example @example ! polygcd (poly(1:8), poly(3:12)) - poly(3:8) ! @result{} [ 0, 0, 0, 0, 0, 0, 0 ] ! deconv (poly(1:8), polygcd (poly(1:8), poly(3:12))) ... ! - poly(1:2) ! @result{} [ 0, 0, 0 ] @end example - @seealso{poly, polyinteg, polyderiv, polyreduce, roots, conv, deconv, - residue, filter, polyval, and polyvalm} @end deftypefn ! polyint -*- texinfo -*- ! @deftypefn {Function File} {} polyint (@var{c}, @var{k}) ! Return the coefficients of the integral of the polynomial whose ! coefficients are represented by the vector @var{c}. The variable ! @var{k} is the constant of integration, which by default is set to zero. ! @seealso{poly, polyderiv, polyreduce, roots, conv, deconv, residue, ! filter, polyval, and polyvalm} @end deftypefn ! polyout -*- texinfo -*- ! @deftypefn {Function File} {} polyout (@var{c}, @var{x}) ! Write formatted polynomial ! @iftex ! @tex ! $$ c(x) = c_1 x^n + \ldots + c_n x + c_{n+1} $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! c(x) = c(1) * x^n + ... + c(n) x + c(n+1) ! @end example ! @end ifinfo ! and return it as a string or write it to the screen (if ! @var{nargout} is zero). ! @var{x} defaults to the string @code{"s"}. ! @seealso{polyval, polyvalm, poly, roots, conv, deconv, residue, ! filter, polyderiv, and polyinteg} @end deftypefn ! polyreduce -*- texinfo -*- ! @deftypefn {Function File} {} polyreduce (@var{c}) ! Reduces a polynomial coefficient vector to a minimum number of terms by ! stripping off any leading zeros. ! @seealso{poly, roots, conv, deconv, residue, filter, polyval, ! polyvalm, polyderiv, polyinteg} @end deftypefn ! polyval -*- texinfo -*- ! @deftypefn {Function File} {} polyval (@var{c}, @var{x}) ! Evaluate a polynomial. ! @code{polyval (@var{c}, @var{x})} will evaluate the polynomial at the ! specified value of @var{x}. ! If @var{x} is a vector or matrix, the polynomial is evaluated at each of ! the elements of @var{x}. ! @seealso{polyvalm, poly, roots, conv, deconv, residue, filter, ! polyderiv, polyinteg} ! @end deftypefn ! polyvalm ! -*- texinfo -*- ! @deftypefn {Function File} {} polyvalm (@var{c}, @var{x}) ! Evaluate a polynomial in the matrix sense. ! @code{polyvalm (@var{c}, @var{x})} will evaluate the polynomial in the ! matrix sense, i.e. matrix multiplication is used instead of element by ! element multiplication as is used in polyval. ! The argument @var{x} must be a square matrix. ! @seealso{polyval, poly, roots, conv, deconv, residue, filter, ! polyderiv, and polyinteg} ! @end deftypefn ! ppval ! -*- texinfo -*- ! @deftypefn {Function File} {@var{yi} =} ppval (@var{pp}, @var{xi}) ! Evaluate piece-wise polynomial @var{pp} at the points @var{xi}. ! If @code{@var{pp}.d} is a scalar greater than 1, or an array, ! then the returned value @var{yi} will be an array that is ! @code{d1, d1, @dots{}, dk, length (@var{xi})]}. ! @seealso{mkpp, unmkpp, spline} ! @end deftypefn ! residue ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{r}, @var{p}, @var{k}, @var{e}] =} residue (@var{b}, @var{a}) ! Compute the partial fraction expansion for the quotient of the ! polynomials, @var{b} and @var{a}. ! @iftex ! @tex ! $$ ! {B(s)\over A(s)} = \sum_{m=1}^M {r_m\over (s-p_m)^e_m} ! + \sum_{i=1}^N k_i s^{N-i}. ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! B(s) M r(m) N ! ---- = SUM ------------- + SUM k(i)*s^(N-i) ! A(s) m=1 (s-p(m))^e(m) i=1 ! @end example ! @end ifinfo ! @noindent ! where @math{M} is the number of poles (the length of the @var{r}, ! @var{p}, and @var{e}), the @var{k} vector is a polynomial of order @math{N-1} ! representing the direct contribution, and the @var{e} vector specifies ! the multiplicity of the mth residue's pole. ! For example, ! @example ! @group ! b = [1, 1, 1]; ! a = [1, -5, 8, -4]; ! [r, p, k, e] = residue (b, a); ! @result{} r = [-2; 7; 3] ! @result{} p = [2; 2; 1] ! @result{} k = [](0x0) ! @result{} e = [1; 2; 1] ! @end group ! @end example ! @noindent ! which represents the following partial fraction expansion ! @iftex ! @tex ! $$ ! {s^2+s+1\over s^3-5s^2+8s-4} = {-2\over s-2} + {7\over (s-2)^2} + {3\over s-1} ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! s^2 + s + 1 -2 7 3 ! ------------------- = ----- + ------- + ----- ! s^3 - 5s^2 + 8s - 4 (s-2) (s-2)^2 (s-1) ! @end example ! @end ifinfo ! @deftypefnx {Function File} {[@var{b}, @var{a}] =} residue (@var{r}, @var{p}, @var{k}) ! @deftypefnx {Function File} {[@var{b}, @var{a}] =} residue (@var{r}, @var{p}, @var{k}, @var{e}) ! Compute the reconstituted quotient of polynomials, ! @var{b}(s)/@var{a}(s), from the partial fraction expansion; ! represented by the residues, poles, and a direct polynomial specified ! by @var{r}, @var{p} and @var{k}, and the pole multiplicity @var{e}. ! If the multiplicity, @var{e}, is not explicitly specified the multiplicity is ! determined by the script mpoles.m. ! For example, ! @example ! @group ! r = [-2; 7; 3]; ! p = [2; 2; 1]; ! k = [1, 0]; ! [b, a] = residue (r, p, k); ! @result{} b = [1, -5, 9, -3, 1] ! @result{} a = [1, -5, 8, -4] ! where mpoles.m is used to determine e = [1; 2; 1] ! @end group ! @end example ! Alternatively the multiplicity may be defined explicitly, for example, @example @group ! r = [7; 3; -2]; ! p = [2; 1; 2]; ! k = [1, 0]; ! e = [2; 1; 1]; ! [b, a] = residue (r, p, k, e); ! @result{} b = [1, -5, 9, -3, 1] ! @result{} a = [1, -5, 8, -4] @end group @end example ! ! @noindent ! which represents the following partial fraction expansion ! @iftex ! @tex ! $$ ! {-2\over s-2} + {7\over (s-2)^2} + {3\over s-1} + s = {s^4-5s^3+9s^2-3s+1\over s^3-5s^2+8s-4} ! $$ ! @end tex ! @end iftex @ifinfo ! @example ! -2 7 3 s^4 - 5s^3 + 9s^2 - 3s + 1 ! ----- + ------- + ----- + s = -------------------------- ! (s-2) (s-2)^2 (s-1) s^3 - 5s^2 + 8s - 4 ! @end example ! @end ifinfo ! @seealso{poly, roots, conv, deconv, mpoles, polyval, polyderiv, polyinteg} ! @end deftypefn ! roots ! -*- texinfo -*- ! @deftypefn {Function File} {} roots (@var{v}) ! For a vector @var{v} with @math{N} components, return ! the roots of the polynomial @iftex @tex ! $$ ! v_1 z^{N-1} + \cdots + v_{N-1} z + v_N. ! $$ @end tex @end iftex - @ifnottex @example ! v(1) * z^(N-1) + ... + v(N-1) * z + v(N) @end example ! @end ifnottex ! As an example, the following code finds the roots of the quadratic ! polynomial ! @iftex ! @tex ! $$ p(x) = x^2 - 5. $$ ! @end tex ! @end iftex ! @ifnottex ! @example ! p(x) = x^2 - 5. ! @end example ! @end ifnottex @example ! c = [1, 0, -5]; ! roots(c) ! @result{} 2.2361 ! @result{} -2.2361 ! @end example ! Note that the true result is ! @iftex ! @tex ! $\pm \sqrt{5}$ ! @end tex ! @end iftex ! @ifnottex ! @math{+/- sqrt(5)} ! @end ifnottex ! which is roughly ! @iftex ! @tex ! $\pm 2.2361$. ! @end tex ! @end iftex ! @ifnottex ! @math{+/- 2.2361}. ! @end ifnottex ! @seealso{compan} ! @end deftypefn ! spline ! -*- texinfo -*- ! @deftypefn {Function File} {@var{pp} = } spline (@var{x}, @var{y}) ! @deftypefnx {Function File} {@var{yi} = } spline (@var{x}, @var{y}, @var{xi}) ! ! Returns the cubic spline interpolation of @var{y} at the point ! @var{x}. Called with two arguments the piece-wise polynomial @var{pp} ! that may later be used with @code{ppval} to evaluate the polynomial ! at specific points. ! ! The variable @var{x} must be a vector of length @var{n}, and @var{y} ! can be either a vector or array. In the case where @var{y} is a ! vector, it can have a length of either @var{n} or @code{@var{n} + 2}. ! If the length of @var{y} is @var{n}, then the 'not-a-knot' end ! condition is used. If the length of @var{y} is @code{@var{n} + 2}, ! then the first and last values of the vector @var{y} are the first ! derivative of the cubic spline at the end-points. ! If @var{y} is an array, then the size of @var{y} must have the form ! @iftex ! @tex ! $$[s_1, s_2, \cdots, s_k, n]$$ ! @end tex ! @end iftex ! @ifinfo ! @code{[@var{s1}, @var{s2}, @dots{}, @var{sk}, @var{n}]} ! @end ifinfo ! or ! @iftex ! @tex ! $$[s_1, s_2, \cdots, s_k, n + 2]$$. ! @end tex ! @end iftex ! @ifinfo ! @code{[@var{s1}, @var{s2}, @dots{}, @var{sk}, @var{n} + 2]}. ! @end ifinfo ! The array is then reshaped internally to a matrix where to leading ! dimension is given by ! @iftex ! @tex ! $$s_1 s_2 \cdots s_k$$ ! @end tex ! @end iftex ! @ifinfo ! @code{@var{s1} * @var{s2} * @dots{} * @var{sk}} ! @end ifinfo ! and each row this matrix is then treated separately. Note that this ! is exactly the opposite treatment than @code{interp1} and is done ! for compatibility. ! Called with a third input argument, @code{spline} evaluates the ! piece-wise spline at the points @var{xi}. There is an equivalence ! between @code{ppval (spline (@var{x}, @var{y}), @var{xi})} and ! @code{spline (@var{x}, @var{y}, @var{xi})}. ! @seealso{ppval, mkpp, unmkpp} @end deftypefn ! unmkpp -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{p}, @var{n}, @var{k}, @var{d}] =} unmkpp (@var{pp}) ! ! Extract the components of a piece-wise polynomial structure @var{pp}. ! These are as follows: ! @table @asis ! @item @var{x} ! Samples points. ! @item @var{p} ! Polynomial coefficients for points in sample interval. @code{@var{p} ! (@var{i}, :)} contains the coefficients for the polynomial over ! interval @var{i} ordered from highest to lowest. If @code{@var{d} > ! 1}, @code{@var{p} (@var{r}, @var{i}, :)} contains the coefficients for ! the r-th polynomial defined on interval @var{i}. However, this is ! stored as a 2-D array such that @code{@var{c} = reshape (@var{p} (:, ! @var{j}), @var{n}, @var{d})} gives @code{@var{c} (@var{i}, @var{r})} ! is the j-th coefficient of the r-th polynomial over the i-th interval. ! @item @var{n} ! Number of polynomial pieces. ! @item @var{k} ! Order of the polynomial plus 1. ! @item @var{d} ! Number of polynomials defined for each interval. ! @end table ! @seealso{mkpp, ppval, spline} @end deftypefn ! demoquat -*- texinfo -*- ! @deftypefn {Function File} {} demoquat () ! Demonstrate the functions available for manipulating quaternions. ! Thanks to Mr. Charles Hall, Dr. Don Krupp and Dr. Larry Mullins at ! NASA's Marshall Space Flight Center for notes and instruction in ! use and conventions with quaternions. - A. S. Hodel ! @end deftypefn ! qconj ! -*- texinfo -*- ! @deftypefn {Function File} {} qconj (@var{q}) ! Conjugate of a quaternion. ! @example ! q = [w, x, y, z] = w*i + x*j + y*k + z ! qconj (q) = -w*i -x*j -y*k + z ! @end example @end deftypefn ! qcoordinate_plot -*- texinfo -*- ! @deftypefn {Function File} {} qcoordinate_plot (@var{qf}, @var{qb}, @var{qv}) ! Plot in the current figure a set of coordinate axes as viewed from ! the orientation specified by quaternion @var{qv}. Inertial axes are ! also plotted: @table @var ! @item qf ! Quaternion from reference (x,y,z) to inertial. ! @item qb ! Quaternion from reference to body. ! @item qv ! Quaternion from reference to view angle. @end table - @end deftypefn - qderiv - -*- texinfo -*- - @deftypefn {Function File} {} qderiv (omega) - Derivative of a quaternion. ! Let Q be a quaternion to transform a vector from a fixed frame to ! a rotating frame. If the rotating frame is rotating about the ! [x, y, z] axes at angular rates [wx, wy, wz], then the derivative ! of Q is given by @example ! Q' = qderivmat (omega) * Q ! @end example ! If the passive convention is used (rotate the frame, not the vector), ! then ! @example ! Q' = -qderivmat (omega) * Q @end example @end deftypefn ! qderivmat -*- texinfo -*- ! @deftypefn {Function File} {} qderivmat (@var{omega}) ! Derivative of a quaternion. ! Let Q be a quaternion to transform a vector from a fixed frame to ! a rotating frame. If the rotating frame is rotating about the ! [x, y, z] axes at angular rates [wx, wy, wz], then the derivative ! of Q is given by ! @example ! Q' = qderivmat (omega) * Q ! @end example ! If the passive convention is used (rotate the frame, not the vector), ! then ! @example ! Q' = -qderivmat (omega) * Q. ! @end example ! @end deftypefn ! qinv ! -*- texinfo -*- ! @deftypefn {Function File} {} qinv (@var{q}) ! Return the inverse of a quaternion. ! @example ! q = [w, x, y, z] = w*i + x*j + y*k + z ! qmult (q, qinv (q)) = 1 = [0 0 0 1] ! @end example ! @end deftypefn ! qmult ! -*- texinfo -*- ! @deftypefn {Function File} {} qmult (@var{a}, @var{b}) ! Multiply two quaternions. ! @example ! [w, x, y, z] = w*i + x*j + y*k + z ! @end example ! @noindent ! identities: @example ! i^2 = j^2 = k^2 = -1 ! ij = k jk = i ! ki = j kj = -i ! ji = -k ik = -j @end example @end deftypefn ! qtrans ! -*- texinfo -*- ! @deftypefn {Function File} {} qtrans (@var{v}, @var{q}) ! Transform the unit quaternion @var{v} by the unit quaternion @var{q}. ! Returns @code{@var{v} = @var{q}*@var{v}/@var{q}}. ! @end deftypefn ! qtransv -*- texinfo -*- ! @deftypefn {Function File} {} qtransv (@var{v}, @var{q}) ! Transform the 3-D vector @var{v} by the unit quaternion @var{q}. ! Return a column vector. ! @example ! vi = (2*real(q)^2 - 1)*vb + 2*imag(q)*(imag(q)'*vb) ! + 2*real(q)*cross(imag(q),vb) ! @end example ! @noindent ! Where imag(q) is a column vector of length 3. ! @end deftypefn ! qtransvmat ! -*- texinfo -*- ! @deftypefn {Function File} {} qtransvmat (@var{qib}) ! Construct a 3x3 transformation matrix from quaternion @var{qib} that ! is equivalent to rotation of th radians about axis @var{vv}, where ! @code{[@var{vv}, @var{th}] = quaternion (@var{qib})}. @end deftypefn ! quaternion -*- texinfo -*- ! @deftypefn {Function File} {[@var{a}, @var{b}, @var{c}, @var{d}] =} quaternion (w) ! @deftypefnx {Function File} {[@var{vv}, @var{theta}] =} quaternion (w) ! @deftypefnx {Function File} {@var{w} =} quaternion (@var{a}, @var{b}, @var{c}, @var{d}) ! @deftypefnx {Function File} {@var{w} =} quaternion (@var{vv}, @var{theta}) ! Construct or extract a quaternion ! @example ! w = a*i + b*j + c*k + d @end example ! @noindent ! from given data. @end deftypefn ! complement -*- texinfo -*- ! @deftypefn {Function File} {} complement (@var{x}, @var{y}) ! Return the elements of set @var{y} that are not in set @var{x}. For ! example, @example ! @group ! complement ([ 1, 2, 3 ], [ 2, 3, 5 ]) ! @result{} 5 ! @end group @end example - @seealso{create_set, union, intersection} - @end deftypefn - create_set - -*- texinfo -*- - @deftypefn {Function File} {} create_set (@var{x}) - Return a row vector containing the unique values in @var{x}, sorted in - ascending order. For example, ! @example ! @group ! create_set ([ 1, 2; 3, 4; 4, 2 ]) ! @result{} [ 1, 2, 3, 4 ] ! @end group ! @end example ! @seealso{union, intersection, complement} ! @end deftypefn ! intersect ! -*- texinfo -*- ! @deftypefn {Function File} {} intersect (@var{a}, @var{b}) ! @deftypefnx {Function File} {[@var{c}, @var{ia}, @var{ib}] =} intersect (@var{a}, @var{b}) ! Return the elements in both @var{a} and @var{b}, sorted in ascending ! order. If @var{a} and @var{b} are both column vectors return a column ! vector, otherwise return a row vector. ! Return index vectors @var{ia} and @var{ib} such that @code{a(ia)==c} and ! @code{b(ib)==c}. @end deftypefn ! @seealso{unique, union, setxor, setdiff, ismember} ! ismember -*- texinfo -*- ! @deftypefn {Function File} {[@var{tf}, @var{a_idx}] =} ismember (@var{A}, @var{S}) ! @deftypefnx {Function File} {[@var{tf}, @var{a_idx}] =} ismember (@var{A}, @var{S}, "rows") ! Return a matrix @var{tf} the same shape as @var{A} which has 1 if ! @code{A(i,j)} is in @var{S} or 0 if it isn't. If a second output argument ! is requested, the indexes into @var{S} of the matching elements are ! also returned. ! @example ! @group ! a = [3, 10, 1]; ! s = [0:9]; ! [tf, a_idx] = residue (a, s); ! @result{} tf = [1, 0, 1] ! @result{} a_idx = [4, 0, 2] ! @end group ! @end example ! The inputs, @var{A} and @var{S}, may also be cell arrays. @example @group ! a = @{'abc'@}; ! s = @{'abc', 'def'@}; ! [tf, a_idx] = residue (a, s); ! @result{} tf = [1, 0] ! @result{} a_idx = [1, 0] @end group @end example ! With the optional third argument @code{"rows"}, and matrices ! @var{A} and @var{S} with the same number of columns, compare rows in ! @var{A} with the rows in @var{S}. @example ! @group ! a = [1:3; 5:7; 4:6]; ! s = [0:2; 1:3; 2:4; 3:5; 4:6]; ! [tf, a_idx] = ismember(a, s, 'rows'); ! @result{} tf = logical ([1; 0; 1]) ! @result{} a_idx = [2; 0; 5]; ! @end group @end example ! ! @seealso{unique, union, intersection, setxor, setdiff} @end deftypefn ! setdiff -*- texinfo -*- ! @deftypefn {Function File} {} setdiff (@var{a}, @var{b}) ! @deftypefnx {Function File} {} setdiff (@var{a}, @var{b}, "rows") ! Return the elements in @var{a} that are not in @var{b}, sorted in ! ascending order. If @var{a} and @var{b} are both column vectors ! return a column vector, otherwise return a row vector. ! Given the optional third argument @samp{"rows"}, return the rows in ! @var{a} that are not in @var{b}, sorted in ascending order by rows. ! @seealso{unique, union, intersect, setxor, ismember} ! @end deftypefn ! setxor ! -*- texinfo -*- ! @deftypefn {Function File} {} setxor (@var{a}, @var{b}) ! Return the elements exclusive to @var{a} or @var{b}, sorted in ascending ! order. If @var{a} and @var{b} are both column vectors return a column ! vector, otherwise return a row vector. ! @seealso{unique, union, intersect, setdiff, ismember} @end deftypefn ! union -*- texinfo -*- ! @deftypefn {Function File} {} union (@var{x}, @var{y}) ! Return the set of elements that are in either of the sets @var{x} and ! @var{y}. For example, @example @group ! union ([ 1, 2, 4 ], [ 2, 3, 5 ]) ! @result{} [ 1, 2, 3, 4, 5 ] @end group @end example - @seealso{create_set, intersection, complement} @end deftypefn ! unique -*- texinfo -*- ! @deftypefn {Function File} {} unique (@var{x}) ! Return the unique elements of @var{x}, sorted in ascending order. ! If @var{x} is a row vector, return a row vector, but if @var{x} ! is a column vector or a matrix return a column vector. ! @deftypefnx {Function File} {} unique (@var{A}, 'rows') ! Return the unique rows of @var{A}, sorted in ascending order. ! @deftypefnx {Function File} {[@var{y}, @var{i}, @var{j}] = } unique (@var{x}) ! Return index vectors @var{i} and @var{j} such that @code{x(i)==y} and ! @code{y(j)==x}. ! @seealso{union, intersect, setdiff, setxor, ismember} @end deftypefn ! arch_fit -*- texinfo -*- ! @deftypefn {Function File} {[@var{a}, @var{b}] =} arch_fit (@var{y}, @var{x}, @var{p}, @var{iter}, @var{gamma}, @var{a0}, @var{b0}) ! Fit an ARCH regression model to the time series @var{y} using the ! scoring algorithm in Engle's original ARCH paper. The model is ! @example ! y(t) = b(1) * x(t,1) + ... + b(k) * x(t,k) + e(t), ! h(t) = a(1) + a(2) * e(t-1)^2 + ... + a(p+1) * e(t-p)^2 @end example ! @noindent ! in which @math{e(t)} is @math{N(0, h(t))}, given a time-series vector ! @var{y} up to time @math{t-1} and a matrix of (ordinary) regressors ! @var{x} up to @math{t}. The order of the regression of the residual ! variance is specified by @var{p}. ! ! If invoked as @code{arch_fit (@var{y}, @var{k}, @var{p})} with a ! positive integer @var{k}, fit an ARCH(@var{k}, @var{p}) process, ! i.e., do the above with the @math{t}-th row of @var{x} given by @example ! [1, y(t-1), ..., y(t-k)] @end example - - Optionally, one can specify the number of iterations @var{iter}, the - updating factor @var{gamma}, and initial values @math{a0} and - @math{b0} for the scoring algorithm. @end deftypefn ! arch_rnd -*- texinfo -*- ! @deftypefn {Function File} {} arch_rnd (@var{a}, @var{b}, @var{t}) ! Simulate an ARCH sequence of length @var{t} with AR ! coefficients @var{b} and CH coefficients @var{a}. I.e., the result ! @math{y(t)} follows the model ! @smallexample ! y(t) = b(1) + b(2) * y(t-1) + @dots{} + b(lb) * y(t-lb+1) + e(t), ! @end smallexample ! @noindent ! where @math{e(t)}, given @var{y} up to time @math{t-1}, is ! @math{N(0, h(t))}, with ! @smallexample ! h(t) = a(1) + a(2) * e(t-1)^2 + @dots{} + a(la) * e(t-la+1)^2 ! @end smallexample @end deftypefn ! arch_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{lm}] =} arch_test (@var{y}, @var{x}, @var{p}) ! For a linear regression model ! ! @example ! y = x * b + e ! @end example ! ! @noindent ! perform a Lagrange Multiplier (LM) test of the null hypothesis of no ! conditional heteroscedascity against the alternative of CH(@var{p}). ! I.e., the model is @example ! y(t) = b(1) * x(t,1) + @dots{} + b(k) * x(t,k) + e(t), @end example ! @noindent ! given @var{y} up to @math{t-1} and @var{x} up to @math{t}, ! @math{e}(t) is @math{N(0, h(t))} with ! ! @example ! h(t) = v + a(1) * e(t-1)^2 + @dots{} + a(p) * e(t-p)^2, ! @end example ! @noindent ! and the null is @math{a(1)} == @dots{} == @math{a(p)} == 0. ! If the second argument is a scalar integer, @math{k}, perform the same ! test in a linear autoregression model of order @math{k}, i.e., with ! @example ! [1, y(t-1), @dots{}, y(t-@var{k})] ! @end example ! @noindent ! as the @math{t}-th row of @var{x}. ! Under the null, LM approximately has a chisquare distribution with ! @var{p} degrees of freedom and @var{pval} is the @math{p}-value (1 ! minus the CDF of this distribution at LM) of the test. ! If no output argument is given, the @math{p}-value is displayed. ! @end deftypefn ! arma_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} arma_rnd (@var{a}, @var{b}, @var{v}, @var{t}, @var{n}) ! Return a simulation of the ARMA model @example ! x(n) = a(1) * x(n-1) + ... + a(k) * x(n-k) ! + e(n) + b(1) * e(n-1) + ... + b(l) * e(n-l) @end example - - @noindent - in which @var{k} is the length of vector @var{a}, @var{l} is the - length of vector @var{b} and @var{e} is gaussian white noise with - variance @var{v}. The function returns a vector of length @var{t}. - - The optional parameter @var{n} gives the number of dummy - @var{x}(@var{i}) used for initialization, i.e., a sequence of length - @var{t}+@var{n} is generated and @var{x}(@var{n}+1:@var{t}+@var{n}) - is returned. If @var{n} is omitted, @var{n} = 100 is used. - @end deftypefn - autocor - -*- texinfo -*- - @deftypefn {Function File} {} autocor (@var{x}, @var{h}) - Return the autocorrelations from lag 0 to @var{h} of vector @var{x}. - If @var{h} is omitted, all autocorrelations are computed. - If @var{x} is a matrix, the autocorrelations of each column are - computed. - @end deftypefn - autocov - -*- texinfo -*- - @deftypefn {Function File} {} autocov (@var{x}, @var{h}) - Return the autocovariances from lag 0 to @var{h} of vector @var{x}. - If @var{h} is omitted, all autocovariances are computed. - If @var{x} is a matrix, the autocovariances of each column are - computed. - @end deftypefn - autoreg_matrix - -*- texinfo -*- - @deftypefn {Function File} {} autoreg_matrix (@var{y}, @var{k}) - Given a time series (vector) @var{y}, return a matrix with ones in the - first column and the first @var{k} lagged values of @var{y} in the - other columns. I.e., for @var{t} > @var{k}, @code{[1, - @var{y}(@var{t}-1), @dots{}, @var{y}(@var{t}-@var{k})]} is the t-th row - of the result. The resulting matrix may be used as a regressor matrix - in autoregressions. @end deftypefn ! bartlett -*- texinfo -*- ! @deftypefn {Function File} {} bartlett (@var{m}) ! Return the filter coefficients of a Bartlett (triangular) window of ! length @var{m}. ! For a definition of the Bartlett window, see e.g. A. V. Oppenheim & ! R. W. Schafer, "Discrete-Time Signal Processing". ! @end deftypefn ! blackman ! -*- texinfo -*- ! @deftypefn {Function File} {} blackman (@var{m}) ! Return the filter coefficients of a Blackman window of length @var{m}. ! For a definition of the Blackman window, see e.g. A. V. Oppenheim & ! R. W. Schafer, "Discrete-Time Signal Processing". @end deftypefn ! detrend -*- texinfo -*- ! @deftypefn {Function File} {} detrend (@var{x}, @var{p}) ! If @var{x} is a vector, @code{detrend (@var{x}, @var{p})} removes the ! best fit of a polynomial of order @var{p} from the data @var{x}. ! ! If @var{x} is a matrix, @code{detrend (@var{x}, @var{p})} does the same ! for each column in @var{x}. ! ! The second argument is optional. If it is not specified, a value of 1 ! is assumed. This corresponds to removing a linear trend. @end deftypefn ! diffpara -*- texinfo -*- ! @deftypefn {Function File} {[@var{d}, @var{dd}] =} diffpara (@var{x}, @var{a}, @var{b}) ! Return the estimator @var{d} for the differencing parameter of an ! integrated time series. ! ! The frequencies from @math{[2*pi*a/t, 2*pi*b/T]} are used for the ! estimation. If @var{b} is omitted, the interval ! @math{[2*pi/T, 2*pi*a/T]} is used. If both @var{b} and @var{a} are ! omitted then @math{a = 0.5 * sqrt (T)} and @math{b = 1.5 * sqrt (T)} ! is used, where @math{T} is the sample size. If @var{x} is a matrix, ! the differencing parameter of each column is estimated. ! The estimators for all frequencies in the intervals ! described above is returned in @var{dd}. The value of @var{d} is ! simply the mean of @var{dd}. ! Reference: Brockwell, Peter J. & Davis, Richard A. Time Series: ! Theory and Methods Springer 1987. @end deftypefn ! durbinlevinson -*- texinfo -*- ! @deftypefn {Function File} {} durbinlevinson (@var{c}, @var{oldphi}, @var{oldv}) ! Perform one step of the Durbin-Levinson algorithm. ! The vector @var{c} specifies the autocovariances @code{[gamma_0, @dots{}, ! gamma_t]} from lag 0 to @var{t}, @var{oldphi} specifies the ! coefficients based on @var{c}(@var{t}-1) and @var{oldv} specifies the ! corresponding error. ! If @var{oldphi} and @var{oldv} are omitted, all steps from 1 to ! @var{t} of the algorithm are performed. ! @end deftypefn ! fftconv ! -*- texinfo -*- ! @deftypefn {Function File} {} fftconv (@var{a}, @var{b}, @var{n}) ! Return the convolution of the vectors @var{a} and @var{b}, as a vector ! with length equal to the @code{length (a) + length (b) - 1}. If @var{a} ! and @var{b} are the coefficient vectors of two polynomials, the returned ! value is the coefficient vector of the product polynomial. ! The computation uses the FFT by calling the function @code{fftfilt}. If ! the optional argument @var{n} is specified, an N-point FFT is used. ! @end deftypefn ! fftfilt ! -*- texinfo -*- ! @deftypefn {Function File} {} fftfilt (@var{b}, @var{x}, @var{n}) ! With two arguments, @code{fftfilt} filters @var{x} with the FIR filter ! @var{b} using the FFT. ! Given the optional third argument, @var{n}, @code{fftfilt} uses the ! overlap-add method to filter @var{x} with @var{b} using an N-point FFT. ! If @var{x} is a matrix, filter each column of the matrix. ! @end deftypefn ! fftshift ! -*- texinfo -*- ! @deftypefn {Function File} {} fftshift (@var{v}) ! @deftypefnx {Function File} {} fftshift (@var{v}, @var{dim}) ! Perform a shift of the vector @var{v}, for use with the @code{fft} ! and @code{ifft} functions, in order the move the frequency 0 to the ! center of the vector or matrix. ! If @var{v} is a vector of @math{N} elements corresponding to @math{N} ! time samples spaced of @math{Dt} each, then @code{fftshift (fft ! (@var{v}))} corresponds to frequencies @example ! f = ((1:N) - ceil(N/2)) / N / Dt @end example ! If @var{v} is a matrix, the same holds for rows and columns. If ! @var{v} is an array, then the same holds along each dimension. ! ! The optional @var{dim} argument can be used to limit the dimension ! along which the permutation occurs. ! @end deftypefn ! filter2 ! -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} filter2 (@var{b}, @var{x}) ! @deftypefnx {Function File} {@var{y} =} filter2 (@var{b}, @var{x}, @var{shape}) ! Apply the 2-D FIR filter @var{b} to @var{x}. If the argument ! @var{shape} is specified, return an array of the desired shape. ! Possible values are: ! ! @table @asis ! @item 'full' ! pad @var{x} with zeros on all sides before filtering. ! @item 'same' ! unpadded @var{x} (default) ! @item 'valid' ! trim @var{x} after filtering so edge effects are no included. @end table ! Note this is just a variation on convolution, with the parameters ! reversed and @var{b} rotated 180 degrees. ! @seealso{conv2} ! @end deftypefn ! fractdiff ! -*- texinfo -*- ! @deftypefn {Function File} {} fractdiff (@var{x}, @var{d}) ! Compute the fractional differences @math{(1-L)^d x} where @math{L} ! denotes the lag-operator and @math{d} is greater than -1. ! @end deftypefn ! freqz ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{h}, @var{w}] =} freqz (@var{b}, @var{a}, @var{n}, "whole") ! Return the complex frequency response @var{h} of the rational IIR filter ! whose numerator and denominator coefficients are @var{b} and @var{a}, ! respectively. The response is evaluated at @var{n} angular frequencies ! between 0 and ! @ifinfo ! 2*pi. ! @end ifinfo @iftex @tex ! $2\pi$. @end tex @end iftex - - @noindent - The output value @var{w} is a vector of the frequencies. - - If the fourth argument is omitted, the response is evaluated at - frequencies between 0 and @ifinfo ! pi. @end ifinfo @iftex @tex ! $\pi$. @end tex @end iftex ! ! If @var{n} is omitted, a value of 512 is assumed. ! ! If @var{a} is omitted, the denominator is assumed to be 1 (this ! corresponds to a simple FIR filter). ! ! For fastest computation, @var{n} should factor into a small number of ! small primes. ! ! @deftypefnx {Function File} {@var{h} =} freqz (@var{b}, @var{a}, @var{w}) ! Evaluate the response at the specific frequencies in the vector @var{w}. ! The values for @var{w} are measured in radians. ! ! @deftypefnx {Function File} {[@dots{}] =} freqz (@dots{}, @var{Fs}) ! Return frequencies in Hz instead of radians assuming a sampling rate ! @var{Fs}. If you are evaluating the response at specific frequencies ! @var{w}, those frequencies should be requested in Hz rather than radians. ! ! @deftypefnx {Function File} {} freqz (@dots{}) ! Plot the pass band, stop band and phase response of @var{h} rather ! than returning them. @end deftypefn ! freqz_plot -*- texinfo -*- ! @deftypefn {Function File} {} freqz_plot (@var{w}, @var{h}) ! Plot the pass band, stop band and phase response of @var{h}. @end deftypefn ! hamming -*- texinfo -*- ! @deftypefn {Function File} {} hamming (@var{m}) ! Return the filter coefficients of a Hamming window of length @var{m}. ! For a definition of the Hamming window, see e.g. A. V. Oppenheim & ! R. W. Schafer, "Discrete-Time Signal Processing". ! @end deftypefn ! hanning ! -*- texinfo -*- ! @deftypefn {Function File} {} hanning (@var{m}) ! Return the filter coefficients of a Hanning window of length @var{m}. ! For a definition of this window type, see e.g. A. V. Oppenheim & ! R. W. Schafer, "Discrete-Time Signal Processing". ! @end deftypefn ! hurst ! -*- texinfo -*- ! @deftypefn {Function File} {} hurst (@var{x}) ! Estimate the Hurst parameter of sample @var{x} via the rescaled range ! statistic. If @var{x} is a matrix, the parameter is estimated for ! every single column. ! @end deftypefn ! ifftshift ! -*- texinfo -*- ! @deftypefn {Function File} {} ifftshift (@var{v}) ! @deftypefnx {Function File} {} ifftshift (@var{v}, @var{dim}) ! Undo the action of the @code{fftshift} function. For even length ! @var{v}, @code{fftshift} is its own inverse, but odd lengths differ ! slightly. ! @end deftypefn ! periodogram ! -*- texinfo -*- ! @deftypefn {Function File} {} periodogram (@var{x}) ! For a data matrix @var{x} from a sample of size @var{n}, return the ! periodogram. ! @end deftypefn ! rectangle_lw ! -*- texinfo -*- ! @deftypefn {Function File} {} rectangle_lw (@var{n}, @var{b}) ! Rectangular lag window. Subfunction used for spectral density ! estimation. @end deftypefn ! rectangle_sw -*- texinfo -*- ! @deftypefn {Function File} {} rectangle_sw (@var{n}, @var{b}) ! Rectangular spectral window. Subfunction used for spectral density ! estimation. @end deftypefn ! sinc -*- texinfo -*- ! @deftypefn {Function File} {} sinc (@var{x}) ! Return @iftex @tex ! $ \sin (\pi x)/(\pi x)$. @end tex @end iftex @ifinfo ! sin(pi*x)/(pi*x). @end ifinfo - @end deftypefn - sinetone - -*- texinfo -*- - @deftypefn {Function File} {} sinetone (@var{freq}, @var{rate}, @var{sec}, @var{ampl}) - Return a sinetone of frequency @var{freq} with length of @var{sec} - seconds at sampling rate @var{rate} and with amplitude @var{ampl}. - The arguments @var{freq} and @var{ampl} may be vectors of common size. - - Defaults are @var{rate} = 8000, @var{sec} = 1 and @var{ampl} = 64. - @end deftypefn - sinewave - -*- texinfo -*- - @deftypefn {Function File} {} sinewave (@var{m}, @var{n}, @var{d}) - Return an @var{m}-element vector with @var{i}-th element given by - @code{sin (2 * pi * (@var{i}+@var{d}-1) / @var{n})}. - - The default value for @var{d} is 0 and the default value for @var{n} - is @var{m}. - @end deftypefn - spectral_adf - -*- texinfo -*- - @deftypefn {Function File} {} spectral_adf (@var{c}, @var{win}, @var{b}) - Return the spectral density estimator given a vector of - autocovariances @var{c}, window name @var{win}, and bandwidth, - @var{b}. ! The window name, e.g., @code{"triangle"} or @code{"rectangle"} is ! used to search for a function called @code{@var{win}_sw}. ! If @var{win} is omitted, the triangle window is used. If @var{b} is ! omitted, @code{1 / sqrt (length (@var{x}))} is used. @end deftypefn ! spectral_xdf -*- texinfo -*- ! @deftypefn {Function File} {} spectral_xdf (@var{x}, @var{win}, @var{b}) ! Return the spectral density estimator given a data vector @var{x}, ! window name @var{win}, and bandwidth, @var{b}. ! ! The window name, e.g., @code{"triangle"} or @code{"rectangle"} is ! used to search for a function called @code{@var{win}_sw}. ! If @var{win} is omitted, the triangle window is used. If @var{b} is ! omitted, @code{1 / sqrt (length (@var{x}))} is used. @end deftypefn ! spencer -*- texinfo -*- ! @deftypefn {Function File} {} spencer (@var{x}) ! Return Spencer's 15 point moving average of every single column of ! @var{x}. @end deftypefn ! stft -*- texinfo -*- ! @deftypefn {Function File} {[@var{y}, @var{c}] =} stft (@var{x}, @var{win_size}, @var{inc}, @var{num_coef}, @var{w_type}) ! Compute the short-term Fourier transform of the vector @var{x} with ! @var{num_coef} coefficients by applying a window of @var{win_size} data ! points and an increment of @var{inc} points. ! Before computing the Fourier transform, one of the following windows ! is applied: ! @table @asis ! @item hanning ! w_type = 1 ! @item hamming ! w_type = 2 ! @item rectangle ! w_type = 3 @end table ! The window names can be passed as strings or by the @var{w_type} number. ! ! If not all arguments are specified, the following defaults are used: ! @var{win_size} = 80, @var{inc} = 24, @var{num_coef} = 64, and ! @var{w_type} = 1. ! ! @code{@var{y} = stft (@var{x}, @dots{})} returns the absolute values ! of the Fourier coefficients according to the @var{num_coef} positive ! frequencies. ! @code{[@var{y}, @var{c}] = stft (@code{x}, @dots{})} returns the ! entire STFT-matrix @var{y} and a 3-element vector @var{c} containing ! the window size, increment, and window type, which is needed by the ! synthesis function. @end deftypefn ! synthesis -*- texinfo -*- ! @deftypefn {Function File} {} synthesis (@var{y}, @var{c}) ! Compute a signal from its short-time Fourier transform @var{y} and a ! 3-element vector @var{c} specifying window size, increment, and ! window type. ! The values @var{y} and @var{c} can be derived by @example ! [@var{y}, @var{c}] = stft (@var{x} , @dots{}) @end example @end deftypefn ! triangle_lw ! -*- texinfo -*- ! @deftypefn {Function File} {} triangle_lw (@var{n}, @var{b}) ! Triangular lag window. Subfunction used for spectral density ! estimation. ! @end deftypefn ! triangle_sw ! -*- texinfo -*- ! @deftypefn {Function File} {} triangle_sw (@var{n}, @var{b}) ! Triangular spectral window. Subfunction used for spectral density ! estimation. ! @end deftypefn ! unwrap -*- texinfo -*- ! @deftypefn {Function File} {@var{b} =} unwrap (@var{a}, @var{tol}, @var{dim}) ! Unwrap radian phases by adding multiples of 2*pi as appropriate to ! remove jumps greater than @var{tol}. @var{tol} defaults to pi. ! Unwrap will unwrap along the first non-singleton dimension of ! @var{a}, unless the optional argument @var{dim} is given, in ! which case the data will be unwrapped along this dimension ! @end deftypefn ! yulewalker ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{a}, @var{v}] =} yulewalker (@var{c}) ! Fit an AR (p)-model with Yule-Walker estimates given a vector @var{c} ! of autocovariances @code{[gamma_0, ..., gamma_p]}. ! Returns the AR coefficients, @var{a}, and the variance of white ! noise, @var{v}. ! @end deftypefn ! colperm ! -*- texinfo -*- ! @deftypefn {Function File} {@var{p} =} colperm (@var{s}) ! Returns the column permutations such that the columns of ! @code{@var{s} (:, @var{p})} are ordered in terms of increase number ! of non-zero elements. If @var{s} is symmetric, then @var{p} is chosen ! such that @code{@var{s} (@var{p}, @var{p})} orders the rows and ! columns with increasing number of non zeros elements. ! @end deftypefn ! etreeplot ! -*- texinfo -*- ! @deftypefn {Function File} {} etreeplot (@var{tree}) ! @deftypefnx {Function File} {} etreeplot (@var{tree}, @var{node_style}, @var{edge_style}) ! Plot the elimination tree of the matrix @var{s} or ! @code{@var{s}+@var{s}'} if @var{s} in non-symmetric. The optional ! parameters @var{line_style} and @var{edge_style} define the output ! style. ! @seealso{treeplot, gplot} @end deftypefn ! gplot -*- texinfo -*- ! @deftypefn {Function File} {} gplot (@var{a}, @var{xy}) ! @deftypefnx {Function File} {} gplot (@var{a}, @var{xy}, @var{line_style}) ! @deftypefnx {Function File} {[@var{x}, @var{y}] =} gplot (@var{a}, @var{xy}) ! Plot a graph defined by @var{A} and @var{xy} in the graph theory ! sense. @var{A} is the adjacency matrix of the array to be plotted ! and @var{xy} is an @var{n}-by-2 matrix containing the coordinates of ! the nodes of the graph. ! The optional parameter @var{line_style} defines the output style for ! the plot. Called with no output arguments the graph is plotted ! directly. Otherwise, return the coordinates of the plot in @var{x} ! and @var{y}. ! @seealso{treeplot, etreeplot, spy} @end deftypefn ! nonzeros -*- texinfo -*- ! @deftypefn {Function File} {} nonzeros (@var{s}) ! Returns a vector of the non-zero values of the sparse matrix @var{s}. @end deftypefn ! normest -*- texinfo -*- ! @deftypefn {Function File} {[@var{n}, @var{c}] =} normest (@var{a}, @var{tol}) ! Estimate the 2-norm of the matrix @var{a} using a power series ! analysis. This is typically used for large matrices, where the cost ! of calculating the @code{norm (@var{a})} is prohibitive and an approximation ! to the 2-norm is acceptable. ! @var{tol} is the tolerance to which the 2-norm is calculated. By default ! @var{tol} is 1e-6. @var{c} returns the number of iterations needed for ! @code{normest} to converge. @end deftypefn ! pcg -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} pcg (@var{a}, @var{b}, @var{tol}, @var{maxit}, @var{m1}, @var{m2}, @var{x0}, @dots{}) ! @deftypefnx {Function File} {[@var{x}, @var{flag}, @var{relres}, @var{iter}, @var{resvec}, @var{eigest}] =} pcg (@dots{}) ! ! Solves the linear system of equations @code{@var{a} * @var{x} = ! @var{b}} by means of the Preconditioned Conjugate Gradient iterative ! method. The input arguments are ! ! @itemize ! @item ! @var{a} can be either a square (preferably sparse) matrix or a ! function handle, inline function or string containing the name ! of a function which computes @code{@var{a} * @var{x}}. In principle ! @var{a} should be symmetric and positive definite; if @code{pcg} ! finds @var{a} to not be positive definite, you will get a warning ! message and the @var{flag} output parameter will be set. ! ! @item ! @var{b} is the right hand side vector. ! ! @item ! @var{tol} is the required relative tolerance for the residual error, ! @code{@var{b} - @var{a} * @var{x}}. The iteration stops if @code{norm ! (@var{b} - @var{a} * @var{x}) <= @var{tol} * norm (@var{b} - @var{a} * ! @var{x0})}. If @var{tol} is empty or is omitted, the function sets ! @code{@var{tol} = 1e-6} by default. ! ! @item ! @var{maxit} is the maximum allowable number of iterations; if ! @code{[]} is supplied for @code{maxit}, or @code{pcg} has less ! arguments, a default value equal to 20 is used. ! ! @item ! @var{m} = @var{m1} * @var{m2} is the (left) preconditioning matrix, so that the iteration is ! (theoretically) equivalent to solving by @code{pcg} @code{@var{P} * ! @var{x} = @var{m} \ @var{b}}, with @code{@var{P} = @var{m} \ @var{a}}. ! Note that a proper choice of the preconditioner may dramatically ! improve the overall performance of the method. Instead of matrices ! @var{m1} and @var{m2}, the user may pass two functions which return ! the results of applying the inverse of @var{m1} and @var{m2} to ! a vector (usually this is the preferred way of using the preconditioner). ! If @code{[]} is supplied for @var{m1}, or @var{m1} is omitted, no ! preconditioning is applied. If @var{m2} is omitted, @var{m} = @var{m1} ! will be used as preconditioner. ! ! @item ! @var{x0} is the initial guess. If @var{x0} is empty or omitted, the ! function sets @var{x0} to a zero vector by default. ! @end itemize ! ! The arguments which follow @var{x0} are treated as parameters, and ! passed in a proper way to any of the functions (@var{a} or @var{m}) ! which are passed to @code{pcg}. See the examples below for further ! details. The output arguments are ! ! @itemize ! @item ! @var{x} is the computed approximation to the solution of ! @code{@var{a} * @var{x} = @var{b}}. ! ! @item ! @var{flag} reports on the convergence. @code{@var{flag} = 0} means ! the solution converged and the tolerance criterion given by @var{tol} ! is satisfied. @code{@var{flag} = 1} means that the @var{maxit} limit ! for the iteration count was reached. @code{@var{flag} = 3} reports that ! the (preconditioned) matrix was found not positive definite. ! ! @item ! @var{relres} is the ratio of the final residual to its initial value, ! measured in the Euclidean norm. ! ! @item ! @var{iter} is the actual number of iterations performed. ! @item ! @var{resvec} describes the convergence history of the method. ! @code{@var{resvec} (i,1)} is the Euclidean norm of the residual, and ! @code{@var{resvec} (i,2)} is the preconditioned residual norm, ! after the (@var{i}-1)-th iteration, @code{@var{i} = ! 1, 2, @dots{}, @var{iter}+1}. The preconditioned residual norm ! is defined as ! @code{norm (@var{r}) ^ 2 = @var{r}' * (@var{m} \ @var{r})} where ! @code{@var{r} = @var{b} - @var{a} * @var{x}}, see also the ! description of @var{m}. If @var{eigest} is not required, only ! @code{@var{resvec} (:,1)} is returned. ! @item ! @var{eigest} returns the estimate for the smallest @code{@var{eigest} ! (1)} and largest @code{@var{eigest} (2)} eigenvalues of the ! preconditioned matrix @code{@var{P} = @var{m} \ @var{a}}. In ! particular, if no preconditioning is used, the estimates for the ! extreme eigenvalues of @var{a} are returned. @code{@var{eigest} (1)} ! is an overestimate and @code{@var{eigest} (2)} is an underestimate, ! so that @code{@var{eigest} (2) / @var{eigest} (1)} is a lower bound ! for @code{cond (@var{P}, 2)}, which nevertheless in the limit should ! theoretically be equal to the actual value of the condition number. ! The method which computes @var{eigest} works only for symmetric positive ! definite @var{a} and @var{m}, and the user is responsible for ! verifying this assumption. ! @end itemize ! Let us consider a trivial problem with a diagonal matrix (we exploit the ! sparsity of A) @example @group ! N = 10; ! A = spdiag ([1:N]); ! b = rand (N, 1); ! [L, U, P, Q] = luinc (A,1.e-3); @end group @end example ! @sc{Example 1:} Simplest use of @code{pcg} ! @example ! x = pcg(A,b) @end example ! @sc{Example 2:} @code{pcg} with a function which computes ! @code{@var{a} * @var{x}} ! ! @example ! @group ! function y = applyA (x) ! y = [1:N]'.*x; ! endfunction ! x = pcg ("applyA", b) ! @end group @end example ! @sc{Example 3:} @code{pcg} with a preconditioner: @var{l} * @var{u} ! @example ! x=pcg(A,b,1.e-6,500,L*U); ! @end example ! @sc{Example 4:} @code{pcg} with a preconditioner: @var{l} * @var{u}. ! Faster than @sc{Example 3} since lower and upper triangular matrices ! are easier to invert @example ! x=pcg(A,b,1.e-6,500,L,U); @end example ! @sc{Example 5:} Preconditioned iteration, with full diagnostics. The ! preconditioner (quite strange, because even the original matrix ! @var{a} is trivial) is defined as a function @example ! @group ! function y = applyM(x) ! K = floor (length (x) - 2); ! y = x; ! y(1:K) = x(1:K)./[1:K]'; ! endfunction ! ! [x, flag, relres, iter, resvec, eigest] = ... ! pcg (A, b, [], [], "applyM"); ! semilogy (1:iter+1, resvec); ! @end group @end example ! @sc{Example 6:} Finally, a preconditioner which depends on a ! parameter @var{k}. @example @group ! function y = applyM (x, varargin) ! K = varargin@{1@}; ! y = x; ! y(1:K) = x(1:K)./[1:K]'; ! endfunction ! ! [x, flag, relres, iter, resvec, eigest] = ... ! pcg (A, b, [], [], "applyM", [], [], 3) @end group @end example - - @sc{References} - - [1] C.T.Kelley, 'Iterative methods for linear and nonlinear equations', - SIAM, 1995 (the base PCG algorithm) - - [2] Y.Saad, 'Iterative methods for sparse linear systems', PWS 1996 - (condition number estimate from PCG) Revised version of this book is - available online at http://www-users.cs.umn.edu/~saad/books.html - - - @seealso{sparse, pcr} @end deftypefn ! pcr -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} pcr (@var{a}, @var{b}, @var{tol}, @var{maxit}, @var{m}, @var{x0}, @dots{}) ! @deftypefnx {Function File} {[@var{x}, @var{flag}, @var{relres}, @var{iter}, @var{resvec}] =} pcr (@dots{}) ! ! Solves the linear system of equations @code{@var{a} * @var{x} = ! @var{b}} by means of the Preconditioned Conjugate Residuals iterative ! method. The input arguments are ! ! @itemize ! @item ! @var{a} can be either a square (preferably sparse) matrix or a ! function handle, inline function or string containing the name ! of a function which computes @code{@var{a} * @var{x}}. In principle ! @var{a} should be symmetric and non-singular; if @code{pcr} ! finds @var{a} to be numerically singular, you will get a warning ! message and the @var{flag} output parameter will be set. ! ! @item ! @var{b} is the right hand side vector. ! ! @item ! @var{tol} is the required relative tolerance for the residual error, ! @code{@var{b} - @var{a} * @var{x}}. The iteration stops if @code{norm ! (@var{b} - @var{a} * @var{x}) <= @var{tol} * norm (@var{b} - @var{a} * ! @var{x0})}. If @var{tol} is empty or is omitted, the function sets ! @code{@var{tol} = 1e-6} by default. ! ! @item ! @var{maxit} is the maximum allowable number of iterations; if ! @code{[]} is supplied for @code{maxit}, or @code{pcr} has less ! arguments, a default value equal to 20 is used. ! ! @item ! @var{m} is the (left) preconditioning matrix, so that the iteration is ! (theoretically) equivalent to solving by @code{pcr} @code{@var{P} * ! @var{x} = @var{m} \ @var{b}}, with @code{@var{P} = @var{m} \ @var{a}}. ! Note that a proper choice of the preconditioner may dramatically ! improve the overall performance of the method. Instead of matrix ! @var{m}, the user may pass a function which returns the results of ! applying the inverse of @var{m} to a vector (usually this is the ! preferred way of using the preconditioner). If @code{[]} is supplied ! for @var{m}, or @var{m} is omitted, no preconditioning is applied. ! ! @item ! @var{x0} is the initial guess. If @var{x0} is empty or omitted, the ! function sets @var{x0} to a zero vector by default. ! @end itemize ! ! The arguments which follow @var{x0} are treated as parameters, and ! passed in a proper way to any of the functions (@var{a} or @var{m}) ! which are passed to @code{pcr}. See the examples below for further ! details. The output arguments are ! ! @itemize ! @item ! @var{x} is the computed approximation to the solution of ! @code{@var{a} * @var{x} = @var{b}}. ! ! @item ! @var{flag} reports on the convergence. @code{@var{flag} = 0} means ! the solution converged and the tolerance criterion given by @var{tol} ! is satisfied. @code{@var{flag} = 1} means that the @var{maxit} limit ! for the iteration count was reached. @code{@var{flag} = 3} reports t ! @code{pcr} breakdown, see [1] for details. ! ! @item ! @var{relres} is the ratio of the final residual to its initial value, ! measured in the Euclidean norm. ! @item ! @var{iter} is the actual number of iterations performed. ! @item ! @var{resvec} describes the convergence history of the method, ! so that @code{@var{resvec} (i)} contains the Euclidean norms of the ! residual after the (@var{i}-1)-th iteration, @code{@var{i} = ! 1,2, @dots{}, @var{iter}+1}. ! @end itemize ! Let us consider a trivial problem with a diagonal matrix (we exploit the ! sparsity of A) ! @example ! @group ! N = 10; ! A = diag([1:N]); A = sparse(A); ! b = rand(N,1); ! @end group ! @end example ! @sc{Example 1:} Simplest use of @code{pcr} ! @example ! x = pcr(A, b) ! @end example ! @sc{Example 2:} @code{pcr} with a function which computes ! @code{@var{a} * @var{x}}. ! @example ! @group ! function y = applyA(x) ! y = [1:10]'.*x; ! endfunction ! x = pcr('applyA',b) ! @end group ! @end example ! @sc{Example 3:} Preconditioned iteration, with full diagnostics. The ! preconditioner (quite strange, because even the original matrix ! @var{a} is trivial) is defined as a function ! @example ! @group ! function y = applyM(x) ! K = floor(length(x)-2); ! y = x; ! y(1:K) = x(1:K)./[1:K]'; ! endfunction ! [x, flag, relres, iter, resvec] = ... ! pcr(A, b, [], [], 'applyM') ! semilogy([1:iter+1], resvec); ! @end group ! @end example ! @sc{Example 4:} Finally, a preconditioner which depends on a ! parameter @var{k}. @example ! @group ! function y = applyM(x, varargin) ! K = varargin@{1@}; ! y = x; y(1:K) = x(1:K)./[1:K]'; ! endfunction ! [x, flag, relres, iter, resvec] = ... ! pcr(A, b, [], [], 'applyM', [], 3) ! @end group @end example - - @sc{References} - - [1] W. Hackbusch, "Iterative Solution of Large Sparse Systems of - Equations", section 9.5.4; Springer, 1994 - - @seealso{sparse, pcg} @end deftypefn ! spalloc -*- texinfo -*- ! @deftypefn {Function File} {@var{s} =} spalloc (@var{r}, @var{c}, @var{nz}) ! Returns an empty sparse matrix of size @var{r}-by-@var{c}. As Octave ! resizes sparse matrices at the first opportunity, so that no additional ! space is needed, the argument @var{nz} is ignored. This function is ! provided only for compatibility reasons. ! ! It should be noted that this means that code like @example ! k = 5; ! nz = r * k; ! s = spalloc (r, c, nz) ! for j = 1:c ! idx = randperm (r); ! s (:, j) = [zeros(r - k, 1); rand(k, 1)] (idx); ! endfor @end example ! will reallocate memory at each step. It is therefore vitally important ! that code like this is vectorized as much as possible. ! @seealso{sparse, nzmax} @end deftypefn ! spconvert -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} spconvert (@var{m}) ! This function converts for a simple sparse matrix format easily ! produced by other programs into Octave's internal sparse format. The ! input @var{x} is either a 3 or 4 column real matrix, containing ! the row, column, real and imaginary parts of the elements of the ! sparse matrix. An element with a zero real and imaginary part can ! be used to force a particular matrix size. @end deftypefn ! spdiags -*- texinfo -*- ! @deftypefn {Function File} {[@var{b}, @var{c}] =} spdiags (@var{a}) ! @deftypefnx {Function File} {@var{b} =} spdiags (@var{a}, @var{c}) ! @deftypefnx {Function File} {@var{b} =} spdiags (@var{v}, @var{c}, @var{a}) ! @deftypefnx {Function File} {@var{b} =} spdiags (@var{v}, @var{c}, @var{m}, @var{n}) ! A generalization of the function @code{spdiag}. Called with a single ! input argument, the non-zero diagonals @var{c} of @var{A} are extracted. ! With two arguments the diagonals to extract are given by the vector ! @var{c}. ! The other two forms of @code{spdiags} modify the input matrix by ! replacing the diagonals. They use the columns of @var{v} to replace ! the columns represented by the vector @var{c}. If the sparse matrix ! @var{a} is defined then the diagonals of this matrix are replaced. ! Otherwise a matrix of @var{m} by @var{n} is created with the ! diagonals given by @var{v}. ! Negative values of @var{c} representive diagonals below the main ! diagonal, and positive values of @var{c} diagonals above the main ! diagonal. ! For example ! @example ! @group ! spdiags (reshape (1:12, 4, 3), [-1 0 1], 5, 4) ! @result{} 5 10 0 0 ! 1 6 11 0 ! 0 2 7 12 ! 0 0 3 8 ! 0 0 0 4 ! @end group ! @end example ! @end deftypefn ! speye ! -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} speye (@var{m}) ! @deftypefnx {Function File} {@var{y} =} speye (@var{m}, @var{n}) ! @deftypefnx {Function File} {@var{y} =} speye (@var{sz}) ! Returns a sparse identity matrix. This is significantly more ! efficient than @code{sparse (eye (@var{m}))} as the full matrix ! is not constructed. ! Called with a single argument a square matrix of size @var{m} by ! @var{m} is created. Otherwise a matrix of @var{m} by @var{n} is ! created. If called with a single vector argument, this argument ! is taken to be the size of the matrix to create. ! @end deftypefn ! spfun ! -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} spfun (@var{f},@var{x}) ! Compute @code{f(@var{x})} for the non-zero values of @var{x}. ! This results in a sparse matrix with the same structure as ! @var{x}. The function @var{f} can be passed as a string, a ! function handle or an inline function. ! @end deftypefn ! sphcat ! -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} sphcat (@var{a1}, @var{a2}, @dots{}, @var{aN}) ! Return the horizontal concatenation of sparse matrices. This function ! is obselete and @code{horzcat} should be used. ! @seealso {spvcat, vertcat, horzcat, cat} ! @end deftypefn ! spones ! -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} spones (@var{x}) ! Replace the non-zero entries of @var{x} with ones. This creates a ! sparse matrix with the same structure as @var{x}. ! @end deftypefn ! sprand ! -*- texinfo -*- ! @deftypefn {Function File} {} sprand (@var{m}, @var{n}, @var{d}) ! @deftypefnx {Function File} {} sprand (@var{s}) ! Generate a random sparse matrix. The size of the matrix will be ! @var{m} by @var{n}, with a density of values given by @var{d}. ! @var{d} should be between 0 and 1. Values will be uniformly ! distributed between 0 and 1. ! Note: sometimes the actual density may be a bit smaller than @var{d}. ! This is unlikely to happen for large really sparse matrices. ! If called with a single matrix argument, a random sparse matrix is ! generated wherever the matrix @var{S} is non-zero. ! @seealso{sprandn} ! @end deftypefn ! sprandn ! -*- texinfo -*- ! @deftypefn {Function File} {} sprandn (@var{m}, @var{n}, @var{d}) ! @deftypefnx {Function File} {} sprandn (@var{s}) ! Generate a random sparse matrix. The size of the matrix will be ! @var{m} by @var{n}, with a density of values given by @var{d}. ! @var{d} should be between 0 and 1. Values will be normally ! distributed with mean of zero and variance 1. ! Note: sometimes the actual density may be a bit smaller than @var{d}. ! This is unlikely to happen for large really sparse matrices. ! If called with a single matrix argument, a random sparse matrix is ! generated wherever the matrix @var{S} is non-zero. ! @seealso{sprand} ! @end deftypefn ! sprandsym ! -*- texinfo -*- ! @deftypefn {Function File} {} sprandsym (@var{n}, @var{d}) ! @deftypefnx {Function File} {} sprandsym (@var{s}) ! Generate a symmetric random sparse matrix. The size of the matrix will be ! @var{n} by @var{n}, with a density of values given by @var{d}. ! @var{d} should be between 0 and 1. Values will be normally ! distributed with mean of zero and variance 1. ! Note: sometimes the actual density may be a bit smaller than @var{d}. ! This is unlikely to happen for large really sparse matrices. ! If called with a single matrix argument, a random sparse matrix is ! generated wherever the matrix @var{S} is non-zero in its lower ! triangular part. ! @seealso{sprand, sprandn} ! @end deftypefn ! spstats ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{count}, @var{mean}, @var{var}] =} spstats (@var{s}) ! @deftypefnx {Function File} {[@var{count}, @var{mean}, @var{var}] =} spstats (@var{s}, @var{j}) ! Return the stats for the non-zero elements of the sparse matrix @var{s}. ! @var{count} is the number of non-zeros in each column, @var{mean} ! is the mean of the non-zeros in each column, and @var{var} is the ! variance of the non-zeros in each column. ! Called with two input arguments, if @var{s} is the data and @var{j} ! is the bin number for the data, compute the stats for each bin. In ! this case, bins can contain data values of zero, whereas with ! @code{spstats (@var{s})} the zeros may disappear. ! @end deftypefn ! spvcat ! -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} spvcat (@var{a1}, @var{a2}, @dots{}, @var{aN}) ! Return the vertical concatenation of sparse matrices. This function ! is obselete and @code{vertcat} should be used ! @seealso{sphcat, vertcat, horzcat, cat} ! @end deftypefn ! spy ! -*- texinfo -*- ! @deftypefn {Function File} {} spy (@var{x}) ! @deftypefnx {Function File} {} spy (@dots{}, @var{markersize}) ! @deftypefnx {Function File} {} spy (@dots{}, @var{LineSpec}) ! Plot the sparsity pattern of the sparse matrix @var{x}. If the argument ! @var{markersize} is given as an scalar value, it is used to determine the ! point size in the plot. If the string @var{LineSpec} is given it is ! passed to @code{plot} and determines the appearance of the plot. ! @seealso{plot} ! @end deftypefn ! treeplot ! -*- texinfo -*- ! @deftypefn {Function File} {} treeplot (@var{Tree}) ! @deftypefnx {Function File} {} treeplot (@var{Tree}, @var{LineStyle}, @var{EdgeStyle}) ! Produces a graph of tree or forest. The first argument is vector of ! predecessors, optional parameters @var{LineStyle} and @var{EdgeStyle} ! define the output style. The complexity of the algorithm is O(n) in ! terms of is time and memory requirements. ! @seealso{etreeplot, gplot} ! @end deftypefn ! bessel ! -*- texinfo -*- ! @deftypefn {Loadable Function} {[@var{j}, @var{ierr}] =} besselj (@var{alpha}, @var{x}, @var{opt}) ! @deftypefnx {Loadable Function} {[@var{y}, @var{ierr}] =} bessely (@var{alpha}, @var{x}, @var{opt}) ! @deftypefnx {Loadable Function} {[@var{i}, @var{ierr}] =} besseli (@var{alpha}, @var{x}, @var{opt}) ! @deftypefnx {Loadable Function} {[@var{k}, @var{ierr}] =} besselk (@var{alpha}, @var{x}, @var{opt}) ! @deftypefnx {Loadable Function} {[@var{h}, @var{ierr}] =} besselh (@var{alpha}, @var{k}, @var{x}, @var{opt}) ! Compute Bessel or Hankel functions of various kinds: ! @table @code ! @item besselj ! Bessel functions of the first kind. ! @item bessely ! Bessel functions of the second kind. ! @item besseli ! Modified Bessel functions of the first kind. ! @item besselk ! Modified Bessel functions of the second kind. ! @item besselh ! Compute Hankel functions of the first (@var{k} = 1) or second (@var{k} ! = 2) kind. ! @end table ! If the argument @var{opt} is supplied, the result is scaled by the ! @code{exp (-I*@var{x})} for @var{k} = 1 or @code{exp (I*@var{x})} for ! @var{k} = 2. ! If @var{alpha} is a scalar, the result is the same size as @var{x}. ! If @var{x} is a scalar, the result is the same size as @var{alpha}. ! If @var{alpha} is a row vector and @var{x} is a column vector, the ! result is a matrix with @code{length (@var{x})} rows and ! @code{length (@var{alpha})} columns. Otherwise, @var{alpha} and ! @var{x} must conform and the result will be the same size. ! The value of @var{alpha} must be real. The value of @var{x} may be ! complex. ! If requested, @var{ierr} contains the following status information ! and is the same size as the result. ! @enumerate 0 ! @item ! Normal return. ! @item ! Input error, return @code{NaN}. ! @item ! Overflow, return @code{Inf}. ! @item ! Loss of significance by argument reduction results in less than ! half of machine accuracy. ! @item ! Complete loss of significance by argument reduction, return @code{NaN}. ! @item ! Error---no computation, algorithm termination condition not met, ! return @code{NaN}. ! @end enumerate ! @end deftypefn ! beta ! -*- texinfo -*- ! @deftypefn {Mapping Function} {} beta (@var{a}, @var{b}) ! Return the Beta function, ! @iftex ! @tex ! $$ ! B (a, b) = {\Gamma (a) \Gamma (b) \over \Gamma (a + b)}. ! $$ ! @end tex ! @end iftex ! @ifinfo @example ! beta (a, b) = gamma (a) * gamma (b) / gamma (a + b). @end example ! @end ifinfo ! @end deftypefn ! betai ! -*- texinfo -*- ! @deftypefn {Function File} {} betai (@var{a}, @var{b}, @var{x}) ! This function is provided for compatibility with older versions of ! Octave. New programs should use betainc instead. ! @code{betai (@var{a}, @var{b}, @var{x})} is the same as @code{betainc ! (@var{x}, @var{a}, @var{b})}. ! @end deftypefn ! betaln ! -*- texinfo -*- ! @deftypefn {Mapping Function} {} betaln (@var{a}, @var{b}) ! Return the log of the Beta function, @iftex @tex ! $$ ! B (a, b) = \log {\Gamma (a) \Gamma (b) \over \Gamma (a + b)}. ! $$ @end tex @end iftex - @ifinfo @example ! betaln (a, b) = gammaln (a) + gammaln (b) - gammaln (a + b) @end example ! @end ifinfo ! @seealso{beta, betai, gammaln} ! @end deftypefn ! erfinv ! -*- texinfo -*- ! @deftypefn {Mapping Function} {} erfinv (@var{z}) ! Computes the inverse of the error function. ! @seealso{erf, erfc} ! @end deftypefn ! factor ! -*- texinfo -*- ! @deftypefn {Function File} {@var{p} =} factor (@var{q}) ! @deftypefnx {Function File} {[@var{p}, @var{n}] =} factor (@var{q}) ! Return prime factorization of @var{q}. That is @code{prod (@var{p}) ! == @var{q}}. If @code{@var{q} == 1}, returns 1. ! With two output arguments, returns the unique primes @var{p} and ! their multiplicities. That is @code{prod (@var{p} .^ @var{n}) == ! @var{q}}. @end deftypefn ! factorial ! -*- texinfo -*- ! @deftypefn {Function File} {} factorial (@var{n}) ! Return the factorial of @var{n}. If @var{n} is scalar, this is ! equivalent to @code{prod (1:@var{n})}. If @var{n} is an array, ! the factorial of the elements of the array are returned. ! @end deftypefn ! gammai -*- texinfo -*- ! @deftypefn {Function File} {} gammai (@var{a}, @var{x}) ! This function is provided for compatibility with older versions of ! Octave. New programs should use @code{gammainc} instead. ! @code{gammai (@var{a}, @var{x})} is the same as @code{gammainc ! (@var{x}, @var{a})}. ! @end deftypefn ! isprime ! -*- texinfo -*- ! @deftypefn {Function File} {} isprime (@var{n}) ! Return true if @var{n} is a prime number, false otherwise. ! Something like the following is much faster if you need to test a lot ! of small numbers: ! @example ! @var{t} = ismember (@var{n}, primes (max (@var{n} (:)))); ! @end example ! If max(n) is very large, then you should be using special purpose ! factorization code. ! @seealso{primes, factor, gcd, lcm} @end deftypefn ! legendre -*- texinfo -*- ! @deftypefn {Function File} {@var{L} =} legendre (@var{n}, @var{X}) ! Legendre Function of degree n and order m ! where all values for m = 0..@var{n} are returned. ! @var{n} must be a scalar in the range [0..255]. ! The return value has one dimension more than @var{x}. ! @example ! The Legendre Function of degree n and order m ! @group ! m m 2 m/2 d^m ! P(x) = (-1) * (1-x ) * ---- P (x) ! n dx^m n ! @end group ! with: ! Legendre polynomial of degree n ! @group ! 1 d^n 2 n ! P (x) = ------ [----(x - 1) ] ! n 2^n n! dx^n ! @end group ! legendre(3,[-1.0 -0.9 -0.8]) returns the matrix ! @group ! x | -1.0 | -0.9 | -0.8 ! ------------------------------------ ! m=0 | -1.00000 | -0.47250 | -0.08000 ! m=1 | 0.00000 | -1.99420 | -1.98000 ! m=2 | 0.00000 | -2.56500 | -4.32000 ! m=3 | 0.00000 | -1.24229 | -3.24000 ! @end group @end example @end deftypefn ! log2 -*- texinfo -*- ! @deftypefn {Mapping Function} {} log2 (@var{x}) ! @deftypefnx {Mapping Function} {[@var{f}, @var{e}] =} log2 (@var{x}) ! Compute the base-2 logarithm of @var{x}. With two outputs, returns ! @var{f} and @var{e} such that @iftex @tex ! $1/2 <= |f| < 1$ and $x = f \cdot 2^e$. @end tex @end iftex @ifinfo ! 1/2 <= abs(f) < 1 and x = f * 2^e. @end ifinfo ! @seealso{log, log10, logspace, exp} ! @end deftypefn ! nchoosek ! -*- texinfo -*- ! @deftypefn {Function File} {@var{c} =} nchoosek (@var{n}, @var{k}) ! Compute the binomial coefficient or all combinations of @var{n}. ! If @var{n} is a scalar then, calculate the binomial coefficient ! of @var{n} and @var{k}, defined as @iftex @tex ! $$ ! {n \choose k} = {n (n-1) (n-2) \cdots (n-k+1) \over k!} ! = {n! \over k! (n-k)!} ! $$ @end tex @end iftex @ifinfo - @example @group ! / \ ! | n | n (n-1) (n-2) ... (n-k+1) n! ! | | = ------------------------- = --------- ! | k | k! k! (n-k)! ! \ / @end group @end example @end ifinfo ! If @var{n} is a vector generate all combinations of the elements ! of @var{n}, taken @var{k} at a time, one row per combination. The ! resulting @var{c} has size @code{[nchoosek (length (@var{n}), ! @var{k}), @var{k}]}. ! @seealso{bincoeff} @end deftypefn ! perms -*- texinfo -*- ! @deftypefn {Function File} {} perms (@var{v}) ! ! Generate all permutations of @var{v}, one row per permutation. The ! result has size @code{factorial (@var{n}) * @var{n}}, where @var{n} ! is the length of @var{v}. ! ! As an example, @code{perms([1, 2, 3])} returns the matrix @example ! 1 2 3 ! 2 1 3 ! 1 3 2 ! 2 3 1 ! 3 1 2 ! 3 2 1 @end example @end deftypefn ! pow2 -*- texinfo -*- ! @deftypefn {Mapping Function} {} pow2 (@var{x}) ! @deftypefnx {Mapping Function} {} pow2 (@var{f}, @var{e}) ! With one argument, computes @iftex @tex ! $2^x$ @end tex @end iftex @ifinfo ! 2 .^ x @end ifinfo ! for each element of @var{x}. With two arguments, returns @iftex @tex ! $f \cdot 2^e$. @end tex @end iftex @ifinfo ! f .* (2 .^ e). @end ifinfo ! @seealso{nextpow2} ! @end deftypefn ! primes ! -*- texinfo -*- ! @deftypefn {Function File} {} primes (@var{n}) ! ! Return all primes up to @var{n}. ! ! Note that if you need a specific number of primes, you can use the ! fact the distance from one prime to the next is on average ! proportional to the logarithm of the prime. Integrating, you find ! that there are about @math{k} primes less than @math{k \log ( 5 k )}. ! ! The algorithm used is called the Sieve of Erastothenes. ! @end deftypefn ! hadamard ! -*- texinfo -*- ! @deftypefn {Function File} {} hadamard (@var{n}) ! Construct a Hadamard matrix @var{Hn} of size @var{n}-by-@var{n}. The ! size @var{n} must be of the form @code{2 ^ @var{k} * @var{p}} in which ! @var{p} is one of 1, 12, 20 or 28. The returned matrix is normalized, ! meaning @code{Hn(:,1) == 1} and @code{H(1,:) == 1}. ! Some of the properties of Hadamard matrices are: ! @itemize @bullet ! @item ! @code{kron (@var{Hm}, @var{Hn})} is a Hadamard matrix of size ! @var{m}-by-@var{n}. ! @item ! @code{Hn * Hn' == @var{n} * eye (@var{n})}. ! @item ! The rows of @var{Hn} are orthogonal. ! @item ! @code{det (@var{A}) <= det (@var{Hn})} for all @var{A} with ! @code{abs (@var{A} (@var{i}, @var{j})) <= 1}. ! @item ! Multiply any row or column by -1 and still have a Hadamard matrix. @end itemize ! @end deftypefn ! hankel ! -*- texinfo -*- ! @deftypefn {Function File} {} hankel (@var{c}, @var{r}) ! Return the Hankel matrix constructed given the first column @var{c}, and ! (optionally) the last row @var{r}. If the last element of @var{c} is ! not the same as the first element of @var{r}, the last element of ! @var{c} is used. If the second argument is omitted, it is assumed to ! be a vector of zeros with the same size as @var{c}. ! A Hankel matrix formed from an m-vector @var{c}, and an n-vector ! @var{r}, has the elements @iftex @tex ! $$ ! H (i, j) = \cases{c_{i+j-1},&$i+j-1\le m$;\cr r_{i+j-m},&otherwise.\cr} ! $$ @end tex @end iftex @ifinfo ! ! @example ! @group ! H(i,j) = c(i+j-1), i+j-1 <= m; ! H(i,j) = r(i+j-m), otherwise ! @end group ! @end example @end ifinfo ! @seealso{vander, sylvester_matrix, hilb, invhilb, toeplitz} ! @end deftypefn ! hilb ! -*- texinfo -*- ! @deftypefn {Function File} {} hilb (@var{n}) ! Return the Hilbert matrix of order @var{n}. The @iftex @tex ! $i,\,j$ @end tex @end iftex @ifinfo ! i, j @end ifinfo ! element of a Hilbert matrix is defined as @iftex @tex ! $$ ! H (i, j) = {1 \over (i + j - 1)} ! $$ @end tex @end iftex @ifinfo ! ! @example ! H (i, j) = 1 / (i + j - 1) ! @end example @end ifinfo ! @seealso{hankel, vander, sylvester_matrix, invhilb, toeplitz} ! @end deftypefn ! invhilb ! -*- texinfo -*- ! @deftypefn {Function File} {} invhilb (@var{n}) ! Return the inverse of a Hilbert matrix of order @var{n}. This can be ! computed exactly using @tex ! $$\eqalign{ ! A_{ij} &= -1^{i+j} (i+j-1) ! \left( \matrix{n+i-1 \cr n-j } \right) ! \left( \matrix{n+j-1 \cr n-i } \right) ! \left( \matrix{i+j-2 \cr i-2 } \right)^2 \cr ! &= { p(i)p(j) \over (i+j-1) } ! }$$ ! where ! $$ ! p(k) = -1^k \left( \matrix{ k+n-1 \cr k-1 } \right) ! \left( \matrix{ n \cr k } \right) ! $$ @end tex @ifinfo ! @example ! ! (i+j) /n+i-1\ /n+j-1\ /i+j-2\ 2 ! A(i,j) = -1 (i+j-1)( )( ) ( ) ! \ n-j / \ n-i / \ i-2 / ! ! = p(i) p(j) / (i+j-1) ! ! @end example ! where ! @example ! k /k+n-1\ /n\ ! p(k) = -1 ( ) ( ) ! \ k-1 / \k/ ! @end example @end ifinfo ! The validity of this formula can easily be checked by expanding ! the binomial coefficients in both formulas as factorials. It can ! be derived more directly via the theory of Cauchy matrices: ! see J. W. Demmel, Applied Numerical Linear Algebra, page 92. ! ! Compare this with the numerical calculation of @code{inverse (hilb (n))}, ! which suffers from the ill-conditioning of the Hilbert matrix, and the ! finite precision of your computer's floating point arithmetic. ! @seealso{hankel, vander, sylvester_matrix, hilb, toeplitz} ! @end deftypefn ! magic ! -*- texinfo -*- ! @deftypefn {Function File} {} magic (@var{n}) ! ! Create an @var{n}-by-@var{n} magic square. Note that @code{magic ! (@var{2})} is undefined since there is no 2-by-2 magic square. ! ! @end deftypefn ! pascal ! -*- texinfo -*- ! @deftypefn {Function File} {} pascal (@var{n}, @var{t}) ! ! Return the Pascal matrix of order @var{n} if @code{@var{t} = 0}. ! @var{t} defaults to 0. Return lower triangular Cholesky factor of ! the Pascal matrix if @code{@var{t} = 1}. This matrix is its own ! inverse, that is @code{pascal (@var{n}, 1) ^ 2 == eye (@var{n})}. ! If @code{@var{t} = 2}, return a transposed and permuted version of ! @code{pascal (@var{n}, 1)}, which is the cube-root of the identity ! matrix. That is @code{pascal (@var{n}, 2) ^ 3 == eye (@var{n})}. ! ! @seealso{hankel, vander, sylvester_matrix, hilb, invhilb, toeplitz ! hadamard, wilkinson, compan, rosser} ! @end deftypefn ! rosser ! -*- texinfo -*- ! @deftypefn {Function File} {} rosser () ! ! Returns the Rosser matrix. This is a difficult test case used to test ! eigenvalue algorithms. ! @seealso{hankel, vander, sylvester_matrix, hilb, invhilb, toeplitz ! hadamard, wilkinson, compan, pascal} ! @end deftypefn ! sylvester_matrix ! -*- texinfo -*- ! @deftypefn {Function File} {} sylvester_matrix (@var{k}) ! Return the Sylvester matrix of order @iftex @tex ! $n = 2^k$. @end tex @end iftex @ifinfo ! n = 2^k. @end ifinfo ! @seealso{hankel, vander, hilb, invhilb, toeplitz} ! @end deftypefn ! toeplitz ! -*- texinfo -*- ! @deftypefn {Function File} {} toeplitz (@var{c}, @var{r}) ! Return the Toeplitz matrix constructed given the first column @var{c}, ! and (optionally) the first row @var{r}. If the first element of @var{c} ! is not the same as the first element of @var{r}, the first element of ! @var{c} is used. If the second argument is omitted, the first row is ! taken to be the same as the first column. ! A square Toeplitz matrix has the form: @iftex @tex ! $$ ! \left[\matrix{c_0 & r_1 & r_2 & \cdots & r_n\cr ! c_1 & c_0 & r_1 & \cdots & r_{n-1}\cr ! c_2 & c_1 & c_0 & \cdots & r_{n-2}\cr ! \vdots & \vdots & \vdots & \ddots & \vdots\cr ! c_n & c_{n-1} & c_{n-2} & \ldots & c_0}\right] ! $$ @end tex @end iftex @ifinfo ! ! @example ! @group ! c(0) r(1) r(2) ... r(n) ! c(1) c(0) r(1) ... r(n-1) ! c(2) c(1) c(0) ... r(n-2) ! . , , . . ! . , , . . ! . , , . . ! c(n) c(n-1) c(n-2) ... c(0) ! @end group ! @end example @end ifinfo ! @seealso{hankel, vander, sylvester_matrix, hilb, invhilb} @end deftypefn ! vander -*- texinfo -*- ! @deftypefn {Function File} {} vander (@var{c}) ! Return the Vandermonde matrix whose next to last column is @var{c}. ! ! A Vandermonde matrix has the form: @iftex @tex ! $$ ! \left[\matrix{c_1^{n-1} & \cdots & c_1^2 & c_1 & 1 \cr ! c_2^{n-1} & \cdots & c_2^2 & c_2 & 1 \cr ! \vdots & \ddots & \vdots & \vdots & \vdots \cr ! c_n^{n-1} & \cdots & c_n^2 & c_n & 1 }\right] ! $$ @end tex @end iftex @ifinfo ! ! @example ! @group ! c(1)^(n-1) ... c(1)^2 c(1) 1 ! c(2)^(n-1) ... c(2)^2 c(2) 1 ! . . . . . ! . . . . . ! . . . . . ! c(n)^(n-1) ... c(n)^2 c(n) 1 ! @end group ! @end example @end ifinfo ! @seealso{hankel, sylvester_matrix, hilb, invhilb, toeplitz} ! @end deftypefn ! wilkinson ! -*- texinfo -*- ! @deftypefn {Function File} {} wilkinson (@var{n}) ! Return the Wilkinson matrix of order @var{n}. ! @seealso{hankel, vander, sylvester_matrix, hilb, invhilb, toeplitz ! hadamard, rosser, compan, pascal} ! @end deftypefn ! center ! -*- texinfo -*- ! @deftypefn {Function File} {} center (@var{x}) ! @deftypefnx {Function File} {} center (@var{x}, @var{dim}) ! If @var{x} is a vector, subtract its mean. ! If @var{x} is a matrix, do the above for each column. ! If the optional argument @var{dim} is given, perform the above ! operation along this dimension ! @end deftypefn ! cloglog ! -*- texinfo -*- ! @deftypefn {Function File} {} cloglog (@var{x}) ! Return the complementary log-log function of @var{x}, defined as @iftex @tex ! $$ ! {\rm cloglog}(x) = - \log (- \log (x)) ! $$ @end tex ! @end iftex ! @ifnottex ! @example ! cloglog(x) = - log (- log (@var{x})) ! @end example ! @end ifnottex ! @end deftypefn ! cor ! -*- texinfo -*- ! @deftypefn {Function File} {} cor (@var{x}, @var{y}) ! Compute correlation. ! ! The (@var{i}, @var{j})-th entry of @code{cor (@var{x}, @var{y})} is ! the correlation between the @var{i}-th variable in @var{x} and the ! @var{j}-th variable in @var{y}. ! @iftex @tex ! $$ ! {\rm corrcoef}(x,y) = {{\rm cov}(x,y) \over {\rm std}(x) {\rm std}(y)} ! $$ @end tex @end iftex ! @ifnottex ! @example ! corrcoef(x,y) = cov(x,y)/(std(x)*std(y)) ! @end example ! @end ifnottex ! ! For matrices, each row is an observation and each column a variable; ! vectors are always observations and may be row or column vectors. ! ! @code{cor (@var{x})} is equivalent to @code{cor (@var{x}, @var{x})}. ! ! Note that the @code{corrcoef} function does the same as @code{cor}. @end deftypefn ! corrcoef -*- texinfo -*- ! @deftypefn {Function File} {} corrcoef (@var{x}, @var{y}) ! Compute correlation. ! ! If each row of @var{x} and @var{y} is an observation and each column is ! a variable, the (@var{i}, @var{j})-th entry of ! @code{corrcoef (@var{x}, @var{y})} is the correlation between the ! @var{i}-th variable in @var{x} and the @var{j}-th variable in @var{y}. ! @iftex @tex ! $$ ! {\rm corrcoef}(x,y) = {{\rm cov}(x,y) \over {\rm std}(x) {\rm std}(y)} ! $$ @end tex @end iftex ! @ifnottex ! @example ! corrcoef(x,y) = cov(x,y)/(std(x)*std(y)) ! @end example ! @end ifnottex ! ! If called with one argument, compute @code{corrcoef (@var{x}, @var{x})}. ! @end deftypefn ! cov ! -*- texinfo -*- ! @deftypefn {Function File} {} cov (@var{x}, @var{y}) ! Compute covariance. ! If each row of @var{x} and @var{y} is an observation and each column is ! a variable, the (@var{i}, @var{j})-th entry of ! @code{cov (@var{x}, @var{y})} is the covariance between the @var{i}-th ! variable in @var{x} and the @var{j}-th variable in @var{y}. @iftex @tex ! $$ ! \sigma_{ij} = {1 \over N-1} \sum_{i=1}^N (x_i - \bar{x})(y_i - \bar{y}) ! $$ ! where $\bar{x}$ and $\bar{y}$ are the mean values of $x$ and $y$. @end tex @end iftex ! If called with one argument, compute @code{cov (@var{x}, @var{x})}. ! @end deftypefn ! cut ! -*- texinfo -*- ! @deftypefn {Function File} {} cut (@var{x}, @var{breaks}) ! Create categorical data out of numerical or continuous data by ! cutting into intervals. ! ! If @var{breaks} is a scalar, the data is cut into that many ! equal-width intervals. If @var{breaks} is a vector of break points, ! the category has @code{length (@var{breaks}) - 1} groups. ! ! The returned value is a vector of the same size as @var{x} telling ! which group each point in @var{x} belongs to. Groups are labelled ! from 1 to the number of groups; points outside the range of ! @var{breaks} are labelled by @code{NaN}. @end deftypefn ! gls -*- texinfo -*- ! @deftypefn {Function File} {[@var{beta}, @var{v}, @var{r}] =} gls (@var{y}, @var{x}, @var{o}) ! Generalized least squares estimation for the multivariate model @iftex @tex ! $y = x b + e$ ! with $\bar{e} = 0$ and cov(vec($e$)) = $(s^2)o$, @end tex @end iftex @ifinfo ! @math{y = x b + e} with @math{mean (e) = 0} and ! @math{cov (vec (e)) = (s^2) o}, @end ifinfo ! where @iftex @tex ! $y$ is a $t \times p$ matrix, $x$ is a $t \times k$ matrix, $b$ is a $k ! \times p$ matrix, $e$ is a $t \times p$ matrix, and $o$ is a $tp \times ! tp$ matrix. @end tex @end iftex @ifinfo ! @math{y} is a @math{t} by @math{p} matrix, @math{x} is a @math{t} by ! @math{k} matrix, @math{b} is a @math{k} by @math{p} matrix, @math{e} ! is a @math{t} by @math{p} matrix, and @math{o} is a @math{t p} by ! @math{t p} matrix. @end ifinfo ! @noindent ! Each row of @var{y} and @var{x} is an observation and each column a ! variable. The return values @var{beta}, @var{v}, and @var{r} are ! defined as follows. ! @table @var ! @item beta ! The GLS estimator for @math{b}. ! ! @item v ! The GLS estimator for @math{s^2}. ! ! @item r ! The matrix of GLS residuals, @math{r = y - x beta}. @end table - @end deftypefn - iqr - -*- texinfo -*- - @deftypefn {Function File} {} iqr (@var{x}, @var{dim}) - If @var{x} is a vector, return the interquartile range, i.e., the - difference between the upper and lower quartile, of the input data. ! If @var{x} is a matrix, do the above for first non singleton ! dimension of @var{x}. If the option @var{dim} argument is given, ! then operate along this dimension. @end deftypefn ! kendall -*- texinfo -*- ! @deftypefn {Function File} {} kendall (@var{x}, @var{y}) ! Compute Kendall's @var{tau} for each of the variables specified by ! the input arguments. ! ! For matrices, each row is an observation and each column a variable; ! vectors are always observations and may be row or column vectors. ! ! @code{kendall (@var{x})} is equivalent to @code{kendall (@var{x}, ! @var{x})}. ! ! For two data vectors @var{x}, @var{y} of common length @var{n}, ! Kendall's @var{tau} is the correlation of the signs of all rank ! differences of @var{x} and @var{y}; i.e., if both @var{x} and ! @var{y} have distinct entries, then ! @iftex @tex ! $$ \tau = {1 \over n(n-1)} \sum_{i,j} {\rm sign}(q_i-q_j) {\rm sign}(r_i-r_j) $$ @end tex @end iftex @ifinfo ! @example ! 1 ! tau = ------- SUM sign (q(i) - q(j)) * sign (r(i) - r(j)) ! n (n-1) i,j ! @end example @end ifinfo ! @noindent ! in which the @iftex @tex ! $q_i$ and $r_i$ @end tex @end iftex @ifinfo ! @var{q}(@var{i}) and @var{r}(@var{i}) @end ifinfo ! are the ranks of ! @var{x} and @var{y}, respectively. ! ! If @var{x} and @var{y} are drawn from independent distributions, ! Kendall's @var{tau} is asymptotically normal with mean 0 and variance @iftex @tex ! ${2 (2n+5) \over 9n(n-1)}$. @end tex @end iftex ! @ifnottex ! @code{(2 * (2@var{n}+5)) / (9 * @var{n} * (@var{n}-1))}. ! @end ifnottex @end deftypefn ! kurtosis -*- texinfo -*- ! @deftypefn {Function File} {} kurtosis (@var{x}, @var{dim}) ! If @var{x} is a vector of length @math{N}, return the kurtosis @iftex @tex ! $$ ! {\rm kurtosis} (x) = {1\over N \sigma(x)^4} \sum_{i=1}^N (x_i-\bar{x})^4 - 3 ! $$ ! where $\bar{x}$ is the mean value of $x$. @end tex @end iftex @ifinfo ! ! @example ! kurtosis (x) = N^(-1) std(x)^(-4) sum ((x - mean(x)).^4) - 3 ! @end example @end ifinfo ! ! @noindent ! of @var{x}. If @var{x} is a matrix, return the kurtosis over the ! first non-singleton dimension. The optional argument @var{dim} ! can be given to force the kurtosis to be given over that ! dimension. ! @end deftypefn ! logit ! -*- texinfo -*- ! @deftypefn {Function File} {} logit (@var{p}) ! For each component of @var{p}, return the logit of @var{p} defined as ! @iftex ! @tex ! $$ ! {\rm logit}(p) = \log\Big({p \over 1-p}\Big) ! $$ ! @end tex ! @end iftex ! @ifnottex ! @example ! logit(@var{p}) = log (@var{p} / (1-@var{p})) ! @end example ! @end ifnottex ! @end deftypefn ! mahalanobis ! -*- texinfo -*- ! @deftypefn {Function File} {} mahalanobis (@var{x}, @var{y}) ! Return the Mahalanobis' D-square distance between the multivariate ! samples @var{x} and @var{y}, which must have the same number of ! components (columns), but may have a different number of observations ! (rows). ! @end deftypefn ! mean ! -*- texinfo -*- ! @deftypefn {Function File} {} mean (@var{x}, @var{dim}, @var{opt}) ! If @var{x} is a vector, compute the mean of the elements of @var{x} @iftex @tex ! $$ {\rm mean}(x) = \bar{x} = {1\over N} \sum_{i=1}^N x_i $$ @end tex @end iftex @ifinfo ! ! @example ! mean (x) = SUM_i x(i) / N ! @end example @end ifinfo ! If @var{x} is a matrix, compute the mean for each column and return them ! in a row vector. ! ! With the optional argument @var{opt}, the kind of mean computed can be ! selected. The following options are recognized: ! ! @table @code ! @item "a" ! Compute the (ordinary) arithmetic mean. This is the default. ! ! @item "g" ! Compute the geometric mean. ! ! @item "h" ! Compute the harmonic mean. ! @end table ! If the optional argument @var{dim} is supplied, work along dimension ! @var{dim}. - Both @var{dim} and @var{opt} are optional. If both are supplied, - either may appear first. - @end deftypefn - meansq - -*- texinfo -*- - @deftypefn {Function File} {} meansq (@var{x}) - @deftypefnx {Function File} {} meansq (@var{x}, @var{dim}) - For vector arguments, return the mean square of the values. - For matrix arguments, return a row vector containing the mean square - of each column. With the optional @var{dim} argument, returns the - mean squared of the values along this dimension. - @end deftypefn - median - -*- texinfo -*- - @deftypefn {Function File} {} median (@var{x}, @var{dim}) - If @var{x} is a vector, compute the median value of the elements of - @var{x}. If the elements of @var{x} are sorted, the median is defined - as @iftex @tex ! $$ ! {\rm median} (x) = ! \cases{x(\lceil N/2\rceil), & $N$ odd;\cr ! (x(N/2)+x(N/2+1))/2, & $N$ even.} ! $$ @end tex @end iftex @ifinfo - @example @group ! x(ceil(N/2)), N odd ! median(x) = ! (x(N/2) + x((N/2)+1))/2, N even @end group @end example @end ifinfo - If @var{x} is a matrix, compute the median value for each - column and return them in a row vector. If the optional @var{dim} - argument is given, operate along this dimension. - @seealso{std, mean} - @end deftypefn - mode - -*- texinfo -*- - @deftypefn {Function File} {[@var{m}, @var{f}, @var{c}] =} mode (@var{x}, @var{dim}) - Count the most frequently appearing value. @code{mode} counts the - frequency along the first non-singleton dimension and if two or more - values have te same frequency returns the smallest of the two in - @var{m}. The dimension along which to count can be specified by the - @var{dim} parameter. - - The variable @var{f} counts the frequency of each of the most frequently - occurring elements. The cell array @var{c} contains all of the elements - with the maximum frequency . - @end deftypefn - moment - -*- texinfo -*- - @deftypefn {Function File} {} moment (@var{x}, @var{p}, @var{opt}, @var{dim}) - If @var{x} is a vector, compute the @var{p}-th moment of @var{x}. ! If @var{x} is a matrix, return the row vector containing the ! @var{p}-th moment of each column. ! With the optional string opt, the kind of moment to be computed can ! be specified. If opt contains @code{"c"} or @code{"a"}, central ! and/or absolute moments are returned. For example, @example ! moment (x, 3, "ac") @end example ! @noindent ! computes the third central absolute moment of @var{x}. ! If the optional argument @var{dim} is supplied, work along dimension ! @var{dim}. ! @end deftypefn ! ols ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{beta}, @var{sigma}, @var{r}] =} ols (@var{y}, @var{x}) ! Ordinary least squares estimation for the multivariate model @iftex @tex ! $y = x b + e$ ! with ! $\bar{e} = 0$, and cov(vec($e$)) = kron ($s, I$) @end tex @end iftex @ifinfo ! @math{y = x b + e} with ! @math{mean (e) = 0} and @math{cov (vec (e)) = kron (s, I)}. @end ifinfo ! where @iftex @tex ! $y$ is a $t \times p$ matrix, $x$ is a $t \times k$ matrix, ! $b$ is a $k \times p$ matrix, and $e$ is a $t \times p$ matrix. @end tex @end iftex @ifinfo ! @math{y} is a @math{t} by @math{p} matrix, @math{x} is a @math{t} by ! @math{k} matrix, @math{b} is a @math{k} by @math{p} matrix, and ! @math{e} is a @math{t} by @math{p} matrix. @end ifinfo ! Each row of @var{y} and @var{x} is an observation and each column a ! variable. ! ! The return values @var{beta}, @var{sigma}, and @var{r} are defined as ! follows. ! ! @table @var ! @item beta ! The OLS estimator for @var{b}, @code{@var{beta} = pinv (@var{x}) * ! @var{y}}, where @code{pinv (@var{x})} denotes the pseudoinverse of ! @var{x}. ! @item sigma ! The OLS estimator for the matrix @var{s}, @example @group ! @var{sigma} = (@var{y}-@var{x}*@var{beta})' ! * (@var{y}-@var{x}*@var{beta}) ! / (@var{t}-rank(@var{x})) @end group @end example ! @item r ! The matrix of OLS residuals, @code{@var{r} = @var{y} - @var{x} * ! @var{beta}}. ! @end table ! @end deftypefn ! ppplot ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{p}, @var{y}] =} ppplot (@var{x}, @var{dist}, @var{params}) ! Perform a PP-plot (probability plot). ! ! If F is the CDF of the distribution @var{dist} with parameters ! @var{params} and @var{x} a sample vector of length @var{n}, the ! PP-plot graphs ordinate @var{y}(@var{i}) = F (@var{i}-th largest ! element of @var{x}) versus abscissa @var{p}(@var{i}) = (@var{i} - ! 0.5)/@var{n}. If the sample comes from F, the pairs will ! approximately follow a straight line. ! ! The default for @var{dist} is the standard normal distribution. The ! optional argument @var{params} contains a list of parameters of ! @var{dist}. For example, for a probability plot of the uniform ! distribution on [2,4] and @var{x}, use ! @example ! ppplot (x, "uniform", 2, 4) ! @end example ! ! @noindent ! @var{dist} can be any string for which a function @var{dist_cdf} ! that calculates the CDF of distribution @var{dist} exists. ! ! If no output arguments are given, the data are plotted directly. ! @end deftypefn ! probit ! -*- texinfo -*- ! @deftypefn {Function File} {} probit (@var{p}) ! For each component of @var{p}, return the probit (the quantile of the ! standard normal distribution) of @var{p}. ! @end deftypefn ! qqplot ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{q}, @var{s}] =} qqplot (@var{x}, @var{dist}, @var{params}) ! Perform a QQ-plot (quantile plot). ! ! If F is the CDF of the distribution @var{dist} with parameters ! @var{params} and G its inverse, and @var{x} a sample vector of length ! @var{n}, the QQ-plot graphs ordinate @var{s}(@var{i}) = @var{i}-th ! largest element of x versus abscissa @var{q}(@var{i}f) = G((@var{i} - ! 0.5)/@var{n}). ! ! If the sample comes from F except for a transformation of location ! and scale, the pairs will approximately follow a straight line. ! ! The default for @var{dist} is the standard normal distribution. The ! optional argument @var{params} contains a list of parameters of ! @var{dist}. For example, for a quantile plot of the uniform ! distribution on [2,4] and @var{x}, use ! @example ! qqplot (x, "uniform", 2, 4) @end example ! @noindent ! @var{dist} can be any string for which a function @var{dist_inv} ! that calculates the inverse CDF of distribution @var{dist} exists. ! ! If no output arguments are given, the data are plotted directly. ! @end deftypefn ! range ! -*- texinfo -*- ! @deftypefn {Function File} {} range (@var{x}) ! @deftypefnx {Function File} {} range (@var{x}, @var{dim}) ! If @var{x} is a vector, return the range, i.e., the difference ! between the maximum and the minimum, of the input data. ! ! If @var{x} is a matrix, do the above for each column of @var{x}. ! ! If the optional argument @var{dim} is supplied, work along dimension ! @var{dim}. ! @end deftypefn ! ranks ! -*- texinfo -*- ! @deftypefn {Function File} {} ranks (@var{x}, @var{dim}) ! If @var{x} is a vector, return the (column) vector of ranks of ! @var{x} adjusted for ties. ! If @var{x} is a matrix, do the above for along the first ! non-singleton dimension. If the optional argument @var{dim} is ! given, operate along this dimension. ! @end deftypefn ! run_count ! -*- texinfo -*- ! @deftypefn {Function File} {} run_count (@var{x}, @var{n}) ! Count the upward runs along the first non-singleton dimension of ! @var{x} of length 1, 2, @dots{}, @var{n}-1 and greater than or equal ! to @var{n}. If the optional argument @var{dim} is given operate ! along this dimension ! @end deftypefn ! skewness ! -*- texinfo -*- ! @deftypefn {Function File} {} skewness (@var{x}, @var{dim}) ! If @var{x} is a vector of length @math{n}, return the skewness @iftex @tex ! $$ ! {\rm skewness} (x) = {1\over N \sigma(x)^3} \sum_{i=1}^N (x_i-\bar{x})^3 ! $$ ! where $\bar{x}$ is the mean value of $x$. @end tex @end iftex @ifinfo - @example ! skewness (x) = N^(-1) std(x)^(-3) sum ((x - mean(x)).^3) @end example @end ifinfo ! ! @noindent ! of @var{x}. If @var{x} is a matrix, return the skewness along the ! first non-singleton dimension of the matrix. If the optional ! @var{dim} argument is given, operate along this dimension. @end deftypefn ! spearman -*- texinfo -*- ! @deftypefn {Function File} {} spearman (@var{x}, @var{y}) ! Compute Spearman's rank correlation coefficient @var{rho} for each of ! the variables specified by the input arguments. ! ! For matrices, each row is an observation and each column a variable; ! vectors are always observations and may be row or column vectors. ! ! @code{spearman (@var{x})} is equivalent to @code{spearman (@var{x}, ! @var{x})}. ! For two data vectors @var{x} and @var{y}, Spearman's @var{rho} is the ! correlation of the ranks of @var{x} and @var{y}. ! If @var{x} and @var{y} are drawn from independent distributions, ! @var{rho} has zero mean and variance @code{1 / (n - 1)}, and is ! asymptotically normally distributed. ! @end deftypefn ! statistics ! -*- texinfo -*- ! @deftypefn {Function File} {} statistics (@var{x}) ! If @var{x} is a matrix, return a matrix with the minimum, first ! quartile, median, third quartile, maximum, mean, standard deviation, ! skewness and kurtosis of the columns of @var{x} as its rows. ! If @var{x} is a vector, treat it as a column vector. ! @end deftypefn ! std ! -*- texinfo -*- ! @deftypefn {Function File} {} std (@var{x}) ! @deftypefnx {Function File} {} std (@var{x}, @var{opt}) ! @deftypefnx {Function File} {} std (@var{x}, @var{opt}, @var{dim}) ! If @var{x} is a vector, compute the standard deviation of the elements ! of @var{x}. @iftex @tex ! $$ ! {\rm std} (x) = \sigma (x) = \sqrt{{\sum_{i=1}^N (x_i - \bar{x})^2 \over N - 1}} ! $$ ! where $\bar{x}$ is the mean value of $x$. @end tex @end iftex ! @ifnottex ! ! @example ! @group ! std (x) = sqrt (sumsq (x - mean (x)) / (n - 1)) ! @end group ! @end example ! @end ifnottex ! If @var{x} is a matrix, compute the standard deviation for ! each column and return them in a row vector. ! ! The argument @var{opt} determines the type of normalization to use. Valid values ! are ! ! @table @asis ! @item 0: ! normalizes with @math{N-1}, provides the square root of best unbiased estimator of ! the variance [default] ! @item 1: ! normalizes with @math{N}, this provides the square root of the second moment around ! the mean @end table - - The third argument @var{dim} determines the dimension along which the standard - deviation is calculated. - @seealso{mean, median} @end deftypefn ! studentize -*- texinfo -*- ! @deftypefn {Function File} {} studentize (@var{x}, @var{dim}) ! If @var{x} is a vector, subtract its mean and divide by its standard ! deviation. ! If @var{x} is a matrix, do the above along the first non-singleton ! dimension. If the optional argument @var{dim} is given then operate ! along this dimension. ! @end deftypefn ! table ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{t}, @var{l_x}] =} table (@var{x}) ! @deftypefnx {Function File} {[@var{t}, @var{l_x}, @var{l_y}] =} table (@var{x}, @var{y}) ! Create a contingency table @var{t} from data vectors. The @var{l} ! vectors are the corresponding levels. ! Currently, only 1- and 2-dimensional tables are supported. @end deftypefn ! values -*- texinfo -*- ! @deftypefn {Function File} {} values (@var{x}) ! Return the different values in a column vector, arranged in ascending ! order. ! ! As an example, @code{values([1, 2, 3, 1])} returns the vector ! @code{[1, 2, 3]}. @end deftypefn ! var -*- texinfo -*- ! @deftypefn {Function File} {} var (@var{x}) ! For vector arguments, return the (real) variance of the values. ! For matrix arguments, return a row vector containing the variance for ! each column. ! ! The argument @var{opt} determines the type of normalization to use. ! Valid values are ! ! @table @asis ! @item 0: ! Normalizes with @math{N-1}, provides the best unbiased estimator of the ! variance [default]. ! @item 1: ! Normalizes with @math{N}, this provides the second moment around the mean. ! @end table ! The third argument @var{dim} determines the dimension along which the ! variance is calculated. ! @end deftypefn ! betacdf ! -*- texinfo -*- ! @deftypefn {Function File} {} betacdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, returns the CDF at @var{x} of the beta ! distribution with parameters @var{a} and @var{b}, i.e., ! PROB (beta (@var{a}, @var{b}) <= @var{x}). ! @end deftypefn ! betainv ! -*- texinfo -*- ! @deftypefn {Function File} {} betainv (@var{x}, @var{a}, @var{b}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the Beta distribution with parameters @var{a} ! and @var{b}. ! @end deftypefn ! betapdf ! -*- texinfo -*- ! @deftypefn {Function File} {} betapdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, returns the PDF at @var{x} of the beta ! distribution with parameters @var{a} and @var{b}. @end deftypefn ! betarnd -*- texinfo -*- ! @deftypefn {Function File} {} betarnd (@var{a}, @var{b}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} betarnd (@var{a}, @var{b}, @var{sz}) ! Return an @var{r} by @var{c} or @code{size (@var{sz})} matrix of ! random samples from the Beta distribution with parameters @var{a} and ! @var{b}. Both @var{a} and @var{b} must be scalar or of size @var{r} ! by @var{c}. If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{a} and @var{b}. ! @end deftypefn ! binocdf ! -*- texinfo -*- ! @deftypefn {Function File} {} binocdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the CDF at @var{x} of the ! binomial distribution with parameters @var{n} and @var{p}. ! @end deftypefn ! binoinv ! -*- texinfo -*- ! @deftypefn {Function File} {} binoinv (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! binomial distribution with parameters @var{n} and @var{p}. ! @end deftypefn ! binopdf ! -*- texinfo -*- ! @deftypefn {Function File} {} binopdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the binomial distribution with parameters @var{n} ! and @var{p}. @end deftypefn ! binornd -*- texinfo -*- ! @deftypefn {Function File} {} binornd (@var{n}, @var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} binornd (@var{n}, @var{p}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the binomial distribution with parameters @var{n} ! and @var{p}. Both @var{n} and @var{p} must be scalar or of size ! @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{n} and @var{p}. @end deftypefn ! cauchy_cdf -*- texinfo -*- ! @deftypefn {Function File} {} cauchy_cdf (@var{x}, @var{lambda}, @var{sigma}) For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the Cauchy distribution with location ! parameter @var{lambda} and scale parameter @var{sigma}. Default ! values are @var{lambda} = 0, @var{sigma} = 1. @end deftypefn ! cauchy_inv -*- texinfo -*- ! @deftypefn {Function File} {} cauchy_inv (@var{x}, @var{lambda}, @var{sigma}) For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the Cauchy distribution with location parameter ! @var{lambda} and scale parameter @var{sigma}. Default values are ! @var{lambda} = 0, @var{sigma} = 1. @end deftypefn ! cauchy_pdf -*- texinfo -*- ! @deftypefn {Function File} {} cauchy_pdf (@var{x}, @var{lambda}, @var{sigma}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the Cauchy distribution with location parameter ! @var{lambda} and scale parameter @var{sigma} > 0. Default values are ! @var{lambda} = 0, @var{sigma} = 1. @end deftypefn ! cauchy_rnd -*- texinfo -*- ! @deftypefn {Function File} {} cauchy_rnd (@var{lambda}, @var{sigma}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} cauchy_rnd (@var{lambda}, @var{sigma}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the Cauchy distribution with parameters @var{lambda} ! and @var{sigma} which must both be scalar or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{lambda} and @var{sigma}. @end deftypefn ! chi2cdf -*- texinfo -*- ! @deftypefn {Function File} {} chi2cdf (@var{x}, @var{n}) For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the chisquare distribution with @var{n} ! degrees of freedom. ! @end deftypefn ! chi2inv ! -*- texinfo -*- ! @deftypefn {Function File} {} chi2inv (@var{x}, @var{n}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the chisquare distribution with @var{n} degrees of ! freedom. ! @end deftypefn ! chi2pdf ! -*- texinfo -*- ! @deftypefn {Function File} {} chisquare_pdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the chisquare distribution with @var{n} degrees ! of freedom. @end deftypefn ! chi2rnd -*- texinfo -*- ! @deftypefn {Function File} {} chi2rnd (@var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} chi2rnd (@var{n}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the chisquare distribution with @var{n} degrees ! of freedom. @var{n} must be a scalar or of size @var{r} by @var{c}. ! ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{n}. @end deftypefn ! discrete_cdf -*- texinfo -*- ! @deftypefn {Function File} {} discrete_cdf (@var{x}, @var{v}, @var{p}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of a univariate discrete distribution which ! assumes the values in @var{v} with probabilities @var{p}. @end deftypefn ! discrete_inv -*- texinfo -*- ! @deftypefn {Function File} {} discrete_inv (@var{x}, @var{v}, @var{p}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the univariate distribution which assumes the ! values in @var{v} with probabilities @var{p}. @end deftypefn ! discrete_pdf -*- texinfo -*- ! @deftypefn {Function File} {} discrete_pdf (@var{x}, @var{v}, @var{p}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of a univariate discrete distribution which assumes ! the values in @var{v} with probabilities @var{p}. @end deftypefn ! discrete_rnd -*- texinfo -*- ! @deftypefn {Function File} {} discrete_rnd (@var{n}, @var{v}, @var{p}) ! @deftypefnx {Function File} {} discrete_rnd (@var{v}, @var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} discrete_rnd (@var{v}, @var{p}, @var{sz}) ! Generate a row vector containing a random sample of size @var{n} from ! the univariate distribution which assumes the values in @var{v} with ! probabilities @var{p}. @var{n} must be a scalar. ! If @var{r} and @var{c} are given create a matrix with @var{r} rows and ! @var{c} columns. Or if @var{sz} is a vector, create a matrix of size ! @var{sz}. @end deftypefn ! empirical_cdf -*- texinfo -*- ! @deftypefn {Function File} {} empirical_cdf (@var{x}, @var{data}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the empirical distribution obtained from ! the univariate sample @var{data}. @end deftypefn ! empirical_inv -*- texinfo -*- ! @deftypefn {Function File} {} empirical_inv (@var{x}, @var{data}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the empirical distribution obtained from the ! univariate sample @var{data}. @end deftypefn ! empirical_pdf -*- texinfo -*- ! @deftypefn {Function File} {} empirical_pdf (@var{x}, @var{data}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the empirical distribution obtained from the ! univariate sample @var{data}. @end deftypefn ! empirical_rnd -*- texinfo -*- ! @deftypefn {Function File} {} empirical_rnd (@var{n}, @var{data}) ! @deftypefnx {Function File} {} empirical_rnd (@var{data}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} empirical_rnd (@var{data}, @var{sz}) ! Generate a bootstrap sample of size @var{n} from the empirical ! distribution obtained from the univariate sample @var{data}. ! If @var{r} and @var{c} are given create a matrix with @var{r} rows and ! @var{c} columns. Or if @var{sz} is a vector, create a matrix of size ! @var{sz}. @end deftypefn ! expcdf -*- texinfo -*- ! @deftypefn {Function File} {} expcdf (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the exponential distribution with ! mean @var{lambda}. ! The arguments can be of common size or scalar. @end deftypefn ! expinv -*- texinfo -*- ! @deftypefn {Function File} {} expinv (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the exponential distribution with mean @var{lambda}. @end deftypefn ! exppdf -*- texinfo -*- ! @deftypefn {Function File} {} exppdf (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the probability density function ! (PDF) of the exponential distribution with mean @var{lambda}. @end deftypefn ! exprnd -*- texinfo -*- ! @deftypefn {Function File} {} exprnd (@var{lambda}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} exprnd (@var{lambda}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! exponential distribution with mean @var{lambda}, which must be a ! scalar or of size @var{r} by @var{c}. Or if @var{sz} is a vector, ! create a matrix of size @var{sz}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{lambda}. @end deftypefn ! fcdf -*- texinfo -*- ! @deftypefn {Function File} {} fcdf (@var{x}, @var{m}, @var{n}) ! For each element of @var{x}, compute the CDF at @var{x} of the F ! distribution with @var{m} and @var{n} degrees of freedom, i.e., ! PROB (F (@var{m}, @var{n}) <= @var{x}). @end deftypefn ! finv -*- texinfo -*- ! @deftypefn {Function File} {} finv (@var{x}, @var{m}, @var{n}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the F distribution with parameters @var{m} and ! @var{n}. @end deftypefn ! fpdf -*- texinfo -*- ! @deftypefn {Function File} {} fpdf (@var{x}, @var{m}, @var{n}) For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the F distribution with @var{m} and @var{n} ! degrees of freedom. ! @end deftypefn ! frnd ! -*- texinfo -*- ! @deftypefn {Function File} {} frnd (@var{m}, @var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} frnd (@var{m}, @var{n}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the F ! distribution with @var{m} and @var{n} degrees of freedom. Both ! @var{m} and @var{n} must be scalar or of size @var{r} by @var{c}. ! If @var{sz} is a vector the random samples are in a matrix of ! size @var{sz}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{m} and @var{n}. @end deftypefn ! gamcdf -*- texinfo -*- ! @deftypefn {Function File} {} gamcdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the Gamma distribution with parameters ! @var{a} and @var{b}. ! @seealso{gamma, gammaln, gammainc, gampdf, gaminv, gamrnd} @end deftypefn ! gaminv -*- texinfo -*- ! @deftypefn {Function File} {} gaminv (@var{x}, @var{a}, @var{b}) For each component of @var{x}, compute the quantile (the inverse of the CDF) at @var{x} of the Gamma distribution with parameters @var{a} ! and @var{b}. ! @seealso{gamma, gammaln, gammainc, gampdf, gamcdf, gamrnd} @end deftypefn ! gampdf -*- texinfo -*- ! @deftypefn {Function File} {} gampdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, return the probability density function ! (PDF) at @var{x} of the Gamma distribution with parameters @var{a} ! and @var{b}. ! @seealso{gamma, gammaln, gammainc, gamcdf, gaminv, gamrnd} @end deftypefn ! gamrnd -*- texinfo -*- ! @deftypefn {Function File} {} gamrnd (@var{a}, @var{b}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} gamrnd (@var{a}, @var{b}, @var{sz}) Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the Gamma distribution with parameters @var{a} ! and @var{b}. Both @var{a} and @var{b} must be scalar or of size ! @var{r} by @var{c}. If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{a} and @var{b}. ! @seealso{gamma, gammaln, gammainc, gampdf, gamcdf, gaminv} ! @end deftypefn ! geocdf ! -*- texinfo -*- ! @deftypefn {Function File} {} geocdf (@var{x}, @var{p}) ! For each element of @var{x}, compute the CDF at @var{x} of the ! geometric distribution with parameter @var{p}. ! @end deftypefn ! geoinv ! -*- texinfo -*- ! @deftypefn {Function File} {} geoinv (@var{x}, @var{p}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! geometric distribution with parameter @var{p}. @end deftypefn ! geopdf -*- texinfo -*- ! @deftypefn {Function File} {} geopdf (@var{x}, @var{p}) For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the geometric distribution with parameter @var{p}. @end deftypefn ! geornd -*- texinfo -*- ! @deftypefn {Function File} {} geornd (@var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} geornd (@var{p}, @var{sz}) Return an @var{r} by @var{c} matrix of random samples from the ! geometric distribution with parameter @var{p}, which must be a scalar ! or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are given create a matrix with @var{r} rows and ! @var{c} columns. Or if @var{sz} is a vector, create a matrix of size ! @var{sz}. @end deftypefn ! hygecdf -*- texinfo -*- ! @deftypefn {Function File} {} hygecdf (@var{x}, @var{t}, @var{m}, @var{n}) ! Compute the cumulative distribution function (CDF) at @var{x} of the ! hypergeometric distribution with parameters @var{t}, @var{m}, and ! @var{n}. This is the probability of obtaining not more than @var{x} ! marked items when randomly drawing a sample of size @var{n} without ! replacement from a population of total size @var{t} containing ! @var{m} marked items. ! ! The parameters @var{t}, @var{m}, and @var{n} must positive integers ! with @var{m} and @var{n} not greater than @var{t}. @end deftypefn ! hygeinv -*- texinfo -*- ! @deftypefn {Function File} {} hygeinv (@var{x}, @var{t}, @var{m}, @var{n}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! hypergeometric distribution with parameters @var{t}, @var{m}, and ! @var{n}. ! ! The parameters @var{t}, @var{m}, and @var{n} must positive integers ! with @var{m} and @var{n} not greater than @var{t}. @end deftypefn ! hygepdf -*- texinfo -*- ! @deftypefn {Function File} {} hygepdf (@var{x}, @var{t}, @var{m}, @var{n}) ! Compute the probability density function (PDF) at @var{x} of the ! hypergeometric distribution with parameters @var{t}, @var{m}, and ! @var{n}. This is the probability of obtaining @var{x} marked items ! when randomly drawing a sample of size @var{n} without replacement ! from a population of total size @var{t} containing @var{m} marked items. ! ! The arguments must be of common size or scalar. @end deftypefn ! hygernd -*- texinfo -*- ! @deftypefn {Function File} {} hygernd (@var{t}, @var{m}, @var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} hygernd (@var{t}, @var{m}, @var{n}, @var{sz}) ! @deftypefnx {Function File} {} hygernd (@var{t}, @var{m}, @var{n}) ! Return an @var{r} by @var{c} matrix of random samples from the ! hypergeometric distribution with parameters @var{t}, @var{m}, ! and @var{n}. ! ! The parameters @var{t}, @var{m}, and @var{n} must positive integers ! with @var{m} and @var{n} not greater than @var{t}. ! ! The parameter @var{sz} must be scalar or a vector of matrix ! dimensions. If @var{sz} is scalar, then a @var{sz} by @var{sz} ! matrix of random samples is generated. @end deftypefn ! kolmogorov_smirnov_cdf -*- texinfo -*- ! @deftypefn {Function File} {} kolmogorov_smirnov_cdf (@var{x}, @var{tol}) ! Return the CDF at @var{x} of the Kolmogorov-Smirnov distribution, ! @iftex ! @tex ! $$ Q(x) = \sum_{k=-\infty}^\infty (-1)^k \exp(-2 k^2 x^2) $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! Inf ! Q(x) = SUM (-1)^k exp(-2 k^2 x^2) ! k = -Inf ! @end example ! @end ifinfo ! ! @noindent ! for @var{x} > 0. ! The optional parameter @var{tol} specifies the precision up to which ! the series should be evaluated; the default is @var{tol} = @code{eps}. @end deftypefn ! laplace_cdf -*- texinfo -*- ! @deftypefn {Function File} {} laplace_cdf (@var{x}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the Laplace distribution. @end deftypefn ! laplace_inv -*- texinfo -*- ! @deftypefn {Function File} {} laplace_inv (@var{x}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the Laplace distribution. @end deftypefn ! laplace_pdf -*- texinfo -*- ! @deftypefn {Function File} {} laplace_pdf (@var{x}) For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the Laplace distribution. @end deftypefn ! laplace_rnd -*- texinfo -*- ! @deftypefn {Function File} {} laplace_rnd (@var{r}, @var{c}) ! @deftypefnx {Function File} {} laplace_rnd (@var{sz}); ! Return an @var{r} by @var{c} matrix of random numbers from the ! Laplace distribution. Or if @var{sz} is a vector, create a matrix of ! @var{sz}. @end deftypefn ! logistic_cdf -*- texinfo -*- ! @deftypefn {Function File} {} logistic_cdf (@var{x}) ! For each component of @var{x}, compute the CDF at @var{x} of the ! logistic distribution. @end deftypefn ! logistic_inv -*- texinfo -*- ! @deftypefn {Function File} {} logistic_inv (@var{x}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the logistic distribution. @end deftypefn ! logistic_pdf -*- texinfo -*- ! @deftypefn {Function File} {} logistic_pdf (@var{x}) ! For each component of @var{x}, compute the PDF at @var{x} of the ! logistic distribution. @end deftypefn ! logistic_rnd -*- texinfo -*- ! @deftypefn {Function File} {} logistic_rnd (@var{r}, @var{c}) ! @deftypefnx {Function File} {} logistic_rnd (@var{sz}) ! Return an @var{r} by @var{c} matrix of random numbers from the ! logistic distribution. Or if @var{sz} is a vector, create a matrix of ! @var{sz}. @end deftypefn ! logncdf -*- texinfo -*- ! @deftypefn {Function File} {} logncdf (@var{x}, @var{mu}, @var{sigma}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the lognormal distribution with ! parameters @var{mu} and @var{sigma}. If a random variable follows this ! distribution, its logarithm is normally distributed with mean ! @var{mu} and standard deviation @var{sigma}. ! Default values are @var{mu} = 1, @var{sigma} = 1. @end deftypefn ! logninv -*- texinfo -*- ! @deftypefn {Function File} {} logninv (@var{x}, @var{mu}, @var{sigma}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the lognormal distribution with parameters @var{mu} ! and @var{sigma}. If a random variable follows this distribution, its ! logarithm is normally distributed with mean @code{log (@var{mu})} and ! variance @var{sigma}. ! Default values are @var{mu} = 1, @var{sigma} = 1. @end deftypefn ! lognpdf -*- texinfo -*- ! @deftypefn {Function File} {} lognpdf (@var{x}, @var{mu}, @var{sigma}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the lognormal distribution with parameters ! @var{mu} and @var{sigma}. If a random variable follows this distribution, ! its logarithm is normally distributed with mean @var{mu} ! and standard deviation @var{sigma}. ! ! Default values are @var{mu} = 1, @var{sigma} = 1. @end deftypefn ! lognrnd -*- texinfo -*- ! @deftypefn {Function File} {} lognrnd (@var{mu}, @var{sigma}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} lognrnd (@var{mu}, @var{sigma}, @var{sz}) Return an @var{r} by @var{c} matrix of random samples from the ! lognormal distribution with parameters @var{mu} and @var{sigma}. Both ! @var{mu} and @var{sigma} must be scalar or of size @var{r} by @var{c}. ! Or if @var{sz} is a vector, create a matrix of size @var{sz}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{mu} and @var{sigma}. @end deftypefn ! nbincdf -*- texinfo -*- ! @deftypefn {Function File} {} nbincdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the CDF at x of the Pascal ! (negative binomial) distribution with parameters @var{n} and @var{p}. ! ! The number of failures in a Bernoulli experiment with success ! probability @var{p} before the @var{n}-th success follows this ! distribution. @end deftypefn ! nbininv -*- texinfo -*- ! @deftypefn {Function File} {} nbininv (@var{x}, @var{n}, @var{p}) For each element of @var{x}, compute the quantile at @var{x} of the Pascal (negative binomial) distribution with parameters @var{n} and @var{p}. --- 8551,16123 ---- expression. By default, the @code{Octave:variable-switch-label} warning is disabled. @end table ! ans -*- texinfo -*- ! @defvr {Automatic Variable} ans ! The most recently computed result that was not ! explicitly assigned to a variable. For example, after the expression @example ! 3^2 + 4^2 @end example ! @noindent ! is evaluated, the value returned by @code{ans} is 25. ! @end defvr ! list_primes ! -*- texinfo -*- ! @deftypefn {Function File} {} list_primes (@var{n}) ! List the first @var{n} primes. If @var{n} is unspecified, the first ! 30 primes are listed. + The algorithm used is from page 218 of the @iftex @tex ! {\TeX}book. @end tex @end iftex ! @ifinfo ! TeXbook. ! @end ifinfo ! @end deftypefn ! gunzip ! -*- texinfo -*- ! @deftypefn {Function File} {} gunzip (@var{gzfile}, @var{dir}) ! Unpack the gzip archive @var{gzfile} to the directory @var{dir}. If ! @var{dir} is not specified, it defaults to the current directory. If ! the @var{gzfile} is a directory, all files in the directory will be ! recursively gunzipped. ! @seealso{unpack, bzip2, bunzip2, tar, untar, gzip, gunzip, zip, unzip} ! @end deftypefn ! edit ! -*- texinfo -*- ! @deftypefn {Command} edit @var{name} ! @deftypefnx {Command} edit @var{field} @var{value} ! @deftypefnx {Command} @var{value} = edit get @var{field} ! Edit the named function, or change editor settings. ! If @code{edit} is called with the name of a file or function as ! its argument it will be opened in a text editor. ! @itemize @bullet ! @item ! If the function @var{name} is available in a file on your path and ! that file is modifiable, then it will be edited in place. If it ! is a system function, then it will first be copied to the directory ! @code{HOME} (see further down) and then edited. ! @item ! If @var{name} is the name of a function defined in the interpreter but ! not in an m-file, then an m-file will be created in @code{HOME} ! to contain that function along with its current definition. ! @item ! If @code{name.cc} is specified, then it will search for @code{name.cc} ! in the path and try to modify it, otherwise it will create a new ! @file{.cc} file in @code{HOME}. If @var{name} happens to be an ! m-file or interpreter defined function, then the text of that ! function will be inserted into the .cc file as a comment. ! @item ! If @var{name.ext} is on your path then it will be editted, otherwise ! the editor will be started with @file{HOME/name.ext} as the ! filename. If @file{name.ext} is not modifiable, it will be copied to ! @code{HOME} before editing. ! @strong{WARNING!} You may need to clear name before the new definition ! is available. If you are editing a .cc file, you will need ! to mkoctfile @file{name.cc} before the definition will be available. ! @end itemize ! If @code{edit} is called with @var{field} and @var{value} variables, ! the value of the control field @var{field} will be @var{value}. ! If an output argument is requested and the first argument is @code{get} ! then @code{edit} will return the value of the control field @var{field}. ! The following control fields are used: ! @table @samp ! @item editor ! This is the editor to use to modify the functions. By default it uses ! Octave's @code{EDITOR} built-in function, which comes from ! @code{getenv("EDITOR")} and defaults to @code{emacs}. Use @code{%s} ! In place of the function name. For example, ! @table @samp ! @item [EDITOR, " %s"] ! Use the editor which Octave uses for @code{bug_report}. ! @item "xedit %s &" ! pop up simple X11 editor in a separate window ! @item "gnudoit -q \"(find-file \\\"%s\\\")\"" ! Send it to current Emacs; must have @code{(gnuserv-start)} in @file{.emacs}. ! @end table ! On cygwin, you will need to convert the cygwin path to a windows ! path if you are using a native Windows editor. For example ! @example ! '"C:/Program Files/Good Editor/Editor.exe" "$(cygpath -wa %s)"' ! @end example ! @item home ! This is the location of user local m-files. Be be sure it is in your ! path. The default is @file{~/octave}. ! @item author ! This is the name to put after the "## Author:" field of new functions. ! By default it guesses from the @code{gecos} field of password database. ! @item email ! This is the e-mail address to list after the name in the author field. ! By default it guesses @code{<$LOGNAME@@$HOSTNAME>}, and if @code{$HOSTNAME} ! is not defined it uses @code{uname -n}. You probably want to override this. ! Be sure to use @code{} as your format. ! ! @item license ! @table @samp ! @item gpl ! GNU General Public License (default). ! @item bsd ! BSD-style license without advertising clause. ! @item pd ! Public domain. ! @item "text" ! Your own default copyright and license. @end table ! @item mode ! This value determines whether the editor should be started in async mode ! or sync mode. Set it to "async" to start the editor in async mode. The ! default is "sync" (see also "system"). ! Unless you specify @samp{pd}, edit will prepend the copyright statement ! with "Copyright (C) yyyy Function Author". ! @end table ! @end deftypefn ! doc ! -*- texinfo -*- ! @deftypefn {Command} doc @var{function_name} ! Display documentation for the function @var{function_name} ! directly from an on-line version of ! the printed manual, using the GNU Info browser. If invoked without ! any arguments, the manual is shown from the beginning. ! For example, the command @kbd{doc rand} starts the GNU Info browser ! at this node in the on-line version of the manual. ! Once the GNU Info browser is running, help for using it is available ! using the command @kbd{C-h}. ! @seealso{help} ! @end deftypefn ! dir ! -*- texinfo -*- ! @deftypefn {Function File} {} dir (@var{directory}) ! @deftypefnx {Function File} {[@var{list}] =} dir (@var{directory}) ! Display file listing for directory @var{directory}. If a return ! value is requested, return a structure array with the fields ! @example ! @group ! name ! bytes ! date ! isdir ! statinfo ! @end group ! @end example ! @noindent ! in which @code{statinfo} is the structure returned from @code{stat}. ! If @var{directory} is not a directory, return information about the ! named @var{filename}. @var{directory} may be a list of directories ! specified either by name or with wildcard characters (like * and ?) ! which will be expanded with glob. ! Note that for symbolic links, @code{dir} returns information about ! the file that a symbolic link points to instead of the link itself. ! However, if the link points to a nonexistent file, @code{dir} returns ! information about the link. ! @seealso{ls, stat, lstat, readdir, glob, filesep} ! @end deftypefn ! fullfile ! -*- texinfo -*- ! @deftypefn {Function File} {@var{filename} =} fullfile (@var{dir1}, @var{dir2}, @dots{}, @var{file}) ! Return a complete filename constructed from the given components. ! @seealso{fileparts} ! @end deftypefn ! setfield ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{k1}, @dots{}, @var{v1}] =} setfield (@var{s}, @var{k1}, @var{v1}, @dots{}) ! Set field members in a structure. ! @example ! @group ! oo(1,1).f0= 1; ! oo = setfield(oo,@{1,2@},'fd',@{3@},'b', 6); ! oo(1,2).fd(3).b == 6 ! @result{} ans = 1 ! @end group ! @end example ! Note that this function could be written ! @example ! i1= @{1,2@}; i2= 'fd'; i3= @{3@}; i4= 'b'; ! oo( i1@{:@} ).( i2 )( i3@{:@} ).( i4 ) == 6; ! @end example ! @seealso{getfield, rmfield, isfield, isstruct, fieldnames, struct} ! @end deftypefn ! tempname ! -*- texinfo -*- ! @deftypefn {Function File} {filename = } tempname () ! This function is an alias for @code{tmpnam}. ! @end deftypefn ! substruct ! -*- texinfo -*- ! @deftypefn {Function File} {} substruct (@var{type}, @var{subs}, @dots{}) ! Create a subscript structure for use with @code{subsref} or ! @code{subsasgn}. ! @seealso{subsref, subsasgn} ! @end deftypefn ! run ! -*- texinfo -*- ! @deftypefn {Function File} {} run (@var{f}) ! @deftypefnx {Command} {} run @var{f} ! Run scripts in the current workspace that are not necessarily on the ! path. If @var{f} is the script to run, including its path, then @code{run} ! change the directory to the directory where @var{f} is found. @code{run} ! then executes the script, and returns to the original directory. ! @seealso{system} ! @end deftypefn ! bunzip2 ! -*- texinfo -*- ! @deftypefn {Function File} {} bunzip2 (@var{bzfile}, @var{dir}) ! Unpack the bzip2 archive @var{bzfile} to the directory @var{dir}. If ! @var{dir} is not specified, it defaults to the current directory. ! @seealso{unpack, bzip2, tar, untar, gzip, gunzip, zip, unzip} ! @end deftypefn ! bug_report ! -*- texinfo -*- ! @deftypefn {Function File} {} bug_report () ! Have Octave create a bug report template file, invoke your favorite ! editor, and submit the report to the bug-octave mailing list when ! you are finished editing. ! @end deftypefn ! delete ! -*- texinfo -*- ! @deftypefn {Function File} {} delete (@var{file}) ! @deftypefnx {Function File} {} delete (@var{h}) ! Delete the named file or figure handle. ! @end deftypefn ! ismac ! -*- texinfo -*- ! @deftypefn {Function File} {} ismac () ! Return 1 if Octave is running on a Mac OS X system and 0 otherwise. ! @seealso{ispc, isunix} ! @end deftypefn ! isunix ! -*- texinfo -*- ! @deftypefn {Function File} {} isunix () ! Return 1 if Octave is running on a Unix-like system and 0 otherwise. ! @seealso{ismac, ispc} ! @end deftypefn ! cast ! -*- texinfo -*- ! @deftypefn {Function File} {} cast (@var{val}, @var{type}) ! Convert @var{val} to data type @var{type}. ! @seealso{int8, uint8, int16, uint16, int32, uint32, int64, uint64, double} ! @end deftypefn ! computer ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{c}, @var{maxsize}, @var{endian}] =} computer () ! Print or return a string of the form @var{cpu}-@var{vendor}-@var{os} ! that identifies the kind of computer Octave is running on. If invoked ! with an output argument, the value is returned instead of printed. For ! example, ! @example ! @group ! computer () ! @print{} i586-pc-linux-gnu ! x = computer () ! @result{} x = "i586-pc-linux-gnu" ! @end group ! @end example ! If two output arguments are requested, also return the maximum number ! of elements for an array. ! If three output arguments are requested, also return the byte order ! of the current system as a character (@code{"B"} for big-endian or ! @code{"L"} for little-endian). ! @end deftypefn ! compare_versions ! -*- texinfo -*- ! @deftypefn {Function File} {} compare_versions (@var{v1}, @var{v2}, @var{operator}) ! Compares to version strings using the given @var{operator}. ! This function assumes that versions @var{v1} and @var{v2} are ! arbitrarily long strings made of numeric and period characters ! possibly followed by an arbitrary string (e.g. "1.2.3", "0.3", ! "0.1.2+", or "1.2.3.4-test1"). ! The version is first split into the numeric and the character parts ! then the parts are padded to be the same length (i.e. "1.1" would be ! padded to be like "1.1.0" when being compared with "1.1.1", and ! separately, the character parts of the strings are padded with ! nulls). ! ! The operator can be any logical operator from the set ! ! @itemize @bullet ! @item ! "==" ! equal ! @item ! "<" ! less than ! @item ! "<=" ! less than or equal to ! @item ! ">" ! greater than ! @item ! ">=" ! greater than or equal to ! @item ! "!=" ! not equal ! @item ! "~=" ! not equal ! @end itemize ! ! Note that version "1.1-test2" would compare as greater than ! "1.1-test10". Also, since the numeric part is compared first, "a" ! compares less than "1a" because the second string starts with a ! numeric part even though double("a") is greater than double("1"). ! @end deftypefn ! parseparams ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{reg}, @var{prop}] =} parseparams (@var{params}) ! Return in @var{reg} the cell elements of @var{param} up to the first ! string element and in @var{prop} all remaining elements beginning ! with the first string element. For example ! ! @example ! @group ! [reg, prop] = parseparams (@{1, 2, "linewidth", 10@}) ! reg = ! @{ ! [1,1] = 1 ! [1,2] = 2 ! @} ! prop = ! @{ ! [1,1] = linewidth ! [1,2] = 10 ! @} ! @end group ! @end example ! ! The parseparams function may be used to separate 'regular' ! arguments and additional arguments given as property/value pairs of ! the @var{varargin} cell array. ! @seealso{varargin} ! @end deftypefn ! dump_prefs ! -*- texinfo -*- ! @deftypefn {Function File} {} dump_prefs (@var{file}) ! Have Octave dump all the current user preference variables to ! @var{file} in a format that can be parsed by Octave later. If ! @var{file} is omitted, the listing is printed to stdout. ! @end deftypefn ! ls_command ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{old_cmd} =} ls_command (@var{cmd}) ! Set or return the shell command used by Octave's @code{ls} command. ! The value of @var{cmd} must be a character string. ! With no arguments, simply return the previous value. ! @seealso{ls} ! @end deftypefn ! orderfields ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{t}, @var{p}] =} orderfields (@var{s1}, @var{s2}) ! Return a struct with fields arranged alphabetically or as specified ! by @var{s2} and a corresponding permutation vector. ! ! Given one struct, arrange field names in @var{s1} alphabetically. ! ! Given two structs, arrange field names in @var{s1} as they appear ! in @var{s2}. The second argument may also specify the order in ! a permutation vector or a cell array of strings. ! ! @seealso{getfield, rmfield, isfield, isstruct, fieldnames, struct} ! @end deftypefn ! ver ! -*- texinfo -*- ! @deftypefn {Function File} {} ver () ! Display a header containing the current Octave version ! number, license string and operating system. ! @seealso{license, version} ! @end deftypefn ! swapbytes ! -*- texinfo -*- ! @deftypefn {Function File} {} swapbytes (@var{x}) ! Swaps the byte order on values, converting from little endian to big ! endian and visa-versa. For example ! ! @example ! @group ! swapbytes (uint16 (1:4)) ! @result{} [ 256 512 768 1024] ! @end group ! @end example ! ! @seealso{typecast, cast} ! @end deftypefn ! unzip ! -*- texinfo -*- ! @deftypefn {Function File} {} unzip (@var{zipfile}, @var{dir}) ! Unpack the ZIP archive @var{zipfile} to the directory @var{dir}. ! If @var{dir} is not specified, it defaults to the current directory. ! @seealso{unpack, bzip2, bunzip2, tar, untar, gzip, gunzip, zip} ! @end deftypefn ! menu ! -*- texinfo -*- ! @deftypefn {Function File} {} menu (@var{title}, @var{opt1}, @dots{}) ! Print a title string followed by a series of options. Each option will ! be printed along with a number. The return value is the number of the ! option selected by the user. This function is useful for interactive ! programs. There is no limit to the number of options that may be passed ! in, but it may be confusing to present more than will fit easily on one ! screen. ! @seealso{disp, printf, input} ! @end deftypefn ! fileparts ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{dir}, @var{name}, @var{ext}, @var{ver}] =} fileparts (@var{filename}) ! Return the directory, name, extension, and version components of ! @var{filename}. ! @seealso{fullfile} ! @end deftypefn ! mkoctfile ! -*- texinfo -*- ! @deftypefn {Function File} {} mkoctfile [-options] file @dots{} ! ! The @code{mkoctfile} function compiles source code written in C, ! C++, or Fortran. Depending on the options used with @code{mkoctfile}, the ! compiled code can be called within Octave or can be used as a stand-alone ! application. ! ! @code{mkoctfile} can be called from the shell prompt or from the Octave ! prompt. ! ! @code{mkoctfile} accepts the following options, all of which are optional ! except for the file name of the code you wish to compile: ! ! @table @samp ! @item -I DIR ! Add the include directory DIR to compile commands. ! ! @item -D DEF ! Add the definition DEF to the compiler call. ! ! @item -l LIB ! Add the library LIB to the link command. ! ! @item -L DIR ! Add the library directory DIR to the link command. ! ! @item -M ! @itemx --depend ! Generate dependency files (.d) for C and C++ source files. ! ! @item -c ! Compile but do not link. ! ! @item -g ! Enable debugging options for compilers. ! ! @item -o FILE ! @itemx --output FILE ! Output file name. Default extension is .oct ! (or .mex if --mex is specified) unless linking ! a stand-alone executable. ! ! @item -p VAR ! @itemx --print VAR ! Print the configuration variable VAR. Recognized variables are: ! ! @example ! ALL_CFLAGS FFTW_LIBS ! ALL_CXXFLAGS FLIBS ! ALL_FFLAGS FPICFLAG ! ALL_LDFLAGS INCFLAGS ! BLAS_LIBS LDFLAGS ! CC LD_CXX ! CFLAGS LD_STATIC_FLAG ! CPICFLAG LFLAGS ! CPPFLAGS LIBCRUFT ! CXX LIBOCTAVE ! CXXFLAGS LIBOCTINTERP ! CXXPICFLAG LIBREADLINE ! DEPEND_EXTRA_SED_PATTERN LIBS ! DEPEND_FLAGS OCTAVE_LIBS ! DL_LD RDYNAMIC_FLAG ! DL_LDFLAGS RLD_FLAG ! F2C SED ! F2CFLAGS XTRA_CFLAGS ! F77 XTRA_CXXFLAGS ! FFLAGS ! @end example ! ! @item --link-stand-alone ! Link a stand-alone executable file. ! ! @item --mex ! Assume we are creating a MEX file. Set the default output extension ! to ".mex". ! ! @item -s ! @itemx --strip ! Strip the output file. ! ! @item -v ! @itemx --verbose ! Echo commands as they are executed. ! ! @item file ! The file to compile or link. Recognised file types are ! ! @example ! .c C source ! .cc C++ source ! .C C++ source ! .cpp C++ source ! .f Fortran source ! .F Fortran source ! .o object file ! @end example ! ! @end table ! @end deftypefn ! inputname ! -*- texinfo -*- ! @deftypefn {Function File} {} inputname (@var{n}) ! Return the text defining @var{n}-th input to the function. ! @end deftypefn ! untar ! -*- texinfo -*- ! @deftypefn {Function File} {} untar (@var{tarfile}, @var{dir}) ! Unpack the TAR archive @var{tarfile} to the directory @var{dir}. ! If @var{dir} is not specified, it defaults to the current directory. ! @seealso{unpack, bzip2, bunzip2, tar, gzip, gunzip, zip, unzip} ! @end deftypefn ! mex ! -*- texinfo -*- ! @deftypefn {Function File} {} mex [options] file @dots{} ! Compile source code written in C, C++, or Fortran, to a MEX file. ! This is equivalent to @code{mkoctfile --mex [options] file}. ! @seealso{mkoctfile} ! @end deftypefn ! tar ! -*- texinfo -*- ! @deftypefn {Function File} {@var{entries} =} tar (@var{tarfile}, @var{files}, @var{root}) ! Pack @var{files} @var{files} into the TAR archive @var{tarfile}. The ! list of files must be a string or a cell array of strings. ! ! The optional argument @var{root} changes the relative path of @var{files} ! from the current directory. ! ! If an output argument is requested the entries in the archive are ! returned in a cell array. ! @seealso{untar, gzip, gunzip, zip, unzip} ! @end deftypefn ! flops ! -*- texinfo -*- ! @deftypefn {Function File} {} flops () ! This function is provided for @sc{Matlab} compatibility, but it doesn't ! actually do anything. ! @end deftypefn ! comma ! -*- texinfo -*- ! @deffn {Operator} , ! Array index, function argument, or command separator. ! @seealso{semicolon} ! @end deffn ! zip ! -*- texinfo -*- ! @deftypefn {Function File} {@var{entries} =} zip (@var{zipfile}, @var{files}) ! @deftypefnx {Function File} {@var{entries} =} zip (@var{zipfile}, @var{files}, @var{rootdir}) ! Compress the list of files and/or directories specified in @var{files} ! into the archive @var{zipfiles} in the same directory. If @var{rootdir} ! is defined the @var{files} is located relative to @var{rootdir} rather ! than the current directory ! @seealso{unzip,tar} ! @end deftypefn ! unix ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{status}, @var{text}]} unix (@var{command}) ! @deftypefnx {Function File} {[@var{status}, @var{text}]} unix (@var{command}, "-echo") ! Execute a system command if running under a Unix-like operating ! system, otherwise do nothing. Return the exit status of the program ! in @var{status} and any output sent to the standard output in ! @var{text}. If the optional second argument @code{"-echo"} is given, ! then also send the output from the command to the standard output. ! @seealso{isunix, ispc, system} ! @end deftypefn ! license ! -*- texinfo -*- ! @deftypefn {Function File} {} license ! Display the license of Octave. ! ! @deftypefnx {Function File} {} license ("inuse") ! Display a list of packages currently being used. ! ! @deftypefnx {Function File} {@var{retval} =} license ("inuse") ! Return a structure containing the fields @code{feature} and @code{user}. ! ! @deftypefnx {Function File} {@var{retval} =} license ("test", @var{feature}) ! Return 1 if a license exists for the product identified by the string ! @var{feature} and 0 otherwise. The argument @var{feature} is case ! insensitive and only the first 27 characters are checked. ! ! @deftypefnx {Function File} {} license ("test", @var{feature}, @var{toggle}) ! Enable or disable license testing for @var{feature}, depending on ! @var{toggle}, which may be one of: ! ! @table @samp ! @item "enable" ! Future tests for the specified license of @var{feature} are conducted ! as usual. ! @item "disable" ! Future tests for the specified license of @var{feature} return 0. ! @end table ! ! @deftypefnx {Function File} {@var{retval} =} license ("checkout", @var{feature}) ! Check out a license for @var{feature}, returning 1 on success and 0 ! on failure. ! ! This function is provided for compatibility with @sc{Matlab}. ! @seealso{ver, version} ! @end deftypefn ! gzip ! -*- texinfo -*- ! @deftypefn {Function File} {@var{entries} =} gzip (@var{files}) ! @deftypefnx {Function File} {@var{entries} =} gzip (@var{files}, @var{outdir}) ! Compress the list of files and/or directories specified in @var{files}. ! Each file is compressed separately and a new file with a '.gz' extension ! is created. The original file is not touched. If @var{rootdir} is defined ! the compressed versions of the files are placed in this directory. ! @seealso{gunzip, zip, tar} ! @end deftypefn ! tempdir ! -*- texinfo -*- ! @deftypefn {Function File} {@var{dir} =} tempdir () ! Return the name of the system's directory for temporary files. ! @end deftypefn ! unpack ! -*- texinfo -*- ! @deftypefn {Function File} {@var{files} =} unpack (@var{file}, @var{dir}) ! @deftypefnx {Function File} {@var{files} =} unpack (@var{file}, @var{dir}, @var{filetype}) ! Unpack the archive @var{file} based on its extension to the directory ! @var{dir}. If @var{file} is a cellstr, then all files will be ! handled individually. If @var{dir} is not specified, it defaults to ! the current directory. It returns a list of @var{files} ! unpacked. If a directory is in the file list, then the ! @var{filetype} to unpack must also be specified. ! ! The @var{files} includes the entire path to the output files. ! @seealso{bzip2,bunzip2,tar,untar,gzip,gunzip,zip,unzip} ! @end deftypefn ! version ! -*- texinfo -*- ! @deftypefn {Function File} {} version () ! Return Octave's version number as a string. This is also the value of ! the built-in variable @code{OCTAVE_VERSION}. ! @end deftypefn ! mexext ! -*- texinfo -*- ! @deftypefn {Function File} {} mexext () ! Return the filename extension used for MEX files. ! @end deftypefn ! single ! -*- texinfo -*- ! @deftypefn {Function File} {} single (@var{val}) ! Convert the numeric value @var{val} to single precision. ! ! @strong{Note}: this function currently returns its argument converted ! to double precision because Octave does not yet have a single-precision ! numeric data type. ! @end deftypefn ! paren ! -*- texinfo -*- ! @deffn {Operator} ( ! @deffnx {Operator} ) ! Array index or function argument delimeter. ! @end deffn ! semicolon ! -*- texinfo -*- ! @deffn {Operator} ; ! Array row or command separator. ! @seealso{comma} ! @end deffn ! what ! -*- texinfo -*- ! @deftypefn {Command} {} what ! @deftypefnx {Command} {} what @var{dir} ! @deftypefnx {Function File} {w =} what (@var{dir}) ! List the Octave specific files in a directory. If the variable @var{dir} ! is given then check that directory rather than the current directory. If ! a return argument is requested, the files found are returned in the ! structure @var{w}. ! @seealso{which} ! @end deftypefn ! pack ! -*- texinfo -*- ! @deftypefn {Function File} {} pack () ! This function is provided for compatibility with @sc{Matlab}, but it ! doesn't actually do anything. ! @end deftypefn ! xor ! -*- texinfo -*- ! @deftypefn {Mapping Function} {} xor (@var{x}, @var{y}) ! Return the `exclusive or' of the entries of @var{x} and @var{y}. ! For boolean expressions @var{x} and @var{y}, ! @code{xor (@var{x}, @var{y})} is true if and only if @var{x} or @var{y} ! is true, but not if both @var{x} and @var{y} are true. ! @end deftypefn ! texas_lotto ! -*- texinfo -*- ! @deftypefn {Function File} {} texas_lotto () ! Pick 6 unique numbers between 1 and 50 that are guaranteed to win ! the Texas Lotto. ! @seealso{rand} ! @end deftypefn ! pkg ! -*- texinfo -*- ! @deftypefn {Command} pkg @var{command} @var{pkg_name} ! @deftypefnx {Command} pkg @var{command} @var{option} @var{pkg_name} ! This command interacts with the package manager. Different actions will ! be taken depending on the value of @var{command}. ! ! @table @samp ! @item install ! Install named packages. For example, ! @example ! pkg install image-1.0.0.tar.gz ! @end example ! @noindent ! installs the package found in the file @code{image-1.0.0.tar.gz}. ! ! The @var{option} variable can contain options that affect the manner ! in which a package is installed. These options can be one or more of ! ! @table @code ! @item -nodeps ! The package manager will disable the dependency checking. That way it ! is possible to install a package even if it depends on another package ! that's not installed on the system. @strong{Use this option with care.} ! ! @item -noauto ! The package manager will not automatically load the installed package ! when starting Octave, even if the package requests that it is. ! ! @item -auto ! The package manager will automatically load the installed package when ! starting Octave, even if the package requests that it isn't. ! ! @item -local ! A local installation is forced, even if the user has system privileges. ! ! @item -global ! A global installation is forced, even if the user doesn't normally have ! system privileges ! ! @item -verbose ! The package manager will print the output of all of the commands that are ! performed. ! @end table ! ! @item uninstall ! Uninstall named packages. For example, ! @example ! pkg uninstall image ! @end example ! @noindent ! removes the @code{image} package from the system. If another installed ! package depends on the @code{image} package an error will be issued. ! The package can be uninstalled anyway by using the @code{-nodeps} option. ! @item load ! Add named packages to the path. After loading a package it is ! possible to use the functions provided by the package. For example, ! @example ! pkg load image ! @end example ! @noindent ! adds the @code{image} package to the path. It is possible to load all ! installed packages at once with the command ! @example ! pkg load all ! @end example ! @item unload ! Removes named packages from the path. After unloading a package it is ! no longer possible to use the functions provided by the package. ! This command behaves like the @code{load} command. ! @item list ! Show a list of the currently installed packages. By requesting one or two ! output argument it is possible to get a list of the currently installed ! packages. For example, ! @example ! installed_packages = pkg list; ! @end example ! @noindent ! returns a cell array containing a structure for each installed package. ! The command ! @example ! [@var{user_packages}, @var{system_packages}] = pkg list ! @end example ! @noindent ! splits the list of installed packages into those who are installed by ! the current user, and those installed by the system administrator. ! @item describe ! Show a short description of the named installed packages, with the option ! '-verbose' also list functions provided by the package, e.g.: ! @example ! pkg describe -verbose all ! @end example ! @noindent ! will describe all installed packages and the functions they provide. ! If one output is requested a cell of structure containing the ! description and list of functions of each package is returned as ! output rather than printed on screen: ! @example ! desc = pkg ("describe", "secs1d", "image") ! @end example ! @noindent ! If any of the requested packages is not installed, pkg returns an ! error, unless a second output is requested: ! @example ! [ desc, flag] = pkg ("describe", "secs1d", "image") ! @end example ! @noindent ! @var{flag} will take one of the values "Not installed", "Loaded" or ! "Not loaded" for each of the named packages. ! @item prefix ! Set the installation prefix directory. For example, ! @example ! pkg prefix ~/my_octave_packages ! @end example ! @noindent ! sets the installation prefix to @code{~/my_octave_packages}. ! Packages will be installed in this directory. ! It is possible to get the current installation prefix by requesting an ! output argument. For example, ! @example ! p = pkg prefix ! @end example ! The location in which to install the architecture dependent files can be ! independent specified with an addition argument. For example ! @example ! pkg prefix ~/my_octave_packages ~/my_octave_packages_for_my_pc ! @end example ! @item local_list ! Set the file in which to look for information on the locally ! installed packages. Locally installed packages are those that are ! typically available only to the current user. For example ! @example ! pkg local_list ~/.octave_packages ! @end example ! It is possible to get the current value of local_list with the following ! @example ! pkg local_list ! @end example ! @item global_list ! Set the file in which to look for, for information on the globally ! installed packages. Globally installed packages are those that are ! typically available to all users. For example ! @example ! pkg global_list /usr/share/octave/octave_packages ! @end example ! It is possible to get the current value of global_list with the following ! @example ! pkg global_list ! @end example ! @item rebuild ! Rebuilds the package database from the installed directories. This can ! be used in cases where for some reason the package database is corrupted. ! It can also take the @code{-auto} and @code{-noauto} options to allow the ! autolaoding state of a package to be changed. For example ! @example ! pkg rebuild -noauto image ! @end example ! will remove the autoloading status of the image package. ! @item build ! Builds a binary form of a package or packages. The binary file produced ! will itself be an Octave package that can be installed normally with ! @code{pkg}. The form of the command to build a binary package is ! @example ! pkg build builddir image-1.0.0.tar.gz @dots{} ! @end example ! @noindent ! where @code{buiddir} is the name of a directory where the temporary ! installation will be produced and the binary packages will be found. ! The options @code{-verbose} and @code{-nodeps} are respected, while ! the other options are ignored. @end table + @end deftypefn + hadamard + -*- texinfo -*- + @deftypefn {Function File} {} hadamard (@var{n}) + Construct a Hadamard matrix @var{Hn} of size @var{n}-by-@var{n}. The + size @var{n} must be of the form @code{2 ^ @var{k} * @var{p}} in which + @var{p} is one of 1, 12, 20 or 28. The returned matrix is normalized, + meaning @code{Hn(:,1) == 1} and @code{H(1,:) == 1}. ! Some of the properties of Hadamard matrices are: ! @itemize @bullet ! @item ! @code{kron (@var{Hm}, @var{Hn})} is a Hadamard matrix of size ! @var{m}-by-@var{n}. ! @item ! @code{Hn * Hn' == @var{n} * eye (@var{n})}. ! @item ! The rows of @var{Hn} are orthogonal. ! @item ! @code{det (@var{A}) <= det (@var{Hn})} for all @var{A} with ! @code{abs (@var{A} (@var{i}, @var{j})) <= 1}. ! @item ! Multiply any row or column by -1 and still have a Hadamard matrix. ! @end itemize ! @end deftypefn ! rosser ! -*- texinfo -*- ! @deftypefn {Function File} {} rosser () ! Returns the Rosser matrix. This is a difficult test case used to test ! eigenvalue algorithms. ! @seealso{hankel, vander, sylvester_matrix, hilb, invhilb, toeplitz ! hadamard, wilkinson, compan, pascal} ! @end deftypefn ! sylvester_matrix ! -*- texinfo -*- ! @deftypefn {Function File} {} sylvester_matrix (@var{k}) ! Return the Sylvester matrix of order ! @iftex ! @tex ! $n = 2^k$. ! @end tex ! @end iftex ! @ifinfo ! n = 2^k. ! @end ifinfo ! @seealso{hankel, vander, hilb, invhilb, toeplitz} ! @end deftypefn ! vander ! -*- texinfo -*- ! @deftypefn {Function File} {} vander (@var{c}) ! Return the Vandermonde matrix whose next to last column is @var{c}. ! A Vandermonde matrix has the form: ! @iftex ! @tex ! $$ ! \left[\matrix{c_1^{n-1} & \cdots & c_1^2 & c_1 & 1 \cr ! c_2^{n-1} & \cdots & c_2^2 & c_2 & 1 \cr ! \vdots & \ddots & \vdots & \vdots & \vdots \cr ! c_n^{n-1} & \cdots & c_n^2 & c_n & 1 }\right] ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! @group ! c(1)^(n-1) ... c(1)^2 c(1) 1 ! c(2)^(n-1) ... c(2)^2 c(2) 1 ! . . . . . ! . . . . . ! . . . . . ! c(n)^(n-1) ... c(n)^2 c(n) 1 @end group @end example + @end ifinfo + @seealso{hankel, sylvester_matrix, hilb, invhilb, toeplitz} @end deftypefn ! invhilb -*- texinfo -*- ! @deftypefn {Function File} {} invhilb (@var{n}) ! Return the inverse of a Hilbert matrix of order @var{n}. This can be ! computed exactly using @tex + $$\eqalign{ + A_{ij} &= -1^{i+j} (i+j-1) + \left( \matrix{n+i-1 \cr n-j } \right) + \left( \matrix{n+j-1 \cr n-i } \right) + \left( \matrix{i+j-2 \cr i-2 } \right)^2 \cr + &= { p(i)p(j) \over (i+j-1) } + }$$ + where $$ ! p(k) = -1^k \left( \matrix{ k+n-1 \cr k-1 } \right) ! \left( \matrix{ n \cr k } \right) $$ @end tex ! @ifinfo ! @example ! ! (i+j) /n+i-1\ /n+j-1\ /i+j-2\ 2 ! A(i,j) = -1 (i+j-1)( )( ) ( ) ! \ n-j / \ n-i / \ i-2 / + = p(i) p(j) / (i+j-1) + + @end example + where @example ! k /k+n-1\ /n\ ! p(k) = -1 ( ) ( ) ! \ k-1 / \k/ @end example + @end ifinfo ! The validity of this formula can easily be checked by expanding ! the binomial coefficients in both formulas as factorials. It can ! be derived more directly via the theory of Cauchy matrices: ! see J. W. Demmel, Applied Numerical Linear Algebra, page 92. ! ! Compare this with the numerical calculation of @code{inverse (hilb (n))}, ! which suffers from the ill-conditioning of the Hilbert matrix, and the ! finite precision of your computer's floating point arithmetic. ! @seealso{hankel, vander, sylvester_matrix, hilb, toeplitz} ! @end deftypefn ! hankel ! -*- texinfo -*- ! @deftypefn {Function File} {} hankel (@var{c}, @var{r}) ! Return the Hankel matrix constructed given the first column @var{c}, and ! (optionally) the last row @var{r}. If the last element of @var{c} is ! not the same as the first element of @var{r}, the last element of ! @var{c} is used. If the second argument is omitted, it is assumed to ! be a vector of zeros with the same size as @var{c}. ! ! A Hankel matrix formed from an m-vector @var{c}, and an n-vector ! @var{r}, has the elements @iftex @tex $$ ! H (i, j) = \cases{c_{i+j-1},&$i+j-1\le m$;\cr r_{i+j-m},&otherwise.\cr} $$ @end tex @end iftex ! @ifinfo @example ! @group ! H(i,j) = c(i+j-1), i+j-1 <= m; ! H(i,j) = r(i+j-m), otherwise ! @end group @end example ! @end ifinfo ! @seealso{vander, sylvester_matrix, hilb, invhilb, toeplitz} ! @end deftypefn ! pascal ! -*- texinfo -*- ! @deftypefn {Function File} {} pascal (@var{n}, @var{t}) ! Return the Pascal matrix of order @var{n} if @code{@var{t} = 0}. ! @var{t} defaults to 0. Return lower triangular Cholesky factor of ! the Pascal matrix if @code{@var{t} = 1}. This matrix is its own ! inverse, that is @code{pascal (@var{n}, 1) ^ 2 == eye (@var{n})}. ! If @code{@var{t} = 2}, return a transposed and permuted version of ! @code{pascal (@var{n}, 1)}, which is the cube-root of the identity ! matrix. That is @code{pascal (@var{n}, 2) ^ 3 == eye (@var{n})}. ! @seealso{hankel, vander, sylvester_matrix, hilb, invhilb, toeplitz ! hadamard, wilkinson, compan, rosser} ! @end deftypefn ! magic ! -*- texinfo -*- ! @deftypefn {Function File} {} magic (@var{n}) ! ! Create an @var{n}-by-@var{n} magic square. Note that @code{magic ! (@var{2})} is undefined since there is no 2-by-2 magic square. @end deftypefn ! toeplitz -*- texinfo -*- ! @deftypefn {Function File} {} toeplitz (@var{c}, @var{r}) ! Return the Toeplitz matrix constructed given the first column @var{c}, ! and (optionally) the first row @var{r}. If the first element of @var{c} ! is not the same as the first element of @var{r}, the first element of ! @var{c} is used. If the second argument is omitted, the first row is ! taken to be the same as the first column. ! ! A square Toeplitz matrix has the form: @iftex @tex $$ ! \left[\matrix{c_0 & r_1 & r_2 & \cdots & r_n\cr ! c_1 & c_0 & r_1 & \cdots & r_{n-1}\cr ! c_2 & c_1 & c_0 & \cdots & r_{n-2}\cr ! \vdots & \vdots & \vdots & \ddots & \vdots\cr ! c_n & c_{n-1} & c_{n-2} & \ldots & c_0}\right] $$ @end tex @end iftex ! @ifinfo @example ! @group ! c(0) r(1) r(2) ... r(n) ! c(1) c(0) r(1) ... r(n-1) ! c(2) c(1) c(0) ... r(n-2) ! . , , . . ! . , , . . ! . , , . . ! c(n) c(n-1) c(n-2) ... c(0) ! @end group @end example + @end ifinfo + @seealso{hankel, vander, sylvester_matrix, hilb, invhilb} + @end deftypefn + wilkinson + -*- texinfo -*- + @deftypefn {Function File} {} wilkinson (@var{n}) ! Return the Wilkinson matrix of order @var{n}. ! ! @seealso{hankel, vander, sylvester_matrix, hilb, invhilb, toeplitz ! hadamard, rosser, compan, pascal} ! @end deftypefn ! hilb ! -*- texinfo -*- ! @deftypefn {Function File} {} hilb (@var{n}) ! Return the Hilbert matrix of order @var{n}. The ! @iftex ! @tex ! $i,\,j$ ! @end tex ! @end iftex ! @ifinfo ! i, j ! @end ifinfo ! element of a Hilbert matrix is defined as @iftex @tex $$ ! H (i, j) = {1 \over (i + j - 1)} $$ @end tex @end iftex ! @ifinfo @example ! H (i, j) = 1 / (i + j - 1) @end example ! @end ifinfo ! @seealso{hankel, vander, sylvester_matrix, invhilb, toeplitz} ! @end deftypefn ! substr ! -*- texinfo -*- ! @deftypefn {Function File} {} substr (@var{s}, @var{offset}, @var{len}) ! Return the substring of @var{s} which starts at character number ! @var{offset} and is @var{len} characters long. ! If @var{offset} is negative, extraction starts that far from the end of ! the string. If @var{len} is omitted, the substring extends to the end ! of S. ! For example, ! ! @example ! substr ("This is a test string", 6, 9) ! @result{} "is a test" ! @end example ! ! This function is patterned after AWK. You can get the same result by ! @code{@var{s} (@var{offset} : (@var{offset} + @var{len} - 1))}. ! @end deftypefn ! strtrim ! -*- texinfo -*- ! @deftypefn {Function File} {} deblank (@var{s}) ! Remove leading and trailing blanks and nulls from @var{s}. If ! @var{s} is a matrix, @var{deblank} trims each row to the length of ! longest string. If @var{s} is a cell array, operate recursively on ! each element of the cell array. ! @end deftypefn ! dec2base ! -*- texinfo -*- ! @deftypefn {Function File} {} dec2base (@var{n}, @var{b}, @var{len}) ! Return a string of symbols in base @var{b} corresponding to ! the nonnegative integer @var{n}. ! ! @example ! dec2base (123, 3) ! @result{} "11120" ! @end example ! ! If @var{n} is a vector, return a string matrix with one row per value, ! padded with leading zeros to the width of the largest value. ! If @var{b} is a string then the characters of @var{b} are used as ! the symbols for the digits of @var{n}. Space (' ') may not be used ! as a symbol. @example ! dec2base (123, "aei") ! @result{} "eeeia" @end example ! The optional third argument, @var{len}, specifies the minimum ! number of digits in the result. ! @seealso{base2dec, dec2bin, bin2dec, hex2dec, dec2hex} ! @end deftypefn ! split ! -*- texinfo -*- ! @deftypefn {Function File} {} split (@var{s}, @var{t}, @var{n}) ! Divides the string @var{s} into pieces separated by @var{t}, returning ! the result in a string array (padded with blanks to form a valid ! matrix). If the optional input @var{n} is supplied, split @var{s} ! into at most @var{n} different pieces. ! For example, @example ! split ("Test string", "t") ! @result{} "Tes " ! " s " ! "ring" @end example @example ! split ("Test string", "t", 2) ! @result{} "Tes " ! " string" @end example + @end deftypefn + findstr + -*- texinfo -*- + @deftypefn {Function File} {} findstr (@var{s}, @var{t}, @var{overlap}) + Return the vector of all positions in the longer of the two strings + @var{s} and @var{t} where an occurrence of the shorter of the two starts. + If the optional argument @var{overlap} is nonzero, the returned vector + can include overlapping positions (this is the default). For example, ! @example ! findstr ("ababab", "a") ! @result{} [ 1, 3, 5 ] ! findstr ("abababa", "aba", 0) ! @result{} [ 1, 5 ] ! @end example ! @end deftypefn ! strcat ! -*- texinfo -*- ! @deftypefn {Function File} {} strcat (@var{s1}, @var{s2}, @dots{}) ! Return a string containing all the arguments concatenated. For example, ! @example ! @group ! s = [ "ab"; "cde" ]; ! strcat (s, s, s) ! @result{} "ab ab ab " ! "cdecdecde" ! @end group ! @end example ! @end deftypefn ! blanks ! -*- texinfo -*- ! @deftypefn {Function File} {} blanks (@var{n}) ! Return a string of @var{n} blanks. ! @seealso{repmat} ! @end deftypefn ! strcmpi ! -*- texinfo -*- ! @deftypefn {Function File} {} strcmpi (@var{s1}, @var{s2}) ! Ignoring case, return 1 if the character strings @var{s1} and @var{s2} ! are the same, and 0 otherwise. ! If either @var{s1} or @var{s2} is a cell array of strings, then an array ! of the same size is returned, containing the values described above for ! every member of the cell array. The other argument may also be a cell ! array of strings (of the same size or with only one element), char matrix ! or character string. ! @strong{Caution:} For compatibility with @sc{Matlab}, Octave's strcmpi ! function returns 1 if the character strings are equal, and 0 otherwise. ! This is just the opposite of the corresponding C library function. ! @seealso{strcmp, strncmp, strncmpi} ! @end deftypefn ! upper ! -*- texinfo -*- ! @deftypefn {Function File} {} upper (@var{s}) ! Transform all letters in the character string (or cell array of ! character strings) @var{s} to upper case. ! @seealso{lower, tolower, toupper} ! @end deftypefn ! strrep ! -*- texinfo -*- ! @deftypefn {Function File} {} strrep (@var{s}, @var{x}, @var{y}) ! Replaces all occurrences of the substring @var{x} of the string @var{s} ! with the string @var{y}. For example, @example ! strrep ("This is a test string", "is", "&%$") ! @result{} "Th&%$ &%$ a test string" @end example + @end deftypefn + rindex + -*- texinfo -*- + @deftypefn {Function File} {} rindex (@var{s}, @var{t}) + Return the position of the last occurrence of the character string + @var{t} in the character string @var{s}, or 0 if no occurrence is + found. For example, ! @example ! rindex ("Teststring", "t") ! @result{} 6 ! @end example ! @strong{Caution:} This function does not work for arrays of ! character strings. ! @seealso{find, index} ! @end deftypefn ! index ! -*- texinfo -*- ! @deftypefn {Function File} {} index (@var{s}, @var{t}) ! @deftypefnx {Function File} {} index (@var{s}, @var{t}, @var{direction}) ! Return the position of the first occurrence of the string @var{t} in the ! string @var{s}, or 0 if no occurrence is found. For example, @example ! index ("Teststring", "t") ! @result{} 4 @end example ! If @var{direction} is @samp{"first"}, return the first element found. ! If @var{direction} is @samp{"last"}, return the last element found. ! The @code{rindex} function is equivalent to @code{index} with ! @var{direction} set to @samp{"last"}. ! @strong{Caution:} This function does not work for arrays of ! character strings. ! @seealso{find, rindex} ! @end deftypefn ! strjust ! -*- texinfo -*- ! @deftypefn {Function File} {} strjust (@var{s}, ["left"|"right"|"center"]) ! Shift the non-blank text of @var{s} to the left, right or center of ! the string. If @var{s} is a string array, justify each string in the ! array. Null characters are replaced by blanks. If no justification ! is specified, then all rows are right-justified. ! @end deftypefn ! dec2bin ! -*- texinfo -*- ! @deftypefn {Function File} {} dec2bin (@var{n}, @var{len}) ! Return a binary number corresponding the nonnegative decimal number ! @var{n}, as a string of ones and zeros. For example, ! @example ! dec2bin (14) ! @result{} "1110" ! @end example ! If @var{n} is a vector, returns a string matrix, one row per value, ! padded with leading zeros to the width of the largest value. ! The optional second argument, @var{len}, specifies the minimum ! number of digits in the result. ! @seealso{bin2dec, dec2base, base2dec, hex2dec, dec2hex} ! @end deftypefn ! bin2dec ! -*- texinfo -*- ! @deftypefn {Function File} {} bin2dec (@var{s}) ! Return the decimal number corresponding to the binary number stored ! in the string @var{s}. For example, ! @example ! bin2dec ("1110") ! @result{} 14 @end example ! If @var{s} is a string matrix, returns a column vector of converted ! numbers, one per row of @var{s}. Invalid rows evaluate to NaN. ! @seealso{dec2hex, base2dec, dec2base, hex2dec, dec2bin} ! @end deftypefn ! hex2dec ! -*- texinfo -*- ! @deftypefn {Function File} {} hex2dec (@var{s}) ! Return the integer corresponding to the hexadecimal number stored ! in the string @var{s}. For example, ! ! @example ! hex2dec ("12B") ! @result{} 299 ! hex2dec ("12b") ! @result{} 299 ! @end example ! ! If @var{s} is a string matrix, returns a column vector of converted ! numbers, one per row of @var{s}. Invalid rows evaluate to NaN. ! @seealso{dec2hex, base2dec, dec2base, bin2dec, dec2bin} @end deftypefn ! strvcat -*- texinfo -*- ! @deftypefn {Function File} {} strvcat (@var{s_1}, @dots{}, @var{s_n}) ! Return a matrix containing the strings (and cell-strings) ! @var{s_1}, @dots{}, @var{s_n} as ! its rows. Each string is padded with blanks in order to form a valid ! matrix. Unlike @var{str2mat}, empty strings are ignored. ! @seealso{strcat, str2mat} @end deftypefn ! base2dec -*- texinfo -*- ! @deftypefn {Function File} {} base2dec (@var{s}, @var{b}) ! Convert @var{s} from a string of digits of base @var{b} into an ! integer. @example ! base2dec ("11120", 3) ! @result{} 123 @end example ! If @var{s} is a matrix, returns a column vector with one value per ! row of @var{s}. If a row contains invalid symbols then the ! corresponding value will be NaN. Rows are right-justified before ! converting so that trailing spaces are ignored. ! If @var{b} is a string, the characters of @var{b} are used as the ! symbols for the digits of @var{s}. Space (' ') may not be used as a ! symbol. ! @example ! base2dec ("yyyzx", "xyz") ! @result{} 123 ! @end example ! @seealso{dec2base, dec2bin, bin2dec, hex2dec, dec2hex} ! @end deftypefn ! lower ! -*- texinfo -*- ! @deftypefn {Function File} {} lower (@var{s}) ! Transform all letters in the character string (or cell array of ! character strings) @var{s} to lower case. ! @seealso{upper, tolower, toupper} ! @end deftypefn ! str2mat ! -*- texinfo -*- ! @deftypefn {Function File} {} str2mat (@var{s_1}, @dots{}, @var{s_n}) ! Return a matrix containing the strings @var{s_1}, @dots{}, @var{s_n} as ! its rows. Each string is padded with blanks in order to form a valid ! matrix. ! This function is modelled after @sc{Matlab}. In Octave, you can create ! a matrix of strings by @code{[@var{s_1}; @dots{}; @var{s_n}]} even if ! the strings are not all the same length. ! @end deftypefn ! strtok ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{tok}, @var{rem}] =} strtok (@var{str}, @var{delim}) ! Find all characters up to but not including the first character which ! is in the string delim. If @var{rem} is requested, it contains the ! remainder of the string, starting at the first deliminator. Leading ! delimiters are ignored. If @var{delim} is not specified, space is assumed. ! @end deftypefn ! strtrunc ! -*- texinfo -*- ! @deftypefn {Function File} {} strtrunc (@var{s}, @var{n}) ! Truncate the character string @var{s} to length @var{n}. If @var{s} ! is a char matrix, then the number of columns are adjusted. ! If @var{s} is a cell array of strings, then the operation is performed ! on its members and the new cell array is returned. ! @end deftypefn ! strmatch ! -*- texinfo -*- ! @deftypefn {Function File} {} strmatch (@var{s}, @var{a}, "exact") ! Return indices of entries of @var{a} that match the string @var{s}. ! The second argument @var{a} may be a string matrix or a cell array of ! strings. If the third argument @code{"exact"} is not given, then ! @var{s} only needs to match @var{a} up to the length of @var{s}. Nul ! characters match blanks. Results are returned as a column vector. ! @end deftypefn ! mat2str ! -*- texinfo -*- ! @deftypefn {Function File} {@var{s} =} mat2str (@var{x}, @var{n}) ! @deftypefnx {Function File} {@var{s} =} mat2str (@dots{}, 'class') ! ! Format real/complex numerical matrices as strings. This function ! returns values that are suitable for the use of the @code{eval} ! function. ! ! The precision of the values is given by @var{n}. If @var{n} is a ! scalar then both real and imaginary parts of the matrix are printed ! to the same precision. Otherwise @code{@var{n} (1)} defines the ! precision of the real part and @code{@var{n} (2)} defines the ! precision of the imaginary part. The default for @var{n} is 17. ! ! If the argument 'class' is given, then the class of @var{x} is ! included in the string in such a way that the eval will result in the ! construction of a matrix of the same class. @example ! @group ! mat2str( [ -1/3 + i/7; 1/3 - i/7 ], [4 2] ) ! @result{} '[-0.3333+0.14i;0.3333-0.14i]' ! mat2str( [ -1/3 +i/7; 1/3 -i/7 ], [4 2] ) ! @result{} '[-0.3333+0i,0+0.14i;0.3333+0i,-0-0.14i]' ! mat2str( int16([1 -1]), 'class') ! @result{} 'int16([1,-1])' ! @end group @end example ! @seealso{sprintf, int2str} ! @end deftypefn ! strfind ! -*- texinfo -*- ! @deftypefn {Function File} {@var{idx} =} strfind (@var{str}, @var{pattern}) ! @deftypefnx {Function File} {@var{idx} =} strfind (@var{cellstr}, @var{pattern}) ! Search for @var{pattern} in the string @var{str} and return the ! starting index of every such occurrence in the vector @var{idx}. ! If there is no such occurrence, or if @var{pattern} is longer ! than @var{str}, then @var{idx} is the empty array @code{[]}. ! ! If the cell array of strings @var{cellstr} is specified instead of the ! string @var{str}, then @var{idx} is a cell array of vectors, as specified ! above. ! @seealso{findstr, strmatch, strcmp, strncmp, strcmpi, strncmpi} ! @end deftypefn ! deblank ! -*- texinfo -*- ! @deftypefn {Function File} {} deblank (@var{s}) ! Remove trailing blanks and nulls from @var{s}. If @var{s} ! is a matrix, @var{deblank} trims each row to the length of longest ! string. If @var{s} is a cell array, operate recursively on each ! element of the cell array. ! @end deftypefn ! isletter ! -*- texinfo -*- ! @deftypefn {Function File} {} isletter (@var{s}) ! Returns true if @var{s} is a letter false otherwise. ! @seealso{isalpha} ! @end deftypefn ! str2double ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{num}, @var{status}, @var{strarray}] =} str2double (@var{str}, @var{cdelim}, @var{rdelim}, @var{ddelim}) ! Convert strings into numeric values. ! ! @code{str2double} can replace @code{str2num}, but avoids the use of ! @code{eval} on unknown data. ! ! @var{str} can be the form @samp{[+-]d[.]dd[[eE][+-]ddd]} in which ! @samp{d} can be any of digit from 0 to 9, and @samp{[]} indicate ! optional elements. ! ! @var{num} is the corresponding numeric value. If the conversion ! fails, status is -1 and @var{num} is NaN. ! ! @var{status} is 0 if the conversion was successful and -1 otherwise. ! @var{strarray} is a cell array of strings. ! Elements which are not defined or not valid return NaN and the ! @var{status} becomes -1. ! If @var{str} is a character array or a cell array of strings, then ! @var{num} and @var{status} return matrices of appropriate size. ! @var{str} can also contain multiple elements separated by row and ! column delimiters (@var{cdelim} and @var{rdelim}). ! ! The parameters @var{cdelim}, @var{rdelim}, and @var{ddelim} are ! optional column, row, and decimal delimiters. ! ! The default row-delimiters are newline, carriage return and semicolon ! (ASCII 10, 13 and 59). The default column-delimiters are tab, space ! and comma (ASCII 9, 32, and 44). The default decimal delimiter is ! @samp{.} (ASCII 46). ! ! @var{cdelim}, @var{rdelim}, and @var{ddelim} must contain only nul, ! newline, carriage return, semicolon, colon, slash, tab, space, comma, ! or @samp{()[]@{@}} (ASCII 0, 9, 10, 11, 12, 13, 14, 32, 33, 34, 40, ! 41, 44, 47, 58, 59, 91, 93, 123, 124, 125). ! ! Examples: @example ! str2double ("-.1e-5") ! @result{} -1.0000e-006 ! str2double (".314e1, 44.44e-1, .7; -1e+1") ! @result{} ! 3.1400 4.4440 0.7000 ! -10.0000 NaN NaN ! line = "200, 300, NaN, -inf, yes, no, 999, maybe, NaN"; ! [x, status] = str2double (line) ! @result{} x = ! 200 300 NaN -Inf NaN NaN 999 NaN NaN ! @result{} status = ! 0 0 0 0 -1 -1 0 -1 0 ! @end example @end deftypefn ! strncmpi -*- texinfo -*- ! @deftypefn {Function File} {} strncmpi (@var{s1}, @var{s2}, @var{n}) ! Ignoring case, return 1 if the first @var{n} characters of character ! strings @var{s1} and @var{s2} are the same, and 0 otherwise. ! If either @var{s1} or @var{s2} is a cell array of strings, then an array ! of the same size is returned, containing the values described above for ! every member of the cell array. The other argument may also be a cell ! array of strings (of the same size or with only one element), char matrix ! or character string. ! @strong{Caution:} For compatibility with @sc{Matlab}, Octave's strncmpi ! function returns 1 if the character strings are equal, and 0 otherwise. ! This is just the opposite of the corresponding C library function. ! @seealso{strcmp, strcmpi, strncmp} @end deftypefn ! dec2hex -*- texinfo -*- ! @deftypefn {Function File} {} dec2hex (@var{n}, @var{len}) ! Return the hexadecimal string corresponding to the nonnegative ! integer @var{n}. For example, ! @example ! dec2hex (2748) ! @result{} "ABC" ! @end example ! If @var{n} is a vector, returns a string matrix, one row per value, ! padded with leading zeros to the width of the largest value. ! ! The optional second argument, @var{len}, specifies the minimum ! number of digits in the result. ! @seealso{hex2dec, dec2base, base2dec, bin2dec, dec2bin} @end deftypefn ! str2num -*- texinfo -*- ! @deftypefn {Function File} {} str2num (@var{s}) ! Convert the string @var{s} to a number. @end deftypefn ! __fsolve_defopts__ ! Undocumented internal function. ! glpk -*- texinfo -*- ! @deftypefn {Function File} {[@var{xopt}, @var{fmin}, @var{status}, @var{extra}] =} glpk (@var{c}, @var{a}, @var{b}, @var{lb}, @var{ub}, @var{ctype}, @var{vartype}, @var{sense}, @var{param}) ! Solve a linear program using the GNU GLPK library. Given three ! arguments, @code{glpk} solves the following standard LP: ! @iftex ! @tex ! $$ ! \min_x C^T x ! $$ ! @end tex ! @end iftex ! @ifnottex ! @example ! min C'*x ! @end example ! @end ifnottex ! subject to ! @iftex ! @tex ! $$ ! Ax = b \qquad x \geq 0 ! $$ ! @end tex ! @end iftex ! @ifnottex ! @example ! @group ! A*x = b ! x >= 0 ! @end group ! @end example ! @end ifnottex ! but may also solve problems of the form + @iftex + @tex + $$ + [ \min_x | \max_x ] C^T x + $$ + @end tex + @end iftex + @ifnottex @example ! [ min | max ] C'*x @end example + @end ifnottex ! subject to + @iftex + @tex + $$ + Ax [ = | \leq | \geq ] b \qquad LB \leq x \leq UB + $$ + @end tex + @end iftex + @ifnottex @example ! @group ! A*x [ "=" | "<=" | ">=" ] b ! x >= LB ! x <= UB ! @end group @end example + @end ifnottex ! Input arguments: ! @table @var ! @item c ! A column array containing the objective function coefficients. ! ! @item a ! A matrix containing the constraints coefficients. ! ! @item b ! A column array containing the right-hand side value for each constraint ! in the constraint matrix. ! ! @item lb ! An array containing the lower bound on each of the variables. If ! @var{lb} is not supplied, the default lower bound for the variables is ! zero. + @item ub + An array containing the upper bound on each of the variables. If + @var{ub} is not supplied, the default upper bound is assumed to be + infinite. + + @item ctype + An array of characters containing the sense of each constraint in the + constraint matrix. Each element of the array may be one of the + following values @table @code ! @item "F" ! A free (unbounded) constraint (the constraint is ignored). ! @item "U" ! An inequality constraint with an upper bound (@code{A(i,:)*x <= b(i)}). ! @item "S" ! An equality constraint (@code{A(i,:)*x = b(i)}). ! @item "L" ! An inequality with a lower bound (@code{A(i,:)*x >= b(i)}). ! @item "D" ! An inequality constraint with both upper and lower bounds ! (@code{A(i,:)*x >= -b(i)} @emph{and} (@code{A(i,:)*x <= b(i)}). @end table ! @item vartype ! A column array containing the types of the variables. @table @code ! @item "C" ! A continuous variable. ! @item "I" ! An integer variable. @end table ! @item sense ! If @var{sense} is 1, the problem is a minimization. If @var{sense} is ! -1, the problem is a maximization. The default value is 1. ! @item param ! A structure containing the following parameters used to define the ! behavior of solver. Missing elements in the structure take on default ! values, so you only need to set the elements that you wish to change ! from the default. ! ! Integer parameters: @table @code ! @item msglev (@code{LPX_K_MSGLEV}, default: 1) ! Level of messages output by solver routines: ! @table @asis ! @item 0 ! No output. ! @item 1 ! Error messages only. ! @item 2 ! Normal output . ! @item 3 ! Full output (includes informational messages). @end table ! @item scale (@code{LPX_K_SCALE}, default: 1) ! Scaling option: ! @table @asis ! @item 0 ! No scaling. ! @item 1 ! Equilibration scaling. ! @item 2 ! Geometric mean scaling, then equilibration scaling. ! @end table ! @item dual (@code{LPX_K_DUAL}, default: 0) ! Dual simplex option: ! @table @asis ! @item 0 ! Do not use the dual simplex. ! @item 1 ! If initial basic solution is dual feasible, use the dual simplex. @end table ! @item price (@code{LPX_K_PRICE}, default: 1) ! Pricing option (for both primal and dual simplex): ! @table @asis ! @item 0 ! Textbook pricing. ! @item 1 ! Steepest edge pricing. ! @end table ! ! @item round (@code{LPX_K_ROUND}, default: 0) ! Solution rounding option: ! @table @asis ! @item 0 ! Report all primal and dual values "as is". ! @item 1 ! Replace tiny primal and dual values by exact zero. ! @end table ! @item itlim (@code{LPX_K_ITLIM}, default: -1) ! Simplex iterations limit. If this value is positive, it is decreased by ! one each time when one simplex iteration has been performed, and ! reaching zero value signals the solver to stop the search. Negative ! value means no iterations limit. ! ! @item itcnt (@code{LPX_K_OUTFRQ}, default: 200) ! Output frequency, in iterations. This parameter specifies how ! frequently the solver sends information about the solution to the ! standard output. ! ! @item branch (@code{LPX_K_BRANCH}, default: 2) ! Branching heuristic option (for MIP only): ! @table @asis ! @item 0 ! Branch on the first variable. ! @item 1 ! Branch on the last variable. ! @item 2 ! Branch using a heuristic by Driebeck and Tomlin. ! @end table ! ! @item btrack (@code{LPX_K_BTRACK}, default: 2) ! Backtracking heuristic option (for MIP only): ! @table @asis ! @item 0 ! Depth first search. ! @item 1 ! Breadth first search. ! @item 2 ! Backtrack using the best projection heuristic. ! @end table ! ! @item presol (@code{LPX_K_PRESOL}, default: 1) ! If this flag is set, the routine lpx_simplex solves the problem using ! the built-in LP presolver. Otherwise the LP presolver is not used. ! ! @item lpsolver (default: 1) ! Select which solver to use. If the problem is a MIP problem this flag ! will be ignored. ! @table @asis ! @item 1 ! Revised simplex method. ! @item 2 ! Interior point method. ! @end table ! @item save (default: 0) ! If this parameter is nonzero, save a copy of the problem in ! CPLEX LP format to the file @file{"outpb.lp"}. There is currently no ! way to change the name of the output file. ! @end table ! Real parameters: ! @table @code ! @item relax (@code{LPX_K_RELAX}, default: 0.07) ! Relaxation parameter used in the ratio test. If it is zero, the textbook ! ratio test is used. If it is non-zero (should be positive), Harris' ! two-pass ratio test is used. In the latter case on the first pass of the ! ratio test basic variables (in the case of primal simplex) or reduced ! costs of non-basic variables (in the case of dual simplex) are allowed ! to slightly violate their bounds, but not more than ! @code{relax*tolbnd} or @code{relax*toldj (thus, @code{relax} is a ! percentage of @code{tolbnd} or @code{toldj}}. ! @item tolbnd (@code{LPX_K_TOLBND}, default: 10e-7) ! Relative tolerance used to check if the current basic solution is primal ! feasible. It is not recommended that you change this parameter unless you ! have a detailed understanding of its purpose. ! @item toldj (@code{LPX_K_TOLDJ}, default: 10e-7) ! Absolute tolerance used to check if the current basic solution is dual ! feasible. It is not recommended that you change this parameter unless you ! have a detailed understanding of its purpose. ! @item tolpiv (@code{LPX_K_TOLPIV}, default: 10e-9) ! Relative tolerance used to choose eligible pivotal elements of the ! simplex table. It is not recommended that you change this parameter unless you ! have a detailed understanding of its purpose. ! @item objll (@code{LPX_K_OBJLL}, default: -DBL_MAX) ! Lower limit of the objective function. If on the phase II the objective ! function reaches this limit and continues decreasing, the solver stops ! the search. This parameter is used in the dual simplex method only. ! @item objul (@code{LPX_K_OBJUL}, default: +DBL_MAX) ! Upper limit of the objective function. If on the phase II the objective ! function reaches this limit and continues increasing, the solver stops ! the search. This parameter is used in the dual simplex only. ! @item tmlim (@code{LPX_K_TMLIM}, default: -1.0) ! Searching time limit, in seconds. If this value is positive, it is ! decreased each time when one simplex iteration has been performed by the ! amount of time spent for the iteration, and reaching zero value signals ! the solver to stop the search. Negative value means no time limit. ! @item outdly (@code{LPX_K_OUTDLY}, default: 0.0) ! Output delay, in seconds. This parameter specifies how long the solver ! should delay sending information about the solution to the standard ! output. Non-positive value means no delay. ! @item tolint (@code{LPX_K_TOLINT}, default: 10e-5) ! Relative tolerance used to check if the current basic solution is integer ! feasible. It is not recommended that you change this parameter unless ! you have a detailed understanding of its purpose. ! @item tolobj (@code{LPX_K_TOLOBJ}, default: 10e-7) ! Relative tolerance used to check if the value of the objective function ! is not better than in the best known integer feasible solution. It is ! not recommended that you change this parameter unless you have a ! detailed understanding of its purpose. ! @end table ! @end table ! Output values: ! @table @var ! @item xopt ! The optimizer (the value of the decision variables at the optimum). ! @item fopt ! The optimum value of the objective function. ! @item status ! Status of the optimization. + Simplex Method: @table @asis ! @item 180 (@code{LPX_OPT}) ! Solution is optimal. ! @item 181 (@code{LPX_FEAS}) ! Solution is feasible. ! @item 182 (@code{LPX_INFEAS}) ! Solution is infeasible. ! @item 183 (@code{LPX_NOFEAS}) ! Problem has no feasible solution. ! @item 184 (@code{LPX_UNBND}) ! Problem has no unbounded solution. ! @item 185 (@code{LPX_UNDEF}) ! Solution status is undefined. @end table + Interior Point Method: + @table @asis + @item 150 (@code{LPX_T_UNDEF}) + The interior point method is undefined. + @item 151 (@code{LPX_T_OPT}) + The interior point method is optimal. + @end table + Mixed Integer Method: + @table @asis + @item 170 (@code{LPX_I_UNDEF}) + The status is undefined. + @item 171 (@code{LPX_I_OPT}) + The solution is integer optimal. + @item 172 (@code{LPX_I_FEAS}) + Solution integer feasible but its optimality has not been proven + @item 173 (@code{LPX_I_NOFEAS}) + No integer feasible solution. + @end table + @noindent + If an error occurs, @var{status} will contain one of the following + codes: ! @table @asis ! @item 204 (@code{LPX_E_FAULT}) ! Unable to start the search. ! @item 205 (@code{LPX_E_OBJLL}) ! Objective function lower limit reached. ! @item 206 (@code{LPX_E_OBJUL}) ! Objective function upper limit reached. ! @item 207 (@code{LPX_E_ITLIM}) ! Iterations limit exhausted. ! @item 208 (@code{LPX_E_TMLIM}) ! Time limit exhausted. ! @item 209 (@code{LPX_E_NOFEAS}) ! No feasible solution. ! @item 210 (@code{LPX_E_INSTAB}) ! Numerical instability. ! @item 211 (@code{LPX_E_SING}) ! Problems with basis matrix. ! @item 212 (@code{LPX_E_NOCONV}) ! No convergence (interior). ! @item 213 (@code{LPX_E_NOPFS}) ! No primal feasible solution (LP presolver). ! @item 214 (@code{LPX_E_NODFS}) ! No dual feasible solution (LP presolver). ! @end table ! @item extra ! A data structure containing the following fields: ! @table @code ! @item lambda ! Dual variables. ! @item redcosts ! Reduced Costs. ! @item time ! Time (in seconds) used for solving LP/MIP problem. ! @item mem ! Memory (in bytes) used for solving LP/MIP problem (this is not ! available if the version of GLPK is 4.15 or later). ! @end table ! @end table ! Example: @example @group ! c = [10, 6, 4]'; ! a = [ 1, 1, 1; ! 10, 4, 5; ! 2, 2, 6]; ! b = [100, 600, 300]'; ! lb = [0, 0, 0]'; ! ub = []; ! ctype = "UUU"; ! vartype = "CCC"; ! s = -1; ! param.msglev = 1; ! param.itlim = 100; ! [xmin, fmin, status, extra] = ... ! glpk (c, a, b, lb, ub, ctype, vartype, s, param); @end group @end example @end deftypefn ! qp -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{obj}, @var{info}, @var{lambda}] =} qp (@var{x0}, @var{H}, @var{q}, @var{A}, @var{b}, @var{lb}, @var{ub}, @var{A_lb}, @var{A_in}, @var{A_ub}) ! Solve the quadratic program ! @iftex ! @tex ! $$ ! \min_x {1 \over 2} x^T H x + x^T q ! $$ ! @end tex ! @end iftex ! @ifnottex @example ! min 0.5 x'*H*x + x'*q ! x @end example ! @end ifnottex ! subject to ! @iftex ! @tex ! $$ ! Ax = b \qquad lb \leq x \leq ub \qquad A_{lb} \leq A_{in} \leq A_{ub} ! $$ ! @end tex ! @end iftex ! @ifnottex @example ! A*x = b ! lb <= x <= ub ! A_lb <= A_in*x <= A_ub @end example + @end ifnottex @noindent ! using a null-space active-set method. ! Any bound (@var{A}, @var{b}, @var{lb}, @var{ub}, @var{A_lb}, ! @var{A_ub}) may be set to the empty matrix (@code{[]}) if not ! present. If the initial guess is feasible the algorithm is faster. ! The value @var{info} is a structure with the following fields: ! @table @code ! @item solveiter ! The number of iterations required to find the solution. ! @item info ! An integer indicating the status of the solution, as follows: ! @table @asis ! @item 0 ! The problem is feasible and convex. Global solution found. ! @item 1 ! The problem is not convex. Local solution found. ! @item 2 ! The problem is not convex and unbounded. ! @item 3 ! Maximum number of iterations reached. ! @item 6 ! The problem is infeasible. ! @end table ! @end table @end deftypefn ! sqp -*- texinfo -*- ! @deftypefn {Function File} {[@var{x}, @var{obj}, @var{info}, @var{iter}, @var{nf}, @var{lambda}] =} sqp (@var{x}, @var{phi}, @var{g}, @var{h}) ! Solve the nonlinear program ! @iftex ! @tex ! $$ ! \min_x \phi (x) ! $$ ! @end tex ! @end iftex ! @ifnottex @example ! min phi (x) ! x @end example ! @end ifnottex ! subject to ! @iftex ! @tex ! $$ ! g(x) = 0 \qquad h(x) \geq 0 ! $$ ! @end tex ! @end iftex ! @ifnottex @example ! g(x) = 0 ! h(x) >= 0 @end example + @end ifnottex @noindent ! using a successive quadratic programming method. ! The first argument is the initial guess for the vector @var{x}. ! ! The second argument is a function handle pointing to the objective ! function. The objective function must be of the form @example ! y = phi (x) @end example @noindent ! in which @var{x} is a vector and @var{y} is a scalar. ! The second argument may also be a 2- or 3-element cell array of ! function handles. The first element should point to the objective ! function, the second should point to a function that computes the ! gradient of the objective function, and the third should point to a ! function to compute the hessian of the objective function. If the ! gradient function is not supplied, the gradient is computed by finite ! differences. If the hessian function is not supplied, a BFGS update ! formula is used to approximate the hessian. ! If supplied, the gradient function must be of the form @example ! g = gradient (x) @end example ! @noindent ! in which @var{x} is a vector and @var{g} is a vector. ! If supplied, the hessian function must be of the form @example ! h = hessian (x) @end example ! @noindent ! in which @var{x} is a vector and @var{h} is a matrix. ! The third and fourth arguments are function handles pointing to ! functions that compute the equality constraints and the inequality ! constraints, respectively. ! If your problem does not have equality (or inequality) constraints, ! you may pass an empty matrix for @var{cef} (or @var{cif}). ! If supplied, the equality and inequality constraint functions must be ! of the form @example ! r = f (x) @end example @noindent ! in which @var{x} is a vector and @var{r} is a vector. ! The third and fourth arguments may also be 2-element cell arrays of ! function handles. The first element should point to the constraint ! function and the second should point to a function that computes the ! gradient of the constraint function: + @iftex + @tex + $$ + \Bigg( {\partial f(x) \over \partial x_1}, + {\partial f(x) \over \partial x_2}, \ldots, + {\partial f(x) \over \partial x_N} \Bigg)^T + $$ + @end tex + @end iftex + @ifnottex @example ! [ d f(x) d f(x) d f(x) ] ! transpose ( [ ------ ----- ... ------ ] ) ! [ dx_1 dx_2 dx_N ] @end example + @end ifnottex ! Here is an example of calling @code{sqp}: @example ! function r = g (x) ! r = [ sumsq(x)-10; ! x(2)*x(3)-5*x(4)*x(5); ! x(1)^3+x(2)^3+1 ]; ! endfunction ! function obj = phi (x) ! obj = exp(prod(x)) - 0.5*(x(1)^3+x(2)^3+1)^2; ! endfunction ! x0 = [-1.8; 1.7; 1.9; -0.8; -0.8]; ! [x, obj, info, iter, nf, lambda] = sqp (x0, @@phi, @@g, []) ! ! x = ! ! -1.71714 ! 1.59571 ! 1.82725 ! -0.76364 ! -0.76364 ! ! obj = 0.053950 ! info = 101 ! iter = 8 ! nf = 10 ! lambda = ! ! -0.0401627 ! 0.0379578 ! -0.0052227 @end example ! The value returned in @var{info} may be one of the following: ! @table @asis ! @item 101 ! The algorithm terminated because the norm of the last step was less ! than @code{tol * norm (x))} (the value of tol is currently fixed at ! @code{sqrt (eps)}---edit @file{sqp.m} to modify this value. ! @item 102 ! The BFGS update failed. ! @item 103 ! The maximum number of iterations was reached (the maximum number of ! allowed iterations is currently fixed at 100---edit @file{sqp.m} to ! increase this value). ! @end table ! @seealso{qp} @end deftypefn ! glpkmex -*- texinfo -*- ! @deftypefn {Function File} {[@var{xopt}, @var{fmin}, @var{status}, @var{extra}] =} glpkmex (@var{sense}, @var{c}, @var{a}, @var{b}, @var{ctype}, @var{lb}, @var{ub}, @var{vartype}, @var{param}, @var{lpsolver}, @var{save_pb}) ! This function is provided for compatibility with the old @sc{Matlab} ! interface to the GNU GLPK library. For Octave code, you should use ! the @code{glpk} function instead. @end deftypefn ! optimset -*- texinfo -*- ! @deftypefn {Function File} {} optimset () ! @deftypefnx {Function File} {} optimset (@var{par}, @var{val}, @dots{}) ! @deftypefnx {Function File} {} optimset (@var{old}, @var{par}, @var{val}, @dots{}) ! @deftypefnx {Function File} {} optimset (@var{old}, @var{new}) ! Create options struct for optimization functions. @end deftypefn ! dlqg ! O B S O L E T E * * * D O N O T U S E! ! Use lqg instead. ! function [K,Q,P,Ee,Er] = dlqg(A,B,C,G,Sigw,Sigv,Q,R) ! function [K,Q,P,Ee,Er] = dlqg(Sys,Sigw,Sigv,Q,R) ! design a discrete-time linear quadratic gaussian optimal controller ! for the system ! x(k+1) = A x(k) + B u(k) + G w(k) [w]=N(0,[Sigw 0 ]) ! y(k) = C x(k) + v(k) [v] ( 0 Sigv ]) ! Outputs: ! K: system data structure format LQG optimal controller ! P: Solution of control (state feedback) algebraic Riccati equation ! Q: Solution of estimation algebraic Riccati equation ! Ee: estimator poles ! Es: controller poles ! inputs: ! A,B,C,G, or Sys: state space representation of system. ! Sigw, Sigv: covariance matrices of independent Gaussian noise processes ! (as above) ! Q, R: state, control weighting matrices for dlqr call respectively. ! See also: lqg, dlqe, dlqr ! swapcols -*- texinfo -*- ! @deftypefn {Function File} {} swapcols (inputs) ! @format ! function B = swapcols(A) ! permute columns of A into reverse order ! @end format @end deftypefn ! rotg ! function [c,s] = rotg(a,b) ! givens rotation calculation ! ! NOTE: Use [c,s] = givens(a,b) instead. ! swaprows -*- texinfo -*- ! @deftypefn {Function File} {} swaprows (inputs) ! @format ! function B = swaprows(A) ! permute rows of A into reverse order ! @end format @end deftypefn ! dezero -*- texinfo -*- ! @deftypefn {Functin File} {} dezero (@var{s}) ! Remove trailing blank entries and all zero entries from the string s. @end deftypefn ! packsys ! O B S O L E T E: use ss instead. ! function Asys = packsys(a,b,c[,d,dflg]) ! dflg: 0 for continuous time system, 1 for discrete-time system. ! defaults: ! D: 0 matrix of appropriate dimension. ! dflg: 0 (continuous time) ! Note: discrete-state sampling time is not included! ! unpacksys ! [a,b,c,d] = unpacksys(sys) ! Obsolete. Use sys2ss instead. ! minfo ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{systype}, @var{nout}, @var{nin}, @var{ncstates}, @var{ndstates}] =} minfo (@var{inmat}) ! Determines the type of system matrix. @var{inmat} can be a varying, ! a system, a constant, and an empty matrix. ! @strong{Outputs} ! @table @var ! @item systype ! Can be one of: varying, system, constant, and empty. ! @item nout ! The number of outputs of the system. ! @item nin ! The number of inputs of the system. ! @item ncstates ! The number of continuous states of the system. ! @item ndstates ! The number of discrete states of the system. @end table @end deftypefn ! qzval -*- texinfo -*- ! @deftypefn {Function File} {} qzval (@var{a}, @var{b}) ! Compute generalized eigenvalues of the matrix pencil ! @ifinfo ! @example ! (A - lambda B). ! @end example ! @end ifinfo ! @iftex ! @tex ! $(A - \lambda B)$. ! @end tex ! @end iftex ! ! @var{a} and @var{b} must be real matrices. ! ! @code{qzval} is obsolete; use @code{qz} instead. ! @end deftypefn ! series ! Forms the series connection of two systems. ! Superseded by sysmult. Do not use this routine! ! used internally in zp2ss ! ! Type of input: Transfer functions ! Command: [num,den]=series(num1,den1,num2,den2) ! Forms the series representation of the two transfer functions. ! ! Type of input: State space systems ! Command: [a,b,c,d]=series(a1,b1,c1,d1,a2,b2,c2,d2) ! Forms the series representation of the two state space system arguments. ! The series connected system will have the inputs of system 1 and the ! outputs of system 2. ! ! Type of input: system data structure ! Command: syst=series(syst1,syst2) ! Forms the series representation of the two mu system arguments. ! syschnames ! -*- texinfo -*- ! @deftypefn {Function File} {} syschnames (@var{sys}, @var{opt}, @var{list}, @var{names}) ! Superseded by @command{syssetsignals}. @end deftypefn ! zgsgiv -*- texinfo -*- ! @deftypefn {Function File} {[a, b] =} zgsgiv (@var{c}, @var{s}, @var{a}, @var{b}) ! Apply givens rotation c,s to row vectors @var{a}, @var{b}. ! No longer used in zero-balancing (__zgpbal__); kept for backward ! compatibility. @end deftypefn ! sortcom -*- texinfo -*- ! @deftypefn {Function File} {[@var{yy}, @var{idx}] =} sortcom (@var{xx}[, @var{opt}]) ! Sort a complex vector. ! @strong{Inputs} ! @table @var ! @item xx ! Complex vector ! @item opt ! sorting option: ! @table @code ! @item "re" ! Real part (default); ! @item "mag" ! By magnitude; ! @item "im" ! By imaginary part. ! @end table ! if @var{opt} is not chosen as @code{"im"}, then complex conjugate pairs are grouped together, ! @math{a - jb} followed by @math{a + jb}. ! @end table ! @strong{Outputs} ! @table @var ! @item yy ! Sorted values ! @item idx ! Permutation vector: @code{yy = xx(idx)} ! @end table @end deftypefn ! zgscal -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} zgscal (@var{f}, @var{z}, @var{n}, @var{m}, @var{p}) ! Generalized conjugate gradient iteration to ! solve zero-computation generalized eigenvalue problem balancing equation ! @math{fx=z}; called by @command{zgepbal}. @end deftypefn ! swap -*- texinfo -*- ! @deftypefn {Function File} {} swap (@var{inputs}) ! @format ! [a1,b1] = swap(a,b) ! interchange a and b ! @end format @end deftypefn ! zgfmul -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} zgfmul (@var{a}, @var{b}, @var{c}, @var{d}, @var{x}) ! Compute product of @var{zgep} incidence matrix @math{F} with vector @var{x}. ! Used by @command{zgepbal} (in @command{zgscal}) as part of generalized conjugate gradient ! iteration. @end deftypefn ! zginit -*- texinfo -*- ! @deftypefn {Function File} {@var{zz} =} zginit (@var{a}, @var{b}, @var{c}, @var{d}) ! Construct right hand side vector @var{zz} ! for the zero-computation generalized eigenvalue problem ! balancing procedure. Called by @command{zgepbal}. @end deftypefn ! strappend -*- texinfo -*- ! @deftypefn {Function File} {} strappend (@var{strlist}, @var{suffix}) ! Append string @var{suffix} to each string in the list @var{strlist}. @end deftypefn ! zgfslv -*- texinfo -*- ! @deftypefn {Function File} {} zgfslv (@var{n}, @var{m}, @var{p}, @var{b}) ! Solve system of equations for dense zgep problem. @end deftypefn ! zgshsr -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} zgshsr (@var{y}) ! Apply householder vector based on ! @iftex ! @tex ! $ e^m $ ! @end tex ! @end iftex ! @ifinfo ! @math{e^(m)} ! @end ifinfo ! to column vector @var{y}. ! Called by @command{zgfslv}. @end deftypefn ! run_cmd ! run_cmd: short script used in demos ! prints string cmd to the screen, then executes after a pause ! prompt -*- texinfo -*- ! @deftypefn {Function File} {} prompt (@var{str}) ! Prompt user to continue ! @strong{Input} ! @table @var ! @item str ! Input string. Its default value is: ! @example ! \n ---- Press a key to continue --- @end example + @end table @end deftypefn ! zgrownorm -*- texinfo -*- ! @deftypefn {Function File} {[@var{nonz}, @var{zer}] =} zgrownorm (@var{mat}, @var{meps}) ! Return @var{nonz} = number of rows of @var{mat} whose two norm ! exceeds @var{meps}, and @var{zer} = number of rows of mat whose two ! norm is less than @var{meps}. ! @end deftypefn ! zgreduce ! -*- texinfo -*- ! @deftypefn {Function File} {} zgreduce (@var{sys}, @var{meps}) ! Implementation of procedure REDUCE in (Emami-Naeini and Van Dooren, ! Automatica, # 1982). ! @end deftypefn ! axis2dlim ! -*- texinfo -*- ! @deftypefn {Function File} {} axis2dlim (@var{axdata}) ! Determine axis limits for 2-D data (column vectors); leaves a 10% ! margin around the plots. ! Inserts margins of +/- 0.1 if data is one-dimensional ! (or a single point). ! ! @strong{Input} ! @table @var ! @item axdata ! @var{n} by 2 matrix of data [@var{x}, @var{y}]. ! @end table ! @strong{Output} ! @table @var ! @item axvec ! Vector of axis limits appropriate for call to @command{axis} function. ! @end table @end deftypefn ! __outlist__ ! Undocumented internal function. ! __zgpbal__ ! Undocumented internal function. ! gram -*- texinfo -*- ! @deftypefn {Function File} {} gram (@var{a}, @var{b}) ! Return controllability gramian @var{m} of the continuous time system ! @math{dx/dt = a x + b u}. ! ! @var{m} satisfies @math{a m + m a' + b b' = 0}. @end deftypefn ! bode_bounds -*- texinfo -*- ! @deftypefn {Function File} {[@var{wmin}, @var{wmax}] =} bode_bounds (@var{zer}, @var{pol}, @var{dflg}, @var{tsam}) ! Get default range of frequencies based on cutoff frequencies of system ! poles and zeros. ! Frequency range is the interval @iftex @tex ! $ [ 10^{w_{min}}, 10^{w_{max}} ] $ @end tex @end iftex ! @ifinfo ! [10^@var{wmin}, 10^@var{wmax}] ! @end ifinfo ! Used internally in @command{__freqresp__} (@command{bode}, @command{nyquist}) @end deftypefn ! rlocus -*- texinfo -*- ! @deftypefn {Function File} {[@var{rldata}, @var{k}] =} rlocus (@var{sys}[, @var{increment}, @var{min_k}, @var{max_k}]) + Display root locus plot of the specified @acronym{SISO} system. @example ! @group ! ----- --- -------- ! --->| + |---|k|---->| SISO |-----------> ! ----- --- -------- | ! - ^ | ! |_____________________________| ! @end group @end example ! @strong{Inputs} ! @table @var ! @item sys ! system data structure ! @item min_k ! Minimum value of @var{k} ! @item max_k ! Maximum value of @var{k} ! @item increment ! The increment used in computing gain values ! @end table ! @strong{Outputs} ! Plots the root locus to the screen. ! @table @var ! @item rldata ! Data points plotted: in column 1 real values, in column 2 the imaginary values. ! @item k ! Gains for real axis break points. ! @end table ! @end deftypefn ! bode ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{mag}, @var{phase}, @var{w}] =} bode (@var{sys}, @var{w}, @var{out_idx}, @var{in_idx}) ! If no output arguments are given: produce Bode plots of a system; otherwise, ! compute the frequency response of a system data structure ! @strong{Inputs} ! @table @var ! @item sys ! a system data structure (must be either purely continuous or discrete; ! see is_digital) ! @item w ! frequency values for evaluation. ! if @var{sys} is continuous, then bode evaluates @math{G(jw)} where ! @math{G(s)} is the system transfer function. + if @var{sys} is discrete, then bode evaluates G(@code{exp}(jwT)), where @itemize @bullet ! @item @math{T} is the system sampling time ! @item @math{G(z)} is the system transfer function. @end itemize ! @strong{Default} the default frequency range is selected as follows: (These ! steps are @strong{not} performed if @var{w} is specified) ! @enumerate ! @item via routine __bodquist__, isolate all poles and zeros away from ! @var{w}=0 (@var{jw}=0 or @math{@code{exp}(jwT)}=1) and select the frequency ! range based on the breakpoint locations of the frequencies. ! @item if @var{sys} is discrete time, the frequency range is limited ! to @math{jwT} in ! @ifinfo ! [0,2 pi /T] ! @end ifinfo ! @iftex ! @tex ! $[0,2\pi/T]$ ! @end tex ! @end iftex ! @item A "smoothing" routine is used to ensure that the plot phase does ! not change excessively from point to point and that singular ! points (e.g., crossovers from +/- 180) are accurately shown. ! @end enumerate ! @item out_idx ! @itemx in_idx ! The names or indices of outputs and inputs to be used in the frequency ! response. See @code{sysprune}. + @strong{Example} @example ! bode(sys,[],"y_3", @{"u_1","u_4"@}); @end example + @end table + @strong{Outputs} + @table @var + @item mag + @itemx phase + the magnitude and phase of the frequency response @math{G(jw)} or + @math{G(@code{exp}(jwT))} at the selected frequency values. + @item w + the vector of frequency values used + @end table ! @enumerate ! @item If no output arguments are given, e.g., @example ! bode(sys); @end example + bode plots the results to the screen. Descriptive labels are + automatically placed. ! Failure to include a concluding semicolon will yield some garbage ! being printed to the screen (@code{ans = []}). ! @item If the requested plot is for an @acronym{MIMO} system, mag is set to ! @math{||G(jw)||} or @math{||G(@code{exp}(jwT))||} ! and phase information is not computed. ! @end enumerate @end deftypefn ! lyap -*- texinfo -*- ! @deftypefn {Function File} {} lyap (@var{a}, @var{b}, @var{c}) ! @deftypefnx {Function File} {} lyap (@var{a}, @var{b}) ! Solve the Lyapunov (or Sylvester) equation via the Bartels-Stewart ! algorithm (Communications of the @acronym{ACM}, 1972). + If @var{a}, @var{b}, and @var{c} are specified, then @code{lyap} returns + the solution of the Sylvester equation + @iftex + @tex + $$ A X + X B + C = 0 $$ + @end tex + @end iftex + @ifinfo @example ! a x + x b + c = 0 @end example ! @end ifinfo ! If only @code{(a, b)} are specified, then @command{lyap} returns the ! solution of the Lyapunov equation ! @iftex ! @tex ! $$ A^T X + X A + B = 0 $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! a' x + x a + b = 0 ! @end example ! @end ifinfo ! If @var{b} is not square, then @code{lyap} returns the solution of either ! @iftex ! @tex ! $$ A^T X + X A + B^T B = 0 $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! a' x + x a + b' b = 0 ! @end example ! @end ifinfo @noindent ! or ! @iftex ! @tex ! $$ A X + X A^T + B B^T = 0 $$ ! @end tex ! @end iftex ! @ifinfo @example ! a x + x a' + b b' = 0 @end example ! @end ifinfo @noindent ! whichever is appropriate. ! Solves by using the Bartels-Stewart algorithm (1972). ! @end deftypefn ! dcgain ! -*- texinfo -*- ! @deftypefn {Function File} {} dcgain (@var{sys}, @var{tol}) ! Returns dc-gain matrix. If dc-gain is infinite ! an empty matrix is returned. ! The argument @var{tol} is an optional tolerance for the condition ! number of the @math{A} Matrix in @var{sys} (default @var{tol} = 1.0e-10) ! @end deftypefn ! place ! -*- texinfo -*- ! @deftypefn {Function File} {@var{K} =} place (@var{sys}, @var{p}) ! Computes the matrix @var{K} such that if the state ! is feedback with gain @var{K}, then the eigenvalues of the closed loop ! system (i.e. @math{A-BK}) are those specified in the vector @var{p}. ! Version: Beta (May-1997): If you have any comments, please let me know. ! (see the file place.m for my address) ! @end deftypefn ! nichols ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{mag}, @var{phase}, @var{w}] =} nichols (@var{sys}, @var{w}, @var{outputs}, @var{inputs}) ! Produce Nichols plot of a system. ! @strong{Inputs} ! @table @var ! @item sys ! System data structure (must be either purely continuous or discrete; ! see @command{is_digital}). ! @item w ! Frequency values for evaluation. ! @itemize ! @item if sys is continuous, then nichols evaluates @math{G(jw)}. ! @item if sys is discrete, then nichols evaluates @math{G(exp(jwT))}, ! where @var{T}=@var{sys}. @var{tsam} is the system sampling time. ! @item the default frequency range is selected as follows (These ! steps are @strong{not} performed if @var{w} is specified): ! @enumerate ! @item via routine @command{__bodquist__}, isolate all poles and zeros away from ! @var{w}=0 (@math{jw=0} or @math{exp(jwT)=1}) and select the frequency range ! based on the breakpoint locations of the frequencies. ! @item if sys is discrete time, the frequency range is limited to jwT in ! @iftex ! @tex ! $ [0, 2p\pi] $. ! @end tex ! @end iftex ! @ifinfo ! [0,2p*pi]. ! @end ifinfo ! @item A ``smoothing'' routine is used to ensure that the plot phase does ! not change excessively from point to point and that singular points ! (e.g., crossovers from +/- 180) are accurately shown. ! @end enumerate ! @end itemize ! @item outputs ! @itemx inputs ! the names or indices of the output(s) and input(s) to be used in the ! frequency response; see @command{sysprune}. ! @end table ! @strong{Outputs} ! @table @var ! @item mag ! @itemx phase ! The magnitude and phase of the frequency response @math{G(jw)} or ! @math{G(exp(jwT))} at the selected frequency values. ! @item w ! The vector of frequency values used. ! @end table ! If no output arguments are given, @command{nichols} plots the results to the screen. ! Descriptive labels are automatically placed. See @command{xlabel}, ! @command{ylabel}, and @command{title}. ! Note: if the requested plot is for an @acronym{MIMO} system, @var{mag} is set to ! @iftex ! @tex ! $ \Vert G(jw) \Vert $ or $ \Vert G( {\rm exp}(jwT) \Vert $ ! @end tex ! @end iftex ! @ifinfo ! ||G(jw)|| or ||G(exp(jwT))|| ! @end ifinfo ! and phase information is not computed. ! @end deftypefn ! dkalman ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{Lp}, @var{Lf}, @var{P}, @var{Z}] =} dkalman (@var{A}, @var{G}, @var{C}, @var{Qw}, @var{Rv}, @var{S}) ! Construct the linear quadratic estimator (Kalman predictor) for the ! discrete time system ! @iftex ! @tex ! $$ ! x_{k+1} = A x_k + B u_k + G w_k ! $$ ! $$ ! y_k = C x_k + D u_k + v_k ! $$ ! @end tex ! @end iftex ! @ifinfo @example ! x[k+1] = A x[k] + B u[k] + G w[k] ! y[k] = C x[k] + D u[k] + v[k] @end example ! @end ifinfo ! where @var{w}, @var{v} are zero-mean gaussian noise processes with ! respective intensities @code{@var{Qw} = cov (@var{w}, @var{w})} and ! @code{@var{Rv} = cov (@var{v}, @var{v})}. ! If specified, @var{S} is @code{cov (@var{w}, @var{v})}. Otherwise ! @code{cov (@var{w}, @var{v}) = 0}. ! ! The observer structure is ! @iftex ! @tex ! $x_{k+1|k} = A x_{k|k-1} + B u_k + L_p (y_k - C x_{k|k-1} - D u_k)$ ! $x_{k|k} = x_{k|k} + L_f (y_k - C x_{k|k-1} - D u_k)$ ! @end tex ! @end iftex ! @ifinfo @example ! x[k+1|k] = A x[k|k-1] + B u[k] + LP (y[k] - C x[k|k-1] - D u[k]) ! x[k|k] = x[k|k-1] + LF (y[k] - C x[k|k-1] - D u[k]) @end example + @end ifinfo ! @noindent ! The following values are returned: ! @table @var ! @item Lp ! The predictor gain, ! @iftex ! @tex ! $(A - L_p C)$. ! @end tex ! @end iftex ! @ifinfo ! (@var{A} - @var{Lp} @var{C}) ! @end ifinfo ! is stable. ! @item Lf ! The filter gain. ! @item P ! The Riccati solution. ! @iftex ! @tex ! $P = E \{(x - x_{n|n-1})(x - x_{n|n-1})'\}$ ! @end tex ! @end iftex ! @ifinfo ! P = E [(x - x[n|n-1])(x - x[n|n-1])'] ! @end ifinfo ! ! @item Z ! The updated error covariance matrix. ! @iftex ! @tex ! $Z = E \{(x - x_{n|n})(x - x_{n|n})'\}$ ! @end tex ! @end iftex + @ifinfo + Z = E [(x - x[n|n])(x - x[n|n])'] + @end ifinfo + @end table + @end deftypefn + tzero + -*- texinfo -*- + @deftypefn {Function File} {[@var{zer}, @var{gain}] =} tzero (@var{a}, @var{b}, @var{c}, @var{d}, @var{opt}) + @deftypefnx {Function File} {[@var{zer}, @var{gain}] =} tzero (@var{sys}, @var{opt}) + Compute transmission zeros of a continuous system: + @iftex + @tex + $$ \dot x = Ax + Bu $$ + $$ y = Cx + Du $$ + @end tex + @end iftex + @ifinfo @example ! . ! x = Ax + Bu ! y = Cx + Du ! @end example ! @end ifinfo ! or of a discrete one: ! @iftex ! @tex ! $$ x_{k+1} = Ax_k + Bu_k $$ ! $$ y_k = Cx_k + Du_k $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! x(k+1) = A x(k) + B u(k) ! y(k) = C x(k) + D u(k) @end example + @end ifinfo + + @strong{Outputs} + @table @var + @item zer + transmission zeros of the system + @item gain + leading coefficient (pole-zero form) of @acronym{SISO} transfer function + returns gain=0 if system is multivariable + @end table + @strong{References} + @enumerate + @item Emami-Naeini and Van Dooren, Automatica, 1982. + @item Hodel, @cite{Computation of Zeros with Balancing}, 1992 Lin. Alg. Appl. + @end enumerate @end deftypefn ! freqchkw -*- texinfo -*- ! @deftypefn {Function File} {} freqchkw (@var{w}) ! Used by @command{__freqresp__} to check that input frequency vector @var{w} ! is valid. ! Returns boolean value. @end deftypefn ! __freqresp__ ! Undocumented internal function. ! step -*- texinfo -*- ! @deftypefn {Function File} {[@var{y}, @var{t}] =} step (@var{sys}, @var{inp}, @var{tstop}, @var{n}) ! Step response for a linear system. ! The system can be discrete or multivariable (or both). ! If no output arguments are specified, @code{step} ! produces a plot or the step response data for system @var{sys}. ! @strong{Inputs} ! @table @var ! @item sys ! System data structure. ! @item inp ! Index of input being excited ! @item tstop ! The argument @var{tstop} (scalar value) denotes the time when the ! simulation should end. ! @item n ! the number of data values. ! Both parameters @var{tstop} and @var{n} can be omitted and will be ! computed from the eigenvalues of the A Matrix. @end table ! @strong{Outputs} ! @table @var ! @item y ! Values of the step response. ! @item t ! Times of the step response. @end table ! When invoked with the output parameter @var{y} the plot is not displayed. ! @seealso{impulse} @end deftypefn ! dlqe -*- texinfo -*- ! @deftypefn {Function File} {[@var{l}, @var{m}, @var{p}, @var{e}] =} dlqe (@var{a}, @var{g}, @var{c}, @var{sigw}, @var{sigv}, @var{z}) ! Construct the linear quadratic estimator (Kalman filter) for the ! discrete time system ! @iftex ! @tex ! $$ ! x_{k+1} = A x_k + B u_k + G w_k ! $$ ! $$ ! y_k = C x_k + D u_k + v_k ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! x[k+1] = A x[k] + B u[k] + G w[k] ! y[k] = C x[k] + D u[k] + v[k] ! @end example ! @end ifinfo ! where @var{w}, @var{v} are zero-mean gaussian noise processes with ! respective intensities @code{@var{sigw} = cov (@var{w}, @var{w})} and ! @code{@var{sigv} = cov (@var{v}, @var{v})}. ! If specified, @var{z} is @code{cov (@var{w}, @var{v})}. Otherwise ! @code{cov (@var{w}, @var{v}) = 0}. ! The observer structure is ! @iftex ! @tex ! $$ ! z_{k|k} = z_{k|k-1} + l (y_k - C z_{k|k-1} - D u_k) ! $$ ! $$ ! z_{k+1|k} = A z_{k|k} + B u_k ! $$ ! @end tex ! @end iftex ! @ifinfo @example ! z[k|k] = z[k|k-1] + L (y[k] - C z[k|k-1] - D u[k]) ! z[k+1|k] = A z[k|k] + B u[k] @end example + @end ifinfo ! @noindent ! The following values are returned: ! @table @var ! @item l ! The observer gain, ! @iftex ! @tex ! $(A - ALC)$. ! @end tex ! @end iftex ! @ifinfo ! (@var{a} - @var{a}@var{l}@var{c}). ! @end ifinfo ! is stable. ! @item m ! The Riccati equation solution. ! @item p ! The estimate error covariance after the measurement update. + @item e + The closed loop poles of + @iftex + @tex + $(A - ALC)$. + @end tex + @end iftex + @ifinfo + (@var{a} - @var{a}@var{l}@var{c}). + @end ifinfo + @end table + @end deftypefn + obsv + -*- texinfo -*- + @deftypefn {Function File} {} obsv (@var{sys}, @var{c}) + @deftypefnx {Function File} {} obsv (@var{a}, @var{c}) + Build observability matrix: + @iftex + @tex + $$ Q_b = \left[ \matrix{ C \cr + CA \cr + CA^2 \cr + \vdots \cr + CA^{n-1} } \right ] $$ + @end tex + @end iftex + @ifinfo @example @group ! | C | ! | CA | ! Qb = | CA^2 | ! | ... | ! | CA^(n-1) | @end group @end example + @end ifinfo + of a system data structure or the pair (@var{a}, @var{c}). ! The numerical properties of @command{is_observable} ! are much better for observability tests. @end deftypefn ! dare -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} dare (@var{a}, @var{b}, @var{q}, @var{r}, @var{opt}) ! Return the solution, @var{x} of the discrete-time algebraic Riccati ! equation ! @iftex ! @tex ! $$ ! A^TXA - X + A^TXB (R + B^TXB)^{-1} B^TXA + Q = 0 ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! a' x a - x + a' x b (r + b' x b)^(-1) b' x a + q = 0 ! @end example ! @end ifinfo ! @noindent ! @strong{Inputs} ! @table @var ! @item a ! @var{n} by @var{n} matrix; ! @item b ! @var{n} by @var{m} matrix; ! @item q ! @var{n} by @var{n} matrix, symmetric positive semidefinite, or a @var{p} by @var{n} matrix, ! In the latter case @math{q:=q'*q} is used; ! @item r ! @var{m} by @var{m}, symmetric positive definite (invertible); ! @item opt ! (optional argument; default = @code{"B"}): ! String option passed to @code{balance} prior to ordered @var{QZ} decomposition. ! @end table ! @strong{Output} ! @table @var ! @item x ! solution of @acronym{DARE}. ! @end table ! @strong{Method} ! Generalized eigenvalue approach (Van Dooren; @acronym{SIAM} J. ! Sci. Stat. Comput., Vol 2) applied to the appropriate symplectic pencil. ! See also: Ran and Rodman, @cite{Stable Hermitian Solutions of Discrete ! Algebraic Riccati Equations}, Mathematics of Control, Signals and ! Systems, Vol 5, no 2 (1992), pp 165--194. ! @seealso{balance, are} @end deftypefn ! dlqr -*- texinfo -*- ! @deftypefn {Function File} {[@var{k}, @var{p}, @var{e}] =} dlqr (@var{a}, @var{b}, @var{q}, @var{r}, @var{z}) ! Construct the linear quadratic regulator for the discrete time system ! @iftex ! @tex ! $$ ! x_{k+1} = A x_k + B u_k ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! x[k+1] = A x[k] + B u[k] ! @end example ! @end ifinfo ! to minimize the cost functional ! @iftex ! @tex ! $$ ! J = \sum x^T Q x + u^T R u ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! J = Sum (x' Q x + u' R u) ! @end example ! @end ifinfo ! @noindent ! @var{z} omitted or ! @iftex ! @tex ! $$ ! J = \sum x^T Q x + u^T R u + 2 x^T Z u ! $$ ! @end tex ! @end iftex ! @ifinfo @example ! J = Sum (x' Q x + u' R u + 2 x' Z u) @end example ! @end ifinfo ! @var{z} included. ! ! The following values are returned: ! ! @table @var ! @item k ! The state feedback gain, ! @iftex ! @tex ! $(A - B K)$ ! @end tex ! @end iftex ! @ifinfo ! (@var{a} - @var{b}@var{k}) ! @end ifinfo ! is stable. ! ! @item p ! The solution of algebraic Riccati equation. ! ! @item e ! The closed loop poles of ! @iftex ! @tex ! $(A - B K)$. ! @end tex ! @end iftex ! @ifinfo ! (@var{a} - @var{b}@var{k}). ! @end ifinfo ! @end table @end deftypefn ! controldemo -*- texinfo -*- ! @deftypefn {Function File} {} controldemo () ! Control Systems Toolbox demo. ! @seealso{Demo programs: bddemo, frdemo, analdemo, moddmeo, rldemo} @end deftypefn ! lqr -*- texinfo -*- ! @deftypefn {Function File} {[@var{k}, @var{p}, @var{e}] =} lqr (@var{a}, @var{b}, @var{q}, @var{r}, @var{z}) ! construct the linear quadratic regulator for the continuous time system ! @iftex ! @tex ! $$ ! {dx\over dt} = A x + B u ! $$ ! @end tex ! @end iftex ! @ifinfo @example ! dx ! -- = A x + B u ! dt @end example ! @end ifinfo ! to minimize the cost functional ! @iftex ! @tex ! $$ ! J = \int_0^\infty x^T Q x + u^T R u ! $$ ! @end tex ! @end iftex ! @ifinfo @example ! infinity ! / ! J = | x' Q x + u' R u ! / ! t=0 @end example + @end ifinfo @noindent ! @var{z} omitted or ! @iftex ! @tex ! $$ ! J = \int_0^\infty x^T Q x + u^T R u + 2 x^T Z u ! $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! infinity ! / ! J = | x' Q x + u' R u + 2 x' Z u ! / ! t=0 ! @end example ! ! @end ifinfo ! @var{z} included. ! ! The following values are returned: ! ! @table @var ! @item k ! The state feedback gain, ! @iftex ! @tex ! $(A - B K)$ ! @end tex ! @end iftex ! @ifinfo ! (@var{a} - @var{b}@var{k}) ! @end ifinfo ! is stable and minimizes the cost functional ! @item p ! The stabilizing solution of appropriate algebraic Riccati equation. ! @item e ! The vector of the closed loop poles of ! @iftex ! @tex ! $(A - B K)$. ! @end tex ! @end iftex ! @ifinfo ! (@var{a} - @var{b}@var{k}). ! @end ifinfo @end table ! @strong{Reference} ! Anderson and Moore, @cite{Optimal control: linear quadratic methods}, ! Prentice-Hall, 1990, pp. 56--58. ! @end deftypefn ! lqe ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{k}, @var{p}, @var{e}] =} lqe (@var{a}, @var{g}, @var{c}, @var{sigw}, @var{sigv}, @var{z}) ! Construct the linear quadratic estimator (Kalman filter) for the ! continuous time system ! @iftex ! @tex ! $$ ! {dx\over dt} = A x + G u ! $$ ! $$ ! y = C x + v ! $$ ! @end tex ! @end iftex ! @ifinfo @example ! dx ! -- = A x + G u ! dt ! ! y = C x + v @end example ! @end ifinfo ! where @var{w} and @var{v} are zero-mean gaussian noise processes with ! respective intensities @example ! sigw = cov (w, w) ! sigv = cov (v, v) @end example ! The optional argument @var{z} is the cross-covariance ! @code{cov (@var{w}, @var{v})}. If it is omitted, ! @code{cov (@var{w}, @var{v}) = 0} is assumed. ! Observer structure is @code{dz/dt = A z + B u + k (y - C z - D u)} ! ! The following values are returned: ! ! @table @var ! @item k ! The observer gain, ! @iftex ! @tex ! $(A - K C)$ ! @end tex ! @end iftex ! @ifinfo ! (@var{a} - @var{k}@var{c}) ! @end ifinfo ! is stable. ! ! @item p ! The solution of algebraic Riccati equation. ! ! @item e ! The vector of closed loop poles of ! @iftex ! @tex ! $(A - K C)$. ! @end tex ! @end iftex ! @ifinfo ! (@var{a} - @var{k}@var{c}). ! @end ifinfo ! @end table @end deftypefn ! impulse -*- texinfo -*- ! @deftypefn {Function File} {[@var{y}, @var{t}] =} impulse (@var{sys}, @var{inp}, @var{tstop}, @var{n}) ! Impulse response for a linear system. ! The system can be discrete or multivariable (or both). ! If no output arguments are specified, @code{impulse} ! produces a plot or the impulse response data for system @var{sys}. ! @strong{Inputs} ! @table @var ! @item sys ! System data structure. ! @item inp ! Index of input being excited ! @item tstop ! The argument @var{tstop} (scalar value) denotes the time when the ! simulation should end. ! @item n ! the number of data values. + Both parameters @var{tstop} and @var{n} can be omitted and will be + computed from the eigenvalues of the A Matrix. + @end table + @strong{Outputs} + @table @var + @item y + Values of the impulse response. + @item t + Times of the impulse response. + @end table + @seealso{step} + @end deftypefn + are + -*- texinfo -*- + @deftypefn {Function File} {@var{x} =} are (@var{a}, @var{b}, @var{c}, @var{opt}) + Solve the Algebraic Riccati Equation + @iftex + @tex + $$ + A^TX + XA - XBX + C = 0 + $$ + @end tex + @end iftex + @ifinfo @example ! a' * x + x * a - x * b * x + c = 0 @end example + @end ifinfo + @strong{Inputs} @noindent ! for identically dimensioned square matrices ! @table @var ! @item a ! @var{n} by @var{n} matrix; ! @item b ! @var{n} by @var{n} matrix or @var{n} by @var{m} matrix; in the latter case ! @var{b} is replaced by @math{b:=b*b'}; ! @item c ! @var{n} by @var{n} matrix or @var{p} by @var{m} matrix; in the latter case ! @var{c} is replaced by @math{c:=c'*c}; ! @item opt ! (optional argument; default = @code{"B"}): ! String option passed to @code{balance} prior to ordered Schur decomposition. ! @end table ! @strong{Output} ! @table @var ! @item x ! solution of the @acronym{ARE}. ! @end table ! @strong{Method} ! Laub's Schur method (@acronym{IEEE} Transactions on ! Automatic Control, 1979) is applied to the appropriate Hamiltonian ! matrix. ! @seealso{balance, dare} @end deftypefn ! dlyap -*- texinfo -*- ! @deftypefn {Function File} {} dlyap (@var{a}, @var{b}) ! Solve the discrete-time Lyapunov equation ! @strong{Inputs} ! @table @var ! @item a ! @var{n} by @var{n} matrix; ! @item b ! Matrix: @var{n} by @var{n}, @var{n} by @var{m}, or @var{p} by @var{n}. ! @end table ! ! @strong{Output} ! @table @var ! @item x ! matrix satisfying appropriate discrete time Lyapunov equation. ! @end table ! ! Options: ! @itemize @bullet ! @item @var{b} is square: solve ! @iftex ! @tex ! $$ axa^T - x + b = 0 $$ ! @end tex ! @end iftex ! @ifinfo ! @code{a x a' - x + b = 0} ! @end ifinfo ! @item @var{b} is not square: @var{x} satisfies either ! @iftex ! @tex ! $$ axa^T - x + bb^T = 0 $$ ! @end tex ! @end iftex ! @ifinfo @example ! a x a' - x + b b' = 0 @end example + @end ifinfo @noindent ! or ! @iftex ! @tex ! $$ a^Txa - x + b^Tb = 0, $$ ! @end tex ! @end iftex ! @ifinfo @example ! a' x a - x + b' b = 0, @end example + @end ifinfo @noindent ! whichever is appropriate. ! @end itemize ! @strong{Method} ! Uses Schur decomposition method as in Kitagawa, ! @cite{An Algorithm for Solving the Matrix Equation @math{X = F X F' + S}}, ! International Journal of Control, Volume 25, Number 5, pages 745--753 ! (1977). + Column-by-column solution method as suggested in + Hammarling, @cite{Numerical Solution of the Stable, Non-Negative + Definite Lyapunov Equation}, @acronym{IMA} Journal of Numerical Analysis, Volume + 2, pages 303--323 (1982). + @end deftypefn + dgram + -*- texinfo -*- + @deftypefn {Function File} {} dgram (@var{a}, @var{b}) + Return controllability gramian of discrete time system + @iftex + @tex + $$ x_{k+1} = ax_k + bu_k $$ + @end tex + @end iftex + @ifinfo @example ! x(k+1) = a x(k) + b u(k) @end example ! @end ifinfo ! ! @strong{Inputs} ! @table @var ! @item a ! @var{n} by @var{n} matrix ! @item b ! @var{n} by @var{m} matrix ! @end table + @strong{Output} + @table @var + @item m + @var{n} by @var{n} matrix, satisfies + @iftex + @tex + $$ ama^T - m + bb^T = 0 $$ + @end tex + @end iftex + @ifinfo @example ! a m a' - m + b*b' = 0 @end example ! @end ifinfo ! @end table ! @end deftypefn ! bddemo ! -*- texinfo -*- ! @deftypefn {Function File} {} bddemo (@var{inputs}) ! Octave Controls toolbox demo: Block Diagram Manipulations demo. ! @end deftypefn ! DEMOcontrol ! -*- texinfo -*- ! @deftypefn {Function File} {} DEMOcontrol ! Octave Control Systems Toolbox demo/tutorial program. The demo ! allows the user to select among several categories of @acronym{OCST} function: @example ! @group ! octave:1> DEMOcontrol ! Octave Controls System Toolbox Demo ! ! [ 1] System representation ! [ 2] Block diagram manipulations ! [ 3] Frequency response functions ! [ 4] State space analysis functions ! [ 5] Root locus functions ! [ 6] LQG/H2/Hinfinity functions ! [ 7] End ! @end group @end example ! Command examples are interactively run for users to observe the use ! of @acronym{OCST} functions. ! @seealso{Demo Programs: bddemo.m, frdemo.m, analdemo.m, ! moddmeo.m, rldemo.m} ! @end deftypefn ! __stepimp__ ! Undocumented internal function. ! damp ! -*- texinfo -*- ! @deftypefn {Function File} {} damp (@var{p}, @var{tsam}) ! Displays eigenvalues, natural frequencies and damping ratios ! of the eigenvalues of a matrix @var{p} or the @math{A} matrix of a ! system @var{p}, respectively. ! If @var{p} is a system, @var{tsam} must not be specified. ! If @var{p} is a matrix and @var{tsam} is specified, eigenvalues ! of @var{p} are assumed to be in @var{z}-domain. ! @seealso{eig} ! @end deftypefn ! __bodquist__ ! Undocumented internal function. ! pzmap ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{zer}, @var{pol}] =} pzmap (@var{sys}) ! Plots the zeros and poles of a system in the complex plane. ! @strong{Input} ! @table @var ! @item sys ! System data structure. ! @end table ! ! @strong{Outputs} ! @table @var ! @item pol ! @item zer ! if omitted, the poles and zeros are plotted on the screen. ! otherwise, @var{pol} and @var{zer} are returned as the ! system poles and zeros (see @command{sys2zp} for a preferable function call). ! @end table @end deftypefn ! ltifr -*- texinfo -*- ! @deftypefn {Function File} {@var{out} =} ltifr (@var{a}, @var{b}, @var{w}) ! @deftypefnx {Function File} {@var{out} =} ltifr (@var{sys}, @var{w}) ! Linear time invariant frequency response of single-input systems. ! @strong{Inputs} ! @table @var ! @item a ! @itemx b ! coefficient matrices of @math{dx/dt = A x + B u} ! @item sys ! system data structure ! @item w ! vector of frequencies ! @end table ! @strong{Output} ! @table @var ! @item out ! frequency response, that is: ! @end table ! @iftex ! @tex ! $$ G(j\omega) = (j\omega I-A)^{-1}B $$ ! @end tex ! @end iftex ! @ifinfo @example ! -1 ! G(s) = (jw I-A) B @end example ! @end ifinfo ! for complex frequencies @math{s = jw}. @end deftypefn ! nyquist -*- texinfo -*- ! @deftypefn {Function File} {[@var{realp}, @var{imagp}, @var{w}] =} nyquist (@var{sys}, @var{w}, @var{out_idx}, @var{in_idx}, @var{atol}) ! @deftypefnx {Function File} {} nyquist (@var{sys}, @var{w}, @var{out_idx}, @var{in_idx}, @var{atol}) ! Produce Nyquist plots of a system; if no output arguments are given, Nyquist ! plot is printed to the screen. ! Compute the frequency response of a system. ! ! @strong{Inputs} (pass as empty to get default values) ! @table @var ! @item sys ! system data structure (must be either purely continuous or discrete; ! see @code{is_digital}) ! @item w ! frequency values for evaluation. ! If sys is continuous, then bode evaluates @math{G(@var{jw})}; ! if sys is discrete, then bode evaluates @math{G(exp(@var{jwT}))}, ! where @var{T} is the system sampling time. ! @item default ! the default frequency range is selected as follows: (These ! steps are @strong{not} performed if @var{w} is specified) ! @enumerate ! @item via routine @command{__bodquist__}, isolate all poles and zeros away from ! @var{w}=0 (@var{jw}=0 or @math{exp(@var{jwT})=1}) and select the frequency ! range based on the breakpoint locations of the frequencies. ! @item if @var{sys} is discrete time, the frequency range is limited ! to @var{jwT} in ! @ifinfo ! [0,2p*pi] ! @end ifinfo ! @iftex ! @tex ! $ [ 0,2 p \pi ] $ ! @end tex ! @end iftex ! @item A ``smoothing'' routine is used to ensure that the plot phase does ! not change excessively from point to point and that singular ! points (e.g., crossovers from +/- 180) are accurately shown. ! @end enumerate ! @item atol ! for interactive nyquist plots: atol is a change-in-slope tolerance ! for the of asymptotes (default = 0; 1e-2 is a good choice). This allows ! the user to ``zoom in'' on portions of the Nyquist plot too small to be ! seen with large asymptotes. ! @end table ! @strong{Outputs} ! @table @var ! @item realp ! @itemx imagp ! the real and imaginary parts of the frequency response ! @math{G(jw)} or @math{G(exp(jwT))} at the selected frequency values. ! @item w ! the vector of frequency values used ! @end table ! If no output arguments are given, nyquist plots the results to the screen. ! If @var{atol} != 0 and asymptotes are detected then the user is asked ! interactively if they wish to zoom in (remove asymptotes) ! Descriptive labels are automatically placed. ! Note: if the requested plot is for an @acronym{MIMO} system, a warning message is ! presented; the returned information is of the magnitude @iftex @tex ! $ \Vert G(jw) \Vert $ or $ \Vert G( {\rm exp}(jwT) \Vert $ @end tex @end iftex @ifinfo ! ||G(jw)|| or ||G(exp(jwT))|| @end ifinfo ! only; phase information is not computed. @end deftypefn ! lqg -*- texinfo -*- ! @deftypefn {Function File} {[@var{k}, @var{q1}, @var{p1}, @var{ee}, @var{er}] =} lqg (@var{sys}, @var{sigw}, @var{sigv}, @var{q}, @var{r}, @var{in_idx}) ! Design a linear-quadratic-gaussian optimal controller for the system @example ! dx/dt = A x + B u + G w [w]=N(0,[Sigw 0 ]) ! y = C x + v [v] ( 0 Sigv ]) @end example ! or @example ! x(k+1) = A x(k) + B u(k) + G w(k) [w]=N(0,[Sigw 0 ]) ! y(k) = C x(k) + v(k) [v] ( 0 Sigv ]) @end example ! ! @strong{Inputs} ! @table @var ! @item sys ! system data structure ! @item sigw ! @itemx sigv ! intensities of independent Gaussian noise processes (as above) ! @item q ! @itemx r ! state, control weighting respectively. Control @acronym{ARE} is ! @item in_idx ! names or indices of controlled inputs (see @command{sysidx}, @command{cellidx}) ! ! default: last dim(R) inputs are assumed to be controlled inputs, all ! others are assumed to be noise inputs. ! @end table ! @strong{Outputs} ! @table @var ! @item k ! system data structure format @acronym{LQG} optimal controller (Obtain A, B, C ! matrices with @command{sys2ss}, @command{sys2tf}, or @command{sys2zp} as ! appropriate). ! @item p1 ! Solution of control (state feedback) algebraic Riccati equation. ! @item q1 ! Solution of estimation algebraic Riccati equation. ! @item ee ! Estimator poles. ! @item es ! Controller poles. ! @end table ! @seealso{h2syn, lqe, lqr} @end deftypefn ! lsim -*- texinfo -*- ! @deftypefn {Function File} {[@var{y}, @var{x}] =} lsim (@var{sys}, @var{u}, @var{t}, @var{x0}) ! Produce output for a linear simulation of a system; produces ! a plot for the output of the system, @var{sys}. ! @var{u} is an array that contains the system's inputs. Each row in @var{u} ! corresponds to a different time step. Each column in @var{u} corresponds to a ! different input. @var{t} is an array that contains the time index of the ! system; @var{t} should be regularly spaced. If initial conditions are required ! on the system, the @var{x0} vector should be added to the argument list. ! When the lsim function is invoked a plot is not displayed; ! however, the data is returned in @var{y} (system output) ! and @var{x} (system states). @end deftypefn ! frdemo -*- texinfo -*- ! @deftypefn {Function File} {} frdemo () ! Octave Control Toolbox demo: Frequency Response demo. @end deftypefn ! tzero2 -*- texinfo -*- ! @deftypefn {Function File} {@var{zr} =} tzero2 (@var{a}, @var{b}, @var{c}, @var{d}, @var{bal}) ! Compute the transmission zeros of @var{a}, @var{b}, @var{c}, @var{d}. ! @var{bal} = balancing option (see balance); default is @code{"B"}. ! Needs to incorporate @command{mvzero} algorithm to isolate finite zeros; ! use @command{tzero} instead. @end deftypefn ! rldemo -*- texinfo -*- ! @deftypefn {Function File} {} rldemo (@var{inputs}) ! Octave Control toolbox demo: Root Locus demo. @end deftypefn ! ctrb -*- texinfo -*- ! @deftypefn {Function File} {} ctrb (@var{sys}, @var{b}) ! @deftypefnx {Function File} {} ctrb (@var{a}, @var{b}) ! Build controllability matrix: ! @iftex ! @tex ! $$ Q_s = [ B AB A^2B \ldots A^{n-1}B ] $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! 2 n-1 ! Qs = [ B AB A B ... A B ] ! @end example ! @end ifinfo ! of a system data structure or the pair (@var{a}, @var{b}). ! @command{ctrb} forms the controllability matrix. ! The numerical properties of @command{is_controllable} ! are much better for controllability tests. @end deftypefn ! dre -*- texinfo -*- ! @deftypefn {Function File} {[@var{tvals}, @var{plist}] =} dre (@var{sys}, @var{q}, @var{r}, @var{qf}, @var{t0}, @var{tf}, @var{ptol}, @var{maxits}) ! Solve the differential Riccati equation ! @ifinfo ! @example ! -d P/dt = A'P + P A - P B inv(R) B' P + Q ! P(tf) = Qf ! @end example ! @end ifinfo @iftex @tex ! $$ -{dP \over dt} = A^T P+PA-PBR^{-1}B^T P+Q $$ ! $$ P(t_f) = Q_f $$ @end tex @end iftex ! for the @acronym{LTI} system sys. Solution of ! standard @acronym{LTI} state feedback optimization ! @ifinfo ! @example ! min int(t0, tf) ( x' Q x + u' R u ) dt + x(tf)' Qf x(tf) ! @end example ! @end ifinfo ! @iftex ! @tex ! $$ \min \int_{t_0}^{t_f} x^T Q x + u^T R u dt + x(t_f)^T Q_f x(t_f) $$ ! @end tex ! @end iftex ! optimal input is ! @ifinfo ! @example ! u = - inv(R) B' P(t) x ! @end example ! @end ifinfo ! @iftex ! @tex ! $$ u = - R^{-1} B^T P(t) x $$ ! @end tex ! @end iftex ! @strong{Inputs} ! @table @var ! @item sys ! continuous time system data structure ! @item q ! state integral penalty ! @item r ! input integral penalty ! @item qf ! state terminal penalty ! @item t0 ! @itemx tf ! limits on the integral ! @item ptol ! tolerance (used to select time samples; see below); default = 0.1 ! @item maxits ! number of refinement iterations (default=10) ! @end table ! @strong{Outputs} ! @table @var ! @item tvals ! time values at which @var{p}(@var{t}) is computed ! @item plist ! list values of @var{p}(@var{t}); @var{plist} @{ @var{i} @} ! is @var{p}(@var{tvals}(@var{i})) ! @end table ! @var{tvals} is selected so that: ! @iftex ! @tex ! $$ \Vert plist_{i} - plist_{i-1} \Vert < ptol $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! || Plist@{i@} - Plist@{i-1@} || < Ptol ! @end example ! @end ifinfo ! for every @var{i} between 2 and length(@var{tvals}). ! @end deftypefn ! analdemo ! -*- texinfo -*- ! @deftypefn {Function File} {} analdemo () ! Octave Controls toolbox demo: State Space analysis demo ! @end deftypefn ! sysscale ! -*- texinfo -*- ! @deftypefn {Function File} {@var{retsys} =} sysscale (@var{sys}, @var{outscale}, @var{inscale}, @var{outname}, @var{inname}) ! scale inputs/outputs of a system. ! ! @strong{Inputs} ! @table @var ! @item sys ! Structured system. ! @item outscale ! @itemx inscale ! Constant matrices of appropriate dimension. ! @item outname ! @itemx inname ! Lists of strings with the names of respectively outputs and inputs. ! @end table + @strong{Output} + @table @var + @item retsys + resulting open loop system: @smallexample ! ----------- ------- ----------- ! u --->| inscale |--->| sys |--->| outscale |---> y ! ----------- ------- ----------- @end smallexample ! @end table ! If the input names and output names (each a list of strings) ! are not given and the scaling matrices ! are not square, then default names will be given to the inputs and/or ! outputs. ! A warning message is printed if outscale attempts to add continuous ! system outputs to discrete system outputs; otherwise @var{yd} is ! set appropriately in the returned value of @var{sys}. @end deftypefn ! zpout -*- texinfo -*- ! @deftypefn {Function File} {} zpout (@var{zer}, @var{pol}, @var{k}, @var{x}) ! print formatted zero-pole form to the screen. ! @var{x} defaults to the string @code{"s"} ! @seealso{polyval, polyvalm, poly, roots, conv, deconv, residue, ! filter, polyderiv, polyinteg, polyout} @end deftypefn ! sysout -*- texinfo -*- ! @deftypefn {Function File} {} sysout (@var{sys}, @var{opt}) ! print out a system data structure in desired format ! @table @var ! @item sys ! system data structure ! @item opt ! Display option ! @table @code ! @item [] ! primary system form (default) ! @item "ss" ! state space form ! @item "tf" ! transfer function form ! @item "zp" ! zero-pole form ! @item "all" ! all of the above ! @end table ! @end table @end deftypefn ! __sysgroupn__ ! Undocumented internal function. ! is_signal_list -*- texinfo -*- ! @deftypefn {Function File} {} is_signal_list (@var{mylist}) ! Return true if @var{mylist} is a list of individual strings. ! @end deftypefn ! ugain ! -*- texinfo -*- ! @deftypefn {Function File} {} ugain (@var{n}) ! Creates a system with unity gain, no states. ! This trivial system is sometimes needed to create arbitrary ! complex systems from simple systems with @command{buildssic}. ! Watch out if you are forming sampled systems since @command{ugain} ! does not contain a sampling period. ! @seealso{hinfdemo, jet707} ! @end deftypefn ! d2c ! -*- texinfo -*- ! @deftypefn {Function File} {} d2c (@var{sys}, @var{tol}) ! @deftypefnx {Function File} {} d2c (@var{sys}, @var{opt}) ! Convert a discrete (sub)system into a purely continuous one. ! The sampling time used is @code{sysgettsam(@var{sys})}. ! @strong{Inputs} ! @table @var ! @item sys ! system data structure with discrete components ! @item tol ! Scalar value. ! Tolerance for convergence of default @code{"log"} option (see below) ! @item opt ! conversion option. Choose from: ! @table @code ! @item "log" ! (default) Conversion is performed via a matrix logarithm. ! Due to some problems with this computation, it is ! followed by a steepest descent algorithm to identify continuous time ! @var{a}, @var{b}, to get a better fit to the original data. ! If called as @code{d2c (@var{sys}, @var{tol})}, with @var{tol} ! positive scalar, the @code{"log"} option is used. The default value ! for @var{tol} is @code{1e-8}. ! @item "bi" ! Conversion is performed via bilinear transform ! @math{z = (1 + s T / 2)/(1 - s T / 2)} where @math{T} is the ! system sampling time (see @code{sysgettsam}). ! FIXME: bilinear option exits with an error if @var{sys} is not purely ! discrete ! @end table ! @end table ! @strong{Output} ! @table @var ! @item csys ! continuous time system (same dimensions and signal names as in @var{sys}). ! @end table @end deftypefn ! is_observable -*- texinfo -*- ! @deftypefn {Function File} {[@var{retval}, @var{u}] =} is_observable (@var{a}, @var{c}, @var{tol}) ! @deftypefnx {Function File} {[@var{retval}, @var{u}] =} is_observable (@var{sys}, @var{tol}) ! Logical check for system observability. ! Default: tol = @code{tol = 10*norm(a,'fro')*eps} ! Returns 1 if the system @var{sys} or the pair (@var{a}, @var{c}) is ! observable, 0 if not. ! See @command{is_controllable} for detailed description of arguments ! and default values. ! @seealso{size, rows, columns, length, ismatrix, isscalar, isvector} ! @end deftypefn ! sysdimensions ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{n}, @var{nz}, @var{m}, @var{p}, @var{yd}] =} sysdimensions (@var{sys}, @var{opt}) ! return the number of states, inputs, and/or outputs in the system ! @var{sys}. ! @strong{Inputs} ! @table @var ! @item sys ! system data structure ! @item opt ! String indicating which dimensions are desired. Values: ! @table @code ! @item "all" ! (default) return all parameters as specified under Outputs below. ! @item "cst" ! return @var{n}= number of continuous states ! @item "dst" ! return @var{n}= number of discrete states ! @item "in" ! return @var{n}= number of inputs ! @item "out" ! return @var{n}= number of outputs ! @end table ! @end table ! @strong{Outputs} ! @table @var ! @item n ! number of continuous states (or individual requested dimension as specified ! by @var{opt}). ! @item nz ! number of discrete states ! @item m ! number of system inputs ! @item p ! number of system outputs ! @item yd ! binary vector; @var{yd}(@var{ii}) is nonzero if output @var{ii} is ! discrete. ! @math{yd(ii) = 0} if output @var{ii} is continuous ! @end table ! @seealso{sysgetsignals, sysgettsam} @end deftypefn ! sysmult -*- texinfo -*- ! @deftypefn {Function File} {@var{sys} =} sysmult (@var{Asys}, @var{Bsys}) ! Compute @math{sys = Asys*Bsys} (series connection): @example ! @group ! u ---------- ---------- ! --->| Bsys |---->| Asys |---> ! ---------- ---------- ! @end group @end example ! A warning occurs if there is direct feed-through from an input ! or a continuous state of @var{Bsys}, through a discrete output ! of @var{Bsys}, to a continuous state or output in @var{Asys} ! (system data structure does not recognize discrete inputs). @end deftypefn ! tf2sys -*- texinfo -*- ! @deftypefn {Function File} {} tf2sys (@var{num}, @var{den}, @var{tsam}, @var{inname}, @var{outname}) ! Build system data structure from transfer function format data. ! @strong{Inputs} ! @table @var ! @item num ! @itemx den ! Coefficients of numerator/denominator polynomials. ! @item tsam ! Sampling interval; default: 0 (continuous time). ! @item inname ! @itemx outname ! Input/output signal names; may be a string or cell array with a single string ! entry. ! @end table ! @strong{Output} ! @table @var ! @item sys ! System data structure. ! @end table ! @strong{Example} @example ! octave:1> sys=tf2sys([2 1],[1 2 1],0.1); ! octave:2> sysout(sys) ! Input(s) ! 1: u_1 ! Output(s): ! 1: y_1 (discrete) ! Sampling interval: 0.1 ! transfer function form: ! 2*z^1 + 1 ! ----------------- ! 1*z^2 + 2*z^1 + 1 @end example @end deftypefn ! sysrepdemo -*- texinfo -*- ! @deftypefn {Function File} {} sysrepdemo ! Tutorial for the use of the system data structure functions. @end deftypefn ! cellidx -*- texinfo -*- ! @deftypefn {Function File} {[@var{idxvec}, @var{errmsg}] =} cellidx (@var{listvar}, @var{strlist}) ! Return indices of string entries in @var{listvar} that match strings ! in @var{strlist}. ! ! Both @var{listvar} and @var{strlist} may be passed as strings or ! string matrices. If they are passed as string matrices, each entry ! is processed by @code{deblank} prior to searching for the entries. ! ! The first output is the vector of indices in @var{listvar}. ! ! If @var{strlist} contains a string not in @var{listvar}, then ! an error message is returned in @var{errmsg}. If only one output ! argument is requested, then @var{cellidx} prints @var{errmsg} to the ! screen and exits with an error. @end deftypefn ! __sysconcat__ ! Undocumented internal function. ! sysidx -*- texinfo -*- ! @deftypefn {Function File} {} sysidx (@var{sys}, @var{sigtype}, @var{signamelist}) ! Return indices of signals with specified signal names ! inputs given a system data structure @var{sys}, a signal type to be ! selected @var{sigtype} (@code{"in"}, @code{"out"}, @code{"st"}), and ! a list of desired signal names @var{signamelist}. @end deftypefn ! ss2sys -*- texinfo -*- ! @deftypefn {Function File} {} ss2sys (@var{a}, @var{b}, @var{c}, @var{d}, @var{tsam}, @var{n}, @var{nz}, @var{stname}, @var{inname}, @var{outname}, @var{outlist}) ! Create system structure from state-space data. May be continuous, ! discrete, or mixed (sampled data) ! @strong{Inputs} ! @table @var ! @item a ! @itemx b ! @itemx c ! @itemx d ! usual state space matrices. ! default: @var{d} = zero matrix ! @item tsam ! sampling rate. Default: @math{tsam = 0} (continuous system) ! @item n ! @itemx nz ! number of continuous, discrete states in the system ! If @var{tsam} is 0, @math{n = @code{rows}(@var{a})}, @math{nz = 0}. ! If @var{tsam} is greater than zero, @math{n = 0}, ! @math{nz = @code{rows}(@var{a})} ! see below for system partitioning ! @item stname ! cell array of strings of state signal names ! default (@var{stname}=[] on input): @code{x_n} for continuous states, ! @code{xd_n} for discrete states ! @item inname ! cell array of strings of input signal names ! default (@var{inname} = [] on input): @code{u_n} ! @item outname ! cell array of strings of input signal names ! default (@var{outname} = [] on input): @code{y_n} ! @item outlist ! list of indices of outputs y that are sampled ! If @var{tsam} is 0, @math{outlist = []}. ! If @var{tsam} is greater than 0, @math{outlist = 1:@code{rows}(@var{c})}. ! @end table ! Unlike states, discrete/continuous outputs may appear in any order. ! @code{sys2ss} returns a vector @var{yd} where ! @var{yd}(@var{outlist}) = 1; all other entries of @var{yd} are 0. ! ! @strong{Outputs} ! @var{outsys} = system data structure + @strong{System partitioning} + + Suppose for simplicity that outlist specified + that the first several outputs were continuous and the remaining outputs + were discrete. Then the system is partitioned as @example @group ! x = [ xc ] (n x 1) ! [ xd ] (nz x 1 discrete states) ! a = [ acc acd ] b = [ bc ] ! [ adc add ] [ bd ] ! c = [ ccc ccd ] d = [ dc ] ! [ cdc cdd ] [ dd ] ! ! (cdc = c(outlist,1:n), etc.) @end group @end example ! with dynamic equations: @ifinfo + @math{d/dt xc(t) = acc*xc(t) + acd*xd(k*tsam) + bc*u(t)} ! @math{xd((k+1)*tsam) = adc*xc(k*tsam) + add*xd(k*tsam) + bd*u(k*tsam)} ! @math{yc(t) = ccc*xc(t) + ccd*xd(k*tsam) + dc*u(t)} ! ! @math{yd(k*tsam) = cdc*xc(k*tsam) + cdd*xd(k*tsam) + dd*u(k*tsam)} ! @end ifinfo @iftex @tex ! $$\eqalign{ ! {d \over dt} x_c(t) ! & = a_{cc} x_c(t) + a_{cd} x_d(k*t_{sam}) + bc*u(t) \cr ! x_d((k+1)*t_{sam}) ! & = a_{dc} x_c(k t_{sam}) + a_{dd} x_d(k t_{sam}) + b_d u(k t_{sam}) \cr ! y_c(t) ! & = c_{cc} x_c(t) + c_{cd} x_d(k t_{sam}) + d_c u(t) \cr ! y_d(k t_{sam}) ! & = c_{dc} x_c(k t_{sam}) + c_{dd} x_d(k t_{sam}) + d_d u(k t_{sam}) ! }$$ @end tex @end iftex + @strong{Signal partitions} @example ! @group ! | continuous | discrete | ! ---------------------------------------------------- ! states | stname(1:n,:) | stname((n+1):(n+nz),:) | ! ---------------------------------------------------- ! outputs | outname(cout,:) | outname(outlist,:) | ! ---------------------------------------------------- ! @end group @end example ! where @math{cout} is the list of in 1:@code{rows}(@var{p}) ! that are not contained in outlist. (Discrete/continuous outputs ! may be entered in any order desired by the user.) ! @strong{Example} @example ! octave:1> a = [1 2 3; 4 5 6; 7 8 10]; ! octave:2> b = [0 0 ; 0 1 ; 1 0]; ! octave:3> c = eye (3); ! octave:4> sys = ss (a, b, c, [], 0, 3, 0, ! > @{"volts", "amps", "joules"@}); ! octave:5> sysout(sys); ! Input(s) ! 1: u_1 ! 2: u_2 ! Output(s): ! 1: y_1 ! 2: y_2 ! 3: y_3 ! state-space form: ! 3 continuous states, 0 discrete states ! State(s): ! 1: volts ! 2: amps ! 3: joules ! A matrix: 3 x 3 ! 1 2 3 ! 4 5 6 ! 7 8 10 ! B matrix: 3 x 2 ! 0 0 ! 0 1 ! 1 0 ! C matrix: 3 x 3 ! 1 0 0 ! 0 1 0 ! 0 0 1 ! D matrix: 3 x 3 ! 0 0 ! 0 0 ! 0 0 ! @end example ! Notice that the @math{D} matrix is constructed by default to the ! correct dimensions. Default input and output signals names were assigned ! since none were given. @end deftypefn ! __tf2sysl__ ! Undocumented internal function. ! is_sample -*- texinfo -*- ! @deftypefn {Function File} {} is_sample (@var{ts}) ! Return true if @var{ts} is a valid sampling time ! (real, scalar, > 0). ! @end deftypefn ! sys2zp ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{zer}, @var{pol}, @var{k}, @var{tsam}, @var{inname}, @var{outname}] =} sys2zp (@var{sys}) ! Extract zero/pole/leading coefficient information from a system data ! structure. ! See @command{zp} for parameter descriptions. ! @strong{Example} ! @example ! octave:1> sys=ss([1 -2; -1.1,-2.1],[0;1],[1 1]); ! octave:2> [zer,pol,k] = sys2zp(sys) ! zer = 3.0000 ! pol = ! -2.6953 ! 1.5953 ! k = 1 ! @end example @end deftypefn ! __syscont_disc__ ! Undocumented internal function. ! __abcddims__ ! Undocumented internal function. ! syscont -*- texinfo -*- ! @deftypefn {Function File} {[@var{csys}, @var{acd}, @var{ccd}] =} syscont (@var{sys}) ! Extract the purely continuous subsystem of an input system. ! ! @strong{Input} ! @table @var ! @item sys ! system data structure. ! @end table ! @strong{Outputs} ! @table @var ! @item csys ! is the purely continuous input/output connections of @var{sys} ! @item acd ! @itemx ccd ! connections from discrete states to continuous states, ! discrete states to continuous outputs, respectively. ! If no continuous path exists, @var{csys} will be empty. ! @end table @end deftypefn ! __sysdefstname__ ! Undocumented internal function. ! fir2sys -*- texinfo -*- ! @deftypefn {Function File} {} fir2sys (@var{num}, @var{tsam}, @var{inname}, @var{outname}) ! construct a system data structure from @acronym{FIR} description + @strong{Inputs} @table @var ! @item num ! vector of coefficients ! @ifinfo ! [c0, c1, @dots{}, cn] ! @end ifinfo ! @iftex ! @tex ! $ [c_0, c_1, \ldots, c_n ]$ ! @end tex ! @end iftex ! of the @acronym{SISO} @acronym{FIR} transfer function ! @ifinfo ! C(z) = c0 + c1*z^(-1) + c2*z^(-2) + @dots{} + cn*z^(-n) ! @end ifinfo ! @iftex ! @tex ! $$ C(z) = c_0 + c_1z^{-1} + c_2z^{-2} + \ldots + c_nz^{-n} $$ ! @end tex ! @end iftex ! ! @item tsam ! sampling time (default: 1) ! ! @item inname ! name of input signal; may be a string or a list with a single entry. ! ! @item outname ! name of output signal; may be a string or a list with a single entry. @end table ! @strong{Output} ! @table @var ! @item sys ! system data structure ! @end table + @strong{Example} @example ! octave:1> sys = fir2sys([1 -1 2 4],0.342,\ ! > "A/D input","filter output"); ! octave:2> sysout(sys) ! Input(s) ! 1: A/D input ! Output(s): ! 1: filter output (discrete) ! Sampling interval: 0.342 ! transfer function form: ! 1*z^3 - 1*z^2 + 2*z^1 + 4 ! ------------------------- ! 1*z^3 + 0*z^2 + 0*z^1 + 0 @end example @end deftypefn ! sysappend -*- texinfo -*- ! @deftypefn {Function File} {@var{sys} =} sysappend (@var{syst}, @var{b}, @var{c}, @var{d}, @var{outname}, @var{inname}, @var{yd}) ! appends new inputs and/or outputs to a system ! @strong{Inputs} ! @table @var ! @item syst ! system data structure ! @item b ! matrix to be appended to sys "B" matrix (empty if none) ! @item c ! matrix to be appended to sys "C" matrix (empty if none) ! @item d ! revised sys d matrix (can be passed as [] if the revised d is all zeros) ! @item outname ! list of names for new outputs ! @item inname ! list of names for new inputs ! @item yd ! binary vector; @math{yd(ii)=0} indicates a continuous output; ! @math{yd(ii)=1} indicates a discrete output. ! @end table + @strong{Outputs} + @table @var + @item sys @example ! @group ! sys.b := [syst.b , b] ! sys.c := [syst.c ] ! [ c ] ! sys.d := [syst.d | D12 ] ! [ D21 | D22 ] ! @end group @end example + where @math{D12}, @math{D21}, and @math{D22} are the appropriate dimensioned + blocks of the input parameter @var{d}. + @itemize @bullet + @item The leading block @math{D11} of @var{d} is ignored. + @item If @var{inname} and @var{outname} are not given as arguments, + the new inputs and outputs are be assigned default names. + @item @var{yd} is a binary vector of length rows(c) that indicates + continuous/sampled outputs. Default value for @var{yd} is: + @itemize @minus + @item @var{sys} is continuous or mixed + @var{yd} = @code{zeros(1,rows(c))} + + @item @var{sys} is discrete + @var{yd} = @code{ones(1,rows(c))} + @end itemize + @end itemize + @end table @end deftypefn ! sysdisc -*- texinfo -*- ! @deftypefn {Function File} {[@var{dsys}, @var{adc}, @var{cdc}] =} sysdisc (@var{sys}) ! @strong{Input} ! @table @var ! @item sys ! System data structure. ! @end table ! @strong{Outputs} ! @table @var ! @item dsys ! Purely discrete portion of sys (returned empty if there is ! no purely discrete path from inputs to outputs). ! @item adc ! @itemx cdc ! Connections from continuous states to discrete states and discrete ! outputs, respectively. ! @end table @end deftypefn ! tf2ss -*- texinfo -*- ! @deftypefn {Function File} {[@var{a}, @var{b}, @var{c}, @var{d}] =} tf2ss (@var{num}, @var{den}) ! Conversion from transfer function to state-space. ! The state space system: ! @iftex ! @tex ! $$ \dot x = Ax + Bu $$ ! $$ y = Cx + Du $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! . ! x = Ax + Bu ! y = Cx + Du ! @end example ! @end ifinfo ! is obtained from a transfer function: ! @iftex ! @tex ! $$ G(s) = { { \rm num }(s) \over { \rm den }(s) } $$ ! @end tex ! @end iftex ! @ifinfo @example ! num(s) ! G(s)=------- ! den(s) @end example + @end ifinfo ! The vector @var{den} must contain only one row, whereas the vector ! @var{num} may contain as many rows as there are outputs @var{y} of ! the system. The state space system matrices obtained from this function ! will be in controllable canonical form as described in @cite{Modern Control ! Theory}, (Brogan, 1991). @end deftypefn ! abcddim -*- texinfo -*- ! @deftypefn {Function File} {[@var{n}, @var{m}, @var{p}] =} abcddim (@var{a}, @var{b}, @var{c}, @var{d}) ! Check for compatibility of the dimensions of the matrices defining ! the linear system ! @iftex ! @tex ! $[A, B, C, D]$ corresponding to ! $$ ! \eqalign{ ! {dx\over dt} &= A x + B u\cr ! y &= C x + D u} ! $$ ! @end tex ! @end iftex ! @ifinfo ! [A, B, C, D] corresponding to @example ! dx/dt = a x + b u ! y = c x + d u @end example ! @end ifinfo ! or a similar discrete-time system. ! If the matrices are compatibly dimensioned, then @code{abcddim} returns ! @table @var ! @item n ! The number of system states. ! ! @item m ! The number of system inputs. + @item p + The number of system outputs. + @end table + + Otherwise @code{abcddim} returns @var{n} = @var{m} = @var{p} = @minus{}1. + + Note: n = 0 (pure gain block) is returned without warning. + @seealso{is_abcd} @end deftypefn ! sysconnect -*- texinfo -*- ! @deftypefn {Function File} {@var{clsys} =} sysconnect (@var{sys}, @var{out_idx}, @var{in_idx}, @var{order}, @var{tol}) ! Close the loop from specified outputs to respective specified inputs ! @strong{Inputs} ! @table @var ! @item sys ! System data structure. ! @item out_idx ! @itemx in_idx ! Names or indices of signals to connect (see @code{sysidx}). ! The output specified by @math{out_idx(ii)} is connected to the input ! specified by @math{in_idx(ii)}. ! @item order ! logical flag (default = 0) ! @table @code ! @item 0 ! Leave inputs and outputs in their original order. ! @item 1 ! Permute inputs and outputs to the order shown in the diagram below. ! @end table ! @item tol ! Tolerance for singularities in algebraic loops, default: 200@code{eps}. ! @end table ! @strong{Outputs} ! @table @var ! @item clsys ! Resulting closed loop system. ! @end table ! ! @strong{Method} + @code{sysconnect} internally permutes selected inputs, outputs as shown + below, closes the loop, and then permutes inputs and outputs back to their + original order @example @group ! -------------------- ! u_1 ----->| |----> y_1 ! | sys | ! old u_2 | | ! u_2* ---->(+)--->| |----->y_2 ! (in_idx) ^ -------------------- | (out_idx) ! | | ! ------------------------------- @end group @end example + The input that has the summing junction added to it has an * added to + the end of the input name. + @end deftypefn + is_controllable + -*- texinfo -*- + @deftypefn {Function File} {[@var{retval}, @var{u}] =} is_controllable (@var{sys}, @var{tol}) + @deftypefnx {Function File} {[@var{retval}, @var{u}] =} is_controllable (@var{a}, @var{b}, @var{tol}) + Logical check for system controllability. ! @strong{Inputs} ! @table @var ! @item sys ! system data structure ! @item a ! @itemx b ! @var{n} by @var{n}, @var{n} by @var{m} matrices, respectively ! @item tol ! optional roundoff parameter. Default value: @code{10*eps} ! @end table ! ! @strong{Outputs} ! @table @var ! @item retval ! Logical flag; returns true (1) if the system @var{sys} or the ! pair (@var{a}, @var{b}) is controllable, whichever was passed as input ! arguments. ! @item u ! @var{u} is an orthogonal basis of the controllable subspace. ! @end table + @strong{Method} + Controllability is determined by applying Arnoldi iteration with + complete re-orthogonalization to obtain an orthogonal basis of the + Krylov subspace @example ! span ([b,a*b,...,a^@{n-1@}*b]). @end example ! The Arnoldi iteration is executed with @code{krylov} if the system ! has a single input; otherwise a block Arnoldi iteration is performed ! with @code{krylovb}. ! @seealso{size, rows, columns, length, ismatrix, isscalar, isvector ! is_observable, is_stabilizable, is_detectable, krylov, krylovb} @end deftypefn ! listidx -*- texinfo -*- ! @deftypefn {Function File} {[@var{idxvec}, @var{errmsg}] =} listidx (@var{listvar}, @var{strlist}) ! Return indices of string entries in @var{listvar} that match strings ! in @var{strlist}. ! Both @var{listvar} and @var{strlist} may be passed as strings or ! string matrices. If they are passed as string matrices, each entry ! is processed by @code{deblank} prior to searching for the entries. ! The first output is the vector of indices in @var{listvar}. ! If @var{strlist} contains a string not in @var{listvar}, then ! an error message is returned in @var{errmsg}. If only one output ! argument is requested, then @var{listidx} prints @var{errmsg} to the ! screen and exits with an error. @end deftypefn ! sysdup -*- texinfo -*- ! @deftypefn {Function File} {@var{retsys} =} sysdup (@var{asys}, @var{out_idx}, @var{in_idx}) ! Duplicate specified input/output connections of a system ! ! @strong{Inputs} ! @table @var ! @item asys ! system data structure ! @item out_idx ! @itemx in_idx ! indices or names of desired signals (see @code{sigidx}). ! duplicates are made of @code{y(out_idx(ii))} and @code{u(in_idx(ii))}. ! @end table + @strong{Output} + @table @var + @item retsys + Resulting closed loop system: + duplicated i/o names are appended with a @code{"+"} suffix. + @end table + + @strong{Method} + + @code{sysdup} creates copies of selected inputs and outputs as + shown below. @var{u1}, @var{y1} is the set of original inputs/outputs, and + @var{u2}, @var{y2} is the set of duplicated inputs/outputs in the order + specified in @var{in_idx}, @var{out_idx}, respectively @example @group ! ____________________ ! u1 ----->| |----> y1 ! | asys | ! u2 ------>| |----->y2 ! (in_idx) -------------------- (out_idx) @end group @end example @end deftypefn ! c2d -*- texinfo -*- ! @deftypefn {Function File} {} c2d (@var{sys}, @var{opt}, @var{t}) ! @deftypefnx {Function File} {} c2d (@var{sys}, @var{t}) ! Converts the system data structure describing: ! @iftex ! @tex ! $$ \dot x = A_cx + B_cu $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! . ! x = Ac x + Bc u ! @end example ! @end ifinfo ! into a discrete time equivalent model: ! @iftex ! @tex ! $$ x_{n+1} = A_dx_n + B_du_n $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! x[n+1] = Ad x[n] + Bd u[n] ! @end example ! @end ifinfo ! via the matrix exponential or bilinear transform. ! @strong{Inputs} ! @table @var ! @item sys ! system data structure (may have both continuous time and discrete ! time subsystems) ! @item opt ! string argument; conversion option (optional argument; ! may be omitted as shown above) ! @table @code ! @item "ex" ! use the matrix exponential (default) ! @item "bi" ! use the bilinear transformation ! @iftex ! @tex ! $$ s = { 2(z-1) \over T(z+1) } $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! 2(z-1) ! s = ----- ! T(z+1) ! @end example ! @end ifinfo ! FIXME: This option exits with an error if @var{sys} is not purely ! continuous. (The @code{ex} option can handle mixed systems.) ! @item "matched" ! Use the matched pole/zero equivalent transformation (currently only ! works for purely continuous @acronym{SISO} systems). ! @end table ! @item t ! sampling time; required if @var{sys} is purely continuous. ! @strong{Note} that if the second argument is not a string, @code{c2d()} ! assumes that the second argument is @var{t} and performs ! appropriate argument checks. ! @end table ! @strong{Output} ! @table @var ! @item dsys ! Discrete time equivalent via zero-order hold, sample each @var{t} sec. ! @end table ! This function adds the suffix @code{_d} ! to the names of the new discrete states. @end deftypefn ! sysadd -*- texinfo -*- ! @deftypefn {Function File} {} sysadd (@var{gsys}, @var{hsys}) ! returns @var{sys} = @var{gsys} + @var{hsys}. ! @itemize @bullet ! @item Exits with ! an error if @var{gsys} and @var{hsys} are not compatibly dimensioned. ! @item Prints a warning message is system states have identical names; ! duplicate names are given a suffix to make them unique. ! @item @var{sys} input/output names are taken from @var{gsys}. ! @end itemize @example ! @group ! ________ ! ----| gsys |--- ! u | ---------- +| ! ----- (_)----> y ! | ________ +| ! ----| hsys |--- ! -------- ! @end group @end example + @end deftypefn + sys2tf + -*- texinfo -*- + @deftypefn {Function File} {[@var{num}, @var{den}, @var{tsam}, @var{inname}, @var{outname}] =} sys2tf (@var{sys}) + Extract transfer function data from a system data structure. ! See @command{tf} for parameter descriptions. + @strong{Example} @example ! octave:1> sys=ss([1 -2; -1.1,-2.1],[0;1],[1 1]); ! octave:2> [num,den] = sys2tf(sys) ! num = 1.0000 -3.0000 ! den = 1.0000 1.1000 -4.3000 @end example @end deftypefn ! sysreorder -*- texinfo -*- ! @deftypefn {Function File} {@var{pv} =} sysreorder (@var{vlen}, @var{list}) ! @strong{Inputs} ! @table @var ! @item vlen ! Vector length. ! @item list ! A subset of @code{[1:vlen]}. ! @end table ! @strong{Output} ! @table @var ! @item pv ! A permutation vector to order elements of @code{[1:vlen]} in ! @code{list} to the end of a vector. ! @end table ! Used internally by @code{sysconnect} to permute vector elements to their ! desired locations. @end deftypefn ! zp2tf -*- texinfo -*- ! @deftypefn {Function File} {[@var{num}, @var{den}] =} zp2tf (@var{zer}, @var{pol}, @var{k}) ! Converts zeros / poles to a transfer function. ! @strong{Inputs} ! @table @var ! @item zer ! @itemx pol ! Vectors of (possibly complex) poles and zeros of a transfer ! function. Complex values must appear in conjugate pairs. ! @item k ! Real scalar (leading coefficient). ! @end table ! @end deftypefn ! __sysdefioname__ ! Undocumented internal function. ! parallel ! -*- texinfo -*- ! @deftypefn {Function File} {@var{ksys} =} parallel (@var{asys}, @var{bsys}) ! Forms the parallel connection of two systems. @example ! @group ! -------------------- ! | -------- | ! u ----->|----> | asys |--->|----> y1 ! | | -------- | ! | | -------- | ! |--->|----> | bsys |--->|----> y2 ! | -------- | ! -------------------- ! ksys ! @end group @end example + @end deftypefn + sys2ss + -*- texinfo -*- + @deftypefn {Function File} {[@var{a}, @var{b}, @var{c}, @var{d}, @var{tsam}, @var{n}, @var{nz}, @var{stname}, @var{inname}, @var{outname}, @var{yd}] =} sys2ss (@var{sys}) + Extract state space representation from system data structure. ! @strong{Input} ! @table @var ! @item sys ! System data structure. ! @end table ! @strong{Outputs} ! @table @var ! @item a ! @itemx b ! @itemx c ! @itemx d ! State space matrices for @var{sys}. ! @item tsam ! Sampling time of @var{sys} (0 if continuous). ! @item n ! @itemx nz ! Number of continuous, discrete states (discrete states come ! last in state vector @var{x}). ! @item stname ! @itemx inname ! @itemx outname ! Signal names (lists of strings); names of states, ! inputs, and outputs, respectively. ! @item yd ! Binary vector; @var{yd}(@var{ii}) is 1 if output @var{y}(@var{ii}) ! is discrete (sampled); otherwise @var{yd}(@var{ii}) is 0. ! @end table ! A warning massage is printed if the system is a mixed ! continuous and discrete system. + @strong{Example} @example ! octave:1> sys=tf2sys([1 2],[3 4 5]); ! octave:2> [a,b,c,d] = sys2ss(sys) ! a = ! 0.00000 1.00000 ! -1.66667 -1.33333 ! b = ! 0 ! 1 ! c = 0.66667 0.33333 ! d = 0 @end example @end deftypefn ! sysgroup -*- texinfo -*- ! @deftypefn {Function File} {@var{sys} =} sysgroup (@var{asys}, @var{bsys}) ! Combines two systems into a single system. ! @strong{Inputs} ! @table @var ! @item asys ! @itemx bsys ! System data structures. ! @end table ! @strong{Output} ! @table @var ! @item sys ! @math{sys = @r{block diag}(asys,bsys)} ! @end table ! @example ! @group ! __________________ ! | ________ | ! u1 ----->|--> | asys |--->|----> y1 ! | -------- | ! | ________ | ! u2 ----->|--> | bsys |--->|----> y2 ! | -------- | ! ------------------ ! Ksys ! @end group ! @end example ! The function also rearranges the internal state-space realization of @var{sys} ! so that the continuous states come first and the discrete states come last. ! If there are duplicate names, the second name has a unique suffix appended ! on to the end of the name. @end deftypefn ! tfout -*- texinfo -*- ! @deftypefn {Function File} {} tfout (@var{num}, @var{denom}, @var{x}) ! Print formatted transfer function @math{n(s)/d(s)} to the screen. ! @var{x} defaults to the string @code{"s"} ! @seealso{polyval, polyvalm, poly, roots, conv, deconv, residue, ! filter, polyderiv, polyinteg, polyout} @end deftypefn ! is_stable -*- texinfo -*- ! @deftypefn {Function File} {} is_stable (@var{a}, @var{tol}, @var{dflg}) ! @deftypefnx {Function File} {} is_stable (@var{sys}, @var{tol}) ! Returns 1 if the matrix @var{a} or the system @var{sys} ! is stable, or 0 if not. ! @strong{Inputs} ! @table @var ! @item tol ! is a roundoff parameter, set to 200*@code{eps} if omitted. ! @item dflg ! Digital system flag (not required for system data structure): ! @table @code ! @item @var{dflg} != 0 ! stable if eig(a) is in the unit circle ! @item @var{dflg} == 0 ! stable if eig(a) is in the open LHP (default) ! @end table ! @end table ! @seealso{size, rows, columns, length, ismatrix, isscalar, isvector ! is_observable, is_stabilizable, is_detectable, krylov, krylovb} @end deftypefn ! buildssic -*- texinfo -*- ! @deftypefn {Function File} {} buildssic (@var{clst}, @var{ulst}, @var{olst}, @var{ilst}, @var{s1}, @var{s2}, @var{s3}, @var{s4}, @var{s5}, @var{s6}, @var{s7}, @var{s8}) ! Form an arbitrary complex (open or closed loop) system in ! state-space form from several systems. @command{buildssic} can ! easily (despite its cryptic syntax) integrate transfer functions ! from a complex block diagram into a single system with one call. ! This function is especially useful for building open loop ! interconnections for ! @iftex ! @tex ! $ { \cal H }_\infty $ and $ { \cal H }_2 $ ! @end tex ! @end iftex ! @ifinfo ! H-infinity and H-2 ! @end ifinfo ! designs or for closing loops with these controllers. ! Although this function is general purpose, the use of @command{sysgroup} ! @command{sysmult}, @command{sysconnect} and the like is recommended for ! standard operations since they can handle mixed discrete and continuous ! systems and also the names of inputs, outputs, and states. ! The parameters consist of 4 lists that describe the connections ! outputs and inputs and up to 8 systems @var{s1}--@var{s8}. ! Format of the lists: ! @table @var ! @item clst ! connection list, describes the input signal of ! each system. The maximum number of rows of Clst is ! equal to the sum of all inputs of s1-s8. ! Example: ! @code{[1 2 -1; 2 1 0]} means that: new input 1 is old input 1 ! + output 2 - output 1, and new input 2 is old input 2 ! + output 1. The order of rows is arbitrary. ! @item ulst ! if not empty the old inputs in vector @var{ulst} will ! be appended to the outputs. You need this if you ! want to ``pull out'' the input of a system. Elements ! are input numbers of @var{s1}--@var{s8}. ! @item olst ! output list, specifies the outputs of the resulting ! systems. Elements are output numbers of @var{s1}--@var{s8}. ! The numbers are allowed to be negative and may ! appear in any order. An empty matrix means ! all outputs. ! @item ilst ! input list, specifies the inputs of the resulting ! systems. Elements are input numbers of @var{s1}--@var{s8}. ! The numbers are allowed to be negative and may ! appear in any order. An empty matrix means ! all inputs. ! @end table ! ! Example: Very simple closed loop system. ! @example ! @group ! w e +-----+ u +-----+ ! --->o--*-->| K |--*-->| G |--*---> y ! ^ | +-----+ | +-----+ | ! - | | | | ! | | +----------------> u ! | | | ! | +-------------------------|---> e ! | | ! +----------------------------+ ! @end group ! @end example + The closed loop system @var{GW} can be obtained by @example ! GW = buildssic([1 2; 2 -1], 2, [1 2 3], 2, G, K); @end example + @table @var + @item clst + 1st row: connect input 1 (@var{G}) with output 2 (@var{K}). ! 2nd row: connect input 2 (@var{K}) with negative output 1 (@var{G}). ! @item ulst ! Append input of 2 (@var{K}) to the number of outputs. ! @item olst ! Outputs are output of 1 (@var{G}), 2 (@var{K}) and ! appended output 3 (from @var{ulst}). ! @item ilst ! The only input is 2 (@var{K}). @end table ! Here is a real example: ! @example ! @group ! +----+ ! -------------------->| W1 |---> v1 ! z | +----+ ! ----|-------------+ ! | | ! | +---+ v +----+ ! *--->| G |--->O--*-->| W2 |---> v2 ! | +---+ | +----+ ! | | ! | v ! u y ! @end group ! @end example @iftex @tex ! $$ { \rm min } \Vert GW_{vz} \Vert _\infty $$ @end tex @end iftex @ifinfo ! @example ! min || GW || ! vz infty ! @end example @end ifinfo + + The closed loop system @var{GW} @iftex @tex ! from $ [z, u]^T $ to $ [v_1, v_2, y]^T $ @end tex @end iftex ! @ifinfo ! from [z, u]' to [v1, v2, y]' ! @end ifinfo ! can be obtained by (all @acronym{SISO} systems): ! @example ! GW = buildssic([1, 4; 2, 4; 3, 1], 3, [2, 3, 5], ! [3, 4], G, W1, W2, One); ! @end example ! where ``One'' is a unity gain (auxiliary) function with order 0. ! (e.g. @code{One = ugain(1);}) @end deftypefn ! sysgettsam -*- texinfo -*- ! @deftypefn {Function File} {} sysgettsam (@var{sys}) ! Return the sampling time of the system @var{sys}. @end deftypefn ! is_detectable -*- texinfo -*- ! @deftypefn {Function File} {@var{retval} =} is_detectable (@var{a}, @var{c}, @var{tol}, @var{dflg}) ! @deftypefnx {Function File} {@var{retval} =} is_detectable (@var{sys}, @var{tol}) ! Test for detectability (observability of unstable modes) of (@var{a}, @var{c}). ! Returns 1 if the system @var{a} or the pair (@var{a}, @var{c}) is ! detectable, 0 if not, and -1 if the system has unobservable modes at the ! imaginary axis (unit circle for discrete-time systems). ! @strong{See} @command{is_stabilizable} for detailed description of ! arguments and computational method. ! @seealso{is_stabilizable, size, rows, columns, length, ismatrix, ! isscalar, isvector} @end deftypefn ! sysupdate -*- texinfo -*- ! @deftypefn {Function File} {} sysupdate (@var{sys}, @var{opt}) ! Update the internal representation of a system. ! ! @strong{Inputs} ! @table @var ! @item sys: ! system data structure ! @item opt ! string: ! @table @code ! @item "tf" ! update transfer function form ! @item "zp" ! update zero-pole form ! @item "ss" ! update state space form ! @item "all" ! all of the above ! @end table ! @end table ! ! @strong{Outputs} ! @table @var ! @item retsys ! Contains union of data in sys and requested data. ! If requested data in @var{sys} is already up to date then @var{retsys}=@var{sys}. ! @end table ! ! Conversion to @command{tf} or @command{zp} exits with an error if the system is ! mixed continuous/digital. ! @seealso{tf, ss, zp, sysout, sys2ss, sys2tf, sys2zp} @end deftypefn ! jet707 -*- texinfo -*- ! @deftypefn {Function File} {@var{sys} =} jet707 () ! Creates a linearized state-space model of a Boeing 707-321 aircraft ! at @var{v}=80 m/s @iftex @tex ! ($M = 0.26$, $G_{a0} = -3^{\circ}$, ${\alpha}_0 = 4^{\circ}$, ${\kappa}= 50^{\circ}$). @end tex @end iftex @ifinfo ! (@var{M} = 0.26, @var{Ga0} = -3 deg, @var{alpha0} = 4 deg, @var{kappa} = 50 deg). @end ifinfo ! System inputs: (1) thrust and (2) elevator angle. ! System outputs: (1) airspeed and (2) pitch angle. ! ! @strong{Reference}: R. Brockhaus: @cite{Flugregelung} (Flight ! Control), Springer, 1994. ! @seealso{ord2} @end deftypefn ! ss2zp -*- texinfo -*- ! @deftypefn {Function File} {[@var{pol}, @var{zer}, @var{k}] =} ss2zp (@var{a}, @var{b}, @var{c}, @var{d}) ! Converts a state space representation to a set of poles and zeros; ! @var{k} is a gain associated with the zeros. ! Used internally in system data structure format manipulations. @end deftypefn ! sysmin -*- texinfo -*- ! @deftypefn {Function File} {[@var{retsys}, @var{nc}, @var{no}] =} sysmin (@var{sys}, @var{flg}) ! Returns a minimal (or reduced order) system ! ! @strong{Inputs} ! @table @var ! @item sys ! System data structure ! @item flg ! When equal to 0 (default value), returns minimal system, ! in which state names are lost; when equal to 1, returns system ! with physical states removed that are either uncontrollable or ! unobservable (cannot reduce further without discarding physical ! meaning of states). ! @end table ! @strong{Outputs} ! @table @var ! @item retsys ! Returned system. ! @item nc ! Number of controllable states in the returned system. ! @item no ! Number of observable states in the returned system. ! @item cflg ! @code{is_controllable(retsys)}. ! @item oflg ! @code{is_observable(retsys)}. ! @end table @end deftypefn ! tf2zp -*- texinfo -*- ! @deftypefn {Function File} {[@var{zer}, @var{pol}, @var{k}] =} tf2zp (@var{num}, @var{den}) ! Converts transfer functions to poles-and-zero representations. ! Returns the zeros and poles of the @acronym{SISO} system defined ! by @var{num}/@var{den}. ! @var{k} is a gain associated with the system zeros. ! @end deftypefn ! sysgettype ! -*- texinfo -*- ! @deftypefn {Function File} {} sysgettype (@var{sys}) ! return the initial system type of the system ! @strong{Input} ! @table @var ! @item sys ! System data structure. @end table ! @strong{Output} ! @table @var ! @item systype ! String indicating how the structure was initially ! constructed. Values: @code{"ss"}, @code{"zp"}, or @code{"tf"}. ! @end table ! @acronym{FIR} initialized systems return @code{systype="tf"}. @end deftypefn ! __syschnamesl__ ! Undocumented internal function. ! syschtsam -*- texinfo -*- ! @deftypefn {Function File} {} syschtsam (@var{sys}, @var{tsam}) ! This function changes the sampling time (tsam) of the system. Exits with ! an error if sys is purely continuous time. ! @end deftypefn ! syssub ! -*- texinfo -*- ! @deftypefn {Function File} {@var{sys} =} syssub (@var{Gsys}, @var{Hsys}) ! Return @math{sys = Gsys - Hsys}. ! @strong{Method} + @var{Gsys} and @var{Hsys} are connected in parallel. + The input vector is connected to both systems; the outputs are + subtracted. Returned system names are those of @var{Gsys}. @example ! @group ! +--------+ ! +--->| Gsys |---+ ! | +--------+ | ! | +| ! u --+ (_)--> y ! | -| ! | +--------+ | ! +--->| Hsys |---+ ! +--------+ ! @end group @end example @end deftypefn ! tf -*- texinfo -*- ! @deftypefn {Function File} {} tf (@var{num}, @var{den}, @var{tsam}, @var{inname}, @var{outname}) ! build system data structure from transfer function format data ! @strong{Inputs} ! @table @var ! @item num ! @itemx den ! coefficients of numerator/denominator polynomials ! @item tsam ! sampling interval. default: 0 (continuous time) ! @item inname ! @itemx outname ! input/output signal names; may be a string or cell array with a single string ! entry. ! @end table ! @strong{Outputs} ! @var{sys} = system data structure ! @strong{Example} ! @example ! octave:1> sys=tf([2 1],[1 2 1],0.1); ! octave:2> sysout(sys) ! Input(s) ! 1: u_1 ! Output(s): ! 1: y_1 (discrete) ! Sampling interval: 0.1 ! transfer function form: ! 2*z^1 + 1 ! ----------------- ! 1*z^2 + 2*z^1 + 1 ! @end example @end deftypefn ! zp -*- texinfo -*- ! @deftypefn {Function File} {} zp (@var{zer}, @var{pol}, @var{k}, @var{tsam}, @var{inname}, @var{outname}) ! Create system data structure from zero-pole data. ! @strong{Inputs} ! @table @var ! @item zer ! vector of system zeros ! @item pol ! vector of system poles ! @item k ! scalar leading coefficient ! @item tsam ! sampling period. default: 0 (continuous system) ! @item inname ! @itemx outname ! input/output signal names (lists of strings) ! @end table ! ! @strong{Outputs} ! sys: system data structure ! ! @strong{Example} ! @example ! octave:1> sys=zp([1 -1],[-2 -2 0],1); ! octave:2> sysout(sys) ! Input(s) ! 1: u_1 ! Output(s): ! 1: y_1 ! zero-pole form: ! 1 (s - 1) (s + 1) ! ----------------- ! s (s + 2) (s + 2) ! @end example @end deftypefn ! is_siso -*- texinfo -*- ! @deftypefn {Function File} {} is_siso (@var{sys}) ! Returns nonzero if the system data structure ! @var{sys} is single-input, single-output. @end deftypefn ! sys2fir -*- texinfo -*- ! @deftypefn {Function File} {[@var{c}, @var{tsam}, @var{input}, @var{output}] =} sys2fir (@var{sys}) ! Extract @acronym{FIR} data from system data structure; see @command{fir2sys} for ! parameter descriptions. ! @seealso{fir2sys} @end deftypefn ! zp2ss -*- texinfo -*- ! @deftypefn {Function File} {[@var{a}, @var{b}, @var{c}, @var{d}] =} zp2ss (@var{zer}, @var{pol}, @var{k}) ! Conversion from zero / pole to state space. ! @strong{Inputs} ! @table @var ! @item zer ! @itemx pol ! Vectors of (possibly) complex poles and zeros of a transfer ! function. Complex values must come in conjugate pairs ! (i.e., @math{x+jy} in @var{zer} means that @math{x-jy} is also in @var{zer}). ! The number of zeros must not exceed the number of poles. ! @item k ! Real scalar (leading coefficient). ! @end table ! @strong{Outputs} ! @table @var ! @item @var{a} ! @itemx @var{b} ! @itemx @var{c} ! @itemx @var{d} ! The state space system, in the form: ! @iftex ! @tex ! $$ \dot x = Ax + Bu $$ ! $$ y = Cx + Du $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! . ! x = Ax + Bu ! y = Cx + Du ! @end example ! @end ifinfo ! @end table ! @end deftypefn ! ord2 ! -*- texinfo -*- ! @deftypefn {Function File} {} ord2 (@var{nfreq}, @var{damp}, @var{gain}) ! Creates a continuous 2nd order system with parameters: ! @strong{Inputs} ! @table @var ! @item nfreq ! natural frequency [Hz]. (not in rad/s) ! @item damp ! damping coefficient ! @item gain ! dc-gain ! This is steady state value only for damp > 0. ! gain is assumed to be 1.0 if omitted. ! @end table + @strong{Output} + @table @var + @item outsys + system data structure has representation with + @ifinfo + @math{w = 2 * pi * nfreq}: + @end ifinfo + @iftex + @tex + $ w = 2 \pi f $: + @end tex + @end iftex @example @group ! / \ ! | / -2w*damp -w \ / w \ | ! G = | | |, | |, [ 0 gain ], 0 | ! | \ w 0 / \ 0 / | ! \ / @end group @end example + @end table + @strong{See also} @command{jet707} (@acronym{MIMO} example, Boeing 707-321 + aircraft model) + @end deftypefn + is_stabilizable + -*- texinfo -*- + @deftypefn {Function File} {@var{retval} =} is_stabilizable (@var{sys}, @var{tol}) + @deftypefnx {Function File} {@var{retval} =} is_stabilizable (@var{a}, @var{b}, @var{tol}, @var{dflg}) + Logical check for system stabilizability (i.e., all unstable modes are controllable). + Returns 1 if the system is stabilizable, 0 if the system is not stabilizable, -1 + if the system has non stabilizable modes at the imaginary axis (unit circle for + discrete-time systems. ! Test for stabilizability is performed via Hautus Lemma. If ! @iftex ! @tex ! @var{dflg}$\neq$0 ! @end tex ! @end iftex ! @ifinfo ! @var{dflg}!=0 ! @end ifinfo ! assume that discrete-time matrices (a,b) are supplied. ! @seealso{size, rows, columns, length, ismatrix, isscalar, isvector ! is_observable, is_stabilizable, is_detectable} ! @end deftypefn ! ss2tf ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{num}, @var{den}] =} ss2tf (@var{a}, @var{b}, @var{c}, @var{d}) ! Conversion from transfer function to state-space. ! The state space system: ! @iftex ! @tex ! $$ \dot x = Ax + Bu $$ ! $$ y = Cx + Du $$ ! @end tex ! @end iftex ! @ifinfo @example ! . ! x = Ax + Bu ! y = Cx + Du @end example + @end ifinfo ! is converted to a transfer function: ! @iftex ! @tex ! $$ G(s) = { { \rm num }(s) \over { \rm den }(s) } $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! num(s) ! G(s)=------- ! den(s) @end example + @end ifinfo ! used internally in system data structure format manipulations. ! @end deftypefn ! __tfl__ ! Undocumented internal function. ! zp2sys ! -*- texinfo -*- ! @deftypefn {Function File} {} zp2sys (@var{zer}, @var{pol}, @var{k}, @var{tsam}, @var{inname}, @var{outname}) ! Create system data structure from zero-pole data. ! @strong{Inputs} ! @table @var ! @item zer ! Vector of system zeros. ! @item pol ! Vector of system poles. ! @item k ! Scalar leading coefficient. ! @item tsam ! Sampling period; default: 0 (continuous system). ! @item inname ! @itemx outname ! Input/output signal names (lists of strings). ! @end table ! @strong{Output} ! @table @var ! @item sys ! System data structure. ! @end table + @strong{Example} @example ! octave:1> sys=zp2sys([1 -1],[-2 -2 0],1); ! octave:2> sysout(sys) ! Input(s) ! 1: u_1 ! Output(s): ! 1: y_1 ! zero-pole form: ! 1 (s - 1) (s + 1) ! ----------------- ! s (s + 2) (s + 2) @end example + @end deftypefn + sysprune + -*- texinfo -*- + @deftypefn {Function File} {@var{retsys} =} sysprune (@var{asys}, @var{out_idx}, @var{in_idx}) + Extract specified inputs/outputs from a system ! @strong{Inputs} ! @table @var ! @item asys ! system data structure ! @item out_idx ! @itemx in_idx ! Indices or signal names of the outputs and inputs to be kept in the returned ! system; remaining connections are ``pruned'' off. ! May select as [] (empty matrix) to specify all outputs/inputs. @example ! retsys = sysprune (Asys, [1:3,4], "u_1"); ! retsys = sysprune (Asys, @{"tx", "ty", "tz"@}, 4); @end example ! @end table + @strong{Output} + @table @var + @item retsys + Resulting system. + @end table @example @group ! ____________________ ! u1 ------->| |----> y1 ! (in_idx) | Asys | (out_idx) ! u2 ------->| |----| y2 ! (deleted)-------------------- (deleted) @end group @end example @end deftypefn ! moddemo -*- texinfo -*- ! @deftypefn {Function File} {} moddemo (@var{inputs}) ! Octave Control toolbox demo: Model Manipulations demo. ! @end deftypefn ! sysgetsignals ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{stname}, @var{inname}, @var{outname}, @var{yd}] =} sysgetsignals (@var{sys}) ! @deftypefnx {Function File} {@var{siglist} =} sysgetsignals (@var{sys}, @var{sigid}) ! @deftypefnx {Function File} {@var{signame} =} sysgetsignals (@var{sys}, @var{sigid}, @var{signum}, @var{strflg}) ! Get signal names from a system ! @strong{Inputs} ! @table @var ! @item sys ! system data structure for the state space system ! @item sigid ! signal id. String. Must be one of ! @table @code ! @item "in" ! input signals ! @item "out" ! output signals ! @item "st" ! stage signals ! @item "yd" ! value of logical vector @var{yd} ! @end table ! @item signum ! index(indices) or name(s) or signals; see @code{sysidx} ! @item strflg ! flag to return a string instead of a cell array; Values: ! @table @code ! @item 0 ! (default) return a cell array (even if signum specifies an individual signal) ! @item 1 ! return a string. Exits with an error if signum does not specify an ! individual signal. ! @end table ! @end table ! @strong{Outputs} ! @table @bullet ! @item If @var{sigid} is not specified: ! @table @var ! @item stname ! @itemx inname ! @itemx outname ! signal names (cell array of strings); names of states, ! inputs, and outputs, respectively. ! @item yd ! binary vector; @var{yd}(@var{ii}) is nonzero if output @var{ii} is ! discrete. ! @end table ! @item If @var{sigid} is specified but @var{signum} is not specified: ! @table @code ! @item sigid="in" ! @var{siglist} is set to the cell array of input names. ! @item sigid="out" ! @var{siglist} is set to the cell array of output names. ! @item sigid="st" ! @var{siglist} is set to the cell array of state names. ! stage signals ! @item sigid="yd" ! @var{siglist} is set to logical vector indicating discrete outputs; ! @var{siglist}(@var{ii}) = 0 indicates that output @var{ii} is continuous ! (unsampled), otherwise it is discrete. ! @end table ! @item If the first three input arguments are specified: ! @var{signame} is a cell array of the specified signal names (@var{sigid} is ! @code{"in"}, @code{"out"}, or @code{"st"}), or else the logical flag ! indicating whether output(s) @var{signum} is(are) discrete (@var{sigval}=1) ! or continuous (@var{sigval}=0). ! @end table + @strong{Examples} (From @code{sysrepdemo}) @example ! octave> sys=ss(rand(4),rand(4,2),rand(3,4)); ! octave># get all signal names ! octave> [Ast,Ain,Aout,Ayd] = sysgetsignals(sys) ! Ast = ! ( ! [1] = x_1 ! [2] = x_2 ! [3] = x_3 ! [4] = x_4 ! ) ! Ain = ! ( ! [1] = u_1 ! [2] = u_2 ! ) ! Aout = ! ( ! [1] = y_1 ! [2] = y_2 ! [3] = y_3 ! ) ! Ayd = ! 0 0 0 ! octave> # get only input signal names: ! octave> Ain = sysgetsignals(sys,"in") ! Ain = ! ( ! [1] = u_1 ! [2] = u_2 ! ) ! octave> # get name of output 2 (in cell array): ! octave> Aout = sysgetsignals(sys,"out",2) ! Aout = ! ( ! [1] = y_2 ! ) ! octave> # get name of output 2 (as string): ! octave> Aout = sysgetsignals(sys,"out",2,1) ! Aout = y_2 @end example @end deftypefn ! starp -*- texinfo -*- ! @deftypefn {Function File} {} starp (@var{P}, @var{K}, @var{ny}, @var{nu}) + Redheffer star product or upper/lower LFT, respectively. @example ! @group ! ! +-------+ ! --------->| |---------> ! | P | ! +--->| |---+ ny ! | +-------+ | ! +-------------------+ ! | | ! +----------------+ | ! | | ! | +-------+ | ! +--->| |------+ nu ! | K | ! --------->| |---------> ! +-------+ ! @end group @end example + If @var{ny} and @var{nu} ``consume'' all inputs and outputs of + @var{K} then the result is a lower fractional transformation. + If @var{ny} and @var{nu} ``consume'' all inputs and outputs of + @var{P} then the result is an upper fractional transformation. ! @var{ny} and/or @var{nu} may be negative (i.e. negative feedback). @end deftypefn ! is_abcd -*- texinfo -*- ! @deftypefn {Function File} {@var{retval} =} is_abcd (@var{a}, @var{b}, @var{c}, @var{d}) ! Returns @var{retval} = 1 if the dimensions of @var{a}, @var{b}, ! @var{c}, @var{d} are compatible, otherwise @var{retval} = 0 with an ! appropriate diagnostic message printed to the screen. The matrices ! @var{b}, @var{c}, or @var{d} may be omitted. ! @seealso{abcddim} @end deftypefn ! ss -*- texinfo -*- ! @deftypefn {Function File} {@var{outsys} =} ss (@var{a}, @var{b}, @var{c}, @var{d}, @var{tsam}, @var{n}, @var{nz}, @var{stname}, @var{inname}, @var{outname}, @var{outlist}) ! Create system structure from state-space data. May be continuous, ! discrete, or mixed (sampled data) ! @strong{Inputs} ! @table @var ! @item a ! @itemx b ! @itemx c ! @itemx d ! usual state space matrices. ! default: @var{d} = zero matrix ! @item tsam ! sampling rate. Default: @math{tsam = 0} (continuous system) ! @item n ! @itemx nz ! number of continuous, discrete states in the system ! If @var{tsam} is 0, @math{n = @code{rows}(@var{a})}, @math{nz = 0}. ! If @var{tsam} is greater than zero, @math{n = 0}, ! @math{nz = @code{rows}(@var{a})} ! ! see below for system partitioning ! @item stname ! cell array of strings of state signal names ! default (@var{stname}=[] on input): @code{x_n} for continuous states, ! @code{xd_n} for discrete states ! @item inname ! cell array of strings of input signal names ! default (@var{inname} = [] on input): @code{u_n} ! @item outname ! cell array of strings of output signal names ! default (@var{outname} = [] on input): @code{y_n} ! @item outlist ! list of indices of outputs y that are sampled ! If @var{tsam} is 0, @math{outlist = []}. ! If @var{tsam} is greater than 0, @math{outlist = 1:@code{rows}(@var{c})}. ! @end table ! Unlike states, discrete/continuous outputs may appear in any order. ! @code{sys2ss} returns a vector @var{yd} where ! @var{yd}(@var{outlist}) = 1; all other entries of @var{yd} are 0. ! @strong{Output} ! @table @var ! @item outsys ! system data structure ! @end table ! ! @strong{System partitioning} + Suppose for simplicity that outlist specified + that the first several outputs were continuous and the remaining outputs + were discrete. Then the system is partitioned as @example ! @group ! x = [ xc ] (n x 1) ! [ xd ] (nz x 1 discrete states) ! a = [ acc acd ] b = [ bc ] ! [ adc add ] [ bd ] ! c = [ ccc ccd ] d = [ dc ] ! [ cdc cdd ] [ dd ] ! ! (cdc = c(outlist,1:n), etc.) ! @end group @end example ! with dynamic equations: ! @ifinfo ! @math{d/dt xc(t) = acc*xc(t) + acd*xd(k*tsam) + bc*u(t)} ! @math{xd((k+1)*tsam) = adc*xc(k*tsam) + add*xd(k*tsam) + bd*u(k*tsam)} ! ! @math{yc(t) = ccc*xc(t) + ccd*xd(k*tsam) + dc*u(t)} ! ! @math{yd(k*tsam) = cdc*xc(k*tsam) + cdd*xd(k*tsam) + dd*u(k*tsam)} ! @end ifinfo @iftex @tex ! $$\eqalign{ ! {d \over dt} x_c(t) ! & = a_{cc} x_c(t) + a_{cd} x_d(k*t_{sam}) + bc*u(t) \cr ! x_d((k+1)*t_{sam}) ! & = a_{dc} x_c(k t_{sam}) + a_{dd} x_d(k t_{sam}) + b_d u(k t_{sam}) \cr ! y_c(t) ! & = c_{cc} x_c(t) + c_{cd} x_d(k t_{sam}) + d_c u(t) \cr ! y_d(k t_{sam}) ! & = c_{dc} x_c(k t_{sam}) + c_{dd} x_d(k t_{sam}) + d_d u(k t_{sam}) ! }$$ @end tex @end iftex + @strong{Signal partitions} @example ! @group ! | continuous | discrete | ! ---------------------------------------------------- ! states | stname(1:n,:) | stname((n+1):(n+nz),:) | ! ---------------------------------------------------- ! outputs | outname(cout,:) | outname(outlist,:) | ! ---------------------------------------------------- ! @end group @end example ! where @math{cout} is the list of in 1:@code{rows}(@var{p}) ! that are not contained in outlist. (Discrete/continuous outputs ! may be entered in any order desired by the user.) ! @strong{Example} ! @example ! octave:1> a = [1 2 3; 4 5 6; 7 8 10]; ! octave:2> b = [0 0 ; 0 1 ; 1 0]; ! octave:3> c = eye (3); ! octave:4> sys = ss (a, b, c, [], 0, 3, 0, ... ! > @{"volts", "amps", "joules"@}); ! octave:5> sysout(sys); ! Input(s) ! 1: u_1 ! 2: u_2 ! ! Output(s): ! 1: y_1 ! 2: y_2 ! 3: y_3 ! state-space form: ! 3 continuous states, 0 discrete states ! State(s): ! 1: volts ! 2: amps ! 3: joules + A matrix: 3 x 3 + 1 2 3 + 4 5 6 + 7 8 10 + B matrix: 3 x 2 + 0 0 + 0 1 + 1 0 + C matrix: 3 x 3 + 1 0 0 + 0 1 0 + 0 0 1 + D matrix: 3 x 3 + 0 0 + 0 0 + 0 0 + @end example + Notice that the @math{D} matrix is constructed by default to the + correct dimensions. Default input and output signals names were assigned + since none were given. @end deftypefn ! dmr2d -*- texinfo -*- ! @deftypefn {Function File} {[@var{dsys}, @var{fidx}] =} dmr2d (@var{sys}, @var{idx}, @var{sprefix}, @var{ts2}, @var{cuflg}) ! convert a multirate digital system to a single rate digital system ! states specified by @var{idx}, @var{sprefix} are sampled at @var{ts2}, all ! others are assumed sampled at @var{ts1} = @code{sysgettsam (@var{sys})}. ! @strong{Inputs} ! @table @var ! @item sys ! discrete time system; ! @code{dmr2d} exits with an error if @var{sys} is not discrete ! @item idx ! indices or names of states with sampling time ! @code{sysgettsam(@var{sys})} (may be empty); see @code{cellidx} ! @item sprefix ! list of string prefixes of states with sampling time ! @code{sysgettsam(@var{sys})} (may be empty) ! @item ts2 ! sampling time of states not specified by @var{idx}, @var{sprefix} ! must be an integer multiple of @code{sysgettsam(@var{sys})} ! @item cuflg ! "constant u flag" if @var{cuflg} is nonzero then the system inputs are ! assumed to be constant over the revised sampling interval @var{ts2}. ! Otherwise, since the inputs can change during the interval ! @var{t} in @math{[k ts2, (k+1) ts2]}, an additional set of inputs is ! included in the revised B matrix so that these intersample inputs ! may be included in the single-rate system. ! default @var{cuflg} = 1. ! @end table ! @strong{Outputs} ! @table @var ! @item dsys ! equivalent discrete time system with sampling time @var{ts2}. ! The sampling time of sys is updated to @var{ts2}. ! if @var{cuflg}=0 then a set of additional inputs is added to ! the system with suffixes _d1, @dots{}, _dn to indicate their ! delay from the starting time k @var{ts2}, i.e. ! u = [u_1; u_1_d1; @dots{}, u_1_dn] where u_1_dk is the input ! k*ts1 units of time after u_1 is sampled. (@var{ts1} is ! the original sampling time of the discrete time system and ! @var{ts2} = (n+1)*ts1) ! @item fidx ! indices of "formerly fast" states specified by @var{idx} and @var{sprefix}; ! these states are updated to the new (slower) sampling interval @var{ts2}. ! @end table ! @strong{WARNING} Not thoroughly tested yet; especially when ! @var{cuflg} == 0. @end deftypefn ! syssetsignals -*- texinfo -*- ! @deftypefn {Function File} {} syssetsignals (@var{sys}, @var{opt}, @var{names}, @var{sig_idx}) ! change the names of selected inputs, outputs and states. ! @strong{Inputs} ! @table @var ! @item sys ! System data structure. ! @item opt ! Change default name (output). ! @table @code ! @item "out" ! Change selected output names. ! @item "in" ! Change selected input names. ! @item "st" ! Change selected state names. ! @item "yd" ! Change selected outputs from discrete to continuous or ! from continuous to discrete. ! @end table ! @item names ! @table @code ! @item opt = "out", "in", "st" ! string or string array containing desired signal names or values. ! @item opt = "yd" ! To desired output continuous/discrete flag. ! Set name to 0 for continuous, or 1 for discrete. ! @end table ! @item sig_idx ! indices or names of outputs, yd, inputs, or ! states whose respective names/values should be changed. ! Default: replace entire cell array of names/entire yd vector. ! @end table ! @strong{Outputs} ! @table @var ! @item retsys ! @var{sys} with appropriate signal names changed ! (or @var{yd} values, where appropriate). ! @end table ! @strong{Example} ! @example ! octave:1> sys=ss ([1 2; 3 4],[5;6],[7 8]); ! octave:2> sys = syssetsignals (sys, "st", ! > str2mat("Posx","Velx")); ! octave:3> sysout(sys) ! Input(s) ! 1: u_1 ! Output(s): ! 1: y_1 ! state-space form: ! 2 continuous states, 0 discrete states ! State(s): ! 1: Posx ! 2: Velx ! A matrix: 2 x 2 ! 1 2 ! 3 4 ! B matrix: 2 x 1 ! 5 ! 6 ! C matrix: 1 x 2 ! 7 8 ! D matrix: 1 x 1 ! 0 @end example @end deftypefn ! is_digital -*- texinfo -*- ! @deftypefn {Function File} {@var{digital} =} is_digital (@var{sys}, @var{eflg}) ! Return nonzero if system is digital. ! ! @strong{Inputs} ! @table @var ! @item sys ! System data structure. ! @item eflg ! When equal to 0 (default value), exits with an error if the system ! is mixed (continuous and discrete components); when equal to 1, print ! a warning if the system is mixed (continuous and discrete); when equal ! to 2, operate silently. ! @end table ! ! @strong{Output} ! @table @var ! @item digital ! When equal to 0, the system is purely continuous; when equal to 1, the ! system is purely discrete; when equal to -1, the system is mixed continuous ! and discrete. ! @end table ! Exits with an error if @var{sys} is a mixed (continuous and discrete) system. ! @end deftypefn ! __zp2ssg2__ ! Undocumented internal function. ! dhinfdemo ! -*- texinfo -*- ! @deftypefn {Function File} {} dhinfdemo () ! Demonstrate the functions available to design a discrete @iftex @tex ! $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! H-infinity @end ifinfo ! controller. This is not a true discrete design. The ! design is carried out in continuous time while the effect of sampling ! is described by a bilinear transformation of the sampled system. ! This method works quite well if the sampling period is "small" ! compared to the plant time constants. ! Continuous plant: ! @iftex ! @tex ! $$ G(s) = { 1 \over (s+2) (s+1) } $$ ! @end tex ! @end iftex ! @ifinfo ! @example ! @group ! 1 ! G(s) = -------------- ! (s + 2)(s + 1) ! @end group ! @end example ! @end ifinfo + Discretised plant with @acronym{ZOH} (Sampling period = @var{Ts} = 1 second): @iftex @tex ! $$ G(z) = { 0.39958z + 0.14700 \over (z - 0.36788) (z - 0.13533) } $$ @end tex @end iftex @ifinfo @example @group ! 0.39958z + 0.14700 ! G(z) = -------------------------- ! (z - 0.36788)(z - 0.13533) @end group @end example @end ifinfo ! @example ! @group ! +----+ ! -------------------->| W1 |---> v1 ! z | +----+ ! ----|-------------+ || T || => min. ! | | vz infty ! | +---+ v +----+ ! *--->| G |--->O--*-->| W2 |---> v2 ! | +---+ | +----+ ! | | ! | +---+ | ! -----| K |<------- ! +---+ ! @end group ! @end example ! @noindent ! W1 and W2 are the robustness and performancs weighting functions. @end deftypefn ! hinfsyn_ric -*- texinfo -*- ! @deftypefn {Function File} {[@var{xinf}, @var{x_ha_err}] =} hinfsyn_ric (@var{a}, @var{bb}, @var{c1}, @var{d1dot}, @var{r}, @var{ptol}) ! Forms @example ! xx = ([bb; -c1'*d1dot]/r) * [d1dot'*c1 bb']; ! Ha = [a 0*a; -c1'*c1 - a'] - xx; @end example + and solves associated Riccati equation. + The error code @var{x_ha_err} indicates one of the following + conditions: + @table @asis + @item 0 + successful + @item 1 + @var{xinf} has imaginary eigenvalues + @item 2 + @var{hx} not Hamiltonian + @item 3 + @var{xinf} has infinite eigenvalues (numerical overflow) + @item 4 + @var{xinf} not symmetric + @item 5 + @var{xinf} not positive definite + @item 6 + @var{r} is singular + @end table @end deftypefn ! hinfnorm -*- texinfo -*- ! @deftypefn {Function File} {[@var{g}, @var{gmin}, @var{gmax}] =} hinfnorm (@var{sys}, @var{tol}, @var{gmin}, @var{gmax}, @var{ptol}) ! Computes the @iftex @tex ! $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! H-infinity @end ifinfo ! norm of a system data structure. ! ! @strong{Inputs} ! @table @var ! @item sys ! system data structure ! @item tol @iftex @tex ! $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! H-infinity @end ifinfo ! norm search tolerance (default: 0.001) ! @item gmin ! minimum value for norm search (default: 1e-9) ! @item gmax ! maximum value for norm search (default: 1e+9) ! @item ptol ! pole tolerance: ! @itemize @bullet ! @item if sys is continuous, poles with ! @iftex ! @tex ! $ \vert {\rm real}(pole) \vert < ptol \Vert H \Vert $ ! @end tex ! @end iftex ! @ifinfo ! @math{ |real(pole))| < ptol*||H|| } ! @end ifinfo ! (@var{H} is appropriate Hamiltonian) ! are considered to be on the imaginary axis. ! @item if sys is discrete, poles with ! @iftex ! @tex ! $ \vert { \rm pole } - 1 \vert < ptol \Vert [ s_1 s_2 ] \Vert $ ! @end tex ! @end iftex ! @ifinfo ! @math{|abs(pole)-1| < ptol*||[s1,s2]||} ! @end ifinfo ! (appropriate symplectic pencil) ! are considered to be on the unit circle. ! @item Default value: 1e-9 @end itemize + @end table ! @strong{Outputs} ! @table @var ! @item g ! Computed gain, within @var{tol} of actual gain. @var{g} is returned as Inf ! if the system is unstable. ! @item gmin ! @itemx gmax ! Actual system gain lies in the interval [@var{gmin}, @var{gmax}]. ! @end table ! References: ! Doyle, Glover, Khargonekar, Francis, @cite{State-space solutions to standard} @iftex @tex ! $ { \cal H }_2 $ @cite{and} $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! @cite{H-2 and H-infinity} @end ifinfo ! @cite{control problems}, @acronym{IEEE} @acronym{TAC} August 1989; ! Iglesias and Glover, @cite{State-Space approach to discrete-time} @iftex @tex ! $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! @cite{H-infinity} @end ifinfo ! @cite{control}, Int. J. Control, vol 54, no. 5, 1991; ! Zhou, Doyle, Glover, @cite{Robust and Optimal Control}, Prentice-Hall, 1996. ! @end deftypefn ! hinfsyn ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{k}, @var{g}, @var{gw}, @var{xinf}, @var{yinf}] =} hinfsyn (@var{asys}, @var{nu}, @var{ny}, @var{gmin}, @var{gmax}, @var{gtol}, @var{ptol}, @var{tol}) ! ! @strong{Inputs} input system is passed as either ! @table @var ! @item asys ! system data structure (see @command{ss}, @command{sys2ss}) ! @itemize @bullet ! @item controller is implemented for continuous time systems ! @item controller is @strong{not} implemented for discrete time systems (see ! bilinear transforms in @command{c2d}, @command{d2c}) ! @end itemize ! @item nu ! number of controlled inputs ! @item ny ! number of measured outputs ! @item gmin ! initial lower bound on @iftex @tex ! $ { \cal H }_\infty $ ! @end tex ! @end iftex ! @ifinfo ! H-infinity ! @end ifinfo ! optimal gain ! @item gmax ! initial upper bound on ! @iftex ! @tex ! $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! H-infinity @end ifinfo ! Optimal gain. ! @item gtol ! Gain threshold. Routine quits when @var{gmax}/@var{gmin} < 1+tol. ! @item ptol ! poles with @code{abs(real(pole))} ! @iftex @tex ! $ < ptol \Vert H \Vert $ @end tex + @end iftex @ifinfo ! < ptol*||H|| @end ifinfo + (@var{H} is appropriate + Hamiltonian) are considered to be on the imaginary axis. + Default: 1e-9. + @item tol + threshold for 0. Default: 200*@code{eps}. ! @var{gmax}, @var{min}, @var{tol}, and @var{tol} must all be positive scalars. ! @end table ! @strong{Outputs} ! @table @var ! @item k ! System controller. ! @item g ! Designed gain value. ! @item gw ! Closed loop system. ! @item xinf ! @acronym{ARE} solution matrix for regulator subproblem. ! @item yinf ! @acronym{ARE} solution matrix for filter subproblem. ! @end table ! References: ! @enumerate ! @item Doyle, Glover, Khargonekar, Francis, @cite{State-Space Solutions ! to Standard} @iftex @tex ! $ { \cal H }_2 $ @cite{and} $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! @cite{H-2 and H-infinity} @end ifinfo ! @cite{Control Problems}, @acronym{IEEE} @acronym{TAC} August 1989. ! @item Maciejowksi, J.M., @cite{Multivariable feedback design}, ! Addison-Wesley, 1989, @acronym{ISBN} 0-201-18243-2. ! ! @item Keith Glover and John C. Doyle, @cite{State-space formulae for all ! stabilizing controllers that satisfy an} @iftex @tex ! $ { \cal H }_\infty $@cite{norm} @end tex @end iftex @ifinfo ! @cite{H-infinity-norm} @end ifinfo ! @cite{bound and relations to risk sensitivity}, ! Systems & Control Letters 11, Oct. 1988, pp 167--172. ! @end enumerate @end deftypefn ! hinfsyn_chk -*- texinfo -*- ! @deftypefn {Function File} {[@var{retval}, @var{pc}, @var{pf}] =} hinfsyn_chk (@var{a}, @var{b1}, @var{b2}, @var{c1}, @var{c2}, @var{d12}, @var{d21}, @var{g}, @var{ptol}) ! Called by @code{hinfsyn} to see if gain @var{g} satisfies conditions in ! Theorem 3 of ! Doyle, Glover, Khargonekar, Francis, @cite{State Space Solutions to Standard} @iftex @tex ! $ { \cal H }_2 $ @cite{and} $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! @cite{H-2 and H-infinity} @end ifinfo ! @cite{Control Problems}, @acronym{IEEE} @acronym{TAC} August 1989. ! @strong{Warning:} do not attempt to use this at home; no argument ! checking performed. ! @strong{Inputs} ! ! As returned by @code{is_dgkf}, except for: ! @table @var ! @item g ! candidate gain level ! @item ptol ! as in @code{hinfsyn} ! @end table + @strong{Outputs} + @table @var + @item retval + 1 if g exceeds optimal Hinf closed loop gain, else 0 + @item pc + solution of ``regulator'' @iftex @tex ! $ { \cal H }_\infty $ @end tex ! @end iftex ! @ifinfo ! H-infinity ! @end ifinfo ! @acronym{ARE} ! @item pf ! solution of ``filter'' @iftex @tex ! $ { \cal H }_\infty $ @end tex @end iftex ! @ifinfo ! H-infinity ! @end ifinfo ! @acronym{ARE} ! @end table ! Do not attempt to use this at home; no argument checking performed. @end deftypefn ! h2norm -*- texinfo -*- ! @deftypefn {Function File} {} h2norm (@var{sys}) ! Computes the @iftex @tex ! $ { \cal H }_2 $ @end tex @end iftex ! @ifinfo ! H-2 ! @end ifinfo ! norm of a system data structure (continuous time only). ! Reference: ! Doyle, Glover, Khargonekar, Francis, @cite{State-Space Solutions to Standard} @iftex @tex ! $ { \cal H }_2 $ @cite{and} $ { \cal H }_\infty $ @end tex @end iftex ! @ifinfo ! @cite{H-2 and H-infinity} ! @end ifinfo ! @cite{Control Problems}, @acronym{IEEE} @acronym{TAC} August 1989. @end deftypefn ! dgkfdemo -*- texinfo -*- ! @deftypefn {Function File} {} dgkfdemo () ! Octave Controls toolbox demo: @iftex @tex ! $ { \cal H }_2 $/$ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! H-2/H-infinity @end ifinfo ! options demos. ! @end deftypefn ! wgt1o ! -*- texinfo -*- ! @deftypefn {Function File} {@var{W} =} wgt1o (@var{vl}, @var{vh}, @var{fc}) ! State space description of a first order weighting function. ! ! Weighting function are needed by the @iftex @tex ! $ { \cal H }_2 / { \cal H }_\infty $ @end tex @end iftex @ifinfo ! H-2/H-infinity @end ifinfo + design procedure. + These functions are part of the augmented plant @var{P} + (see @command{hinfdemo} for an application example). ! @strong{Inputs} @table @var ! @item vl ! Gain at low frequencies. ! @item vh ! Gain at high frequencies. ! @item fc ! Corner frequency (in Hz, @strong{not} in rad/sec) @end table ! @strong{Output} ! @table @var ! @item W ! Weighting function, given in form of a system data structure. ! @end table @end deftypefn ! hinf_ctr -*- texinfo -*- ! @deftypefn {Function File} {@var{K} =} hinf_ctr (@var{dgs}, @var{f}, @var{h}, @var{z}, @var{g}) ! Called by @code{hinfsyn} to compute the @iftex @tex ! $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! H-infinity @end ifinfo + optimal controller. ! @strong{Inputs} ! @table @var ! @item dgs ! data structure returned by @code{is_dgkf} ! @item f ! @itemx h ! feedback and filter gain (not partitioned) ! @item g ! final gamma value ! @end table ! @strong{Outputs} ! @table @var ! @item K ! controller (system data structure) ! @end table ! ! Do not attempt to use this at home; no argument checking performed. ! @end deftypefn ! h2syn ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{K}, @var{gain}, @var{kc}, @var{kf}, @var{pc}, @var{pf}] = } h2syn (@var{asys}, @var{nu}, @var{ny}, @var{tol}) ! Design @iftex @tex ! $ { \cal H }_2 $ @end tex @end iftex @ifinfo ! H-2 @end ifinfo ! optimal controller per procedure in ! Doyle, Glover, Khargonekar, Francis, @cite{State-Space Solutions to Standard} @iftex @tex ! $ { \cal H }_2 $ @cite{and} $ { \cal H }_\infty $ @end tex @end iftex ! @ifinfo ! @cite{H-2 and H-infinity} ! @end ifinfo ! @cite{Control Problems}, @acronym{IEEE} @acronym{TAC} August 1989. ! ! Discrete-time control per Zhou, Doyle, and Glover, @cite{Robust and optimal control}, Prentice-Hall, 1996. ! ! @strong{Inputs} ! @table @var ! @item asys ! system data structure (see ss, sys2ss) ! @itemize @bullet ! @item controller is implemented for continuous time systems ! @item controller is @strong{not} implemented for discrete time systems ! @end itemize ! @item nu ! number of controlled inputs ! @item ny ! number of measured outputs ! @item tol ! threshold for 0. Default: 200*@code{eps} ! @end table ! ! @strong{Outputs} ! @table @var ! @item k ! system controller ! @item gain ! optimal closed loop gain ! @item kc ! full information control (packed) ! @item kf ! state estimator (packed) ! @item pc ! @acronym{ARE} solution matrix for regulator subproblem ! @item pf ! @acronym{ARE} solution matrix for filter subproblem ! @end table @end deftypefn ! hinfdemo -*- texinfo -*- ! @deftypefn {Function File} {} hinfdemo () ! @iftex @tex ! $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! H-infinity @end ifinfo ! design demos for continuous @acronym{SISO} and @acronym{MIMO} systems and a ! discrete system. The @acronym{SISO} system is difficult to control because ! it is non-minimum-phase and unstable. The second design example ! controls the @command{jet707} plant, the linearized state space model of a ! Boeing 707-321 aircraft at @var{v}=80 m/s @iftex @tex ! ($M = 0.26$, $G_{a0} = -3^{\circ}$, ${\alpha}_0 = 4^{\circ}$, ${\kappa}= 50^{\circ}$). @end tex @end iftex @ifinfo ! (@var{M} = 0.26, @var{Ga0} = -3 deg, @var{alpha0} = 4 deg, @var{kappa} = 50 deg). @end ifinfo ! Inputs: (1) thrust and (2) elevator angle ! Outputs: (1) airspeed and (2) pitch angle. The discrete system is a ! stable and second order. ! @table @asis ! @item @acronym{SISO} plant: @iftex @tex ! $$ G(s) = { s-2 \over (s+2) (s-1) } $$ @end tex @end iftex @ifinfo @example @group ! s - 2 ! G(s) = -------------- ! (s + 2)(s - 1) @end group @end example @end ifinfo ! @smallexample ! @group ! +----+ ! -------------------->| W1 |---> v1 ! z | +----+ ! ----|-------------+ ! | | ! | +---+ v y +----+ ! u *--->| G |--->O--*-->| W2 |---> v2 ! | +---+ | +----+ ! | | ! | +---+ | ! -----| K |<------- ! +---+ ! @end group ! @end smallexample + @iftex + @tex + $$ { \rm min } \Vert T_{vz} \Vert _\infty $$ + @end tex + @end iftex + @ifinfo @example ! min || T || ! vz infty @end example + @end ifinfo ! @var{W1} und @var{W2} are the robustness and performance weighting ! functions. ! @item @acronym{MIMO} plant: ! The optimal controller minimizes the @iftex @tex ! $ { \cal H }_\infty $ @end tex @end iftex @ifinfo ! H-infinity @end ifinfo ! norm of the ! augmented plant @var{P} (mixed-sensitivity problem): ! @smallexample ! @group ! w ! 1 -----------+ ! | +----+ ! +---------------------->| W1 |----> z1 ! w | | +----+ ! 2 ------------------------+ ! | | | ! | v +----+ v +----+ ! +--*-->o-->| G |-->o--*-->| W2 |---> z2 ! | +----+ | +----+ ! | | ! ^ v ! u y (to K) ! (from controller K) ! @end group ! @end smallexample ! @iftex @tex ! $$ \left [ \matrix{ z_1 \cr ! z_2 \cr ! y } \right ] = ! P \left [ \matrix{ w_1 \cr ! w_2 \cr ! u } \right ] $$ @end tex @end iftex @ifinfo ! @smallexample ! @group ! + + + + ! | z | | w | ! | 1 | | 1 | ! | z | = [ P ] * | w | ! | 2 | | 2 | ! | y | | u | ! + + + + ! @end group ! @end smallexample @end ifinfo ! @item Discrete system: ! This is not a true discrete design. The design is carried out ! in continuous time while the effect of sampling is described by ! a bilinear transformation of the sampled system. ! This method works quite well if the sampling period is ``small'' ! compared to the plant time constants. ! @item The continuous plant: ! @iftex ! @tex ! $$ G(s) = { 1 \over (s+2)(s+1) } $$ ! @end tex ! @end iftex + @ifinfo @example @group ! 1 ! G (s) = -------------- ! k (s + 2)(s + 1) ! @end group @end example + @end ifinfo ! is discretised with a @acronym{ZOH} (Sampling period = @var{Ts} = 1 second): ! @iftex ! @tex ! $$ G(z) = { 0.199788z + 0.073498 \over (z - 0.36788) (z - 0.13534) } $$ ! @end tex ! @end iftex ! @ifinfo @example ! @group ! 0.199788z + 0.073498 ! G(z) = -------------------------- ! (z - 0.36788)(z - 0.13534) ! @end group @end example + @end ifinfo ! @smallexample ! @group ! +----+ ! -------------------->| W1 |---> v1 ! z | +----+ ! ----|-------------+ ! | | ! | +---+ v +----+ ! *--->| G |--->O--*-->| W2 |---> v2 ! | +---+ | +----+ ! | | ! | +---+ | ! -----| K |<------- ! +---+ ! @end group ! @end smallexample @iftex @tex ! $$ { \rm min } \Vert T_{vz} \Vert _\infty $$ @end tex @end iftex @ifinfo @example ! min || T || ! vz infty @end example @end ifinfo ! @var{W1} and @var{W2} are the robustness and performance weighting ! functions. ! @end table @end deftypefn ! is_dgkf -*- texinfo -*- ! @deftypefn {Function File} {[@var{retval}, @var{dgkf_struct} ] =} is_dgkf (@var{asys}, @var{nu}, @var{ny}, @var{tol} ) ! Determine whether a continuous time state space system meets ! assumptions of @acronym{DGKF} algorithm. ! Partitions system into: ! @example ! [dx/dt] [A | Bw Bu ][w] ! [ z ] = [Cz | Dzw Dzu ][u] ! [ y ] [Cy | Dyw Dyu ] ! @end example ! or similar discrete-time system. ! If necessary, orthogonal transformations @var{qw}, @var{qz} and nonsingular ! transformations @var{ru}, @var{ry} are applied to respective vectors ! @var{w}, @var{z}, @var{u}, @var{y} in order to satisfy @acronym{DGKF} assumptions. ! Loop shifting is used if @var{dyu} block is nonzero. ! @strong{Inputs} ! @table @var ! @item asys ! system data structure ! @item nu ! number of controlled inputs ! @item ny ! number of measured outputs ! @item tol ! threshold for 0; default: 200*@code{eps}. ! @end table ! @strong{Outputs} ! @table @var ! @item retval ! true(1) if system passes check, false(0) otherwise ! @item dgkf_struct ! data structure of @command{is_dgkf} results. Entries: ! @table @var ! @item nw ! @itemx nz ! dimensions of @var{w}, @var{z} ! @item a ! system @math{A} matrix ! @item bw ! (@var{n} x @var{nw}) @var{qw}-transformed disturbance input matrix ! @item bu ! (@var{n} x @var{nu}) @var{ru}-transformed controlled input matrix; ! @math{B = [Bw Bu]} ! @item cz ! (@var{nz} x @var{n}) Qz-transformed error output matrix ! @item cy ! (@var{ny} x @var{n}) @var{ry}-transformed measured output matrix ! @math{C = [Cz; Cy]} ! @item dzu ! @item dyw ! off-diagonal blocks of transformed system @math{D} matrix that enter ! @var{z}, @var{y} from @var{u}, @var{w} respectively ! @item ru ! controlled input transformation matrix ! @item ry ! observed output transformation matrix ! @item dyu_nz ! nonzero if the @var{dyu} block is nonzero. ! @item dyu ! untransformed @var{dyu} block ! @item dflg ! nonzero if the system is discrete-time ! @end table ! @end table ! @code{is_dgkf} exits with an error if the system is mixed ! discrete/continuous. ! ! @strong{References} ! @table @strong ! @item [1] ! Doyle, Glover, Khargonekar, Francis, @cite{State Space Solutions to Standard} @iftex @tex ! $ { \cal H }_2 $ @cite{and} $ { \cal H }_\infty $ @end tex @end iftex ! @ifinfo ! @cite{H-2 and H-infinity} ! @end ifinfo ! @cite{Control Problems}, @acronym{IEEE} @acronym{TAC} August 1989. ! @item [2] ! Maciejowksi, J.M., @cite{Multivariable Feedback Design}, Addison-Wesley, 1989. @end table @end deftypefn ! weibpdf -*- texinfo -*- ! @deftypefn {Function File} {} weibpdf (@var{x}, @var{scale}, @var{shape}) ! Compute the probability density function (PDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape} which is given by ! @example ! scale * shape^(-scale) * x^(scale-1) * exp(-(x/shape)^scale) ! @end example ! @noindent ! for @var{x} > 0. @end deftypefn ! chisquare_inv -*- texinfo -*- ! @deftypefn {Function File} {} chisquare_inv (@var{x}, @var{n}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the chisquare distribution with @var{n} degrees of ! freedom. @end deftypefn ! uniform_pdf -*- texinfo -*- ! @deftypefn {Function File} {} uniform_pdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, compute the PDF at @var{x} of the uniform ! distribution on [@var{a}, @var{b}]. ! Default values are @var{a} = 0, @var{b} = 1. @end deftypefn ! lognormal_rnd -*- texinfo -*- ! @deftypefn {Function File} {} lognormal_rnd (@var{a}, @var{v}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} lognormal_rnd (@var{a}, @var{v}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! lognormal distribution with parameters @var{a} and @var{v}. Both ! @var{a} and @var{v} must be scalar or of size @var{r} by @var{c}. ! Or if @var{sz} is a vector, create a matrix of size @var{sz}. If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{a} and @var{v}. @end deftypefn ! uniform_cdf -*- texinfo -*- ! @deftypefn {Function File} {} uniform_cdf (@var{x}, @var{a}, @var{b}) ! Return the CDF at @var{x} of the uniform distribution on [@var{a}, ! @var{b}], i.e., PROB (uniform (@var{a}, @var{b}) <= x). ! Default values are @var{a} = 0, @var{b} = 1. @end deftypefn ! exponential_cdf -*- texinfo -*- ! @deftypefn {Function File} {} exponential_cdf (@var{x}, @var{lambda}) For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the exponential distribution with ! parameter @var{lambda}. ! ! The arguments can be of common size or scalar. @end deftypefn ! exponential_inv -*- texinfo -*- ! @deftypefn {Function File} {} exponential_inv (@var{x}, @var{lambda}) For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the exponential distribution with parameter ! @var{lambda}. @end deftypefn ! is_struct -*- texinfo -*- ! @deftypefn {Function File} {} is_struct (@var{a}) ! This function has been deprecated. Use isstruct instead. @end deftypefn ! normal_cdf -*- texinfo -*- ! @deftypefn {Function File} {} normal_cdf (@var{x}, @var{m}, @var{v}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the normal distribution with mean ! @var{m} and variance @var{v}. ! Default values are @var{m} = 0, @var{v} = 1. @end deftypefn ! lognormal_cdf -*- texinfo -*- ! @deftypefn {Function File} {} lognormal_cdf (@var{x}, @var{a}, @var{v}) For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the lognormal distribution with ! parameters @var{a} and @var{v}. If a random variable follows this ! distribution, its logarithm is normally distributed with mean ! @code{log (@var{a})} and variance @var{v}. ! ! Default values are @var{a} = 1, @var{v} = 1. @end deftypefn ! isstr -*- texinfo -*- ! @deftypefn {Function File} {} isstr (@var{a}) ! This function has been deprecated. Use ischar instead. @end deftypefn ! binomial_pdf -*- texinfo -*- ! @deftypefn {Function File} {} binomial_pdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the binomial distribution with parameters @var{n} ! and @var{p}. @end deftypefn ! clg -*- texinfo -*- ! @deftypefn {Function File} {} clg () ! This function has been deprecated. Use clf instead. @end deftypefn ! weibcdf -*- texinfo -*- ! @deftypefn {Function File} {} weibcdf (@var{x}, @var{scale}, @var{shape}) ! Compute the cumulative distribution function (CDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape}, which is ! ! @example ! 1 - exp(-(x/shape)^scale) ! @end example ! ! @noindent ! for @var{x} >= 0. @end deftypefn ! beta_rnd -*- texinfo -*- ! @deftypefn {Function File} {} beta_rnd (@var{a}, @var{b}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} beta_rnd (@var{a}, @var{b}, @var{sz}) ! Return an @var{r} by @var{c} or @code{size (@var{sz})} matrix of ! random samples from the Beta distribution with parameters @var{a} and ! @var{b}. Both @var{a} and @var{b} must be scalar or of size @var{r} ! by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{a} and @var{b}. @end deftypefn ! pascal_cdf -*- texinfo -*- ! @deftypefn {Function File} {} pascal_cdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the CDF at x of the Pascal ! (negative binomial) distribution with parameters @var{n} and @var{p}. ! ! The number of failures in a Bernoulli experiment with success ! probability @var{p} before the @var{n}-th success follows this ! distribution. @end deftypefn ! f_inv -*- texinfo -*- ! @deftypefn {Function File} {} f_inv (@var{x}, @var{m}, @var{n}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the F distribution with parameters @var{m} and ! @var{n}. @end deftypefn ! wiener_rnd -*- texinfo -*- ! @deftypefn {Function File} {} wiener_rnd (@var{t}, @var{d}, @var{n}) ! Return a simulated realization of the @var{d}-dimensional Wiener Process ! on the interval [0, @var{t}]. If @var{d} is omitted, @var{d} = 1 is ! used. The first column of the return matrix contains time, the ! remaining columns contain the Wiener process. ! ! The optional parameter @var{n} gives the number of summands used for ! simulating the process over an interval of length 1. If @var{n} is ! omitted, @var{n} = 1000 is used. @end deftypefn ! uniform_inv -*- texinfo -*- ! @deftypefn {Function File} {} uniform_inv (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the uniform distribution on [@var{a}, @var{b}]. ! Default values are @var{a} = 0, @var{b} = 1. @end deftypefn ! hypergeometric_pdf -*- texinfo -*- ! @deftypefn {Function File} {} hypergeometric_pdf (@var{x}, @var{m}, @var{t}, @var{n}) ! Compute the probability density function (PDF) at @var{x} of the ! hypergeometric distribution with parameters @var{m}, @var{t}, and ! @var{n}. This is the probability of obtaining @var{x} marked items ! when randomly drawing a sample of size @var{n} without replacement ! from a population of total size @var{t} containing @var{m} marked items. ! The arguments must be of common size or scalar. @end deftypefn ! poisson_inv -*- texinfo -*- ! @deftypefn {Function File} {} poisson_inv (@var{x}, @var{lambda}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the Poisson distribution with parameter @var{lambda}. @end deftypefn ! lognormal_inv -*- texinfo -*- ! @deftypefn {Function File} {} lognormal_inv (@var{x}, @var{a}, @var{v}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the lognormal distribution with parameters @var{a} ! and @var{v}. If a random variable follows this distribution, its ! logarithm is normally distributed with mean @code{log (@var{a})} and ! variance @var{v}. ! ! Default values are @var{a} = 1, @var{v} = 1. @end deftypefn ! normal_pdf -*- texinfo -*- ! @deftypefn {Function File} {} normal_pdf (@var{x}, @var{m}, @var{v}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the normal distribution with mean @var{m} and ! variance @var{v}. ! Default values are @var{m} = 0, @var{v} = 1. @end deftypefn ! is_symmetric -*- texinfo -*- ! @deftypefn {Function File} {} issymmetric (@var{x}, @var{tol}) ! This function has been deprecated. Use issymmetric instead. @end deftypefn ! normal_inv -*- texinfo -*- ! @deftypefn {Function File} {} normal_inv (@var{x}, @var{m}, @var{v}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the normal distribution with mean @var{m} and ! variance @var{v}. ! ! Default values are @var{m} = 0, @var{v} = 1. @end deftypefn ! pascal_pdf -*- texinfo -*- ! @deftypefn {Function File} {} pascal_pdf (@var{x}, @var{n}, @var{p}) For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the Pascal (negative binomial) distribution with ! parameters @var{n} and @var{p}. ! The number of failures in a Bernoulli experiment with success ! probability @var{p} before the @var{n}-th success follows this ! distribution. @end deftypefn ! hypergeometric_inv -*- texinfo -*- ! @deftypefn {Function File} {} hypergeometric_inv (@var{x}, @var{m}, @var{t}, @var{n}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! hypergeometric distribution with parameters @var{m}, @var{t}, and ! @var{n}. ! ! The parameters @var{m}, @var{t}, and @var{n} must positive integers ! with @var{m} and @var{n} not greater than @var{t}. @end deftypefn ! gamma_inv -*- texinfo -*- ! @deftypefn {Function File} {} gamma_inv (@var{x}, @var{a}, @var{b}) For each component of @var{x}, compute the quantile (the inverse of the CDF) at @var{x} of the Gamma distribution with parameters @var{a} ! and @var{b}. @end deftypefn ! beta_cdf -*- texinfo -*- ! @deftypefn {Function File} {} beta_cdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, returns the CDF at @var{x} of the beta ! distribution with parameters @var{a} and @var{b}, i.e., ! PROB (beta (@var{a}, @var{b}) <= @var{x}). @end deftypefn ! uniform_rnd -*- texinfo -*- ! @deftypefn {Function File} {} uniform_rnd (@var{a}, @var{b}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} uniform_rnd (@var{a}, @var{b}, @var{sz}) Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the uniform distribution on [@var{a}, @var{b}]. ! Both @var{a} and @var{b} must be scalar or of size @var{r} by @var{c}. If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{a} and @var{b}. @end deftypefn ! lognormal_pdf -*- texinfo -*- ! @deftypefn {Function File} {} lognormal_pdf (@var{x}, @var{a}, @var{v}) For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the lognormal distribution with parameters ! @var{a} and @var{v}. If a random variable follows this distribution, ! its logarithm is normally distributed with mean @code{log (@var{a})} ! and variance @var{v}. ! ! Default values are @var{a} = 1, @var{v} = 1. @end deftypefn ! setstr -*- texinfo -*- ! @deftypefn {Function File} {} setstr (@var{s}) ! This function has been deprecated. Use char instead. ! @end deftypefn ! weibrnd ! -*- texinfo -*- ! @deftypefn {Function File} {} weibrnd (@var{scale}, @var{shape}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} weibrnd (@var{scale}, @var{shape}, @var{sz}) Return an @var{r} by @var{c} matrix of random samples from the ! Weibull distribution with parameters @var{scale} and @var{shape} ! which must be scalar or of size @var{r} by @var{c}. Or if @var{sz} ! is a vector return a matrix of size @var{sz}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{alpha} and @var{sigma}. @end deftypefn ! clearplot -*- texinfo -*- ! @deftypefn {Function File} {} clearplot () ! This function has been deprecated. Use clf instead. @end deftypefn ! binomial_cdf -*- texinfo -*- ! @deftypefn {Function File} {} binomial_cdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the CDF at @var{x} of the ! binomial distribution with parameters @var{n} and @var{p}. @end deftypefn ! is_vector -*- texinfo -*- ! @deftypefn {Function File} {} is_vector (@var{a}) ! This function has been deprecated. Use isvector instead. @end deftypefn ! t_pdf -*- texinfo -*- ! @deftypefn {Function File} {} t_pdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the @var{t} (Student) distribution with @var{n} ! degrees of freedom. @end deftypefn ! f_pdf -*- texinfo -*- ! @deftypefn {Function File} {} f_pdf (@var{x}, @var{m}, @var{n}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the F distribution with @var{m} and @var{n} ! degrees of freedom. ! @end deftypefn ! pascal_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} pascal_rnd (@var{n}, @var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} pascal_rnd (@var{n}, @var{p}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the Pascal ! (negative binomial) distribution with parameters @var{n} and @var{p}. ! Both @var{n} and @var{p} must be scalar or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{n} and @var{p}. Or if @var{sz} is a vector, ! create a matrix of size @var{sz}. @end deftypefn ! weibull_rnd -*- texinfo -*- ! @deftypefn {Function File} {} weibull_rnd (@var{shape}, @var{scale}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} weibull_rnd (@var{shape}, @var{scale}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! Weibull distribution with parameters @var{scale} and @var{shape} ! which must be scalar or of size @var{r} by @var{c}. Or if @var{sz} ! is a vector return a matrix of size @var{sz}. ! ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{alpha} and @var{sigma}. @end deftypefn ! normal_rnd -*- texinfo -*- ! @deftypefn {Function File} {} normal_rnd (@var{m}, @var{v}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} normal_rnd (@var{m}, @var{v}, @var{sz}) ! Return an @var{r} by @var{c} or @code{size (@var{sz})} matrix of ! random samples from the normal distribution with parameters @var{m} ! and @var{v}. Both @var{m} and @var{v} must be scalar or of size ! @var{r} by @var{c}. ! ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{m} and @var{v}. @end deftypefn ! chisquare_pdf -*- texinfo -*- ! @deftypefn {Function File} {} chisquare_pdf (@var{x}, @var{n}) For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the chisquare distribution with @var{n} degrees ! of freedom. @end deftypefn ! is_scalar -*- texinfo -*- ! @deftypefn {Function File} {} is_scalar (@var{a}) ! This function has been deprecated. Use isscalar instead. @end deftypefn ! exponential_pdf -*- texinfo -*- ! @deftypefn {Function File} {} exponential_pdf (@var{x}, @var{lambda}) ! For each element of @var{x}, compute the probability density function ! (PDF) of the exponential distribution with parameter @var{lambda}. @end deftypefn ! geometric_pdf -*- texinfo -*- ! @deftypefn {Function File} {} geometric_pdf (@var{x}, @var{p}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the geometric distribution with parameter @var{p}. @end deftypefn ! t_cdf -*- texinfo -*- ! @deftypefn {Function File} {} t_cdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the CDF at @var{x} of the ! t (Student) distribution with @var{n} degrees of freedom, i.e., ! PROB (t(@var{n}) <= @var{x}). @end deftypefn ! is_matrix -*- texinfo -*- ! @deftypefn {Function File} {} is_matrix (@var{a}) ! This function has been deprecated. Use ismatrix instead. @end deftypefn ! hypergeometric_cdf -*- texinfo -*- ! @deftypefn {Function File} {} hypergeometric_cdf (@var{x}, @var{m}, @var{t}, @var{n}) ! Compute the cumulative distribution function (CDF) at @var{x} of the ! hypergeometric distribution with parameters @var{m}, @var{t}, and ! @var{n}. This is the probability of obtaining not more than @var{x} ! marked items when randomly drawing a sample of size @var{n} without ! replacement from a population of total size @var{t} containing ! @var{m} marked items. ! The parameters @var{m}, @var{t}, and @var{n} must positive integers ! with @var{m} and @var{n} not greater than @var{t}. @end deftypefn ! polyinteg -*- texinfo -*- ! @deftypefn {Function File} {} polyinteg (@var{c}) ! Return the coefficients of the integral of the polynomial whose ! coefficients are represented by the vector @var{c}. ! The constant of integration is set to zero. ! @seealso{poly, polyderiv, polyreduce, roots, conv, deconv, residue, ! filter, polyval, and polyvalm} @end deftypefn ! geometric_cdf -*- texinfo -*- ! @deftypefn {Function File} {} geometric_cdf (@var{x}, @var{p}) ! For each element of @var{x}, compute the CDF at @var{x} of the ! geometric distribution with parameter @var{p}. @end deftypefn ! geometric_rnd -*- texinfo -*- ! @deftypefn {Function File} {} geometric_rnd (@var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} geometric_rnd (@var{p}, @var{sz}) Return an @var{r} by @var{c} matrix of random samples from the ! geometric distribution with parameter @var{p}, which must be a scalar ! or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are given create a matrix with @var{r} rows and ! @var{c} columns. Or if @var{sz} is a vector, create a matrix of size ! @var{sz}. @end deftypefn ! weibull_inv -*- texinfo -*- ! @deftypefn {Function File} {} weibull_inv (@var{x}, @var{shape}, @var{scale}) ! Compute the quantile (the inverse of the CDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape}. @end deftypefn ! binomial_inv -*- texinfo -*- ! @deftypefn {Function File} {} binomial_inv (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! binomial distribution with parameters @var{n} and @var{p}. ! @end deftypefn ! pascal_inv ! -*- texinfo -*- ! @deftypefn {Function File} {} pascal_inv (@var{x}, @var{n}, @var{p}) For each element of @var{x}, compute the quantile at @var{x} of the Pascal (negative binomial) distribution with parameters @var{n} and @var{p}. *************** *** 16255,18243 **** probability @var{p} before the @var{n}-th success follows this distribution. @end deftypefn ! nbinpdf -*- texinfo -*- ! @deftypefn {Function File} {} nbinpdf (@var{x}, @var{n}, @var{p}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the Pascal (negative binomial) distribution with ! parameters @var{n} and @var{p}. ! The number of failures in a Bernoulli experiment with success ! probability @var{p} before the @var{n}-th success follows this ! distribution. @end deftypefn ! nbinrnd -*- texinfo -*- ! @deftypefn {Function File} {} nbinrnd (@var{n}, @var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} nbinrnd (@var{n}, @var{p}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the Pascal ! (negative binomial) distribution with parameters @var{n} and @var{p}. ! Both @var{n} and @var{p} must be scalar or of size @var{r} by @var{c}. If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{n} and @var{p}. Or if @var{sz} is a vector, ! create a matrix of size @var{sz}. @end deftypefn ! normcdf -*- texinfo -*- ! @deftypefn {Function File} {} normcdf (@var{x}, @var{m}, @var{s}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the normal distribution with mean ! @var{m} and standard deviation @var{s}. ! Default values are @var{m} = 0, @var{s} = 1. @end deftypefn ! norminv -*- texinfo -*- ! @deftypefn {Function File} {} norminv (@var{x}, @var{m}, @var{s}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the normal distribution with mean @var{m} and ! standard deviation @var{s}. ! Default values are @var{m} = 0, @var{s} = 1. @end deftypefn ! normpdf -*- texinfo -*- ! @deftypefn {Function File} {} normpdf (@var{x}, @var{m}, @var{s}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the normal distribution with mean @var{m} and ! standard deviation @var{s}. ! Default values are @var{m} = 0, @var{s} = 1. @end deftypefn ! normrnd -*- texinfo -*- ! @deftypefn {Function File} {} normrnd (@var{m}, @var{s}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} normrnd (@var{m}, @var{s}, @var{sz}) ! Return an @var{r} by @var{c} or @code{size (@var{sz})} matrix of ! random samples from the normal distribution with parameters mean @var{m} ! and standard deviation @var{s}. Both @var{m} and @var{s} must be scalar ! or of size @var{r} by @var{c}. If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{m} and @var{s}. @end deftypefn ! poisscdf -*- texinfo -*- ! @deftypefn {Function File} {} poisscdf (@var{x}, @var{lambda}) For each element of @var{x}, compute the cumulative distribution function (CDF) at @var{x} of the Poisson distribution with parameter lambda. @end deftypefn ! poissinv ! -*- texinfo -*- ! @deftypefn {Function File} {} poissinv (@var{x}, @var{lambda}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the Poisson distribution with parameter ! @var{lambda}. ! @end deftypefn ! poisspdf -*- texinfo -*- ! @deftypefn {Function File} {} poisspdf (@var{x}, @var{lambda}) For each element of @var{x}, compute the probability density function (PDF) at @var{x} of the poisson distribution with parameter @var{lambda}. @end deftypefn ! poissrnd -*- texinfo -*- ! @deftypefn {Function File} {} poissrnd (@var{lambda}, @var{r}, @var{c}) Return an @var{r} by @var{c} matrix of random samples from the ! Poisson distribution with parameter @var{lambda}, which must be a ! scalar or of size @var{r} by @var{c}. If @var{r} and @var{c} are omitted, the size of the result matrix is the size of @var{lambda}. @end deftypefn ! stdnormal_cdf -*- texinfo -*- ! @deftypefn {Function File} {} stdnormal_cdf (@var{x}) ! For each component of @var{x}, compute the CDF of the standard normal ! distribution at @var{x}. @end deftypefn ! stdnormal_inv -*- texinfo -*- ! @deftypefn {Function File} {} stdnormal_inv (@var{x}) ! For each component of @var{x}, compute compute the quantile (the ! inverse of the CDF) at @var{x} of the standard normal distribution. @end deftypefn ! stdnormal_pdf -*- texinfo -*- ! @deftypefn {Function File} {} stdnormal_pdf (@var{x}) ! For each element of @var{x}, compute the probability density function ! (PDF) of the standard normal distribution at @var{x}. @end deftypefn ! stdnormal_rnd -*- texinfo -*- ! @deftypefn {Function File} {} stdnormal_rnd (@var{r}, @var{c}) ! @deftypefnx {Function File} {} stdnormal_rnd (@var{sz}) ! Return an @var{r} by @var{c} or @code{size (@var{sz})} matrix of ! random numbers from the standard normal distribution. @end deftypefn ! tcdf -*- texinfo -*- ! @deftypefn {Function File} {} tcdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the CDF at @var{x} of the ! t (Student) distribution with @var{n} degrees of freedom, i.e., ! PROB (t(@var{n}) <= @var{x}). @end deftypefn ! tinv -*- texinfo -*- ! @deftypefn {Function File} {} tinv (@var{x}, @var{n}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the t (Student) distribution with parameter ! @var{n}. @end deftypefn ! tpdf -*- texinfo -*- ! @deftypefn {Function File} {} tpdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of the @var{t} (Student) distribution with @var{n} ! degrees of freedom. @end deftypefn ! trnd -*- texinfo -*- ! @deftypefn {Function File} {} trnd (@var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} trnd (@var{n}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the t ! (Student) distribution with @var{n} degrees of freedom. @var{n} must ! be a scalar or of size @var{r} by @var{c}. Or if @var{sz} is a ! vector create a matrix of size @var{sz}. If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{n}. @end deftypefn ! unidcdf -*- texinfo -*- ! @deftypefn {Function File} {} unidcdf (@var{x}, @var{v}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of a univariate discrete distribution which ! assumes the values in @var{v} with equal probability. @end deftypefn ! unidinv -*- texinfo -*- ! @deftypefn {Function File} {} unidinv (@var{x}, @var{v}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the univariate discrete distribution which assumes the ! values in @var{v} with equal probability @end deftypefn ! unidpdf -*- texinfo -*- ! @deftypefn {Function File} {} unidpdf (@var{x}, @var{v}) ! For each element of @var{x}, compute the probability density function ! (PDF) at @var{x} of a univariate discrete distribution which assumes ! the values in @var{v} with equal probability. @end deftypefn ! unidrnd -*- texinfo -*- ! @deftypefn {Function File} {} unidrnd (@var{mx}); ! @deftypefnx {Function File} {} unidrnd (@var{mx}, @var{v}); ! @deftypefnx {Function File} {} unidrnd (@var{mx}, @var{m}, @var{n}, @dots{}); ! Return random values from discrete uniform distribution, with maximum ! value(s) given by the integer @var{mx}, which may be a scalar or ! multidimensional array. ! If @var{mx} is a scalar, the size of the result is specified by ! the vector @var{v}, or by the optional arguments @var{m}, @var{n}, ! @dots{}. Otherwise, the size of the result is the same as the size ! of @var{mx}. ! @end deftypefn ! unifcdf ! -*- texinfo -*- ! @deftypefn {Function File} {} unifcdf (@var{x}, @var{a}, @var{b}) ! Return the CDF at @var{x} of the uniform distribution on [@var{a}, ! @var{b}], i.e., PROB (uniform (@var{a}, @var{b}) <= x). ! Default values are @var{a} = 0, @var{b} = 1. @end deftypefn ! unifinv -*- texinfo -*- ! @deftypefn {Function File} {} unifinv (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, compute the quantile (the inverse of the ! CDF) at @var{x} of the uniform distribution on [@var{a}, @var{b}]. ! Default values are @var{a} = 0, @var{b} = 1. ! @end deftypefn ! unifpdf ! -*- texinfo -*- ! @deftypefn {Function File} {} unifpdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, compute the PDF at @var{x} of the uniform ! distribution on [@var{a}, @var{b}]. ! Default values are @var{a} = 0, @var{b} = 1. ! @end deftypefn ! unifrnd ! -*- texinfo -*- ! @deftypefn {Function File} {} unifrnd (@var{a}, @var{b}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} unifrnd (@var{a}, @var{b}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the uniform distribution on [@var{a}, @var{b}]. ! Both @var{a} and @var{b} must be scalar or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{a} and @var{b}. @end deftypefn ! wblcdf -*- texinfo -*- ! @deftypefn {Function File} {} wblcdf (@var{x}, @var{scale}, @var{shape}) ! Compute the cumulative distribution function (CDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape}, which is - @iftex - @tex - $$ 1 - \exp(-(x/shape)^{scale}) $$ - for $x\geq 0$. - @end tex - @end iftex - @ifnottex @example ! 1 - exp(-(x/shape)^scale) @end example ! for @var{x} >= 0. ! @end ifnottex @end deftypefn ! wblinv -*- texinfo -*- ! @deftypefn {Function File} {} wblinv (@var{x}, @var{scale}, @var{shape}) ! Compute the quantile (the inverse of the CDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape}. @end deftypefn ! wblpdf -*- texinfo -*- ! @deftypefn {Function File} {} wblpdf (@var{x}, @var{scale}, @var{shape}) ! Compute the probability density function (PDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape} which is given by - @iftex - @tex - $$ scale \cdot shape^{-scale} x^{scale-1} \exp(-(x/shape)^{scale}) $$ - @end tex - @end iftex - @ifnottex @example ! scale * shape^(-scale) * x^(scale-1) * exp(-(x/shape)^scale) @end example - @end ifnottex @noindent ! for @var{x} > 0. @end deftypefn ! wblrnd -*- texinfo -*- ! @deftypefn {Function File} {} wblrnd (@var{scale}, @var{shape}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} wblrnd (@var{scale}, @var{shape}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! Weibull distribution with parameters @var{scale} and @var{shape} ! which must be scalar or of size @var{r} by @var{c}. Or if @var{sz} ! is a vector return a matrix of size @var{sz}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{alpha} and @var{sigma}. @end deftypefn ! wienrnd -*- texinfo -*- ! @deftypefn {Function File} {} wienrnd (@var{t}, @var{d}, @var{n}) ! Return a simulated realization of the @var{d}-dimensional Wiener Process ! on the interval [0, @var{t}]. If @var{d} is omitted, @var{d} = 1 is ! used. The first column of the return matrix contains time, the ! remaining columns contain the Wiener process. ! The optional parameter @var{n} gives the number of summands used for ! simulating the process over an interval of length 1. If @var{n} is ! omitted, @var{n} = 1000 is used. @end deftypefn ! logistic_regression -*- texinfo -*- ! @deftypefn {Function File} {[@var{theta}, @var{beta}, @var{dev}, @var{dl}, @var{d2l}, @var{p}] =} logistic_regression (@var{y}, @var{x}, @var{print}, @var{theta}, @var{beta}) ! Perform ordinal logistic regression. ! Suppose @var{y} takes values in @var{k} ordered categories, and let ! @code{gamma_i (@var{x})} be the cumulative probability that @var{y} ! falls in one of the first @var{i} categories given the covariate ! @var{x}. Then @example ! [theta, beta] = logistic_regression (y, x) @end example ! @noindent ! fits the model @example ! logit (gamma_i (x)) = theta_i - beta' * x, i = 1...k-1 @end example ! ! The number of ordinal categories, @var{k}, is taken to be the number ! of distinct values of @code{round (@var{y})}. If @var{k} equals 2, ! @var{y} is binary and the model is ordinary logistic regression. The ! matrix @var{x} is assumed to have full column rank. ! ! Given @var{y} only, @code{theta = logistic_regression (y)} ! fits the model with baseline logit odds only. ! ! The full form is @example ! [theta, beta, dev, dl, d2l, gamma] ! = logistic_regression (y, x, print, theta, beta) @end example @noindent ! in which all output arguments and all input arguments except @var{y} ! are optional. ! ! Setting @var{print} to 1 requests summary information about the fitted ! model to be displayed. Setting @var{print} to 2 requests information ! about convergence at each iteration. Other values request no ! information to be displayed. The input arguments @var{theta} and ! @var{beta} give initial estimates for @var{theta} and @var{beta}. ! The returned value @var{dev} holds minus twice the log-likelihood. ! The returned values @var{dl} and @var{d2l} are the vector of first ! and the matrix of second derivatives of the log-likelihood with ! respect to @var{theta} and @var{beta}. ! @var{p} holds estimates for the conditional distribution of @var{y} ! given @var{x}. ! @end deftypefn ! logistic_regression_derivatives ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{dl}, @var{d2l}] =} logistic_regression_derivatives (@var{x}, @var{z}, @var{z1}, @var{g}, @var{g1}, @var{p}) ! Called by logistic_regression. Calculates derivates of the ! log-likelihood for ordinal logistic regression model. @end deftypefn ! logistic_regression_likelihood -*- texinfo -*- ! @deftypefn {Function File} {[@var{g}, @var{g1}, @var{p}, @var{dev}] =} logistic_regression_likelihood (@var{y}, @var{x}, @var{beta}, @var{z}, @var{z1}) ! Calculates likelihood for the ordinal logistic regression model. ! Called by logistic_regression. @end deftypefn ! anova -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{f}, @var{df_b}, @var{df_w}] =} anova (@var{y}, @var{g}) ! Perform a one-way analysis of variance (ANOVA). The goal is to test ! whether the population means of data taken from @var{k} different ! groups are all equal. ! ! Data may be given in a single vector @var{y} with groups specified by ! a corresponding vector of group labels @var{g} (e.g., numbers from 1 ! to @var{k}). This is the general form which does not impose any ! restriction on the number of data in each group or the group labels. ! If @var{y} is a matrix and @var{g} is omitted, each column of @var{y} ! is treated as a group. This form is only appropriate for balanced ! ANOVA in which the numbers of samples from each group are all equal. ! Under the null of constant means, the statistic @var{f} follows an F ! distribution with @var{df_b} and @var{df_w} degrees of freedom. ! The p-value (1 minus the CDF of this distribution at @var{f}) is ! returned in @var{pval}. ! If no output argument is given, the standard one-way ANOVA table is ! printed. @end deftypefn ! bartlett_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{chisq}, @var{df}] =} bartlett_test (@var{x1}, @dots{}) ! Perform a Bartlett test for the homogeneity of variances in the data ! vectors @var{x1}, @var{x2}, @dots{}, @var{xk}, where @var{k} > 1. ! ! Under the null of equal variances, the test statistic @var{chisq} ! approximately follows a chi-square distribution with @var{df} degrees of ! freedom. ! ! The p-value (1 minus the CDF of this distribution at @var{chisq}) is ! returned in @var{pval}. ! If no output argument is given, the p-value is displayed. @end deftypefn ! chisquare_test_homogeneity -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{chisq}, @var{df}] =} chisquare_test_homogeneity (@var{x}, @var{y}, @var{c}) ! Given two samples @var{x} and @var{y}, perform a chisquare test for ! homogeneity of the null hypothesis that @var{x} and @var{y} come from ! the same distribution, based on the partition induced by the ! (strictly increasing) entries of @var{c}. ! For large samples, the test statistic @var{chisq} approximately follows a ! chisquare distribution with @var{df} = @code{length (@var{c})} ! degrees of freedom. ! The p-value (1 minus the CDF of this distribution at @var{chisq}) is ! returned in @var{pval}. ! If no output argument is given, the p-value is displayed. @end deftypefn ! chisquare_test_independence -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{chisq}, @var{df}] =} chisquare_test_independence (@var{x}) ! Perform a chi-square test for independence based on the contingency ! table @var{x}. Under the null hypothesis of independence, ! @var{chisq} approximately has a chi-square distribution with ! @var{df} degrees of freedom. ! The p-value (1 minus the CDF of this distribution at chisq) of the ! test is returned in @var{pval}. ! If no output argument is given, the p-value is displayed. @end deftypefn ! cor_test -*- texinfo -*- ! @deftypefn {Function File} {} cor_test (@var{x}, @var{y}, @var{alt}, @var{method}) ! Test whether two samples @var{x} and @var{y} come from uncorrelated ! populations. ! ! The optional argument string @var{alt} describes the alternative ! hypothesis, and can be @code{"!="} or @code{"<>"} (non-zero), ! @code{">"} (greater than 0), or @code{"<"} (less than 0). The ! default is the two-sided case. ! ! The optional argument string @var{method} specifies on which ! correlation coefficient the test should be based. If @var{method} is ! @code{"pearson"} (default), the (usual) Pearson's product moment ! correlation coefficient is used. In this case, the data should come ! from a bivariate normal distribution. Otherwise, the other two ! methods offer nonparametric alternatives. If @var{method} is ! @code{"kendall"}, then Kendall's rank correlation tau is used. If ! @var{method} is @code{"spearman"}, then Spearman's rank correlation ! rho is used. Only the first character is necessary. ! The output is a structure with the following elements: ! @table @var ! @item pval ! The p-value of the test. ! @item stat ! The value of the test statistic. ! @item dist ! The distribution of the test statistic. ! @item params ! The parameters of the null distribution of the test statistic. ! @item alternative ! The alternative hypothesis. ! @item method ! The method used for testing. ! @end table ! If no output argument is given, the p-value is displayed. @end deftypefn ! f_test_regression -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{f}, @var{df_num}, @var{df_den}] =} f_test_regression (@var{y}, @var{x}, @var{rr}, @var{r}) ! Perform an F test for the null hypothesis rr * b = r in a classical ! normal regression model y = X * b + e. ! ! Under the null, the test statistic @var{f} follows an F distribution ! with @var{df_num} and @var{df_den} degrees of freedom. ! The p-value (1 minus the CDF of this distribution at @var{f}) is ! returned in @var{pval}. ! If not given explicitly, @var{r} = 0. ! If no output argument is given, the p-value is displayed. @end deftypefn ! hotelling_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{tsq}] =} hotelling_test (@var{x}, @var{m}) ! For a sample @var{x} from a multivariate normal distribution with unknown ! mean and covariance matrix, test the null hypothesis that @code{mean ! (@var{x}) == @var{m}}. ! Hotelling's @math{T^2} is returned in @var{tsq}. Under the null, ! @math{(n-p) T^2 / (p(n-1))} has an F distribution with @math{p} and ! @math{n-p} degrees of freedom, where @math{n} and @math{p} are the ! numbers of samples and variables, respectively. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! hotelling_test_2 -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{tsq}] =} hotelling_test_2 (@var{x}, @var{y}) ! For two samples @var{x} from multivariate normal distributions with ! the same number of variables (columns), unknown means and unknown ! equal covariance matrices, test the null hypothesis @code{mean ! (@var{x}) == mean (@var{y})}. ! Hotelling's two-sample @math{T^2} is returned in @var{tsq}. Under the null, - @iftex - @tex - $$ - {n_x+n_y-p-1) T^2 \over p(n_x+n_y-2)} - $$ - @end tex - @end iftex - @ifnottex @example ! (n_x+n_y-p-1) T^2 / (p(n_x+n_y-2)) @end example ! @end ifnottex ! ! @noindent ! has an F distribution with @math{p} and @math{n_x+n_y-p-1} degrees of ! freedom, where @math{n_x} and @math{n_y} are the sample sizes and ! @math{p} is the number of variables. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! kolmogorov_smirnov_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{ks}] =} kolmogorov_smirnov_test (@var{x}, @var{dist}, @var{params}, @var{alt}) ! Perform a Kolmogorov-Smirnov test of the null hypothesis that the ! sample @var{x} comes from the (continuous) distribution dist. I.e., ! if F and G are the CDFs corresponding to the sample and dist, ! respectively, then the null is that F == G. ! The optional argument @var{params} contains a list of parameters of ! @var{dist}. For example, to test whether a sample @var{x} comes from ! a uniform distribution on [2,4], use @example ! kolmogorov_smirnov_test(x, "uniform", 2, 4) @end example ! @noindent ! @var{dist} can be any string for which a function @var{dist_cdf} ! that calculates the CDF of distribution @var{dist} exists. ! ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative F ! != G. In this case, the test statistic @var{ks} follows a two-sided ! Kolmogorov-Smirnov distribution. If @var{alt} is @code{">"}, the ! one-sided alternative F > G is considered. Similarly for @code{"<"}, ! the one-sided alternative F > G is considered. In this case, the ! test statistic @var{ks} has a one-sided Kolmogorov-Smirnov ! distribution. The default is the two-sided case. ! ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value is displayed. @end deftypefn ! kolmogorov_smirnov_test_2 -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{ks}, @var{d}] =} kolmogorov_smirnov_test_2 (@var{x}, @var{y}, @var{alt}) ! Perform a 2-sample Kolmogorov-Smirnov test of the null hypothesis ! that the samples @var{x} and @var{y} come from the same (continuous) ! distribution. I.e., if F and G are the CDFs corresponding to the ! @var{x} and @var{y} samples, respectively, then the null is that F == ! G. ! ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative F ! != G. In this case, the test statistic @var{ks} follows a two-sided ! Kolmogorov-Smirnov distribution. If @var{alt} is @code{">"}, the ! one-sided alternative F > G is considered. Similarly for @code{"<"}, ! the one-sided alternative F < G is considered. In this case, the ! test statistic @var{ks} has a one-sided Kolmogorov-Smirnov ! distribution. The default is the two-sided case. ! ! The p-value of the test is returned in @var{pval}. ! ! The third returned value, @var{d}, is the test statistic, the maximum ! vertical distance between the two cumulative distribution functions. ! ! If no output argument is given, the p-value is displayed. @end deftypefn ! kruskal_wallis_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{k}, @var{df}] =} kruskal_wallis_test (@var{x1}, @dots{}) ! Perform a Kruskal-Wallis one-factor "analysis of variance". ! ! Suppose a variable is observed for @var{k} > 1 different groups, and ! let @var{x1}, @dots{}, @var{xk} be the corresponding data vectors. ! ! Under the null hypothesis that the ranks in the pooled sample are not ! affected by the group memberships, the test statistic @var{k} is ! approximately chi-square with @var{df} = @var{k} - 1 degrees of ! freedom. ! ! If the data contains ties (some value appears more than once) ! @var{k} is divided by ! 1 - @var{sumTies} / ( @var{n}^3 - @var{n} ) ! where @var{sumTies} is the sum of @var{t}^2 - @var{t} over each group ! of ties where @var{t} is the number of ties in the group and @var{n} ! is the total number of values in the input data. For more info on ! this adjustment see "Use of Ranks in One-Criterion Variance Analysis" ! in Journal of the American Statistical Association, Vol. 47, ! No. 260 (Dec 1952) by William H. Kruskal and W. Allen Wallis. ! The p-value (1 minus the CDF of this distribution at @var{k}) is ! returned in @var{pval}. ! If no output argument is given, the p-value is displayed. ! @end deftypefn ! manova ! -*- texinfo -*- ! @deftypefn {Function File} {} manova (@var{y}, @var{g}) ! Perform a one-way multivariate analysis of variance (MANOVA). The ! goal is to test whether the p-dimensional population means of data ! taken from @var{k} different groups are all equal. All data are ! assumed drawn independently from p-dimensional normal distributions ! with the same covariance matrix. ! The data matrix is given by @var{y}. As usual, rows are observations ! and columns are variables. The vector @var{g} specifies the ! corresponding group labels (e.g., numbers from 1 to @var{k}). ! The LR test statistic (Wilks' Lambda) and approximate p-values are ! computed and displayed. @end deftypefn ! mcnemar_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{chisq}, @var{df}] =} mcnemar_test (@var{x}) ! For a square contingency table @var{x} of data cross-classified on ! the row and column variables, McNemar's test can be used for testing ! the null hypothesis of symmetry of the classification probabilities. ! Under the null, @var{chisq} is approximately distributed as chisquare ! with @var{df} degrees of freedom. ! The p-value (1 minus the CDF of this distribution at @var{chisq}) is ! returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. ! @end deftypefn ! prop_test_2 ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{z}] =} prop_test_2 (@var{x1}, @var{n1}, @var{x2}, @var{n2}, @var{alt}) ! If @var{x1} and @var{n1} are the counts of successes and trials in ! one sample, and @var{x2} and @var{n2} those in a second one, test the ! null hypothesis that the success probabilities @var{p1} and @var{p2} ! are the same. Under the null, the test statistic @var{z} ! approximately follows a standard normal distribution. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @var{p1} != @var{p2}. If @var{alt} is @code{">"}, the one-sided ! alternative @var{p1} > @var{p2} is used. Similarly for @code{"<"}, ! the one-sided alternative @var{p1} < @var{p2} is used. ! The default is the two-sided case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. ! @end deftypefn ! run_test ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{chisq}] =} run_test (@var{x}) ! Perform a chi-square test with 6 degrees of freedom based on the ! upward runs in the columns of @var{x}. Can be used to test whether ! @var{x} contains independent data. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value is displayed. @end deftypefn ! sign_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{b}, @var{n}] =} sign_test (@var{x}, @var{y}, @var{alt}) ! For two matched-pair samples @var{x} and @var{y}, perform a sign test ! of the null hypothesis PROB (@var{x} > @var{y}) == PROB (@var{x} < ! @var{y}) == 1/2. Under the null, the test statistic @var{b} roughly ! follows a binomial distribution with parameters @code{@var{n} = sum ! (@var{x} != @var{y})} and @var{p} = 1/2. ! ! With the optional argument @code{alt}, the alternative of interest ! can be selected. If @var{alt} is @code{"!="} or @code{"<>"}, the ! null hypothesis is tested against the two-sided alternative PROB ! (@var{x} < @var{y}) != 1/2. If @var{alt} is @code{">"}, the ! one-sided alternative PROB (@var{x} > @var{y}) > 1/2 ("x is ! stochastically greater than y") is considered. Similarly for ! @code{"<"}, the one-sided alternative PROB (@var{x} > @var{y}) < 1/2 ! ("x is stochastically less than y") is considered. The default is ! the two-sided case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. ! @end deftypefn ! t_test ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{t}, @var{df}] =} t_test (@var{x}, @var{m}, @var{alt}) ! For a sample @var{x} from a normal distribution with unknown mean and ! variance, perform a t-test of the null hypothesis @code{mean ! (@var{x}) == @var{m}}. Under the null, the test statistic @var{t} ! follows a Student distribution with @code{@var{df} = length (@var{x}) ! - 1} degrees of freedom. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{mean (@var{x}) != @var{m}}. If @var{alt} is @code{">"}, the ! one-sided alternative @code{mean (@var{x}) > @var{m}} is considered. ! Similarly for @var{"<"}, the one-sided alternative @code{mean ! (@var{x}) < @var{m}} is considered. The default is the two-sided ! case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. ! @end deftypefn ! t_test_2 ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{t}, @var{df}] =} t_test_2 (@var{x}, @var{y}, @var{alt}) ! For two samples x and y from normal distributions with unknown means ! and unknown equal variances, perform a two-sample t-test of the null ! hypothesis of equal means. Under the null, the test statistic ! @var{t} follows a Student distribution with @var{df} degrees of ! freedom. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{mean (@var{x}) != mean (@var{y})}. If @var{alt} is @code{">"}, ! the one-sided alternative @code{mean (@var{x}) > mean (@var{y})} is ! used. Similarly for @code{"<"}, the one-sided alternative @code{mean ! (@var{x}) < mean (@var{y})} is used. The default is the two-sided ! case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. ! @end deftypefn ! t_test_regression ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{t}, @var{df}] =} t_test_regression (@var{y}, @var{x}, @var{rr}, @var{r}, @var{alt}) ! Perform an t test for the null hypothesis @code{@var{rr} * @var{b} = ! @var{r}} in a classical normal regression model @code{@var{y} = ! @var{x} * @var{b} + @var{e}}. Under the null, the test statistic @var{t} ! follows a @var{t} distribution with @var{df} degrees of freedom. ! If @var{r} is omitted, a value of 0 is assumed. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{@var{rr} * @var{b} != @var{r}}. If @var{alt} is @code{">"}, the ! one-sided alternative @code{@var{rr} * @var{b} > @var{r}} is used. ! Similarly for @var{"<"}, the one-sided alternative @code{@var{rr} * ! @var{b} < @var{r}} is used. The default is the two-sided case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! u_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{z}] =} u_test (@var{x}, @var{y}, @var{alt}) ! For two samples @var{x} and @var{y}, perform a Mann-Whitney U-test of ! the null hypothesis PROB (@var{x} > @var{y}) == 1/2 == PROB (@var{x} ! < @var{y}). Under the null, the test statistic @var{z} approximately ! follows a standard normal distribution. Note that this test is ! equivalent to the Wilcoxon rank-sum test. ! ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! PROB (@var{x} > @var{y}) != 1/2. If @var{alt} is @code{">"}, the ! one-sided alternative PROB (@var{x} > @var{y}) > 1/2 is considered. ! Similarly for @code{"<"}, the one-sided alternative PROB (@var{x} > ! @var{y}) < 1/2 is considered. The default is the two-sided case. ! ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! var_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{f}, @var{df_num}, @var{df_den}] =} var_test (@var{x}, @var{y}, @var{alt}) ! For two samples @var{x} and @var{y} from normal distributions with ! unknown means and unknown variances, perform an F-test of the null ! hypothesis of equal variances. Under the null, the test statistic ! @var{f} follows an F-distribution with @var{df_num} and @var{df_den} ! degrees of freedom. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{var (@var{x}) != var (@var{y})}. If @var{alt} is @code{">"}, ! the one-sided alternative @code{var (@var{x}) > var (@var{y})} is ! used. Similarly for "<", the one-sided alternative @code{var ! (@var{x}) > var (@var{y})} is used. The default is the two-sided ! case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! welch_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{t}, @var{df}] =} welch_test (@var{x}, @var{y}, @var{alt}) ! For two samples @var{x} and @var{y} from normal distributions with ! unknown means and unknown and not necessarily equal variances, ! perform a Welch test of the null hypothesis of equal means. ! Under the null, the test statistic @var{t} approximately follows a ! Student distribution with @var{df} degrees of freedom. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{mean (@var{x}) != @var{m}}. If @var{alt} is @code{">"}, the ! one-sided alternative mean(x) > @var{m} is considered. Similarly for ! @code{"<"}, the one-sided alternative mean(x) < @var{m} is ! considered. The default is the two-sided case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! wilcoxon_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{z}] =} wilcoxon_test (@var{x}, @var{y}, @var{alt}) ! For two matched-pair sample vectors @var{x} and @var{y}, perform a ! Wilcoxon signed-rank test of the null hypothesis PROB (@var{x} > ! @var{y}) == 1/2. Under the null, the test statistic @var{z} ! approximately follows a standard normal distribution when @var{n} > 25. ! @strong{Warning}: This function assumes a normal distribution for @var{z} ! and thus is invalid for @var{n} <= 25. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! PROB (@var{x} > @var{y}) != 1/2. If alt is @code{">"}, the one-sided ! alternative PROB (@var{x} > @var{y}) > 1/2 is considered. Similarly ! for @code{"<"}, the one-sided alternative PROB (@var{x} > @var{y}) < ! 1/2 is considered. The default is the two-sided case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed. @end deftypefn ! z_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{z}] =} z_test (@var{x}, @var{m}, @var{v}, @var{alt}) ! Perform a Z-test of the null hypothesis @code{mean (@var{x}) == ! @var{m}} for a sample @var{x} from a normal distribution with unknown ! mean and known variance @var{v}. Under the null, the test statistic ! @var{z} follows a standard normal distribution. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{mean (@var{x}) != @var{m}}. If @var{alt} is @code{">"}, the ! one-sided alternative @code{mean (@var{x}) > @var{m}} is considered. ! Similarly for @code{"<"}, the one-sided alternative @code{mean ! (@var{x}) < @var{m}} is considered. The default is the two-sided ! case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed ! along with some information. @end deftypefn ! z_test_2 -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{z}] =} z_test_2 (@var{x}, @var{y}, @var{v_x}, @var{v_y}, @var{alt}) ! For two samples @var{x} and @var{y} from normal distributions with ! unknown means and known variances @var{v_x} and @var{v_y}, perform a ! Z-test of the hypothesis of equal means. Under the null, the test ! statistic @var{z} follows a standard normal distribution. ! With the optional argument string @var{alt}, the alternative of ! interest can be selected. If @var{alt} is @code{"!="} or ! @code{"<>"}, the null is tested against the two-sided alternative ! @code{mean (@var{x}) != mean (@var{y})}. If alt is @code{">"}, the ! one-sided alternative @code{mean (@var{x}) > mean (@var{y})} is used. ! Similarly for @code{"<"}, the one-sided alternative @code{mean ! (@var{x}) < mean (@var{y})} is used. The default is the two-sided ! case. ! The p-value of the test is returned in @var{pval}. ! If no output argument is given, the p-value of the test is displayed ! along with some information. @end deftypefn ! base2dec -*- texinfo -*- ! @deftypefn {Function File} {} base2dec (@var{s}, @var{b}) ! Convert @var{s} from a string of digits of base @var{b} into an ! integer. ! @example ! base2dec ("11120", 3) ! @result{} 123 ! @end example ! If @var{s} is a matrix, returns a column vector with one value per ! row of @var{s}. If a row contains invalid symbols then the ! corresponding value will be NaN. Rows are right-justified before ! converting so that trailing spaces are ignored. ! If @var{b} is a string, the characters of @var{b} are used as the ! symbols for the digits of @var{s}. Space (' ') may not be used as a ! symbol. ! @example ! base2dec ("yyyzx", "xyz") ! @result{} 123 ! @end example ! @seealso{dec2base, dec2bin, bin2dec, hex2dec, dec2hex} @end deftypefn ! bin2dec -*- texinfo -*- ! @deftypefn {Function File} {} bin2dec (@var{s}) ! Return the decimal number corresponding to the binary number stored ! in the string @var{s}. For example, ! @example ! bin2dec ("1110") ! @result{} 14 ! @end example ! If @var{s} is a string matrix, returns a column vector of converted ! numbers, one per row of @var{s}. Invalid rows evaluate to NaN. ! @seealso{dec2hex, base2dec, dec2base, hex2dec, dec2bin} @end deftypefn ! blanks -*- texinfo -*- ! @deftypefn {Function File} {} blanks (@var{n}) ! Return a string of @var{n} blanks. ! @seealso{repmat} @end deftypefn ! deblank -*- texinfo -*- ! @deftypefn {Function File} {} deblank (@var{s}) ! Remove trailing blanks and nulls from @var{s}. If @var{s} ! is a matrix, @var{deblank} trims each row to the length of longest ! string. If @var{s} is a cell array, operate recursively on each ! element of the cell array. @end deftypefn ! dec2base -*- texinfo -*- ! @deftypefn {Function File} {} dec2base (@var{n}, @var{b}, @var{len}) ! Return a string of symbols in base @var{b} corresponding to ! the nonnegative integer @var{n}. ! ! @example ! dec2base (123, 3) ! @result{} "11120" ! @end example ! ! If @var{n} is a vector, return a string matrix with one row per value, ! padded with leading zeros to the width of the largest value. ! If @var{b} is a string then the characters of @var{b} are used as ! the symbols for the digits of @var{n}. Space (' ') may not be used ! as a symbol. ! @example ! dec2base (123, "aei") ! @result{} "eeeia" ! @end example ! The optional third argument, @var{len}, specifies the minimum ! number of digits in the result. ! @seealso{base2dec, dec2bin, bin2dec, hex2dec, dec2hex} @end deftypefn ! dec2bin -*- texinfo -*- ! @deftypefn {Function File} {} dec2bin (@var{n}, @var{len}) ! Return a binary number corresponding the nonnegative decimal number ! @var{n}, as a string of ones and zeros. For example, ! @example ! dec2bin (14) ! @result{} "1110" ! @end example ! If @var{n} is a vector, returns a string matrix, one row per value, ! padded with leading zeros to the width of the largest value. ! The optional second argument, @var{len}, specifies the minimum ! number of digits in the result. ! @seealso{bin2dec, dec2base, base2dec, hex2dec, dec2hex} @end deftypefn ! dec2hex -*- texinfo -*- ! @deftypefn {Function File} {} dec2hex (@var{n}, @var{len}) ! Return the hexadecimal string corresponding to the nonnegative ! integer @var{n}. For example, ! ! @example ! dec2hex (2748) ! @result{} "ABC" ! @end example ! If @var{n} is a vector, returns a string matrix, one row per value, ! padded with leading zeros to the width of the largest value. ! The optional second argument, @var{len}, specifies the minimum ! number of digits in the result. ! @seealso{hex2dec, dec2base, base2dec, bin2dec, dec2bin} @end deftypefn ! findstr -*- texinfo -*- ! @deftypefn {Function File} {} findstr (@var{s}, @var{t}, @var{overlap}) ! Return the vector of all positions in the longer of the two strings ! @var{s} and @var{t} where an occurrence of the shorter of the two starts. ! If the optional argument @var{overlap} is nonzero, the returned vector ! can include overlapping positions (this is the default). For example, ! ! @example ! findstr ("ababab", "a") ! @result{} [ 1, 3, 5 ] ! findstr ("abababa", "aba", 0) ! @result{} [ 1, 5 ] ! @end example @end deftypefn ! hex2dec -*- texinfo -*- ! @deftypefn {Function File} {} hex2dec (@var{s}) ! Return the integer corresponding to the hexadecimal number stored ! in the string @var{s}. For example, ! ! @example ! hex2dec ("12B") ! @result{} 299 ! hex2dec ("12b") ! @result{} 299 ! @end example ! ! If @var{s} is a string matrix, returns a column vector of converted ! numbers, one per row of @var{s}. Invalid rows evaluate to NaN. ! @seealso{dec2hex, base2dec, dec2base, bin2dec, dec2bin} @end deftypefn ! index -*- texinfo -*- ! @deftypefn {Function File} {} index (@var{s}, @var{t}) ! @deftypefnx {Function File} {} index (@var{s}, @var{t}, @var{direction}) ! Return the position of the first occurrence of the string @var{t} in the ! string @var{s}, or 0 if no occurrence is found. For example, ! ! @example ! index ("Teststring", "t") ! @result{} 4 ! @end example ! ! If @var{direction} is @samp{"first"}, return the first element found. ! If @var{direction} is @samp{"last"}, return the last element found. ! The @code{rindex} function is equivalent to @code{index} with ! @var{direction} set to @samp{"last"}. ! ! @strong{Caution:} This function does not work for arrays of ! character strings. ! @seealso{find, rindex} @end deftypefn ! isletter -*- texinfo -*- ! @deftypefn {Function File} {} isletter (@var{s}) ! Returns true if @var{s} is a letter false otherwise. ! @seealso{isalpha} @end deftypefn ! lower -*- texinfo -*- ! @deftypefn {Function File} {} lower (@var{s}) ! Transform all letters in the character string (or cell array of ! character strings) @var{s} to lower case. ! @seealso{upper, tolower, toupper} @end deftypefn ! mat2str -*- texinfo -*- ! @deftypefn {Function File} {@var{s} =} mat2str (@var{x}, @var{n}) ! @deftypefnx {Function File} {@var{s} =} mat2str (@dots{}, 'class') ! ! Format real/complex numerical matrices as strings. This function ! returns values that are suitable for the use of the @code{eval} ! function. ! ! The precision of the values is given by @var{n}. If @var{n} is a ! scalar then both real and imaginary parts of the matrix are printed ! to the same precision. Otherwise @code{@var{n} (1)} defines the ! precision of the real part and @code{@var{n} (2)} defines the ! precision of the imaginary part. The default for @var{n} is 17. ! ! If the argument 'class' is given, then the class of @var{x} is ! included in the string in such a way that the eval will result in the ! construction of a matrix of the same class. ! ! @example ! @group ! mat2str( [ -1/3 + i/7; 1/3 - i/7 ], [4 2] ) ! @result{} '[-0.3333+0.14i;0.3333-0.14i]' ! mat2str( [ -1/3 +i/7; 1/3 -i/7 ], [4 2] ) ! @result{} '[-0.3333+0i,0+0.14i;0.3333+0i,-0-0.14i]' ! mat2str( int16([1 -1]), 'class') ! @result{} 'int16([1,-1])' ! @end group ! @end example ! ! @seealso{sprintf, int2str} @end deftypefn ! rindex -*- texinfo -*- ! @deftypefn {Function File} {} rindex (@var{s}, @var{t}) ! Return the position of the last occurrence of the character string ! @var{t} in the character string @var{s}, or 0 if no occurrence is ! found. For example, ! ! @example ! rindex ("Teststring", "t") ! @result{} 6 ! @end example ! ! @strong{Caution:} This function does not work for arrays of ! character strings. ! @seealso{find, index} @end deftypefn ! split -*- texinfo -*- ! @deftypefn {Function File} {} split (@var{s}, @var{t}, @var{n}) ! Divides the string @var{s} into pieces separated by @var{t}, returning ! the result in a string array (padded with blanks to form a valid ! matrix). If the optional input @var{n} is supplied, split @var{s} ! into at most @var{n} different pieces. ! ! For example, ! ! @example ! split ("Test string", "t") ! @result{} "Tes " ! " s " ! "ring" ! @end example ! ! @example ! split ("Test string", "t", 2) ! @result{} "Tes " ! " string" ! @end example @end deftypefn ! str2double -*- texinfo -*- ! @deftypefn {Function File} {[@var{num}, @var{status}, @var{strarray}] =} str2double (@var{str}, @var{cdelim}, @var{rdelim}, @var{ddelim}) ! Convert strings into numeric values. ! ! @code{str2double} can replace @code{str2num}, but avoids the use of ! @code{eval} on unknown data. ! ! @var{str} can be the form @samp{[+-]d[.]dd[[eE][+-]ddd]} in which ! @samp{d} can be any of digit from 0 to 9, and @samp{[]} indicate ! optional elements. ! ! @var{num} is the corresponding numeric value. If the conversion ! fails, status is -1 and @var{num} is NaN. ! ! @var{status} is 0 if the conversion was successful and -1 otherwise. ! ! @var{strarray} is a cell array of strings. ! ! Elements which are not defined or not valid return NaN and the ! @var{status} becomes -1. ! ! If @var{str} is a character array or a cell array of strings, then ! @var{num} and @var{status} return matrices of appropriate size. ! ! @var{str} can also contain multiple elements separated by row and ! column delimiters (@var{cdelim} and @var{rdelim}). ! ! The parameters @var{cdelim}, @var{rdelim}, and @var{ddelim} are ! optional column, row, and decimal delimiters. ! ! The default row-delimiters are newline, carriage return and semicolon ! (ASCII 10, 13 and 59). The default column-delimiters are tab, space ! and comma (ASCII 9, 32, and 44). The default decimal delimiter is ! @samp{.} (ASCII 46). ! ! @var{cdelim}, @var{rdelim}, and @var{ddelim} must contain only nul, ! newline, carriage return, semicolon, colon, slash, tab, space, comma, ! or @samp{()[]@{@}} (ASCII 0, 9, 10, 11, 12, 13, 14, 32, 33, 34, 40, ! 41, 44, 47, 58, 59, 91, 93, 123, 124, 125). ! ! Examples: ! ! @example ! str2double ("-.1e-5") ! @result{} -1.0000e-006 ! ! str2double (".314e1, 44.44e-1, .7; -1e+1") ! @result{} ! 3.1400 4.4440 0.7000 ! -10.0000 NaN NaN ! ! line = "200, 300, NaN, -inf, yes, no, 999, maybe, NaN"; ! [x, status] = str2double (line) ! @result{} x = ! 200 300 NaN -Inf NaN NaN 999 NaN NaN ! @result{} status = ! 0 0 0 0 -1 -1 0 -1 0 ! @end example @end deftypefn ! str2mat -*- texinfo -*- ! @deftypefn {Function File} {} str2mat (@var{s_1}, @dots{}, @var{s_n}) ! Return a matrix containing the strings @var{s_1}, @dots{}, @var{s_n} as ! its rows. Each string is padded with blanks in order to form a valid ! matrix. ! ! This function is modelled after @sc{Matlab}. In Octave, you can create ! a matrix of strings by @code{[@var{s_1}; @dots{}; @var{s_n}]} even if ! the strings are not all the same length. @end deftypefn ! str2num -*- texinfo -*- ! @deftypefn {Function File} {} str2num (@var{s}) ! Convert the string @var{s} to a number. @end deftypefn ! strcat -*- texinfo -*- ! @deftypefn {Function File} {} strcat (@var{s1}, @var{s2}, @dots{}) ! Return a string containing all the arguments concatenated. For example, ! ! @example ! @group ! s = [ "ab"; "cde" ]; ! strcat (s, s, s) ! @result{} "ab ab ab " ! "cdecdecde" ! @end group ! @end example @end deftypefn ! strcmpi -*- texinfo -*- ! @deftypefn {Function File} {} strcmpi (@var{s1}, @var{s2}) ! Ignoring case, return 1 if the character strings @var{s1} and @var{s2} ! are the same, and 0 otherwise. ! ! If either @var{s1} or @var{s2} is a cell array of strings, then an array ! of the same size is returned, containing the values described above for ! every member of the cell array. The other argument may also be a cell ! array of strings (of the same size or with only one element), char matrix ! or character string. ! ! @strong{Caution:} For compatibility with @sc{Matlab}, Octave's strcmpi ! function returns 1 if the character strings are equal, and 0 otherwise. ! This is just the opposite of the corresponding C library function. ! @seealso{strcmp, strncmp, strncmpi} @end deftypefn ! strfind -*- texinfo -*- ! @deftypefn {Function File} {@var{idx} =} strfind (@var{str}, @var{pattern}) ! @deftypefnx {Function File} {@var{idx} =} strfind (@var{cellstr}, @var{pattern}) ! Search for @var{pattern} in the string @var{str} and return the ! starting index of every such occurrence in the vector @var{idx}. ! If there is no such occurrence, or if @var{pattern} is longer ! than @var{str}, then @var{idx} is the empty array @code{[]}. ! ! If the cell array of strings @var{cellstr} is specified instead of the ! string @var{str}, then @var{idx} is a cell array of vectors, as specified ! above. ! @seealso{findstr, strmatch, strcmp, strncmp, strcmpi, strncmpi} @end deftypefn ! strjust -*- texinfo -*- ! @deftypefn {Function File} {} strjust (@var{s}, ["left"|"right"|"center"]) ! Shift the non-blank text of @var{s} to the left, right or center of ! the string. If @var{s} is a string array, justify each string in the ! array. Null characters are replaced by blanks. If no justification ! is specified, then all rows are right-justified. @end deftypefn ! strmatch -*- texinfo -*- ! @deftypefn {Function File} {} strmatch (@var{s}, @var{a}, "exact") ! Return indices of entries of @var{a} that match the string @var{s}. ! The second argument @var{a} may be a string matrix or a cell array of ! strings. If the third argument @code{"exact"} is not given, then ! @var{s} only needs to match @var{a} up to the length of @var{s}. Nul ! characters match blanks. Results are returned as a column vector. @end deftypefn ! strncmpi -*- texinfo -*- ! @deftypefn {Function File} {} strncmpi (@var{s1}, @var{s2}, @var{n}) ! Ignoring case, return 1 if the first @var{n} characters of character ! strings @var{s1} and @var{s2} are the same, and 0 otherwise. ! ! If either @var{s1} or @var{s2} is a cell array of strings, then an array ! of the same size is returned, containing the values described above for ! every member of the cell array. The other argument may also be a cell ! array of strings (of the same size or with only one element), char matrix ! or character string. ! ! @strong{Caution:} For compatibility with @sc{Matlab}, Octave's strncmpi ! function returns 1 if the character strings are equal, and 0 otherwise. ! This is just the opposite of the corresponding C library function. ! @seealso{strcmp, strcmpi, strncmp} @end deftypefn ! strrep -*- texinfo -*- ! @deftypefn {Function File} {} strrep (@var{s}, @var{x}, @var{y}) ! Replaces all occurrences of the substring @var{x} of the string @var{s} ! with the string @var{y}. For example, @example ! strrep ("This is a test string", "is", "&%$") ! @result{} "Th&%$ &%$ a test string" @end example - @end deftypefn - strtok - -*- texinfo -*- - @deftypefn {Function File} {[@var{tok}, @var{rem}] =} strtok (@var{str}, @var{delim}) ! Find all characters up to but not including the first character which ! is in the string delim. If @var{rem} is requested, it contains the ! remainder of the string, starting at the first deliminator. Leading ! delimiters are ignored. If @var{delim} is not specified, space is assumed. @end deftypefn ! strtrim -*- texinfo -*- ! @deftypefn {Function File} {} deblank (@var{s}) ! Remove leading and trailing blanks and nulls from @var{s}. If ! @var{s} is a matrix, @var{deblank} trims each row to the length of ! longest string. If @var{s} is a cell array, operate recursively on ! each element of the cell array. @end deftypefn ! strtrunc -*- texinfo -*- ! @deftypefn {Function File} {} strtrunc (@var{s}, @var{n}) ! Truncate the character string @var{s} to length @var{n}. If @var{s} ! is a char matrix, then the number of columns are adjusted. ! ! If @var{s} is a cell array of strings, then the operation is performed ! on its members and the new cell array is returned. @end deftypefn ! strvcat -*- texinfo -*- ! @deftypefn {Function File} {} strvcat (@var{s_1}, @dots{}, @var{s_n}) ! Return a matrix containing the strings (and cell-strings) ! @var{s_1}, @dots{}, @var{s_n} as ! its rows. Each string is padded with blanks in order to form a valid ! matrix. Unlike @var{str2mat}, empty strings are ignored. ! @seealso{strcat, str2mat} @end deftypefn ! substr -*- texinfo -*- ! @deftypefn {Function File} {} substr (@var{s}, @var{offset}, @var{len}) ! Return the substring of @var{s} which starts at character number ! @var{offset} and is @var{len} characters long. ! ! If @var{offset} is negative, extraction starts that far from the end of ! the string. If @var{len} is omitted, the substring extends to the end ! of S. ! ! For example, ! ! @example ! substr ("This is a test string", 6, 9) ! @result{} "is a test" ! @end example ! ! This function is patterned after AWK. You can get the same result by ! @code{@var{s} (@var{offset} : (@var{offset} + @var{len} - 1))}. @end deftypefn ! upper -*- texinfo -*- ! @deftypefn {Function File} {} upper (@var{s}) ! Transform all letters in the character string (or cell array of ! character strings) @var{s} to upper case. ! @seealso{lower, tolower, toupper} @end deftypefn ! assert -*- texinfo -*- ! @deftypefn {Function File} {} assert (@var{cond}) ! @deftypefnx {Function File} {} assert (@var{observed},@var{expected}) ! @deftypefnx {Function File} {} assert (@var{observed},@var{expected},@var{tol}) ! ! Produces an error if the condition is not met. @code{assert} can be ! called in three different ways. ! ! @table @code ! @item assert (@var{cond}) ! Called with a single argument @var{cond}, @code{assert} produces an ! error if @var{cond} is zero. ! ! @item assert (@var{observed}, @var{expected}) ! Produce an error if observed is not the same as expected. Note that ! observed and expected can be strings, scalars, vectors, matrices, ! lists or structures. ! @item assert(@var{observed}, @var{expected}, @var{tol}) ! Accept a tolerance when comparing numbers. ! If @var{tol} is possitive use it as an absolute tolerance, will produce an error if ! @code{abs(@var{observed} - @var{expected}) > abs(@var{tol})}. ! If @var{tol} is negative use it as a relative tolerance, will produce an error if ! @code{abs(@var{observed} - @var{expected}) > abs(@var{tol} * @var{expected})}. ! If @var{expected} is zero @var{tol} will always be used as an absolute tolerance. ! @end table ! @seealso{test} @end deftypefn ! demo -*- texinfo -*- ! @deftypefn {Function File} {} demo ('@var{name}',@var{n}) ! ! Runs any examples associated with the function '@var{name}'. ! Examples are stored in the script file, or in a file with the same ! name but no extension somewhere on your path. To keep them separate ! from the usual script code, all lines are prefixed by @code{%!}. Each ! example is introduced by the keyword 'demo' flush left to the prefix, ! with no intervening spaces. The remainder of the example can contain ! arbitrary octave code. For example: ! ! @example ! %!demo ! %! t=0:0.01:2*pi; x = sin(t); ! %! plot(t,x) ! %! %------------------------------------------------- ! %! % the figure window shows one cycle of a sine wave ! @end example ! ! Note that the code is displayed before it is executed, so a simple ! comment at the end suffices. It is generally not necessary to use ! disp or printf within the demo. ! ! Demos are run in a function environment with no access to external ! variables. This means that all demos in your function must use ! separate initialization code. Alternatively, you can combine your ! demos into one huge demo, with the code: ! ! @example ! %! input("Press to continue: ","s"); ! @end example ! ! between the sections, but this is discouraged. Other techniques ! include using multiple plots by saying figure between each, or ! using subplot to put multiple plots in the same window. ! ! Also, since demo evaluates inside a function context, you cannot ! define new functions inside a demo. Instead you will have to ! use @code{eval(example('function',n))} to see them. Because eval only ! evaluates one line, or one statement if the statement crosses ! multiple lines, you must wrap your demo in "if 1 endif" ! with the 'if' on the same line as 'demo'. For example, ! ! @example ! %!demo if 1 ! %! function y=f(x) ! %! y=x; ! %! endfunction ! %! f(3) ! %! endif ! @end example ! @seealso{test, example} @end deftypefn ! example -*- texinfo -*- ! @deftypefn {Function File} {} example ('@var{name}',@var{n}) ! @deftypefnx {Function File} {[@var{x}, @var{idx}] =} example ('@var{name}',@var{n}) ! ! Display the code for example @var{n} associated with the function ! '@var{name}', but do not run it. If @var{n} is not given, all examples ! are displayed. ! Called with output arguments, the examples are returned in the form of ! a string @var{x}, with @var{idx} indicating the ending position of the ! various examples. ! See @code{demo} for a complete explanation. ! @seealso{demo, test} @end deftypefn ! fail -*- texinfo -*- ! @deftypefn {Function File} {} fail (@var{code},@var{pattern}) ! @deftypefnx {Function File} {} fail (@var{code},'warning',@var{pattern}) ! ! Return true if @var{code} fails with an error message matching ! @var{pattern}, otherwise produce an error. Note that @var{code} ! is a string and if @var{code} runs successfully, the error produced is: ! ! @example ! expected error but got none ! @end example ! ! If the code fails with a different error, the message produced is: ! ! @example ! expected ! but got ! @end example ! ! The angle brackets are not part of the output. ! ! Called with three arguments, the behavior is similar to ! @code{fail(@var{code}, @var{pattern})}, but produces an error if no ! warning is given during code execution or if the code fails. ! @end deftypefn ! speed -*- texinfo -*- ! @deftypefn {Function File} {} speed (@var{f}, @var{init}, @var{max_n}, @var{f2}, @var{tol}) ! @deftypefnx {Function File} {[@var{order}, @var{n}, @var{T_f}, @var{T_f2}] =} speed (@dots{}) ! ! Determine the execution time of an expression for various @var{n}. ! The @var{n} are log-spaced from 1 to @var{max_n}. For each @var{n}, ! an initialization expression is computed to create whatever data ! are needed for the test. If a second expression is given, the ! execution times of the two expressions will be compared. Called ! without output arguments the results are presented graphically. ! ! @table @code ! @item @var{f} ! The expression to evaluate. ! ! @item @var{max_n} ! The maximum test length to run. Default value is 100. Alternatively, ! use @code{[min_n,max_n]} or for complete control, @code{[n1,n2,@dots{},nk]}. ! ! @item @var{init} ! Initialization expression for function argument values. Use @var{k} ! for the test number and @var{n} for the size of the test. This should ! compute values for all variables listed in args. Note that init will ! be evaluated first for k=0, so things which are constant throughout ! the test can be computed then. The default value is @code{@var{x} = ! randn (@var{n}, 1);}. ! ! @item @var{f2} ! An alternative expression to evaluate, so the speed of the two ! can be compared. Default is @code{[]}. ! ! @item @var{tol} ! If @var{tol} is @code{Inf}, then no comparison will be made between the ! results of expression @var{f} and expression @var{f2}. Otherwise, ! expression @var{f} should produce a value @var{v} and expression @var{f2} ! should produce a value @var{v2}, and these shall be compared using ! @code{assert(@var{v},@var{v2},@var{tol})}. If @var{tol} is positive, ! the tolerance is assumed to be absolute. If @var{tol} is negative, ! the tolerance is assumed to be relative. The default is @code{eps}. ! @item @var{order} ! The time complexity of the expression @code{O(a n^p)}. This ! is a structure with fields @code{a} and @code{p}. ! @item @var{n} ! The values @var{n} for which the expression was calculated and ! the execution time was greater than zero. ! @item @var{T_f} ! The nonzero execution times recorded for the expression @var{f} in seconds. ! @item @var{T_f2} ! The nonzero execution times recorded for the expression @var{f2} in seconds. ! If it is needed, the mean time ratio is just @code{mean(T_f./T_f2)}. ! @end table ! The slope of the execution time graph shows the approximate ! power of the asymptotic running time @code{O(n^p)}. This ! power is plotted for the region over which it is approximated ! (the latter half of the graph). The estimated power is not ! very accurate, but should be sufficient to determine the ! general order of your algorithm. It should indicate if for ! example your implementation is unexpectedly @code{O(n^2)} ! rather than @code{O(n)} because it extends a vector each ! time through the loop rather than preallocating one which is ! big enough. For example, in the current version of Octave, ! the following is not the expected @code{O(n)}: @example ! speed("for i=1:n,y@{i@}=x(i); end", "", [1000,10000]) @end example ! but it is if you preallocate the cell array @code{y}: ! @example ! speed("for i=1:n,y@{i@}=x(i);end", ... ! "x=rand(n,1);y=cell(size(x));", [1000,10000]) ! @end example ! An attempt is made to approximate the cost of the individual ! operations, but it is wildly inaccurate. You can improve the ! stability somewhat by doing more work for each @code{n}. For ! example: ! @example ! speed("airy(x)", "x=rand(n,10)", [10000,100000]) ! @end example ! When comparing a new and original expression, the line on the ! speedup ratio graph should be larger than 1 if the new expression ! is faster. Better algorithms have a shallow slope. Generally, ! vectorizing an algorithm will not change the slope of the execution ! time graph, but it will shift it relative to the original. For ! example: ! @example ! speed("v=sum(x)", "", [10000,100000], ... ! "v=0;for i=1:length(x),v+=x(i);end") ! @end example ! A more complex example, if you had an original version of @code{xcorr} ! using for loops and another version using an FFT, you could compare the ! run speed for various lags as follows, or for a fixed lag with varying ! vector lengths as follows: ! @example ! speed("v=xcorr(x,n)", "x=rand(128,1);", 100, ... ! "v2=xcorr_orig(x,n)", -100*eps) ! speed("v=xcorr(x,15)", "x=rand(20+n,1);", 100, ... ! "v2=xcorr_orig(x,n)", -100*eps) ! @end example ! Assuming one of the two versions is in @var{xcorr_orig}, this ! would compare their speed and their output values. Note that the ! FFT version is not exact, so we specify an acceptable tolerance on ! the comparison @code{100*eps}, and the errors should be computed ! relatively, as @code{abs((@var{x} - @var{y})./@var{y})} rather than ! absolutely as @code{abs(@var{x} - @var{y})}. ! Type @code{example('speed')} to see some real examples. Note for ! obscure reasons, you can't run examples 1 and 2 directly using ! @code{demo('speed')}. Instead use, @code{eval(example('speed',1))} ! and @code{eval(example('speed',2))}. ! @end deftypefn ! test ! -*- texinfo -*- ! @deftypefn {Function File} {} test @var{name} ! @deftypefnx {Function File} {} test @var{name} quiet|normal|verbose ! @deftypefnx {Function File} {} test ('@var{name}', 'quiet|normal|verbose', @var{fid}) ! @deftypefnx {Function File} {} test ([], 'explain', @var{fid}) ! @deftypefnx {Function File} {@var{success} =} test (@dots{}) ! @deftypefnx {Function File} {[@var{n}, @var{max}] =} test (@dots{}) ! @deftypefnx {Function File} {[@var{code}, @var{idx}] =} test ('@var{name}','grabdemo') ! Perform tests from the first file in the loadpath matching @var{name}. ! @code{test} can be called as a command or as a function. Called with ! a single argument @var{name}, the tests are run interactively and stop ! after the first error is encountered. ! With a second argument the tests which are performed and the amount of ! output is selected. ! @table @asis ! @item 'quiet' ! Don't report all the tests as they happen, just the errors. ! @item 'normal' ! Report all tests as they happen, but don't do tests which require ! user interaction. ! @item 'verbose' ! Do tests which require user interaction. ! @end table ! The argument @var{fid} can be used to allow batch processing. Errors ! can be written to the already open file defined by @var{fid}, and ! hopefully when octave crashes this file will tell you what was happening ! when it did. You can use @code{stdout} if you want to see the results as ! they happen. You can also give a file name rather than an @var{fid}, in ! which case the contents of the file will be replaced with the log from ! the current test. ! Called with a single output argument @var{success}, @code{test} returns ! true if all of the tests were successful. Called with two output arguments ! @var{n} and @var{max}, the number of successful tests and the total number ! of tests in the file @var{name} are returned. ! If the second argument is the string 'grabdemo', the contents of the demo ! blocks are extracted but not executed. Code for all code blocks is ! concatenated and returned as @var{code} with @var{idx} being a vector of ! positions of the ends of the demo blocks. ! If the second argument is 'explain', then @var{name} is ignored and an ! explanation of the line markers used is written to the file @var{fid}. ! @seealso{error, assert, fail, demo, example} ! @end deftypefn ! asctime ! -*- texinfo -*- ! @deftypefn {Function File} {} asctime (@var{tm_struct}) ! Convert a time structure to a string using the following five-field ! format: Thu Mar 28 08:40:14 1996. For example, @example @group ! asctime (localtime (time ())) ! @result{} "Mon Feb 17 01:15:06 1997\n" @end group @end example ! This is equivalent to @code{ctime (time ())}. ! @end deftypefn ! calendar ! -*- texinfo -*- ! @deftypefn {Function File} {} calendar (@dots{}) ! @deftypefnx {Function File} {@var{c} =} calendar () ! @deftypefnx {Function File} {@var{c} =} calendar (@var{d}) ! @deftypefnx {Function File} {@var{c} =} calendar (@var{y}, @var{m}) ! If called with no arguments, return the current monthly calendar in ! a 6x7 matrix. ! If @var{d} is specified, return the calendar for the month containing ! the day @var{d}, which must be a serial date number or a date string. ! If @var{y} and @var{m} are specified, return the calendar for year @var{y} ! and month @var{m}. ! If no output arguments are specified, print the calendar on the screen ! instead of returning a matrix. ! @seealso{datenum} ! @end deftypefn ! clock ! -*- texinfo -*- ! @deftypefn {Function File} {} clock () ! Return a vector containing the current year, month (1-12), day (1-31), ! hour (0-23), minute (0-59) and second (0-61). For example, @example @group ! clock () ! @result{} [ 1993, 8, 20, 4, 56, 1 ] @end group @end example ! The function clock is more accurate on systems that have the ! @code{gettimeofday} function. ! @end deftypefn ! ctime ! -*- texinfo -*- ! @deftypefn {Function File} {} ctime (@var{t}) ! Convert a value returned from @code{time} (or any other nonnegative ! integer), to the local time and return a string of the same form as ! @code{asctime}. The function @code{ctime (time)} is equivalent to ! @code{asctime (localtime (time))}. For example, @example @group ! ctime (time ()) ! @result{} "Mon Feb 17 01:15:06 1997\n" @end group @end example @end deftypefn ! date -*- texinfo -*- ! @deftypefn {Function File} {} date () ! Return the date as a character string in the form DD-MMM-YY. For ! example, ! @example ! @group ! date () ! @result{} "20-Aug-93" ! @end group ! @end example @end deftypefn ! datenum -*- texinfo -*- ! @deftypefn {Function File} {} datenum (@var{year}, @var{month}, @var{day}) ! @deftypefnx {Function File} {} datenum (@var{year}, @var{month}, @var{day}, @var{hour}) ! @deftypefnx {Function File} {} datenum (@var{year}, @var{month}, @var{day}, @var{hour}, @var{minute}) ! @deftypefnx {Function File} {} datenum (@var{year}, @var{month}, @var{day}, @var{hour}, @var{minute}, @var{second}) ! @deftypefnx {Function File} {} datenum (@code{"date"}) ! @deftypefnx {Function File} {} datenum (@code{"date"}, @var{p}) ! Returns the specified local time as a day number, with Jan 1, 0000 ! being day 1. By this reckoning, Jan 1, 1970 is day number 719529. ! The fractional portion, @var{p}, corresponds to the portion of the ! specified day. ! Notes: @itemize @item ! Years can be negative and/or fractional. ! @item ! Months below 1 are considered to be January. ! @item ! Days of the month start at 1. @item ! Days beyond the end of the month go into subsequent months. @item ! Days before the beginning of the month go to the previous month. @item ! Days can be fractional. ! @end itemize ! @strong{Warning:} this function does not attempt to handle Julian ! calendars so dates before Octave 15, 1582 are wrong by as much ! as eleven days. Also be aware that only Roman Catholic countries ! adopted the calendar in 1582. It took until 1924 for it to be ! adopted everywhere. See the Wikipedia entry on the Gregorian ! calendar for more details. ! @strong{Warning:} leap seconds are ignored. A table of leap seconds ! is available on the Wikipedia entry for leap seconds. ! @seealso{date, clock, now, datestr, datevec, calendar, weekday} ! @end deftypefn ! datestr ! -*- texinfo -*- ! @deftypefn {Function File} {@var{str} =} datestr (@var{date}, [@var{f}, [@var{p}]]) ! Format the given date/time according to the format @code{f} and return ! the result in @var{str}. @var{date} is a serial date number (see ! @code{datenum}) or a date vector (see @code{datevec}). The value of ! @var{date} may also be a string or cell array of strings. ! @var{f} can be an integer which corresponds to one of the codes in ! the table below, or a date format string. ! @var{p} is the year at the start of the century in which two-digit years ! are to be interpreted in. If not specified, it defaults to the current ! year minus 50. ! For example, the date 730736.65149 (2000-09-07 15:38:09.0934) would be ! formatted as follows: ! @multitable @columnfractions 0.1 0.45 0.35 ! @headitem Code @tab Format @tab Example ! @item 0 @tab dd-mmm-yyyy HH:MM:SS @tab 07-Sep-2000 15:38:09 ! @item 1 @tab dd-mmm-yyyy @tab 07-Sep-2000 ! @item 2 @tab mm/dd/yy @tab 09/07/00 ! @item 3 @tab mmm @tab Sep ! @item 4 @tab m @tab S ! @item 5 @tab mm @tab 09 ! @item 6 @tab mm/dd @tab 09/07 ! @item 7 @tab dd @tab 07 ! @item 8 @tab ddd @tab Thu ! @item 9 @tab d @tab T ! @item 10 @tab yyyy @tab 2000 ! @item 11 @tab yy @tab 00 ! @item 12 @tab mmmyy @tab Sep00 ! @item 13 @tab HH:MM:SS @tab 15:38:09 ! @item 14 @tab HH:MM:SS PM @tab 03:38:09 PM ! @item 15 @tab HH:MM @tab 15:38 ! @item 16 @tab HH:MM PM @tab 03:38 PM ! @item 17 @tab QQ-YY @tab Q3-00 ! @item 18 @tab QQ @tab Q3 ! @item 19 @tab dd/mm @tab 13/03 ! @item 20 @tab dd/mm/yy @tab 13/03/95 ! @item 21 @tab mmm.dd.yyyy HH:MM:SS @tab Mar.03.1962 13:53:06 ! @item 22 @tab mmm.dd.yyyy @tab Mar.03.1962 ! @item 23 @tab mm/dd/yyyy @tab 03/13/1962 ! @item 24 @tab dd/mm/yyyy @tab 12/03/1962 ! @item 25 @tab yy/mm/dd @tab 95/03/13 ! @item 26 @tab yyyy/mm/dd @tab 1995/03/13 ! @item 27 @tab QQ-YYYY @tab Q4-2132 ! @item 28 @tab mmmyyyy @tab Mar2047 ! @item 29 @tab yyyymmdd @tab 20470313 ! @item 30 @tab yyyymmddTHHMMSS @tab 20470313T132603 ! @item 31 @tab yyyy-mm-dd HH:MM:SS @tab 1047-03-13 13:26:03 ! @end multitable ! If @var{f} is a format string, the following symbols are recognised: ! @multitable @columnfractions 0.1 0.7 0.2 ! @headitem Symbol @tab Meaning @tab Example ! @item yyyy @tab Full year @tab 2005 ! @item yy @tab Two-digit year @tab 2005 ! @item mmmm @tab Full month name @tab December ! @item mmm @tab Abbreviated month name @tab Dec ! @item mm @tab Numeric month number (padded with zeros) @tab 01, 08, 12 ! @item m @tab First letter of month name (capitalized) @tab D ! @item dddd @tab Full weekday name @tab Sunday ! @item ddd @tab Abbreviated weekday name @tab Sun ! @item dd @tab Numeric day of month (padded with zeros) @tab 11 ! @item d @tab First letter of weekday name (capitalized) @tab S ! @item HH @tab Hour of day, padded with zeros if PM is set @tab 09:00 ! @item @tab and not padded with zeros otherwise @tab 9:00 AM ! @item MM @tab Minute of hour (padded with zeros) @tab 10:05 ! @item SS @tab Second of minute (padded with zeros) @tab 10:05:03 ! @item PM @tab Use 12-hour time format @tab 11:30 PM ! @end multitable ! If @var{f} is not specified or is @code{-1}, then use 0, 1 or 16, ! depending on whether the date portion or the time portion of ! @var{date} is empty. ! If @var{p} is nor specified, it defaults to the current year minus 50. ! If a matrix or cell array of dates is given, a vector of date strings is ! returned. ! @seealso{datenum, datevec, date, clock, now, datetick} ! @end deftypefn ! datevec ! -*- texinfo -*- ! @deftypefn {Function File} {@var{v} =} datevec (@var{date}) ! @deftypefnx {Function File} {@var{v} =} datevec (@var{date}, @var{f}) ! @deftypefnx {Function File} {@var{v} =} datevec (@var{date}, @var{p}) ! @deftypefnx {Function File} {@var{v} =} datevec (@var{date}, @var{f}, @var{p}) ! @deftypefnx {Function File} {[@var{y}, @var{m}, @var{d}, @var{h}, @var{mi}, @var{s}] =} datevec (@dots{}) ! Convert a serial date number (see @code{datenum}) or date string (see ! @code{datestr}) into a date vector. ! A date vector is a row vector with six members, representing the year, ! month, day, hour, minute, and seconds respectively. ! @var{f} is the format string used to interpret date strings ! (see @code{datestr}). ! @var{p} is the year at the start of the century in which two-digit years ! are to be interpreted in. If not specified, it defaults to the current ! year minus 50. ! @seealso{datenum, datestr, date, clock, now} ! @end deftypefn ! eomday ! -*- texinfo -*- ! @deftypefn {Function File} {@var{e} =} eomday (@var{y}, @var{m}) ! Return the last day of the month @var{m} for the year @var{y}. ! @seealso{datenum, datevec, weekday} ! @end deftypefn ! etime ! -*- texinfo -*- ! @deftypefn {Function File} {} etime (@var{t1}, @var{t2}) ! Return the difference (in seconds) between two time values returned from ! @code{clock}. For example: @example ! t0 = clock (); ! many computations later... ! elapsed_time = etime (clock (), t0); @end example ! @noindent ! will set the variable @code{elapsed_time} to the number of seconds since ! the variable @code{t0} was set. ! @seealso{tic, toc, clock, cputime} ! @end deftypefn ! is_leap_year ! -*- texinfo -*- ! @deftypefn {Function File} {} is_leap_year (@var{year}) ! Return 1 if the given year is a leap year and 0 otherwise. If no ! arguments are provided, @code{is_leap_year} will use the current year. ! For example, @example @group ! is_leap_year (2000) ! @result{} 1 @end group @end example @end deftypefn ! now -*- texinfo -*- ! @deftypefn {Function File} {t =} now () ! Returns the current local time as the number of days since Jan 1, 0000. ! By this reckoning, Jan 1, 1970 is day number 719529. ! ! The integral part, @code{floor (now)} corresponds to 00:00:00 today. ! The fractional part, @code{rem (now, 1)} corresponds to the current ! time on Jan 1, 0000. ! The returned value is also called a "serial date number" ! (see @code{datenum}). ! @seealso{clock, date, datenum} @end deftypefn ! weekday -*- texinfo -*- ! @deftypefn {Function File} {[@var{n}, @var{s}] =} weekday (@var{d}, [@var{form}]) ! Return the day of week as a number in @var{n} and a string in @var{s}, ! for example @code{[1, "Sun"]}, @code{[2, "Mon"]}, @dots{}, or ! @code{[7, "Sat"]}. ! @var{d} is a serial date number or a date string. ! If the string @var{form} is given and is @code{"long"}, @var{s} will ! contain the full name of the weekday; otherwise (or if @var{form} is ! @code{"short"}), @var{s} will contain the abbreviated name of the weekday. ! @seealso{datenum, datevec, eomday} @end deftypefn --- 16126,18246 ---- probability @var{p} before the @var{n}-th success follows this distribution. @end deftypefn ! weibull_pdf -*- texinfo -*- ! @deftypefn {Function File} {} weibull_pdf (@var{x}, @var{shape}, @var{scale}) ! Compute the probability density function (PDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape} which is given by ! @example ! scale * shape^(-scale) * x^(scale-1) * exp(-(x/shape)^scale) ! @end example ! ! @noindent ! for @var{x} > 0. @end deftypefn ! gamma_pdf -*- texinfo -*- ! @deftypefn {Function File} {} gamma_pdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, return the probability density function ! (PDF) at @var{x} of the Gamma distribution with parameters @var{a} ! and @var{b}. ! @end deftypefn ! struct_elements ! -*- texinfo -*- ! @deftypefn {Function File} {} struct_elements (@var{struct}) ! This function has been deprecated. Use fieldnames instead. ! @end deftypefn ! gamma_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} gamma_rnd (@var{a}, @var{b}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} gamma_rnd (@var{a}, @var{b}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the Gamma distribution with parameters @var{a} ! and @var{b}. Both @var{a} and @var{b} must be scalar or of size ! @var{r} by @var{c}. If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{a} and @var{b}. @end deftypefn ! beta_inv -*- texinfo -*- ! @deftypefn {Function File} {} beta_inv (@var{x}, @var{a}, @var{b}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the Beta distribution with parameters @var{a} ! and @var{b}. ! @end deftypefn ! poisson_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} poisson_rnd (@var{lambda}, @var{r}, @var{c}) ! Return an @var{r} by @var{c} matrix of random samples from the ! Poisson distribution with parameter @var{lambda}, which must be a ! scalar or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{lambda}. @end deftypefn ! chisquare_rnd -*- texinfo -*- ! @deftypefn {Function File} {} chisquare_rnd (@var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} chisquare_rnd (@var{n}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the chisquare distribution with @var{n} degrees ! of freedom. @var{n} must be a scalar or of size @var{r} by @var{c}. ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{n}. @end deftypefn ! com2str -*- texinfo -*- ! @deftypefn {Function File} {} com2str (@var{zz}, @var{flg}) ! This function has been deprecated. Use num2str instead. ! Convert complex number to a string. ! @strong{Inputs} ! @table @var ! @item zz ! complex number ! @item flg ! format flag ! 0 (default): -1, 0, 1, 1i, 1 + 0.5i ! 1 (for use with zpout): -1, 0, + 1, + 1i, + 1 + 0.5i ! @end table @end deftypefn ! beta_pdf -*- texinfo -*- ! @deftypefn {Function File} {} beta_pdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, returns the PDF at @var{x} of the beta ! distribution with parameters @var{a} and @var{b}. ! @end deftypefn ! t_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} t_rnd (@var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} t_rnd (@var{n}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the t ! (Student) distribution with @var{n} degrees of freedom. @var{n} must ! be a scalar or of size @var{r} by @var{c}. Or if @var{sz} is a ! vector create a matrix of size @var{sz}. If @var{r} and @var{c} are omitted, the size of the result matrix is ! the size of @var{n}. @end deftypefn ! poisson_cdf -*- texinfo -*- ! @deftypefn {Function File} {} poisson_cdf (@var{x}, @var{lambda}) For each element of @var{x}, compute the cumulative distribution function (CDF) at @var{x} of the Poisson distribution with parameter lambda. @end deftypefn ! poisson_pdf -*- texinfo -*- ! @deftypefn {Function File} {} poisson_pdf (@var{x}, @var{lambda}) For each element of @var{x}, compute the probability density function (PDF) at @var{x} of the poisson distribution with parameter @var{lambda}. @end deftypefn ! meshdom -*- texinfo -*- ! @deftypefn {Function File} {} meshdom (@var{x}, @var{y}) ! This function has been deprecated. Use @code{meshgrid} instead. ! @end deftypefn ! hypergeometric_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} hypergeometric_rnd (@var{m}, @var{t}, @var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} hygernd (@var{m}, @var{t}, @var{n}, @var{sz}) Return an @var{r} by @var{c} matrix of random samples from the ! hypergeometric distribution with parameters @var{m}, @var{t}, ! and @var{n}. ! ! The parameters @var{m}, @var{t}, and @var{n} must positive integers ! with @var{m} and @var{n} not greater than @var{t}. ! @end deftypefn ! is_stream ! -*- texinfo -*- ! @deftypefn {Function File} {} is_stream (@var{a}) ! This function has been deprecated. Use isstream instead. ! @end deftypefn ! exponential_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} exponential_rnd (@var{lambda}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} exponential_rnd (@var{lambda}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the ! exponential distribution with parameter @var{lambda}, which must be a ! scalar or of size @var{r} by @var{c}. Or if @var{sz} is a vector, ! create a matrix of size @var{sz}. If @var{r} and @var{c} are omitted, the size of the result matrix is the size of @var{lambda}. @end deftypefn ! weibinv -*- texinfo -*- ! @deftypefn {Function File} {} weibinv (@var{x}, @var{scale}, @var{shape}) ! Compute the quantile (the inverse of the CDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape}. @end deftypefn ! t_inv -*- texinfo -*- ! @deftypefn {Function File} {} t_inv (@var{x}, @var{n}) ! For each component of @var{x}, compute the quantile (the inverse of ! the CDF) at @var{x} of the t (Student) distribution with parameter ! @var{n}. @end deftypefn ! f_cdf -*- texinfo -*- ! @deftypefn {Function File} {} f_cdf (@var{x}, @var{m}, @var{n}) ! For each element of @var{x}, compute the CDF at @var{x} of the F ! distribution with @var{m} and @var{n} degrees of freedom, i.e., ! PROB (F (@var{m}, @var{n}) <= @var{x}). @end deftypefn ! geometric_inv -*- texinfo -*- ! @deftypefn {Function File} {} geometric_inv (@var{x}, @var{p}) ! For each element of @var{x}, compute the quantile at @var{x} of the ! geometric distribution with parameter @var{p}. ! @end deftypefn ! intersection ! -*- texinfo -*- ! @deftypefn {Function File} {} intersection (@var{x}, @var{y}) ! This function has been deprecated. Use intersect instead. ! @end deftypefn ! f_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} f_rnd (@var{m}, @var{n}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} f_rnd (@var{m}, @var{n}, @var{sz}) ! Return an @var{r} by @var{c} matrix of random samples from the F ! distribution with @var{m} and @var{n} degrees of freedom. Both ! @var{m} and @var{n} must be scalar or of size @var{r} by @var{c}. ! If @var{sz} is a vector the random samples are in a matrix of ! size @var{sz}. ! ! If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{m} and @var{n}. ! @end deftypefn ! struct_contains ! -*- texinfo -*- ! @deftypefn {Function File} {} struct_contains (@var{expr}, @var{name}) ! This function has been deprecated. Use isfield instead. @end deftypefn ! chisquare_cdf -*- texinfo -*- ! @deftypefn {Function File} {} chisquare_cdf (@var{x}, @var{n}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the chisquare distribution with @var{n} ! degrees of freedom. @end deftypefn ! gamma_cdf -*- texinfo -*- ! @deftypefn {Function File} {} gamma_cdf (@var{x}, @var{a}, @var{b}) ! For each element of @var{x}, compute the cumulative distribution ! function (CDF) at @var{x} of the Gamma distribution with parameters ! @var{a} and @var{b}. @end deftypefn ! is_complex -*- texinfo -*- ! @deftypefn {Function File} {} is_complex (@var{a}) ! This function has been deprecated. Use iscomplex instead. @end deftypefn ! binomial_rnd -*- texinfo -*- ! @deftypefn {Function File} {} binomial_rnd (@var{n}, @var{p}, @var{r}, @var{c}) ! @deftypefnx {Function File} {} binomial_rnd (@var{n}, @var{p}, @var{sz}) ! Return an @var{r} by @var{c} or a @code{size (@var{sz})} matrix of ! random samples from the binomial distribution with parameters @var{n} ! and @var{p}. Both @var{n} and @var{p} must be scalar or of size ! @var{r} by @var{c}. If @var{r} and @var{c} are omitted, the size of the result matrix is ! the common size of @var{n} and @var{p}. @end deftypefn ! weibull_cdf -*- texinfo -*- ! @deftypefn {Function File} {} weibull_cdf (@var{x}, @var{shape}, @var{scale}) ! Compute the cumulative distribution function (CDF) at @var{x} of the ! Weibull distribution with shape parameter @var{scale} and scale ! parameter @var{shape}, which is ! ! @example ! 1 - exp(-(x/shape)^scale) ! @end example ! ! @noindent ! for @var{x} >= 0. @end deftypefn ! is_list -*- texinfo -*- ! @deftypefn {Function File} {} is_list (@var{a}) ! This function has been deprecated. Use islist instead. @end deftypefn ! is_bool -*- texinfo -*- ! @deftypefn {Function File} {} is_bool (@var{a}) ! This function has been deprecated. Use isbool instead. @end deftypefn ! is_square -*- texinfo -*- ! @deftypefn {Function File} {} is_square (@var{x}) ! This function has been deprecated. Use issquare instead. ! @end deftypefn ! demo ! -*- texinfo -*- ! @deftypefn {Function File} {} demo ('@var{name}',@var{n}) ! ! Runs any examples associated with the function '@var{name}'. ! Examples are stored in the script file, or in a file with the same ! name but no extension somewhere on your path. To keep them separate ! from the usual script code, all lines are prefixed by @code{%!}. Each ! example is introduced by the keyword 'demo' flush left to the prefix, ! with no intervening spaces. The remainder of the example can contain ! arbitrary octave code. For example: ! ! @example ! %!demo ! %! t=0:0.01:2*pi; x = sin(t); ! %! plot(t,x) ! %! %------------------------------------------------- ! %! % the figure window shows one cycle of a sine wave ! @end example ! ! Note that the code is displayed before it is executed, so a simple ! comment at the end suffices. It is generally not necessary to use ! disp or printf within the demo. ! ! Demos are run in a function environment with no access to external ! variables. This means that all demos in your function must use ! separate initialization code. Alternatively, you can combine your ! demos into one huge demo, with the code: ! ! @example ! %! input("Press to continue: ","s"); ! @end example ! ! between the sections, but this is discouraged. Other techniques ! include using multiple plots by saying figure between each, or ! using subplot to put multiple plots in the same window. ! ! Also, since demo evaluates inside a function context, you cannot ! define new functions inside a demo. Instead you will have to ! use @code{eval(example('function',n))} to see them. Because eval only ! evaluates one line, or one statement if the statement crosses ! multiple lines, you must wrap your demo in "if 1 endif" ! with the 'if' on the same line as 'demo'. For example, ! ! @example ! %!demo if 1 ! %! function y=f(x) ! %! y=x; ! %! endfunction ! %! f(3) ! %! endif ! @end example ! @seealso{test, example} ! @end deftypefn ! speed ! -*- texinfo -*- ! @deftypefn {Function File} {} speed (@var{f}, @var{init}, @var{max_n}, @var{f2}, @var{tol}) ! @deftypefnx {Function File} {[@var{order}, @var{n}, @var{T_f}, @var{T_f2}] =} speed (@dots{}) ! ! Determine the execution time of an expression for various @var{n}. ! The @var{n} are log-spaced from 1 to @var{max_n}. For each @var{n}, ! an initialization expression is computed to create whatever data ! are needed for the test. If a second expression is given, the ! execution times of the two expressions will be compared. Called ! without output arguments the results are presented graphically. ! ! @table @code ! @item @var{f} ! The expression to evaluate. ! ! @item @var{max_n} ! The maximum test length to run. Default value is 100. Alternatively, ! use @code{[min_n,max_n]} or for complete control, @code{[n1,n2,@dots{},nk]}. ! ! @item @var{init} ! Initialization expression for function argument values. Use @var{k} ! for the test number and @var{n} for the size of the test. This should ! compute values for all variables listed in args. Note that init will ! be evaluated first for k=0, so things which are constant throughout ! the test can be computed then. The default value is @code{@var{x} = ! randn (@var{n}, 1);}. ! ! @item @var{f2} ! An alternative expression to evaluate, so the speed of the two ! can be compared. Default is @code{[]}. ! ! @item @var{tol} ! If @var{tol} is @code{Inf}, then no comparison will be made between the ! results of expression @var{f} and expression @var{f2}. Otherwise, ! expression @var{f} should produce a value @var{v} and expression @var{f2} ! should produce a value @var{v2}, and these shall be compared using ! @code{assert(@var{v},@var{v2},@var{tol})}. If @var{tol} is positive, ! the tolerance is assumed to be absolute. If @var{tol} is negative, ! the tolerance is assumed to be relative. The default is @code{eps}. ! ! @item @var{order} ! The time complexity of the expression @code{O(a n^p)}. This ! is a structure with fields @code{a} and @code{p}. ! ! @item @var{n} ! The values @var{n} for which the expression was calculated and ! the execution time was greater than zero. ! ! @item @var{T_f} ! The nonzero execution times recorded for the expression @var{f} in seconds. ! ! @item @var{T_f2} ! The nonzero execution times recorded for the expression @var{f2} in seconds. ! If it is needed, the mean time ratio is just @code{mean(T_f./T_f2)}. ! ! @end table ! ! The slope of the execution time graph shows the approximate ! power of the asymptotic running time @code{O(n^p)}. This ! power is plotted for the region over which it is approximated ! (the latter half of the graph). The estimated power is not ! very accurate, but should be sufficient to determine the ! general order of your algorithm. It should indicate if for ! example your implementation is unexpectedly @code{O(n^2)} ! rather than @code{O(n)} because it extends a vector each ! time through the loop rather than preallocating one which is ! big enough. For example, in the current version of Octave, ! the following is not the expected @code{O(n)}: ! ! @example ! speed("for i=1:n,y@{i@}=x(i); end", "", [1000,10000]) ! @end example ! ! but it is if you preallocate the cell array @code{y}: ! ! @example ! speed("for i=1:n,y@{i@}=x(i);end", ... ! "x=rand(n,1);y=cell(size(x));", [1000,10000]) ! @end example ! ! An attempt is made to approximate the cost of the individual ! operations, but it is wildly inaccurate. You can improve the ! stability somewhat by doing more work for each @code{n}. For ! example: ! ! @example ! speed("airy(x)", "x=rand(n,10)", [10000,100000]) ! @end example ! ! When comparing a new and original expression, the line on the ! speedup ratio graph should be larger than 1 if the new expression ! is faster. Better algorithms have a shallow slope. Generally, ! vectorizing an algorithm will not change the slope of the execution ! time graph, but it will shift it relative to the original. For ! example: ! ! @example ! speed("v=sum(x)", "", [10000,100000], ... ! "v=0;for i=1:length(x),v+=x(i);end") ! @end example ! ! A more complex example, if you had an original version of @code{xcorr} ! using for loops and another version using an FFT, you could compare the ! run speed for various lags as follows, or for a fixed lag with varying ! vector lengths as follows: ! ! @example ! speed("v=xcorr(x,n)", "x=rand(128,1);", 100, ... ! "v2=xcorr_orig(x,n)", -100*eps) ! speed("v=xcorr(x,15)", "x=rand(20+n,1);", 100, ... ! "v2=xcorr_orig(x,n)", -100*eps) ! @end example ! Assuming one of the two versions is in @var{xcorr_orig}, this ! would compare their speed and their output values. Note that the ! FFT version is not exact, so we specify an acceptable tolerance on ! the comparison @code{100*eps}, and the errors should be computed ! relatively, as @code{abs((@var{x} - @var{y})./@var{y})} rather than ! absolutely as @code{abs(@var{x} - @var{y})}. ! Type @code{example('speed')} to see some real examples. Note for ! obscure reasons, you can't run examples 1 and 2 directly using ! @code{demo('speed')}. Instead use, @code{eval(example('speed',1))} ! and @code{eval(example('speed',2))}. @end deftypefn ! test -*- texinfo -*- ! @deftypefn {Function File} {} test @var{name} ! @deftypefnx {Function File} {} test @var{name} quiet|normal|verbose ! @deftypefnx {Function File} {} test ('@var{name}', 'quiet|normal|verbose', @var{fid}) ! @deftypefnx {Function File} {} test ([], 'explain', @var{fid}) ! @deftypefnx {Function File} {@var{success} =} test (@dots{}) ! @deftypefnx {Function File} {[@var{n}, @var{max}] =} test (@dots{}) ! @deftypefnx {Function File} {[@var{code}, @var{idx}] =} test ('@var{name}','grabdemo') ! Perform tests from the first file in the loadpath matching @var{name}. ! @code{test} can be called as a command or as a function. Called with ! a single argument @var{name}, the tests are run interactively and stop ! after the first error is encountered. ! With a second argument the tests which are performed and the amount of ! output is selected. ! @table @asis ! @item 'quiet' ! Don't report all the tests as they happen, just the errors. ! ! @item 'normal' ! Report all tests as they happen, but don't do tests which require ! user interaction. ! ! @item 'verbose' ! Do tests which require user interaction. ! @end table ! ! The argument @var{fid} can be used to allow batch processing. Errors ! can be written to the already open file defined by @var{fid}, and ! hopefully when octave crashes this file will tell you what was happening ! when it did. You can use @code{stdout} if you want to see the results as ! they happen. You can also give a file name rather than an @var{fid}, in ! which case the contents of the file will be replaced with the log from ! the current test. ! ! Called with a single output argument @var{success}, @code{test} returns ! true if all of the tests were successful. Called with two output arguments ! @var{n} and @var{max}, the number of successful tests and the total number ! of tests in the file @var{name} are returned. ! ! If the second argument is the string 'grabdemo', the contents of the demo ! blocks are extracted but not executed. Code for all code blocks is ! concatenated and returned as @var{code} with @var{idx} being a vector of ! positions of the ends of the demo blocks. ! ! If the second argument is 'explain', then @var{name} is ignored and an ! explanation of the line markers used is written to the file @var{fid}. ! @seealso{error, assert, fail, demo, example} @end deftypefn ! fail -*- texinfo -*- ! @deftypefn {Function File} {} fail (@var{code},@var{pattern}) ! @deftypefnx {Function File} {} fail (@var{code},'warning',@var{pattern}) ! ! Return true if @var{code} fails with an error message matching ! @var{pattern}, otherwise produce an error. Note that @var{code} ! is a string and if @var{code} runs successfully, the error produced is: @example ! expected error but got none @end example ! ! If the code fails with a different error, the message produced is: ! ! @example ! expected ! but got ! @end example ! ! The angle brackets are not part of the output. ! ! Called with three arguments, the behavior is similar to ! @code{fail(@var{code}, @var{pattern})}, but produces an error if no ! warning is given during code execution or if the code fails. ! @end deftypefn ! assert -*- texinfo -*- ! @deftypefn {Function File} {} assert (@var{cond}) ! @deftypefnx {Function File} {} assert (@var{observed},@var{expected}) ! @deftypefnx {Function File} {} assert (@var{observed},@var{expected},@var{tol}) ! ! Produces an error if the condition is not met. @code{assert} can be ! called in three different ways. ! ! @table @code ! @item assert (@var{cond}) ! Called with a single argument @var{cond}, @code{assert} produces an ! error if @var{cond} is zero. ! ! @item assert (@var{observed}, @var{expected}) ! Produce an error if observed is not the same as expected. Note that ! observed and expected can be strings, scalars, vectors, matrices, ! lists or structures. ! ! @item assert(@var{observed}, @var{expected}, @var{tol}) ! Accept a tolerance when comparing numbers. ! If @var{tol} is possitive use it as an absolute tolerance, will produce an error if ! @code{abs(@var{observed} - @var{expected}) > abs(@var{tol})}. ! If @var{tol} is negative use it as a relative tolerance, will produce an error if ! @code{abs(@var{observed} - @var{expected}) > abs(@var{tol} * @var{expected})}. ! If @var{expected} is zero @var{tol} will always be used as an absolute tolerance. ! @end table ! @seealso{test} @end deftypefn ! example -*- texinfo -*- ! @deftypefn {Function File} {} example ('@var{name}',@var{n}) ! @deftypefnx {Function File} {[@var{x}, @var{idx}] =} example ('@var{name}',@var{n}) ! ! Display the code for example @var{n} associated with the function ! '@var{name}', but do not run it. If @var{n} is not given, all examples ! are displayed. ! ! Called with output arguments, the examples are returned in the form of ! a string @var{x}, with @var{idx} indicating the ending position of the ! various examples. ! ! See @code{demo} for a complete explanation. ! @seealso{demo, test} ! @end deftypefn ! qtransv ! -*- texinfo -*- ! @deftypefn {Function File} {} qtransv (@var{v}, @var{q}) ! Transform the 3-D vector @var{v} by the unit quaternion @var{q}. ! Return a column vector. @example ! vi = (2*real(q)^2 - 1)*vb + 2*imag(q)*(imag(q)'*vb) ! + 2*real(q)*cross(imag(q),vb) @end example @noindent ! Where imag(q) is a column vector of length 3. @end deftypefn ! demoquat -*- texinfo -*- ! @deftypefn {Function File} {} demoquat () ! Demonstrate the functions available for manipulating quaternions. ! Thanks to Mr. Charles Hall, Dr. Don Krupp and Dr. Larry Mullins at ! NASA's Marshall Space Flight Center for notes and instruction in ! use and conventions with quaternions. - A. S. Hodel @end deftypefn ! qcoordinate_plot -*- texinfo -*- ! @deftypefn {Function File} {} qcoordinate_plot (@var{qf}, @var{qb}, @var{qv}) ! Plot in the current figure a set of coordinate axes as viewed from ! the orientation specified by quaternion @var{qv}. Inertial axes are ! also plotted: ! @table @var ! @item qf ! Quaternion from reference (x,y,z) to inertial. ! @item qb ! Quaternion from reference to body. ! @item qv ! Quaternion from reference to view angle. ! @end table @end deftypefn ! qinv -*- texinfo -*- ! @deftypefn {Function File} {} qinv (@var{q}) ! Return the inverse of a quaternion. ! @example ! q = [w, x, y, z] = w*i + x*j + y*k + z ! qmult (q, qinv (q)) = 1 = [0 0 0 1] ! @end example ! @end deftypefn ! qderiv ! -*- texinfo -*- ! @deftypefn {Function File} {} qderiv (omega) ! Derivative of a quaternion. ! ! Let Q be a quaternion to transform a vector from a fixed frame to ! a rotating frame. If the rotating frame is rotating about the ! [x, y, z] axes at angular rates [wx, wy, wz], then the derivative ! of Q is given by @example ! Q' = qderivmat (omega) * Q @end example ! If the passive convention is used (rotate the frame, not the vector), ! then @example ! Q' = -qderivmat (omega) * Q @end example ! @end deftypefn ! qtrans ! -*- texinfo -*- ! @deftypefn {Function File} {} qtrans (@var{v}, @var{q}) ! Transform the unit quaternion @var{v} by the unit quaternion @var{q}. ! Returns @code{@var{v} = @var{q}*@var{v}/@var{q}}. ! @end deftypefn ! quaternion ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{a}, @var{b}, @var{c}, @var{d}] =} quaternion (w) ! @deftypefnx {Function File} {[@var{vv}, @var{theta}] =} quaternion (w) ! @deftypefnx {Function File} {@var{w} =} quaternion (@var{a}, @var{b}, @var{c}, @var{d}) ! @deftypefnx {Function File} {@var{w} =} quaternion (@var{vv}, @var{theta}) ! Construct or extract a quaternion @example ! w = a*i + b*j + c*k + d @end example @noindent ! from given data. ! @end deftypefn ! qmult ! -*- texinfo -*- ! @deftypefn {Function File} {} qmult (@var{a}, @var{b}) ! Multiply two quaternions. ! @example ! [w, x, y, z] = w*i + x*j + y*k + z ! @end example ! @noindent ! identities: ! @example ! i^2 = j^2 = k^2 = -1 ! ij = k jk = i ! ki = j kj = -i ! ji = -k ik = -j ! @end example @end deftypefn ! qtransvmat -*- texinfo -*- ! @deftypefn {Function File} {} qtransvmat (@var{qib}) ! Construct a 3x3 transformation matrix from quaternion @var{qib} that ! is equivalent to rotation of th radians about axis @var{vv}, where ! @code{[@var{vv}, @var{th}] = quaternion (@var{qib})}. @end deftypefn ! qderivmat -*- texinfo -*- ! @deftypefn {Function File} {} qderivmat (@var{omega}) ! Derivative of a quaternion. ! Let Q be a quaternion to transform a vector from a fixed frame to ! a rotating frame. If the rotating frame is rotating about the ! [x, y, z] axes at angular rates [wx, wy, wz], then the derivative ! of Q is given by ! @example ! Q' = qderivmat (omega) * Q ! @end example ! If the passive convention is used (rotate the frame, not the vector), ! then ! @example ! Q' = -qderivmat (omega) * Q. ! @end example @end deftypefn ! qconj -*- texinfo -*- ! @deftypefn {Function File} {} qconj (@var{q}) ! Conjugate of a quaternion. ! @example ! q = [w, x, y, z] = w*i + x*j + y*k + z ! qconj (q) = -w*i -x*j -y*k + z ! @end example @end deftypefn ! arma_rnd -*- texinfo -*- ! @deftypefn {Function File} {} arma_rnd (@var{a}, @var{b}, @var{v}, @var{t}, @var{n}) ! Return a simulation of the ARMA model ! @example ! x(n) = a(1) * x(n-1) + ... + a(k) * x(n-k) ! + e(n) + b(1) * e(n-1) + ... + b(l) * e(n-l) ! @end example ! @noindent ! in which @var{k} is the length of vector @var{a}, @var{l} is the ! length of vector @var{b} and @var{e} is gaussian white noise with ! variance @var{v}. The function returns a vector of length @var{t}. ! The optional parameter @var{n} gives the number of dummy ! @var{x}(@var{i}) used for initialization, i.e., a sequence of length ! @var{t}+@var{n} is generated and @var{x}(@var{n}+1:@var{t}+@var{n}) ! is returned. If @var{n} is omitted, @var{n} = 100 is used. @end deftypefn ! spectral_adf -*- texinfo -*- ! @deftypefn {Function File} {} spectral_adf (@var{c}, @var{win}, @var{b}) ! Return the spectral density estimator given a vector of ! autocovariances @var{c}, window name @var{win}, and bandwidth, ! @var{b}. ! The window name, e.g., @code{"triangle"} or @code{"rectangle"} is ! used to search for a function called @code{@var{win}_sw}. ! If @var{win} is omitted, the triangle window is used. If @var{b} is ! omitted, @code{1 / sqrt (length (@var{x}))} is used. @end deftypefn ! freqz_plot -*- texinfo -*- ! @deftypefn {Function File} {} freqz_plot (@var{w}, @var{h}) ! Plot the pass band, stop band and phase response of @var{h}. ! @end deftypefn ! arch_rnd ! -*- texinfo -*- ! @deftypefn {Function File} {} arch_rnd (@var{a}, @var{b}, @var{t}) ! Simulate an ARCH sequence of length @var{t} with AR ! coefficients @var{b} and CH coefficients @var{a}. I.e., the result ! @math{y(t)} follows the model ! @smallexample ! y(t) = b(1) + b(2) * y(t-1) + @dots{} + b(lb) * y(t-lb+1) + e(t), ! @end smallexample ! @noindent ! where @math{e(t)}, given @var{y} up to time @math{t-1}, is ! @math{N(0, h(t))}, with ! @smallexample ! h(t) = a(1) + a(2) * e(t-1)^2 + @dots{} + a(la) * e(t-la+1)^2 ! @end smallexample @end deftypefn ! triangle_lw -*- texinfo -*- ! @deftypefn {Function File} {} triangle_lw (@var{n}, @var{b}) ! Triangular lag window. Subfunction used for spectral density ! estimation. ! @end deftypefn ! fftconv ! -*- texinfo -*- ! @deftypefn {Function File} {} fftconv (@var{a}, @var{b}, @var{n}) ! Return the convolution of the vectors @var{a} and @var{b}, as a vector ! with length equal to the @code{length (a) + length (b) - 1}. If @var{a} ! and @var{b} are the coefficient vectors of two polynomials, the returned ! value is the coefficient vector of the product polynomial. ! The computation uses the FFT by calling the function @code{fftfilt}. If ! the optional argument @var{n} is specified, an N-point FFT is used. ! @end deftypefn ! spectral_xdf ! -*- texinfo -*- ! @deftypefn {Function File} {} spectral_xdf (@var{x}, @var{win}, @var{b}) ! Return the spectral density estimator given a data vector @var{x}, ! window name @var{win}, and bandwidth, @var{b}. ! The window name, e.g., @code{"triangle"} or @code{"rectangle"} is ! used to search for a function called @code{@var{win}_sw}. ! If @var{win} is omitted, the triangle window is used. If @var{b} is ! omitted, @code{1 / sqrt (length (@var{x}))} is used. @end deftypefn ! bartlett -*- texinfo -*- ! @deftypefn {Function File} {} bartlett (@var{m}) ! Return the filter coefficients of a Bartlett (triangular) window of ! length @var{m}. ! For a definition of the Bartlett window, see e.g. A. V. Oppenheim & ! R. W. Schafer, "Discrete-Time Signal Processing". ! @end deftypefn ! spencer ! -*- texinfo -*- ! @deftypefn {Function File} {} spencer (@var{x}) ! Return Spencer's 15 point moving average of every single column of ! @var{x}. ! @end deftypefn ! unwrap ! -*- texinfo -*- ! @deftypefn {Function File} {@var{b} =} unwrap (@var{a}, @var{tol}, @var{dim}) ! Unwrap radian phases by adding multiples of 2*pi as appropriate to ! remove jumps greater than @var{tol}. @var{tol} defaults to pi. ! Unwrap will unwrap along the first non-singleton dimension of ! @var{a}, unless the optional argument @var{dim} is given, in ! which case the data will be unwrapped along this dimension @end deftypefn ! rectangle_lw -*- texinfo -*- ! @deftypefn {Function File} {} rectangle_lw (@var{n}, @var{b}) ! Rectangular lag window. Subfunction used for spectral density ! estimation. ! @end deftypefn ! synthesis ! -*- texinfo -*- ! @deftypefn {Function File} {} synthesis (@var{y}, @var{c}) ! Compute a signal from its short-time Fourier transform @var{y} and a ! 3-element vector @var{c} specifying window size, increment, and ! window type. ! The values @var{y} and @var{c} can be derived by @example ! [@var{y}, @var{c}] = stft (@var{x} , @dots{}) @end example ! @end deftypefn ! autocov ! -*- texinfo -*- ! @deftypefn {Function File} {} autocov (@var{x}, @var{h}) ! Return the autocovariances from lag 0 to @var{h} of vector @var{x}. ! If @var{h} is omitted, all autocovariances are computed. ! If @var{x} is a matrix, the autocovariances of each column are ! computed. ! @end deftypefn ! hanning ! -*- texinfo -*- ! @deftypefn {Function File} {} hanning (@var{m}) ! Return the filter coefficients of a Hanning window of length @var{m}. ! For a definition of this window type, see e.g. A. V. Oppenheim & ! R. W. Schafer, "Discrete-Time Signal Processing". ! @end deftypefn ! yulewalker ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{a}, @var{v}] =} yulewalker (@var{c}) ! Fit an AR (p)-model with Yule-Walker estimates given a vector @var{c} ! of autocovariances @code{[gamma_0, ..., gamma_p]}. ! Returns the AR coefficients, @var{a}, and the variance of white ! noise, @var{v}. @end deftypefn ! ifftshift -*- texinfo -*- ! @deftypefn {Function File} {} ifftshift (@var{v}) ! @deftypefnx {Function File} {} ifftshift (@var{v}, @var{dim}) ! Undo the action of the @code{fftshift} function. For even length ! @var{v}, @code{fftshift} is its own inverse, but odd lengths differ ! slightly. ! @end deftypefn ! fftshift ! -*- texinfo -*- ! @deftypefn {Function File} {} fftshift (@var{v}) ! @deftypefnx {Function File} {} fftshift (@var{v}, @var{dim}) ! Perform a shift of the vector @var{v}, for use with the @code{fft} ! and @code{ifft} functions, in order the move the frequency 0 to the ! center of the vector or matrix. ! If @var{v} is a vector of @math{N} elements corresponding to @math{N} ! time samples spaced of @math{Dt} each, then @code{fftshift (fft ! (@var{v}))} corresponds to frequencies @example ! f = ((1:N) - ceil(N/2)) / N / Dt @end example ! If @var{v} is a matrix, the same holds for rows and columns. If ! @var{v} is an array, then the same holds along each dimension. ! The optional @var{dim} argument can be used to limit the dimension ! along which the permutation occurs. @end deftypefn ! autoreg_matrix -*- texinfo -*- ! @deftypefn {Function File} {} autoreg_matrix (@var{y}, @var{k}) ! Given a time series (vector) @var{y}, return a matrix with ones in the ! first column and the first @var{k} lagged values of @var{y} in the ! other columns. I.e., for @var{t} > @var{k}, @code{[1, ! @var{y}(@var{t}-1), @dots{}, @var{y}(@var{t}-@var{k})]} is the t-th row ! of the result. The resulting matrix may be used as a regressor matrix ! in autoregressions. @end deftypefn ! sinc -*- texinfo -*- ! @deftypefn {Function File} {} sinc (@var{x}) ! Return ! @iftex ! @tex ! $ \sin (\pi x)/(\pi x)$. ! @end tex ! @end iftex ! @ifinfo ! sin(pi*x)/(pi*x). ! @end ifinfo ! @end deftypefn ! blackman ! -*- texinfo -*- ! @deftypefn {Function File} {} blackman (@var{m}) ! Return the filter coefficients of a Blackman window of length @var{m}. ! For a definition of the Blackman window, see e.g. A. V. Oppenheim & ! R. W. Schafer, "Discrete-Time Signal Processing". ! @end deftypefn ! arch_fit ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{a}, @var{b}] =} arch_fit (@var{y}, @var{x}, @var{p}, @var{iter}, @var{gamma}, @var{a0}, @var{b0}) ! Fit an ARCH regression model to the time series @var{y} using the ! scoring algorithm in Engle's original ARCH paper. The model is ! @example ! y(t) = b(1) * x(t,1) + ... + b(k) * x(t,k) + e(t), ! h(t) = a(1) + a(2) * e(t-1)^2 + ... + a(p+1) * e(t-p)^2 ! @end example ! @noindent ! in which @math{e(t)} is @math{N(0, h(t))}, given a time-series vector ! @var{y} up to time @math{t-1} and a matrix of (ordinary) regressors ! @var{x} up to @math{t}. The order of the regression of the residual ! variance is specified by @var{p}. ! If invoked as @code{arch_fit (@var{y}, @var{k}, @var{p})} with a ! positive integer @var{k}, fit an ARCH(@var{k}, @var{p}) process, ! i.e., do the above with the @math{t}-th row of @var{x} given by ! @example ! [1, y(t-1), ..., y(t-k)] ! @end example ! Optionally, one can specify the number of iterations @var{iter}, the ! updating factor @var{gamma}, and initial values @math{a0} and ! @math{b0} for the scoring algorithm. @end deftypefn ! freqz -*- texinfo -*- ! @deftypefn {Function File} {[@var{h}, @var{w}] =} freqz (@var{b}, @var{a}, @var{n}, "whole") ! Return the complex frequency response @var{h} of the rational IIR filter ! whose numerator and denominator coefficients are @var{b} and @var{a}, ! respectively. The response is evaluated at @var{n} angular frequencies ! between 0 and ! @ifinfo ! 2*pi. ! @end ifinfo ! @iftex ! @tex ! $2\pi$. ! @end tex ! @end iftex ! @noindent ! The output value @var{w} is a vector of the frequencies. ! If the fourth argument is omitted, the response is evaluated at ! frequencies between 0 and ! @ifinfo ! pi. ! @end ifinfo ! @iftex ! @tex ! $\pi$. ! @end tex ! @end iftex ! If @var{n} is omitted, a value of 512 is assumed. ! If @var{a} is omitted, the denominator is assumed to be 1 (this ! corresponds to a simple FIR filter). ! For fastest computation, @var{n} should factor into a small number of ! small primes. ! @deftypefnx {Function File} {@var{h} =} freqz (@var{b}, @var{a}, @var{w}) ! Evaluate the response at the specific frequencies in the vector @var{w}. ! The values for @var{w} are measured in radians. ! @deftypefnx {Function File} {[@dots{}] =} freqz (@dots{}, @var{Fs}) ! Return frequencies in Hz instead of radians assuming a sampling rate ! @var{Fs}. If you are evaluating the response at specific frequencies ! @var{w}, those frequencies should be requested in Hz rather than radians. ! @deftypefnx {Function File} {} freqz (@dots{}) ! Plot the pass band, stop band and phase response of @var{h} rather ! than returning them. @end deftypefn ! arch_test -*- texinfo -*- ! @deftypefn {Function File} {[@var{pval}, @var{lm}] =} arch_test (@var{y}, @var{x}, @var{p}) ! For a linear regression model ! @example ! y = x * b + e ! @end example ! @noindent ! perform a Lagrange Multiplier (LM) test of the null hypothesis of no ! conditional heteroscedascity against the alternative of CH(@var{p}). ! I.e., the model is ! @example ! y(t) = b(1) * x(t,1) + @dots{} + b(k) * x(t,k) + e(t), ! @end example ! @noindent ! given @var{y} up to @math{t-1} and @var{x} up to @math{t}, ! @math{e}(t) is @math{N(0, h(t))} with ! @example ! h(t) = v + a(1) * e(t-1)^2 + @dots{} + a(p) * e(t-p)^2, ! @end example ! @noindent ! and the null is @math{a(1)} == @dots{} == @math{a(p)} == 0. ! If the second argument is a scalar integer, @math{k}, perform the same ! test in a linear autoregression model of order @math{k}, i.e., with ! @example ! [1, y(t-1), @dots{}, y(t-@var{k})] ! @end example ! @noindent ! as the @math{t}-th row of @var{x}. ! Under the null, LM approximately has a chisquare distribution with ! @var{p} degrees of freedom and @var{pval} is the @math{p}-value (1 ! minus the CDF of this distribution at LM) of the test. ! If no output argument is given, the @math{p}-value is displayed. @end deftypefn ! sinewave -*- texinfo -*- ! @deftypefn {Function File} {} sinewave (@var{m}, @var{n}, @var{d}) ! Return an @var{m}-element vector with @var{i}-th element given by ! @code{sin (2 * pi * (@var{i}+@var{d}-1) / @var{n})}. ! The default value for @var{d} is 0 and the default value for @var{n} ! is @var{m}. @end deftypefn ! fractdiff -*- texinfo -*- ! @deftypefn {Function File} {} fractdiff (@var{x}, @var{d}) ! Compute the fractional differences @math{(1-L)^d x} where @math{L} ! denotes the lag-operator and @math{d} is greater than -1. ! @end deftypefn ! hurst ! -*- texinfo -*- ! @deftypefn {Function File} {} hurst (@var{x}) ! Estimate the Hurst parameter of sample @var{x} via the rescaled range ! statistic. If @var{x} is a matrix, the parameter is estimated for ! every single column. ! @end deftypefn ! hamming ! -*- texinfo -*- ! @deftypefn {Function File} {} hamming (@var{m}) ! Return the filter coefficients of a Hamming window of length @var{m}. ! For a definition of the Hamming window, see e.g. A. V. Oppenheim & ! R. W. Schafer, "Discrete-Time Signal Processing". ! @end deftypefn ! durbinlevinson ! -*- texinfo -*- ! @deftypefn {Function File} {} durbinlevinson (@var{c}, @var{oldphi}, @var{oldv}) ! Perform one step of the Durbin-Levinson algorithm. ! The vector @var{c} specifies the autocovariances @code{[gamma_0, @dots{}, ! gamma_t]} from lag 0 to @var{t}, @var{oldphi} specifies the ! coefficients based on @var{c}(@var{t}-1) and @var{oldv} specifies the ! corresponding error. ! If @var{oldphi} and @var{oldv} are omitted, all steps from 1 to ! @var{t} of the algorithm are performed. @end deftypefn ! fftfilt -*- texinfo -*- ! @deftypefn {Function File} {} fftfilt (@var{b}, @var{x}, @var{n}) ! With two arguments, @code{fftfilt} filters @var{x} with the FIR filter ! @var{b} using the FFT. ! Given the optional third argument, @var{n}, @code{fftfilt} uses the ! overlap-add method to filter @var{x} with @var{b} using an N-point FFT. ! If @var{x} is a matrix, filter each column of the matrix. @end deftypefn ! stft -*- texinfo -*- ! @deftypefn {Function File} {[@var{y}, @var{c}] =} stft (@var{x}, @var{win_size}, @var{inc}, @var{num_coef}, @var{w_type}) ! Compute the short-term Fourier transform of the vector @var{x} with ! @var{num_coef} coefficients by applying a window of @var{win_size} data ! points and an increment of @var{inc} points. ! Before computing the Fourier transform, one of the following windows ! is applied: ! @table @asis ! @item hanning ! w_type = 1 ! @item hamming ! w_type = 2 ! @item rectangle ! w_type = 3 ! @end table ! The window names can be passed as strings or by the @var{w_type} number. ! If not all arguments are specified, the following defaults are used: ! @var{win_size} = 80, @var{inc} = 24, @var{num_coef} = 64, and ! @var{w_type} = 1. ! ! @code{@var{y} = stft (@var{x}, @dots{})} returns the absolute values ! of the Fourier coefficients according to the @var{num_coef} positive ! frequencies. ! ! @code{[@var{y}, @var{c}] = stft (@code{x}, @dots{})} returns the ! entire STFT-matrix @var{y} and a 3-element vector @var{c} containing ! the window size, increment, and window type, which is needed by the ! synthesis function. @end deftypefn ! triangle_sw -*- texinfo -*- ! @deftypefn {Function File} {} triangle_sw (@var{n}, @var{b}) ! Triangular spectral window. Subfunction used for spectral density ! estimation. ! @end deftypefn ! detrend ! -*- texinfo -*- ! @deftypefn {Function File} {} detrend (@var{x}, @var{p}) ! If @var{x} is a vector, @code{detrend (@var{x}, @var{p})} removes the ! best fit of a polynomial of order @var{p} from the data @var{x}. ! If @var{x} is a matrix, @code{detrend (@var{x}, @var{p})} does the same ! for each column in @var{x}. ! The second argument is optional. If it is not specified, a value of 1 ! is assumed. This corresponds to removing a linear trend. ! @end deftypefn ! filter2 ! -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} filter2 (@var{b}, @var{x}) ! @deftypefnx {Function File} {@var{y} =} filter2 (@var{b}, @var{x}, @var{shape}) ! Apply the 2-D FIR filter @var{b} to @var{x}. If the argument ! @var{shape} is specified, return an array of the desired shape. ! Possible values are: ! @table @asis ! @item 'full' ! pad @var{x} with zeros on all sides before filtering. ! @item 'same' ! unpadded @var{x} (default) ! @item 'valid' ! trim @var{x} after filtering so edge effects are no included. ! @end table ! ! Note this is just a variation on convolution, with the parameters ! reversed and @var{b} rotated 180 degrees. ! @seealso{conv2} @end deftypefn ! diffpara -*- texinfo -*- ! @deftypefn {Function File} {[@var{d}, @var{dd}] =} diffpara (@var{x}, @var{a}, @var{b}) ! Return the estimator @var{d} for the differencing parameter of an ! integrated time series. ! The frequencies from @math{[2*pi*a/t, 2*pi*b/T]} are used for the ! estimation. If @var{b} is omitted, the interval ! @math{[2*pi/T, 2*pi*a/T]} is used. If both @var{b} and @var{a} are ! omitted then @math{a = 0.5 * sqrt (T)} and @math{b = 1.5 * sqrt (T)} ! is used, where @math{T} is the sample size. If @var{x} is a matrix, ! the differencing parameter of each column is estimated. ! The estimators for all frequencies in the intervals ! described above is returned in @var{dd}. The value of @var{d} is ! simply the mean of @var{dd}. ! Reference: Brockwell, Peter J. & Davis, Richard A. Time Series: ! Theory and Methods Springer 1987. @end deftypefn ! autocor -*- texinfo -*- ! @deftypefn {Function File} {} autocor (@var{x}, @var{h}) ! Return the autocorrelations from lag 0 to @var{h} of vector @var{x}. ! If @var{h} is omitted, all autocorrelations are computed. ! If @var{x} is a matrix, the autocorrelations of each column are ! computed. ! @end deftypefn ! sinetone ! -*- texinfo -*- ! @deftypefn {Function File} {} sinetone (@var{freq}, @var{rate}, @var{sec}, @var{ampl}) ! Return a sinetone of frequency @var{freq} with length of @var{sec} ! seconds at sampling rate @var{rate} and with amplitude @var{ampl}. ! The arguments @var{freq} and @var{ampl} may be vectors of common size. ! Defaults are @var{rate} = 8000, @var{sec} = 1 and @var{ampl} = 64. ! @end deftypefn ! rectangle_sw ! -*- texinfo -*- ! @deftypefn {Function File} {} rectangle_sw (@var{n}, @var{b}) ! Rectangular spectral window. Subfunction used for spectral density ! estimation. ! @end deftypefn ! periodogram ! -*- texinfo -*- ! @deftypefn {Function File} {} periodogram (@var{x}) ! For a data matrix @var{x} from a sample of size @var{n}, return the ! periodogram. ! @end deftypefn ! fv ! -*- texinfo -*- ! @deftypefn {Function File} {} fv (@var{r}, @var{n}, @var{p}, @var{l}, @var{method}) ! Return the future value at the end of period @var{n} of an investment ! which consists of @var{n} payments of @var{p} in each period, ! assuming an interest rate @var{r}. ! The optional argument @var{l} may be used to specify an ! additional lump-sum payment. ! The optional argument @var{method} may be used to specify whether the ! payments are made at the end (@code{"e"}, default) or at the ! beginning (@code{"b"}) of each period. ! Note that the rate @var{r} is specified as a fraction (i.e., 0.05, ! not 5 percent). @end deftypefn ! npv -*- texinfo -*- ! @deftypefn {Function File} {} npv (@var{r}, @var{p}, @var{i}) ! Returns the net present value of a series of irregular (i.e., not ! necessarily identical) payments @var{p} which occur at the ends of @var{n} ! consecutive periods. @var{r} specifies the one-period interest rates and ! can either be a scalar (constant rates) or a vector of the same ! length as @var{p}. ! The optional argument @var{i} may be used to specify an initial ! investment. ! Note that the rate @var{r} is specified as a fraction (i.e., 0.05, ! not 5 percent). ! @seealso{irr, pv} ! @end deftypefn ! pmt ! -*- texinfo -*- ! @deftypefn {Function File} {} pmt (@var{r}, @var{n}, @var{a}, @var{l}, @var{method}) ! Return the amount of periodic payment necessary to amortize a loan ! of amount a with interest rate @var{r} in @var{n} periods. ! ! The optional argument @var{l} may be used to specify a terminal ! lump-sum payment. ! ! The optional argument @var{method} may be used to specify whether ! payments are made at the end (@var{"e"}, default) or at the beginning ! (@var{"b"}) of each period. ! @seealso{pv, nper, rate} @end deftypefn ! pvl -*- texinfo -*- ! @deftypefn {Function File} {} pvl (@var{r}, @var{n}, @var{p}) ! Return the present value of an investment that will pay off @var{p} ! in one lump sum at the end of @var{n} periods, given the interest ! rate @var{r}. ! ! Note that the rate @var{r} is specified as a fraction (i.e., 0.05, ! not 5 percent). @end deftypefn ! fvl -*- texinfo -*- ! @deftypefn {Function File} {} fvl (@var{r}, @var{n}, @var{l}) ! Return the future value at the end of @var{n} periods of an initial ! lump sum investment @var{l}, given a per-period interest rate ! @var{r}. ! ! Note that the rate @var{r} is specified as a fraction (i.e., 0.05, ! not 5 percent). @end deftypefn ! pv -*- texinfo -*- ! @deftypefn {Function File} {} pv (@var{r}, @var{n}, @var{p}, @var{l}, @var{method}) ! Returns the present value of an investment that will pay off @var{p} for @var{n} ! consecutive periods, assuming an interest @var{r}. ! The optional argument @var{l} may be used to specify an additional ! lump-sum payment made at the end of @var{n} periods. ! The optional argument @var{method} may be used to specify whether ! payments are made at the end (@code{"e"}, default) or at the ! beginning (@code{"b"}) of each period. ! Note that the rate @var{r} is specified as a fraction (i.e., 0.05, ! not 5 percent). ! @seealso{pmt, nper, rate, npv} @end deftypefn ! nper -*- texinfo -*- ! @deftypefn {Function File} {} nper (@var{r}, @var{p}, @var{a}, @var{l}, @var{method}) ! Return the number of regular payments of @var{p} necessary to ! amortize @var{a} loan of amount @var{a} and interest @var{r}. ! The optional argument @var{l} may be used to specify an additional ! lump-sum payment of @var{l} made at the end of the amortization time. ! The optional argument @var{method} may be used to specify whether ! payments are made at the end (@var{"e"}, default) or at the beginning ! (@var{"b"}) of each period. ! Note that the rate @var{r} is specified as a fraction (i.e., 0.05, ! not 5 percent). ! @seealso{pv, pmt, rate, npv} @end deftypefn ! rate -*- texinfo -*- ! @deftypefn {Function File} {} rate (@var{n}, @var{p}, @var{v}, @var{l}, @var{method}) ! Return the rate of return on an investment of present value @var{v} which ! pays @var{p} in @var{n} consecutive periods. ! The optional argument @var{l} may be used to specify an additional ! lump-sum payment made at the end of @var{n} periods. ! The optional string argument @var{method} may be used to specify ! whether payments are made at the end (@code{"e"}, default) or at the ! beginning (@code{"b"}) of each period. ! @seealso{pv, pmt, nper, npv} @end deftypefn ! irr -*- texinfo -*- ! @deftypefn {Function File} {} irr (@var{p}, @var{i}) ! Return the internal rate of return of a series of payments @var{p} ! from an initial investment @var{i} (i.e., the solution of ! @code{npv (r, p) = i}. If the second argument is omitted, a value of ! 0 is used. ! @seealso{npv, pv, rate} @end deftypefn ! vol -*- texinfo -*- ! @deftypefn {Function File} {} vol (@var{x}, @var{m}, @var{n}) ! Return the volatility of each column of the input matrix @var{x}. ! The number of data sets per period is given by @var{m} (e.g. the ! number of data per year if you want to compute the volatility per ! year). The optional parameter @var{n} gives the number of past ! periods used for computation, if it is omitted, a value of 1 is used. ! If @var{t} is the number of rows of @var{x}, @code{vol} returns the ! volatility from @code{n*m} to @var{t}. @end deftypefn ! acosd -*- texinfo -*- ! @deftypefn {Function File} {} acosd (@var{x}) ! Compute the inverse cosine of an angle in degrees. ! @seealso{acos, cosd, asecd} @end deftypefn ! sind -*- texinfo -*- ! @deftypefn {Function File} {} sind (@var{x}) ! Compute the sine of each element of @var{x}. Returns zero in elements ! for which @code{@var{x}/180} is an integer. ! @seealso{sin, cosd, tand, acosd, asind, atand} @end deftypefn ! asech -*- texinfo -*- ! @deftypefn {Mapping Function} {} asech (@var{x}) ! Compute the inverse hyperbolic secant of each element of @var{x}. @end deftypefn ! acsch -*- texinfo -*- ! @deftypefn {Mapping Function} {} acsch (@var{x}) ! Compute the inverse hyperbolic cosecant of each element of @var{x}. @end deftypefn ! sech -*- texinfo -*- ! @deftypefn {Mapping Function} {} sech (@var{x}) ! Compute the hyperbolic secant of each element of @var{x}. ! @end deftypefn ! cotd ! -*- texinfo -*- ! @deftypefn {Function File} {} cotd (@var{x}) ! Compute the cotangent of an angle in degrees. ! @seealso{cot, tand} ! @end deftypefn ! acoth ! -*- texinfo -*- ! @deftypefn {Mapping Function} {} acoth (@var{x}) ! Compute the inverse hyperbolic cotangent of each element of @var{x}. @end deftypefn ! asind -*- texinfo -*- ! @deftypefn {Function File} {} asind (@var{x}) ! Compute the inverse sine of an angle in degrees. ! @seealso{asin, sind, acosd} @end deftypefn ! cscd -*- texinfo -*- ! @deftypefn {Function File} {} cscd (@var{x}) ! Compute the cosecant of an angle in degrees. ! @seealso{csc, secd, sind, cosd} @end deftypefn ! csc -*- texinfo -*- ! @deftypefn {Mapping Function} {} csc (@var{x}) ! Compute the cosecant of each element of @var{x}. @end deftypefn ! acscd -*- texinfo -*- ! @deftypefn {Function File} {} acscd (@var{x}) ! Compute the inverse cosecant of an angle in degrees. ! @seealso{acsc, cscd, asecd} @end deftypefn ! acotd -*- texinfo -*- ! @deftypefn {Function File} {} acotd (@var{x}) ! Compute the inverse cotangent of an angle in degrees. ! @seealso{atan, tand} @end deftypefn ! coth -*- texinfo -*- ! @deftypefn {Mapping Function} {} coth (@var{x}) ! Compute the hyperbolic cotangent of each element of @var{x}. @end deftypefn ! tand -*- texinfo -*- ! @deftypefn {Function File} {} tand (@var{x}) ! Compute the tangent of an angle in degrees. Returns zero for elements ! of for which @code{@var{x}/180} is an integer and @code{Inf} for elements ! where @code{(@var{x}-90)/180} is an integer. ! @seealso{tan, cosd, sind, acosd, asind, atand} @end deftypefn ! csch -*- texinfo -*- ! @deftypefn {Mapping Function} {} csch (@var{x}) ! Compute the hyperbolic cosecant of each element of @var{x}. @end deftypefn ! asecd -*- texinfo -*- ! @deftypefn {Function File} {} asecd (@var{x}) ! Compute inverse secant in degrees. ! @seealso{asec, secd, acscd} @end deftypefn ! secd -*- texinfo -*- ! @deftypefn {Function File} {} secd (@var{x}) ! Compute the secant of an angle in degrees. ! @seealso{sec, cscd, sind, cosd} @end deftypefn ! lcm -*- texinfo -*- ! @deftypefn {Mapping Function} {} lcm (@var{x}, @dots{}) ! Compute the least common multiple of the elements of @var{x}, or ! the list of all the arguments. For example, @example ! lcm (a1, ..., ak) @end example ! @noindent ! is the same as ! ! @example ! lcm ([a1, ..., ak]). ! @end example + All elements must be the same size or scalar. + @seealso{gcd, min, max, ceil, floor} @end deftypefn ! cosd -*- texinfo -*- ! @deftypefn {Function File} {} cosd (@var{x}) ! Compute the cosine of an angle in degrees. Returns zero in elements ! for which @code{(@var{x}-90)/180} is an integer. ! @seealso{cos, sind, tand, acosd, asind, atand} ! @end deftypefn ! cot ! -*- texinfo -*- ! @deftypefn {Mapping Function} {} cot (@var{x}) ! Compute the cotangent of each element of @var{x}. ! @end deftypefn ! sec ! -*- texinfo -*- ! @deftypefn {Mapping Function} {} sec (@var{x}) ! Compute the secant of each element of @var{x}. ! @end deftypefn ! acot ! -*- texinfo -*- ! @deftypefn {Mapping Function} {} acot (@var{x}) ! Compute the inverse cotangent of each element of @var{x}. ! @end deftypefn ! asec ! -*- texinfo -*- ! @deftypefn {Mapping Function} {} asec (@var{x}) ! Compute the inverse secant of each element of @var{x}. @end deftypefn ! atand -*- texinfo -*- ! @deftypefn {Function File} {} atand (@var{x}) ! Compute the inverse tangent of an angle in degrees. ! @seealso{acot, tand} @end deftypefn ! acsc -*- texinfo -*- ! @deftypefn {Mapping Function} {} acsc (@var{x}) ! Compute the inverse cosecant of each element of @var{x}. @end deftypefn ! savepath -*- texinfo -*- ! @deftypefn {Function File} {} savepath (@var{file}) ! Save the current function search path to @var{file}. If @var{file} ! is omitted, @file{~/.octaverc} is used. If successful, ! @code{savepath} returns 0. ! @seealso{path, addpath, rmpath, genpath, pathdef, pathsep} @end deftypefn ! spvcat -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} spvcat (@var{a1}, @var{a2}, @dots{}, @var{aN}) ! Return the vertical concatenation of sparse matrices. This function ! is obselete and @code{vertcat} should be used ! @seealso{sphcat, vertcat, horzcat, cat} @end deftypefn ! speye -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} speye (@var{m}) ! @deftypefnx {Function File} {@var{y} =} speye (@var{m}, @var{n}) ! @deftypefnx {Function File} {@var{y} =} speye (@var{sz}) ! Returns a sparse identity matrix. This is significantly more ! efficient than @code{sparse (eye (@var{m}))} as the full matrix ! is not constructed. ! Called with a single argument a square matrix of size @var{m} by ! @var{m} is created. Otherwise a matrix of @var{m} by @var{n} is ! created. If called with a single vector argument, this argument ! is taken to be the size of the matrix to create. @end deftypefn ! spfun -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} spfun (@var{f},@var{x}) ! Compute @code{f(@var{x})} for the non-zero values of @var{x}. ! This results in a sparse matrix with the same structure as ! @var{x}. The function @var{f} can be passed as a string, a ! function handle or an inline function. @end deftypefn ! sprandsym -*- texinfo -*- ! @deftypefn {Function File} {} sprandsym (@var{n}, @var{d}) ! @deftypefnx {Function File} {} sprandsym (@var{s}) ! Generate a symmetric random sparse matrix. The size of the matrix will be ! @var{n} by @var{n}, with a density of values given by @var{d}. ! @var{d} should be between 0 and 1. Values will be normally ! distributed with mean of zero and variance 1. ! Note: sometimes the actual density may be a bit smaller than @var{d}. ! This is unlikely to happen for large really sparse matrices. ! If called with a single matrix argument, a random sparse matrix is ! generated wherever the matrix @var{S} is non-zero in its lower ! triangular part. ! @seealso{sprand, sprandn} @end deftypefn ! spconvert -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} spconvert (@var{m}) ! This function converts for a simple sparse matrix format easily ! produced by other programs into Octave's internal sparse format. The ! input @var{x} is either a 3 or 4 column real matrix, containing ! the row, column, real and imaginary parts of the elements of the ! sparse matrix. An element with a zero real and imaginary part can ! be used to force a particular matrix size. @end deftypefn ! spdiags -*- texinfo -*- ! @deftypefn {Function File} {[@var{b}, @var{c}] =} spdiags (@var{a}) ! @deftypefnx {Function File} {@var{b} =} spdiags (@var{a}, @var{c}) ! @deftypefnx {Function File} {@var{b} =} spdiags (@var{v}, @var{c}, @var{a}) ! @deftypefnx {Function File} {@var{b} =} spdiags (@var{v}, @var{c}, @var{m}, @var{n}) ! A generalization of the function @code{spdiag}. Called with a single ! input argument, the non-zero diagonals @var{c} of @var{A} are extracted. ! With two arguments the diagonals to extract are given by the vector ! @var{c}. ! The other two forms of @code{spdiags} modify the input matrix by ! replacing the diagonals. They use the columns of @var{v} to replace ! the columns represented by the vector @var{c}. If the sparse matrix ! @var{a} is defined then the diagonals of this matrix are replaced. ! Otherwise a matrix of @var{m} by @var{n} is created with the ! diagonals given by @var{v}. ! Negative values of @var{c} representive diagonals below the main ! diagonal, and positive values of @var{c} diagonals above the main ! diagonal. ! For example ! @example ! @group ! spdiags (reshape (1:12, 4, 3), [-1 0 1], 5, 4) ! @result{} 5 10 0 0 ! 1 6 11 0 ! 0 2 7 12 ! 0 0 3 8 ! 0 0 0 4 ! @end group ! @end example ! @end deftypefn ! spalloc ! -*- texinfo -*- ! @deftypefn {Function File} {@var{s} =} spalloc (@var{r}, @var{c}, @var{nz}) ! Returns an empty sparse matrix of size @var{r}-by-@var{c}. As Octave ! resizes sparse matrices at the first opportunity, so that no additional ! space is needed, the argument @var{nz} is ignored. This function is ! provided only for compatibility reasons. ! It should be noted that this means that code like @example ! k = 5; ! nz = r * k; ! s = spalloc (r, c, nz) ! for j = 1:c ! idx = randperm (r); ! s (:, j) = [zeros(r - k, 1); rand(k, 1)] (idx); ! endfor @end example ! will reallocate memory at each step. It is therefore vitally important ! that code like this is vectorized as much as possible. ! @seealso{sparse, nzmax} ! @end deftypefn ! sphcat ! -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} sphcat (@var{a1}, @var{a2}, @dots{}, @var{aN}) ! Return the horizontal concatenation of sparse matrices. This function ! is obselete and @code{horzcat} should be used. ! @seealso {spvcat, vertcat, horzcat, cat} ! @end deftypefn ! treeplot ! -*- texinfo -*- ! @deftypefn {Function File} {} treeplot (@var{Tree}) ! @deftypefnx {Function File} {} treeplot (@var{Tree}, @var{LineStyle}, @var{EdgeStyle}) ! Produces a graph of tree or forest. The first argument is vector of ! predecessors, optional parameters @var{LineStyle} and @var{EdgeStyle} ! define the output style. The complexity of the algorithm is O(n) in ! terms of is time and memory requirements. ! @seealso{etreeplot, gplot} ! @end deftypefn ! pcg ! -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} pcg (@var{a}, @var{b}, @var{tol}, @var{maxit}, @var{m1}, @var{m2}, @var{x0}, @dots{}) ! @deftypefnx {Function File} {[@var{x}, @var{flag}, @var{relres}, @var{iter}, @var{resvec}, @var{eigest}] =} pcg (@dots{}) ! Solves the linear system of equations @code{@var{a} * @var{x} = ! @var{b}} by means of the Preconditioned Conjugate Gradient iterative ! method. The input arguments are ! @itemize ! @item ! @var{a} can be either a square (preferably sparse) matrix or a ! function handle, inline function or string containing the name ! of a function which computes @code{@var{a} * @var{x}}. In principle ! @var{a} should be symmetric and positive definite; if @code{pcg} ! finds @var{a} to not be positive definite, you will get a warning ! message and the @var{flag} output parameter will be set. ! @item ! @var{b} is the right hand side vector. ! @item ! @var{tol} is the required relative tolerance for the residual error, ! @code{@var{b} - @var{a} * @var{x}}. The iteration stops if @code{norm ! (@var{b} - @var{a} * @var{x}) <= @var{tol} * norm (@var{b} - @var{a} * ! @var{x0})}. If @var{tol} is empty or is omitted, the function sets ! @code{@var{tol} = 1e-6} by default. ! @item ! @var{maxit} is the maximum allowable number of iterations; if ! @code{[]} is supplied for @code{maxit}, or @code{pcg} has less ! arguments, a default value equal to 20 is used. ! @item ! @var{m} = @var{m1} * @var{m2} is the (left) preconditioning matrix, so that the iteration is ! (theoretically) equivalent to solving by @code{pcg} @code{@var{P} * ! @var{x} = @var{m} \ @var{b}}, with @code{@var{P} = @var{m} \ @var{a}}. ! Note that a proper choice of the preconditioner may dramatically ! improve the overall performance of the method. Instead of matrices ! @var{m1} and @var{m2}, the user may pass two functions which return ! the results of applying the inverse of @var{m1} and @var{m2} to ! a vector (usually this is the preferred way of using the preconditioner). ! If @code{[]} is supplied for @var{m1}, or @var{m1} is omitted, no ! preconditioning is applied. If @var{m2} is omitted, @var{m} = @var{m1} ! will be used as preconditioner. ! @item ! @var{x0} is the initial guess. If @var{x0} is empty or omitted, the ! function sets @var{x0} to a zero vector by default. ! @end itemize ! The arguments which follow @var{x0} are treated as parameters, and ! passed in a proper way to any of the functions (@var{a} or @var{m}) ! which are passed to @code{pcg}. See the examples below for further ! details. The output arguments are ! @itemize ! @item ! @var{x} is the computed approximation to the solution of ! @code{@var{a} * @var{x} = @var{b}}. ! @item ! @var{flag} reports on the convergence. @code{@var{flag} = 0} means ! the solution converged and the tolerance criterion given by @var{tol} ! is satisfied. @code{@var{flag} = 1} means that the @var{maxit} limit ! for the iteration count was reached. @code{@var{flag} = 3} reports that ! the (preconditioned) matrix was found not positive definite. ! @item ! @var{relres} is the ratio of the final residual to its initial value, ! measured in the Euclidean norm. ! @item ! @var{iter} is the actual number of iterations performed. ! @item ! @var{resvec} describes the convergence history of the method. ! @code{@var{resvec} (i,1)} is the Euclidean norm of the residual, and ! @code{@var{resvec} (i,2)} is the preconditioned residual norm, ! after the (@var{i}-1)-th iteration, @code{@var{i} = ! 1, 2, @dots{}, @var{iter}+1}. The preconditioned residual norm ! is defined as ! @code{norm (@var{r}) ^ 2 = @var{r}' * (@var{m} \ @var{r})} where ! @code{@var{r} = @var{b} - @var{a} * @var{x}}, see also the ! description of @var{m}. If @var{eigest} is not required, only ! @code{@var{resvec} (:,1)} is returned. ! @item ! @var{eigest} returns the estimate for the smallest @code{@var{eigest} ! (1)} and largest @code{@var{eigest} (2)} eigenvalues of the ! preconditioned matrix @code{@var{P} = @var{m} \ @var{a}}. In ! particular, if no preconditioning is used, the estimates for the ! extreme eigenvalues of @var{a} are returned. @code{@var{eigest} (1)} ! is an overestimate and @code{@var{eigest} (2)} is an underestimate, ! so that @code{@var{eigest} (2) / @var{eigest} (1)} is a lower bound ! for @code{cond (@var{P}, 2)}, which nevertheless in the limit should ! theoretically be equal to the actual value of the condition number. ! The method which computes @var{eigest} works only for symmetric positive ! definite @var{a} and @var{m}, and the user is responsible for ! verifying this assumption. ! @end itemize ! Let us consider a trivial problem with a diagonal matrix (we exploit the ! sparsity of A) ! @example ! @group ! N = 10; ! A = spdiag ([1:N]); ! b = rand (N, 1); ! [L, U, P, Q] = luinc (A,1.e-3); ! @end group ! @end example ! @sc{Example 1:} Simplest use of @code{pcg} ! @example ! x = pcg(A,b) ! @end example ! ! @sc{Example 2:} @code{pcg} with a function which computes ! @code{@var{a} * @var{x}} @example @group ! function y = applyA (x) ! y = [1:N]'.*x; ! endfunction ! ! x = pcg ("applyA", b) @end group @end example ! @sc{Example 3:} @code{pcg} with a preconditioner: @var{l} * @var{u} ! @example ! x=pcg(A,b,1.e-6,500,L*U); ! @end example ! @sc{Example 4:} @code{pcg} with a preconditioner: @var{l} * @var{u}. ! Faster than @sc{Example 3} since lower and upper triangular matrices ! are easier to invert ! @example ! x=pcg(A,b,1.e-6,500,L,U); ! @end example ! ! @sc{Example 5:} Preconditioned iteration, with full diagnostics. The ! preconditioner (quite strange, because even the original matrix ! @var{a} is trivial) is defined as a function @example @group ! function y = applyM(x) ! K = floor (length (x) - 2); ! y = x; ! y(1:K) = x(1:K)./[1:K]'; ! endfunction ! ! [x, flag, relres, iter, resvec, eigest] = ... ! pcg (A, b, [], [], "applyM"); ! semilogy (1:iter+1, resvec); @end group @end example ! @sc{Example 6:} Finally, a preconditioner which depends on a ! parameter @var{k}. @example @group ! function y = applyM (x, varargin) ! K = varargin@{1@}; ! y = x; ! y(1:K) = x(1:K)./[1:K]'; ! endfunction ! ! [x, flag, relres, iter, resvec, eigest] = ... ! pcg (A, b, [], [], "applyM", [], [], 3) @end group @end example + + @sc{References} + + [1] C.T.Kelley, 'Iterative methods for linear and nonlinear equations', + SIAM, 1995 (the base PCG algorithm) + + [2] Y.Saad, 'Iterative methods for sparse linear systems', PWS 1996 + (condition number estimate from PCG) Revised version of this book is + available online at http://www-users.cs.umn.edu/~saad/books.html + + + @seealso{sparse, pcr} @end deftypefn ! colperm -*- texinfo -*- ! @deftypefn {Function File} {@var{p} =} colperm (@var{s}) ! Returns the column permutations such that the columns of ! @code{@var{s} (:, @var{p})} are ordered in terms of increase number ! of non-zero elements. If @var{s} is symmetric, then @var{p} is chosen ! such that @code{@var{s} (@var{p}, @var{p})} orders the rows and ! columns with increasing number of non zeros elements. ! @end deftypefn ! spstats ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{count}, @var{mean}, @var{var}] =} spstats (@var{s}) ! @deftypefnx {Function File} {[@var{count}, @var{mean}, @var{var}] =} spstats (@var{s}, @var{j}) ! Return the stats for the non-zero elements of the sparse matrix @var{s}. ! @var{count} is the number of non-zeros in each column, @var{mean} ! is the mean of the non-zeros in each column, and @var{var} is the ! variance of the non-zeros in each column. ! Called with two input arguments, if @var{s} is the data and @var{j} ! is the bin number for the data, compute the stats for each bin. In ! this case, bins can contain data values of zero, whereas with ! @code{spstats (@var{s})} the zeros may disappear. @end deftypefn ! spy -*- texinfo -*- ! @deftypefn {Function File} {} spy (@var{x}) ! @deftypefnx {Function File} {} spy (@dots{}, @var{markersize}) ! @deftypefnx {Function File} {} spy (@dots{}, @var{LineSpec}) ! Plot the sparsity pattern of the sparse matrix @var{x}. If the argument ! @var{markersize} is given as an scalar value, it is used to determine the ! point size in the plot. If the string @var{LineSpec} is given it is ! passed to @code{plot} and determines the appearance of the plot. ! @seealso{plot} ! @end deftypefn ! spones ! -*- texinfo -*- ! @deftypefn {Function File} {@var{y} =} spones (@var{x}) ! Replace the non-zero entries of @var{x} with ones. This creates a ! sparse matrix with the same structure as @var{x}. ! @end deftypefn ! etreeplot ! -*- texinfo -*- ! @deftypefn {Function File} {} etreeplot (@var{tree}) ! @deftypefnx {Function File} {} etreeplot (@var{tree}, @var{node_style}, @var{edge_style}) ! Plot the elimination tree of the matrix @var{s} or ! @code{@var{s}+@var{s}'} if @var{s} in non-symmetric. The optional ! parameters @var{line_style} and @var{edge_style} define the output ! style. ! @seealso{treeplot, gplot} ! @end deftypefn ! sprand ! -*- texinfo -*- ! @deftypefn {Function File} {} sprand (@var{m}, @var{n}, @var{d}) ! @deftypefnx {Function File} {} sprand (@var{s}) ! Generate a random sparse matrix. The size of the matrix will be ! @var{m} by @var{n}, with a density of values given by @var{d}. ! @var{d} should be between 0 and 1. Values will be uniformly ! distributed between 0 and 1. ! Note: sometimes the actual density may be a bit smaller than @var{d}. ! This is unlikely to happen for large really sparse matrices. ! ! If called with a single matrix argument, a random sparse matrix is ! generated wherever the matrix @var{S} is non-zero. ! @seealso{sprandn} ! @end deftypefn ! pcr ! -*- texinfo -*- ! @deftypefn {Function File} {@var{x} =} pcr (@var{a}, @var{b}, @var{tol}, @var{maxit}, @var{m}, @var{x0}, @dots{}) ! @deftypefnx {Function File} {[@var{x}, @var{flag}, @var{relres}, @var{iter}, @var{resvec}] =} pcr (@dots{}) ! ! Solves the linear system of equations @code{@var{a} * @var{x} = ! @var{b}} by means of the Preconditioned Conjugate Residuals iterative ! method. The input arguments are @itemize @item ! @var{a} can be either a square (preferably sparse) matrix or a ! function handle, inline function or string containing the name ! of a function which computes @code{@var{a} * @var{x}}. In principle ! @var{a} should be symmetric and non-singular; if @code{pcr} ! finds @var{a} to be numerically singular, you will get a warning ! message and the @var{flag} output parameter will be set. ! @item ! @var{b} is the right hand side vector. ! @item ! @var{tol} is the required relative tolerance for the residual error, ! @code{@var{b} - @var{a} * @var{x}}. The iteration stops if @code{norm ! (@var{b} - @var{a} * @var{x}) <= @var{tol} * norm (@var{b} - @var{a} * ! @var{x0})}. If @var{tol} is empty or is omitted, the function sets ! @code{@var{tol} = 1e-6} by default. ! @item ! @var{maxit} is the maximum allowable number of iterations; if ! @code{[]} is supplied for @code{maxit}, or @code{pcr} has less ! arguments, a default value equal to 20 is used. ! @item ! @var{m} is the (left) preconditioning matrix, so that the iteration is ! (theoretically) equivalent to solving by @code{pcr} @code{@var{P} * ! @var{x} = @var{m} \ @var{b}}, with @code{@var{P} = @var{m} \ @var{a}}. ! Note that a proper choice of the preconditioner may dramatically ! improve the overall performance of the method. Instead of matrix ! @var{m}, the user may pass a function which returns the results of ! applying the inverse of @var{m} to a vector (usually this is the ! preferred way of using the preconditioner). If @code{[]} is supplied ! for @var{m}, or @var{m} is omitted, no preconditioning is applied. ! @item ! @var{x0} is the initial guess. If @var{x0} is empty or omitted, the ! function sets @var{x0} to a zero vector by default. ! @end itemize ! The arguments which follow @var{x0} are treated as parameters, and ! passed in a proper way to any of the functions (@var{a} or @var{m}) ! which are passed to @code{pcr}. See the examples below for further ! details. The output arguments are ! @itemize ! @item ! @var{x} is the computed approximation to the solution of ! @code{@var{a} * @var{x} = @var{b}}. ! @item ! @var{flag} reports on the convergence. @code{@var{flag} = 0} means ! the solution converged and the tolerance criterion given by @var{tol} ! is satisfied. @code{@var{flag} = 1} means that the @var{maxit} limit ! for the iteration count was reached. @code{@var{flag} = 3} reports t ! @code{pcr} breakdown, see [1] for details. ! @item ! @var{relres} is the ratio of the final residual to its initial value, ! measured in the Euclidean norm. ! @item ! @var{iter} is the actual number of iterations performed. ! @item ! @var{resvec} describes the convergence history of the method, ! so that @code{@var{resvec} (i)} contains the Euclidean norms of the ! residual after the (@var{i}-1)-th iteration, @code{@var{i} = ! 1,2, @dots{}, @var{iter}+1}. ! @end itemize ! Let us consider a trivial problem with a diagonal matrix (we exploit the ! sparsity of A) ! @example ! @group ! N = 10; ! A = diag([1:N]); A = sparse(A); ! b = rand(N,1); ! @end group ! @end example ! @sc{Example 1:} Simplest use of @code{pcr} ! @example ! x = pcr(A, b) ! @end example ! @sc{Example 2:} @code{pcr} with a function which computes ! @code{@var{a} * @var{x}}. ! @example ! @group ! function y = applyA(x) ! y = [1:10]'.*x; ! endfunction ! x = pcr('applyA',b) ! @end group ! @end example ! ! @sc{Example 3:} Preconditioned iteration, with full diagnostics. The ! preconditioner (quite strange, because even the original matrix ! @var{a} is trivial) is defined as a function @example ! @group ! function y = applyM(x) ! K = floor(length(x)-2); ! y = x; ! y(1:K) = x(1:K)./[1:K]'; ! endfunction ! ! [x, flag, relres, iter, resvec] = ... ! pcr(A, b, [], [], 'applyM') ! semilogy([1:iter+1], resvec); ! @end group @end example ! @sc{Example 4:} Finally, a preconditioner which depends on a ! parameter @var{k}. @example @group ! function y = applyM(x, varargin) ! K = varargin@{1@}; ! y = x; y(1:K) = x(1:K)./[1:K]'; ! endfunction ! ! [x, flag, relres, iter, resvec] = ... ! pcr(A, b, [], [], 'applyM', [], 3) @end group @end example + + @sc{References} + + [1] W. Hackbusch, "Iterative Solution of Large Sparse Systems of + Equations", section 9.5.4; Springer, 1994 + + @seealso{sparse, pcg} @end deftypefn ! gplot -*- texinfo -*- ! @deftypefn {Function File} {} gplot (@var{a}, @var{xy}) ! @deftypefnx {Function File} {} gplot (@var{a}, @var{xy}, @var{line_style}) ! @deftypefnx {Function File} {[@var{x}, @var{y}] =} gplot (@var{a}, @var{xy}) ! Plot a graph defined by @var{A} and @var{xy} in the graph theory ! sense. @var{A} is the adjacency matrix of the array to be plotted ! and @var{xy} is an @var{n}-by-2 matrix containing the coordinates of ! the nodes of the graph. ! The optional parameter @var{line_style} defines the output style for ! the plot. Called with no output arguments the graph is plotted ! directly. Otherwise, return the coordinates of the plot in @var{x} ! and @var{y}. ! @seealso{treeplot, etreeplot, spy} ! @end deftypefn ! normest ! -*- texinfo -*- ! @deftypefn {Function File} {[@var{n}, @var{c}] =} normest (@var{a}, @var{tol}) ! Estimate the 2-norm of the matrix @var{a} using a power series ! analysis. This is typically used for large matrices, where the cost ! of calculating the @code{norm (@var{a})} is prohibitive and an approximation ! to the 2-norm is acceptable. ! @var{tol} is the tolerance to which the 2-norm is calculated. By default ! @var{tol} is 1e-6. @var{c} returns the number of iterations needed for ! @code{normest} to converge. @end deftypefn ! sprandn -*- texinfo -*- ! @deftypefn {Function File} {} sprandn (@var{m}, @var{n}, @var{d}) ! @deftypefnx {Function File} {} sprandn (@var{s}) ! Generate a random sparse matrix. The size of the matrix will be ! @var{m} by @var{n}, with a density of values given by @var{d}. ! @var{d} should be between 0 and 1. Values will be normally ! distributed with mean of zero and variance 1. ! Note: sometimes the actual density may be a bit smaller than @var{d}. ! This is unlikely to happen for large really sparse matrices. ! If called with a single matrix argument, a random sparse matrix is ! generated wherever the matrix @var{S} is non-zero. ! @seealso{sprand} ! @end deftypefn ! nonzeros ! -*- texinfo -*- ! @deftypefn {Function File} {} nonzeros (@var{s}) ! Returns a vector of the non-zero values of the sparse matrix @var{s}. @end deftypefn diff -cNr octave-3.0.1/scripts/general/mod.m octave-3.0.2/scripts/general/mod.m *** octave-3.0.1/scripts/general/mod.m 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/scripts/general/mod.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 18,31 **** ## -*- texinfo -*- ## @deftypefn {Mapping Function} {} mod (@var{x}, @var{y}) ! ## Compute modulo function, using ## ## @example ## x - y .* floor (x ./ y) ## @end example ## ! ## Note that this handles negative numbers correctly: ! ## @code{mod (-1, 3)} is 2, not -1 as @code{rem (-1, 3)} returns. ## Also, @code{mod (@var{x}, 0)} returns @var{x}. ## ## An error message is printed if the dimensions of the arguments do not --- 18,32 ---- ## -*- texinfo -*- ## @deftypefn {Mapping Function} {} mod (@var{x}, @var{y}) ! ## Compute modulo function. Conceptually this is given by ## ## @example ## x - y .* floor (x ./ y) ## @end example ## ! ## and is written in a manner that the correct modulus is returned for ! ##integer types. This function handles negative values correctly. That ! ##is @code{mod (-1, 3)} is 2, not -1 as @code{rem (-1, 3)} returns. ## Also, @code{mod (@var{x}, 0)} returns @var{x}. ## ## An error message is printed if the dimensions of the arguments do not *************** *** 47,73 **** error ("mod: argument sizes must agree"); endif - ## Matlab allows complex arguments, but as far as I can tell, that's a - ## bunch of hooey. - if (isreal (x) && isreal (y)) nz = y != 0.0; if (all (nz(:))) ## No elements of y are zero. ! r = x - y .* floor (x ./ y); elseif (isscalar (y)) ## y must be zero. r = x; else ## Some elements of y are zero. if (isscalar (x)) ! r = x * ones (size (y)); else r = x; x = x(nz); endif y = y(nz); ! r(nz) = x - y .* floor (x ./ y); endif else error ("mod: complex arguments are not allowed"); --- 48,89 ---- error ("mod: argument sizes must agree"); endif if (isreal (x) && isreal (y)) nz = y != 0.0; if (all (nz(:))) ## No elements of y are zero. ! if (isinteger(x) || isinteger(y)) ! if (isinteger (x)) ! typ = class (x); ! else ! typ = class (y); ! endif ! r = x - y .* cast (floor (double(x) ./ double(y)), typ); ! else ! r = x - y .* floor (x ./ y); ! endif elseif (isscalar (y)) ## y must be zero. r = x; else ## Some elements of y are zero. if (isscalar (x)) ! r = x * ones (size(y), class(y)); else r = x; x = x(nz); endif y = y(nz); ! if (isinteger(x) || isinteger(y)) ! if (isinteger (x)) ! typ = class (x); ! else ! typ = class (y); ! endif ! r(nz) = x - y .* floor (double(x) ./ double(y)); ! else ! r(nz) = x - y .* floor (x ./ y); ! endif endif else error ("mod: complex arguments are not allowed"); *************** *** 101,103 **** --- 117,129 ---- %!assert (mod(-5,[3,0; 3,1]), [1, -5; 1, 0]); %!assert (mod(-5,[3,2; 3,1]), [1, 1; 1, 0]); + ## integer types + %!assert (mod(uint8(5),uint8(4)),uint8(1)) + %!assert (mod(uint8([1:5]),uint8(4)),uint8([1,2,3,0,1])) + %!assert (mod(uint8([1:5]),uint8(0)),uint8([1:5])) + %!error (mod(uint8(5),int8(4))) + + ## mixed integer/real types + %!assert (mod(uint8(5),4),uint8(1)) + %!assert (mod(5,uint8(4)),uint8(1)) + %!assert (mod(uint8([1:5]),4),uint8([1,2,3,0,1])) diff -cNr octave-3.0.1/scripts/general/rat.m octave-3.0.2/scripts/general/rat.m *** octave-3.0.1/scripts/general/rat.m 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/scripts/general/rat.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 64,71 **** ## grab new factors until all continued fractions converge while (1) ## determine which fractions have not yet converged ! idx = find (abs(y-n./d) >= tol); ! if (isempty(idx)) break; endif ## grab the next step in the continued fraction flip = 1./frac(idx); --- 64,76 ---- ## grab new factors until all continued fractions converge while (1) ## determine which fractions have not yet converged ! idx = find(abs (y-n./d) >= tol); ! if (isempty(idx)) ! if (isempty (steps)) ! steps = NaN .* ones (nsz, 1); ! endif ! break; ! endif ## grab the next step in the continued fraction flip = 1./frac(idx); *************** *** 128,133 **** --- 133,145 ---- endif endwhile s = [s, repmat(")", 1, j-2)]; + n_nc = columns (n); + s_nc = columns (s); + if (n_nc > s_nc) + s(:,s_nc+1:n_nc) = " " + elseif (s_nc > n_nc) + n(:,n_nc+1:s_nc) = " "; + endif n = cat (1, n, s); endfor endif diff -cNr octave-3.0.1/scripts/general/rem.m octave-3.0.2/scripts/general/rem.m *** octave-3.0.1/scripts/general/rem.m 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/scripts/general/rem.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 43,55 **** error ("rem: argument sizes must agree"); endif - ## Matlab allows complex arguments, but as far as I can tell, that's a - ## bunch of hooey. - if (isreal (x) && isreal (y)) ! r = x - y .* fix (x ./ y); else error ("rem: complex arguments are not allowed"); endif endfunction --- 43,68 ---- error ("rem: argument sizes must agree"); endif if (isreal (x) && isreal (y)) ! if (isinteger(x) || isinteger(y)) ! if (isinteger (x)) ! typ = class (x); ! else ! typ = class (y); ! endif ! r = x - y .* cast (fix (double (x) ./ double (y)), typ); ! else ! r = x - y .* fix (x ./ y); ! endif else error ("rem: complex arguments are not allowed"); endif + %!assert(rem (uint8([1, 2, 3; -1, -2, -3]), uint8 (2)), uint8([1, 0, 1; -1, 0, -1])); + + %!assert(uint8(rem ([1, 2, 3; -1, -2, -3], 2 * ones (2, 3))),uint8([1, 0, 1; -1, 0, -1])); + + %!error rem (uint(8),int8(5)); + + %!error rem (uint8([1, 2]), uint8([3, 4, 5])); endfunction diff -cNr octave-3.0.1/scripts/linear-algebra/cond.m octave-3.0.2/scripts/linear-algebra/cond.m *** octave-3.0.1/scripts/linear-algebra/cond.m 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/scripts/linear-algebra/cond.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 40,46 **** p = 2; endif ! if (! isstr (p) && p == 2) [nr, nc] = size (a); if (nr == 0 || nc == 0) retval = 0.0; --- 40,46 ---- p = 2; endif ! if (! ischar (p) && p == 2) [nr, nc] = size (a); if (nr == 0 || nc == 0) retval = 0.0; diff -cNr octave-3.0.1/scripts/miscellaneous/news.m octave-3.0.2/scripts/miscellaneous/news.m *** octave-3.0.1/scripts/miscellaneous/news.m 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/scripts/miscellaneous/news.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 28,34 **** if (exist (newsfile, "file")) f = fopen (newsfile, "r"); ! while (isstr (line = fgets (f))) printf (line); endwhile else --- 28,34 ---- if (exist (newsfile, "file")) f = fopen (newsfile, "r"); ! while (ischar (line = fgets (f))) printf (line); endwhile else diff -cNr octave-3.0.1/scripts/pkg/pkg.m octave-3.0.2/scripts/pkg/pkg.m *** octave-3.0.1/scripts/pkg/pkg.m 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/scripts/pkg/pkg.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 248,258 **** --- 248,261 ---- global_install = false; if (! user_prefix) prefix = tilde_expand (fullfile ("~", "octave")); + archprefix = prefix; endif case "-global" global_install = true; if (! user_prefix) prefix = fullfile (OCTAVE_HOME (), "share", "octave", "packages"); + archprefix = fullfile (octave_config_info ("libexecdir"), + "octave", "packages"); endif case available_actions if (strcmp (action, "none")) diff -cNr octave-3.0.1/scripts/plot/__bar__.m octave-3.0.2/scripts/plot/__bar__.m *** octave-3.0.1/scripts/plot/__bar__.m 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/scripts/plot/__bar__.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 67,80 **** newargs = {}; have_line_spec = false; while (idx <= nargin - 2) ! if (isstr (varargin{idx}) && strcmp (varargin{idx}, "grouped")) group = true; idx++; ! elseif (isstr (varargin{idx}) && strcmp (varargin{idx}, "stacked")) group = false; idx++; else ! if ((isstr (varargin{idx}) || iscell (varargin{idx})) && ! have_line_spec) [linespec, valid] = __pltopt__ (func, varargin{idx}, false); if (valid) --- 67,80 ---- newargs = {}; have_line_spec = false; while (idx <= nargin - 2) ! if (ischar (varargin{idx}) && strcmp (varargin{idx}, "grouped")) group = true; idx++; ! elseif (ischar (varargin{idx}) && strcmp (varargin{idx}, "stacked")) group = false; idx++; else ! if ((ischar (varargin{idx}) || iscell (varargin{idx})) && ! have_line_spec) [linespec, valid] = __pltopt__ (func, varargin{idx}, false); if (valid) *************** *** 88,94 **** width = varargin{idx++}; elseif (idx == nargin - 2) newargs = [newargs,varargin(idx++)]; ! elseif (isstr (varargin{idx}) && strcmp (tolower (varargin{idx}), "basevalue") && isscalar (varargin{idx+1})) bv = varargin{idx+1}; idx += 2; --- 88,94 ---- width = varargin{idx++}; elseif (idx == nargin - 2) newargs = [newargs,varargin(idx++)]; ! elseif (ischar (varargin{idx}) && strcmp (tolower (varargin{idx}), "basevalue") && isscalar (varargin{idx+1})) bv = varargin{idx+1}; idx += 2; diff -cNr octave-3.0.1/scripts/plot/compass.m octave-3.0.2/scripts/plot/compass.m *** octave-3.0.1/scripts/plot/compass.m 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/scripts/plot/compass.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 71,77 **** line_spec = "b-"; while (ioff <= nargin) arg = varargin{ioff++}; ! if ((isstr (arg) || iscell (arg)) && ! have_line_spec) [linespec, valid] = __pltopt__ ("compass", arg, false); if (valid) line_spec = arg; --- 71,77 ---- line_spec = "b-"; while (ioff <= nargin) arg = varargin{ioff++}; ! if ((ischar (arg) || iscell (arg)) && ! have_line_spec) [linespec, valid] = __pltopt__ ("compass", arg, false); if (valid) line_spec = arg; diff -cNr octave-3.0.1/scripts/plot/feather.m octave-3.0.2/scripts/plot/feather.m *** octave-3.0.1/scripts/plot/feather.m 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/scripts/plot/feather.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 71,77 **** line_spec = "b-"; while (ioff <= nargin) arg = varargin{ioff++}; ! if ((isstr (arg) || iscell (arg)) && ! have_line_spec) [linespec, valid] = __pltopt__ ("feather", arg, false); if (valid) line_spec = arg; --- 71,77 ---- line_spec = "b-"; while (ioff <= nargin) arg = varargin{ioff++}; ! if ((ischar (arg) || iscell (arg)) && ! have_line_spec) [linespec, valid] = __pltopt__ ("feather", arg, false); if (valid) line_spec = arg; diff -cNr octave-3.0.1/scripts/plot/__go_draw_axes__.m octave-3.0.2/scripts/plot/__go_draw_axes__.m *** octave-3.0.1/scripts/plot/__go_draw_axes__.m 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/scripts/plot/__go_draw_axes__.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 1070,1096 **** fputs (plot_stream, "set border 895;\n"); else if (strcmpi (axis_obj.yaxislocation, "right")) ! fputs (plot_stream, "unset ytics; set y2tics %s nomirror\n", ! axis_obj.tickdir); if (strcmpi (axis_obj.xaxislocation, "top")) ! fputs (plot_stream, "unset xtics; set x2tics %s nomirror\n", ! axis_obj.tickdir); fputs (plot_stream, "set border 12;\n"); else ! fputs (plot_stream, "unset x2tics; set xtics %s nomirror\n", ! axis_obj.tickdir); fputs (plot_stream, "set border 9;\n"); endif else ! fputs (plot_stream, "unset y2tics; set ytics %s nomirror\n", ! axis_obj.tickdir); ! if (strcmpi (axis_obj.xaxislocation, "top")) ! fputs (plot_stream, "unset xtics; set x2tics %s nomirror\n", axis_obj.tickdir); fputs (plot_stream, "set border 6;\n"); else ! fputs (plot_stream, "unset x2tics; set xtics %s nomirror\n", ! axis_obj.tickdir); fputs (plot_stream, "set border 3;\n"); endif endif --- 1070,1096 ---- fputs (plot_stream, "set border 895;\n"); else if (strcmpi (axis_obj.yaxislocation, "right")) ! fprintf (plot_stream, "unset ytics; set y2tics %s nomirror\n", ! axis_obj.tickdir); if (strcmpi (axis_obj.xaxislocation, "top")) ! fprintf (plot_stream, "unset xtics; set x2tics %s nomirror\n", ! axis_obj.tickdir); fputs (plot_stream, "set border 12;\n"); else ! fprintf (plot_stream, "unset x2tics; set xtics %s nomirror\n", ! axis_obj.tickdir); fputs (plot_stream, "set border 9;\n"); endif else ! fprintf (plot_stream, "unset y2tics; set ytics %s nomirror\n", axis_obj.tickdir); + if (strcmpi (axis_obj.xaxislocation, "top")) + fprintf (plot_stream, "unset xtics; set x2tics %s nomirror\n", + axis_obj.tickdir); fputs (plot_stream, "set border 6;\n"); else ! fprintf (plot_stream, "unset x2tics; set xtics %s nomirror\n", ! axis_obj.tickdir); fputs (plot_stream, "set border 3;\n"); endif endif diff -cNr octave-3.0.1/scripts/plot/__quiver__.m octave-3.0.2/scripts/plot/__quiver__.m *** octave-3.0.1/scripts/plot/__quiver__.m 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/scripts/plot/__quiver__.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 79,85 **** arg = varargin{ioff++}; if (ischar (arg) && strncmp (tolower (arg), "filled", 6)) have_filled = true; ! elseif ((isstr (arg) || iscell (arg)) && ! have_line_spec) [linespec, valid] = __pltopt__ ("quiver", arg, false); if (valid) --- 79,85 ---- arg = varargin{ioff++}; if (ischar (arg) && strncmp (tolower (arg), "filled", 6)) have_filled = true; ! elseif ((ischar (arg) || iscell (arg)) && ! have_line_spec) [linespec, valid] = __pltopt__ ("quiver", arg, false); if (valid) diff -cNr octave-3.0.1/scripts/plot/__scatter__.m octave-3.0.2/scripts/plot/__scatter__.m *** octave-3.0.1/scripts/plot/__scatter__.m 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/scripts/plot/__scatter__.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 79,85 **** arg = varargin{iarg++}; if (ischar (arg) && strncmp (tolower (arg), "filled", 6)) filled = true; ! elseif ((isstr (arg) || iscell (arg)) && ! have_marker) [linespec, valid] = __pltopt__ ("scatter", arg, false); if (valid) have_marker = true; --- 79,85 ---- arg = varargin{iarg++}; if (ischar (arg) && strncmp (tolower (arg), "filled", 6)) filled = true; ! elseif ((ischar (arg) || iscell (arg)) && ! have_marker) [linespec, valid] = __pltopt__ ("scatter", arg, false); if (valid) have_marker = true; diff -cNr octave-3.0.1/scripts/statistics/distributions/tcdf.m octave-3.0.2/scripts/statistics/distributions/tcdf.m *** octave-3.0.1/scripts/statistics/distributions/tcdf.m 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/scripts/statistics/distributions/tcdf.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 18,26 **** ## -*- texinfo -*- ## @deftypefn {Function File} {} tcdf (@var{x}, @var{n}) ! ## For each element of @var{x}, compute the CDF at @var{x} of the ! ## t (Student) distribution with @var{n} degrees of freedom, i.e., ! ## PROB (t(@var{n}) <= @var{x}). ## @end deftypefn ## Author: KH --- 18,26 ---- ## -*- texinfo -*- ## @deftypefn {Function File} {} tcdf (@var{x}, @var{n}) ! ## For each element of @var{x}, compute the cumulative distribution ! ## function (CDF) at @var{x} of the t (Student) distribution with ! ## @var{n} degrees of freedom, i.e., PROB (t(@var{n}) <= @var{x}). ## @end deftypefn ## Author: KH diff -cNr octave-3.0.1/scripts/statistics/distributions/tinv.m octave-3.0.2/scripts/statistics/distributions/tinv.m *** octave-3.0.1/scripts/statistics/distributions/tinv.m 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/scripts/statistics/distributions/tinv.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 18,26 **** ## -*- texinfo -*- ## @deftypefn {Function File} {} tinv (@var{x}, @var{n}) ! ## For each component of @var{x}, compute the quantile (the inverse of ! ## the CDF) at @var{x} of the t (Student) distribution with parameter ! ## @var{n}. ## @end deftypefn ## For very large n, the "correct" formula does not really work well, --- 18,28 ---- ## -*- texinfo -*- ## @deftypefn {Function File} {} tinv (@var{x}, @var{n}) ! ## For each probability value @var{x}, compute the the inverse of the ! ## cumulative distribution function (CDF) of the t (Student) ! ## distribution with degrees of freedom @var{n}. This function is ! ## analagous to looking in a table for the t-value of a single-tailed ! ## distribution. ## @end deftypefn ## For very large n, the "correct" formula does not really work well, diff -cNr octave-3.0.1/scripts/strings/mat2str.m octave-3.0.2/scripts/strings/mat2str.m *** octave-3.0.1/scripts/strings/mat2str.m 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/scripts/strings/mat2str.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 74,82 **** error ("mat2str: X must be two dimensional"); endif ! x_is_complex = is_complex (x); ! if (! x_is_complex) fmt = sprintf ("%%.%dg", n(1)); else if (length (n) == 1 ) --- 74,82 ---- error ("mat2str: X must be two dimensional"); endif ! x_iscomplex = iscomplex (x); ! if (! x_iscomplex) fmt = sprintf ("%%.%dg", n(1)); else if (length (n) == 1 ) *************** *** 92,98 **** s = "[]"; elseif (nel == 1) ## Scalar X, don't print brackets ! if (! x_is_complex) s = sprintf (fmt, x); else s = sprintf (fmt, real (x), imag (x)); --- 92,98 ---- s = "[]"; elseif (nel == 1) ## Scalar X, don't print brackets ! if (! x_iscomplex) s = sprintf (fmt, x); else s = sprintf (fmt, real (x), imag (x)); *************** *** 100,110 **** else ## Non-scalar X, print brackets fmt = [fmt, ","]; ! if (! x_is_complex) s = sprintf (fmt, x.'); else ! x = x.'; ! s = sprintf (fmt, [real(x(:))'; imag(x(:))']); endif s = ["[", s]; --- 100,110 ---- else ## Non-scalar X, print brackets fmt = [fmt, ","]; ! if (! x_iscomplex) s = sprintf (fmt, x.'); else ! t = x.'; ! s = sprintf (fmt, [real(t(:))'; imag(t(:))']); endif s = ["[", s]; *************** *** 115,120 **** endif if (strcmp ("class", cls)) ! s = [class(x), "(", s, ")"] endif endfunction --- 115,125 ---- endif if (strcmp ("class", cls)) ! s = [class(x), "(", s, ")"]; endif endfunction + + %!assert (mat2str ([-1/3 + i/7; 1/3 - i/7], [4 2]), "[-0.3333+0.14i;0.3333-0.14i]") + %!assert (mat2str ([-1/3 +i/7; 1/3 -i/7], [4 2]), "[-0.3333+0i,0+0.14i;0.3333+0i,-0-0.14i]") + %!assert (mat2str (int16 ([1 -1]), 'class'), "int16([1,-1])") + diff -cNr octave-3.0.1/scripts/strings/strtok.m octave-3.0.2/scripts/strings/strtok.m *** octave-3.0.1/scripts/strings/strtok.m 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/scripts/strings/strtok.m 2008-08-08 09:57:34.000000000 +0200 *************** *** 35,41 **** endif if (nargin < 2 || isempty (delim)) ! delim = " "; endif if (isempty (str)) --- 35,41 ---- endif if (nargin < 2 || isempty (delim)) ! delim = "\t\n\v\f\r "; endif if (isempty (str)) *************** *** 114,125 **** %!# test the remainder for all cases %!test [t,r] = strtok(""); assert(r, ""); ! %!test [t,r] = strtok("this"); assert(r, ""); %!test [t,r] = strtok("this "); assert(r, " "); %!test [t,r] = strtok("this is"); assert(r, " is"); ! %!test [t,r] = strtok(" this"); assert(r, ""); %!test [t,r] = strtok(" this "); assert(r, " "); ! %!test [t,r] = strtok(" "); assert(r, ""); %!# simple check with 2 and 3 delimeters %!assert(strtok("this is", "i "), "th"); --- 114,125 ---- %!# test the remainder for all cases %!test [t,r] = strtok(""); assert(r, ""); ! %!test [t,r] = strtok("this"); assert(r, char (zeros (1, 0))); %!test [t,r] = strtok("this "); assert(r, " "); %!test [t,r] = strtok("this is"); assert(r, " is"); ! %!test [t,r] = strtok(" this"); assert(r, char (zeros (1, 0))); %!test [t,r] = strtok(" this "); assert(r, " "); ! %!test [t,r] = strtok(" "); assert(r, char (zeros (1, 0))); %!# simple check with 2 and 3 delimeters %!assert(strtok("this is", "i "), "th"); *************** *** 138,140 **** --- 138,148 ---- %!# test 'bad' string orientations %!assert(strtok(" this "'), "this"'); # delimiter at start and end %!assert(strtok(" this "',"jkl "), "this"'); + + %!# test with TAB, LF, VT, FF, and CR + %!test + %! for ch = "\t\n\v\f\r" + %! [t, r] = strtok (strcat ("beg", ch, "end")); + %! assert (t, "beg"); + %! assert (r, strcat (ch, "end")) + %! endfor diff -cNr octave-3.0.1/scripts/time/eomday.m octave-3.0.2/scripts/time/eomday.m *** octave-3.0.1/scripts/time/eomday.m 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/scripts/time/eomday.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 19,25 **** ## -*- texinfo -*- ## @deftypefn {Function File} {@var{e} =} eomday (@var{y}, @var{m}) ## Return the last day of the month @var{m} for the year @var{y}. ! ## @seealso{datenum, datevec, weekday} ## @end deftypefn ## Author: pkienzle --- 19,25 ---- ## -*- texinfo -*- ## @deftypefn {Function File} {@var{e} =} eomday (@var{y}, @var{m}) ## Return the last day of the month @var{m} for the year @var{y}. ! ## @seealso{datenum, datevec, weekday, eomdate} ## @end deftypefn ## Author: pkienzle *************** *** 33,39 **** endif eom = [31, 28, 31, 30 ,31, 30, 31, 31, 30, 31, 30, 31]; ! e = eom(m); e += (m == 2) & (mod (y, 4) == 0 & (mod (y, 100) != 0 | mod (y, 400) == 0)); endfunction --- 33,39 ---- endif eom = [31, 28, 31, 30 ,31, 30, 31, 31, 30, 31, 30, 31]; ! e = reshape (eom(m), size (m)); e += (m == 2) & (mod (y, 4) == 0 & (mod (y, 100) != 0 | mod (y, 400) == 0)); endfunction *************** *** 49,54 **** --- 49,55 ---- %!assert(eomday(1:3,1:3),[31,28,31]) %!assert(eomday(1:2000,2)',datevec(datenum(1:2000,3,0))(:,3)) %!assert([1900:1999](find(eomday(1900:1999,2*ones(1,100))==29)),[1904,1908,1912,1916,1920,1924,1928,1932,1936,1940,1944,1948,1952,1956,1960,1964,1968,1972,1976,1980,1984,1988,1992,1996]) + %!assert(eomday([2004;2005], [2;2]), [29;28]) # demos %!demo %! y = 1900:1999; diff -cNr octave-3.0.1/scripts/time/weekday.m octave-3.0.2/scripts/time/weekday.m *** octave-3.0.1/scripts/time/weekday.m 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/scripts/time/weekday.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 1,4 **** ! ## Copyright (C) 2000, 2001, 2004, 2005, 2006, 2007 Paul Kienzle ## ## This file is part of Octave. ## --- 1,4 ---- ! ## Copyright (C) 2000, 2001, 2004, 2005, 2006, 2007, 2008 Paul Kienzle ## ## This file is part of Octave. ## *************** *** 34,40 **** ## Created: 10 October 2001 (CVS) ## Adapted-By: William Poetra Yoga Hadisoeseno ! function [n, s] = weekday (d, form) if (nargin < 1 || nargin > 2) print_usage (); --- 34,40 ---- ## Created: 10 October 2001 (CVS) ## Adapted-By: William Poetra Yoga Hadisoeseno ! function [d, s] = weekday (d, form) if (nargin < 1 || nargin > 2) print_usage (); *************** *** 44,67 **** form = "short"; endif ! v = datevec (d); ! t = strptime (sprintf ("%d-%d-%d", v(3), v(2), v(1)), "%d-%m-%Y"); ! ! n = t.wday + 1; if (nargout > 1) if (strcmpi (form, "long")) ! s = strftime ("%A", t); else ! s = strftime ("%a", t); endif endif endfunction # tests %!assert(weekday(728647),2) %!assert(weekday('19-Dec-1994'),2) # demos %!demo %! [n, s] = weekday (now ()) --- 44,100 ---- form = "short"; endif ! if (iscell (d) || isnumeric (d)) ! endsize = size (d); ! elseif (ischar (d)) ! endsize = [size(d, 1), 1]; ! endif ! if (ischar (d) || iscell (d)) ! ## Make sure the date is numeric ! d = datenum (d); ! endif ! ## Find the offset from a known Sunday (2008-Jan-6), mod 7. ! d = floor (reshape (mod(d - 733048, 7), endsize)); ! ## Make Saturdays a 7 and not a 0. ! d(!d) = 7; if (nargout > 1) if (strcmpi (form, "long")) ! names = {"Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" ! "Friday" "Saturday"}; else ! names = {"Sun" "Mon" "Tue" "Wed" "Thu" "Fri" "Sat"}; endif + s = strvcat (names(d)); endif endfunction # tests %!assert(weekday(728647),2) + ## Test vector inputs for both directions + %!assert(weekday([728647 728648]), [2 3]) + %!assert(weekday([728647;728648]), [2;3]) + ## Test a full week before our reference day %!assert(weekday('19-Dec-1994'),2) + %!assert(weekday('20-Dec-1994'),3) + %!assert(weekday('21-Dec-1994'),4) + %!assert(weekday('22-Dec-1994'),5) + %!assert(weekday('23-Dec-1994'),6) + %!assert(weekday('24-Dec-1994'),7) + %!assert(weekday('25-Dec-1994'),1) + ## Test our reference day + %!assert(weekday('6-Jan-2008'),1) + ## Test a full week after our reference day + %!assert(weekday('1-Feb-2008'),6) + %!assert(weekday('2-Feb-2008'),7) + %!assert(weekday('3-Feb-2008'),1) + %!assert(weekday('4-Feb-2008'),2) + %!assert(weekday('5-Feb-2008'),3) + %!assert(weekday('6-Feb-2008'),4) + %!assert(weekday('7-Feb-2008'),5) + ## Test fractional dates + %!assert(weekday(728647.1),2) # demos %!demo %! [n, s] = weekday (now ()) diff -cNr octave-3.0.1/src/bitfcns.cc octave-3.0.2/src/bitfcns.cc *** octave-3.0.1/src/bitfcns.cc 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/src/bitfcns.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 40,45 **** --- 40,46 ---- #include "ov-int8.h" #include "ov-scalar.h" #include "ov-re-mat.h" + #include "ov-bool.h" // FIXME -- could probably eliminate some code duplication by // clever use of templates. *************** *** 87,98 **** if (nargin == 2) \ { \ if ((args(0).class_name () == octave_scalar::static_class_name ()) \ ! || (args(1).class_name () == octave_scalar::static_class_name ())) \ { \ bool arg0_is_int = (args(0).class_name () != \ ! octave_scalar::static_class_name ()); \ bool arg1_is_int = (args(1).class_name () != \ ! octave_scalar::static_class_name ()); \ \ if (! (arg0_is_int || arg1_is_int)) \ { \ --- 88,105 ---- if (nargin == 2) \ { \ if ((args(0).class_name () == octave_scalar::static_class_name ()) \ ! || (args(0).class_name () == octave_bool::static_class_name ()) \ ! || (args(1).class_name () == octave_scalar::static_class_name ()) \ ! || (args(1).class_name () == octave_bool::static_class_name ())) \ { \ bool arg0_is_int = (args(0).class_name () != \ ! octave_scalar::static_class_name () && \ ! args(0).class_name () != \ ! octave_bool::static_class_name ()); \ bool arg1_is_int = (args(1).class_name () != \ ! octave_scalar::static_class_name () && \ ! args(1).class_name () != \ ! octave_bool::static_class_name ()); \ \ if (! (arg0_is_int || arg1_is_int)) \ { \ diff -cNr octave-3.0.1/src/ChangeLog octave-3.0.2/src/ChangeLog *** octave-3.0.1/src/ChangeLog 2008-04-21 18:02:14.000000000 +0200 --- octave-3.0.2/src/ChangeLog 2008-08-20 07:28:21.000000000 +0200 *************** *** 1,3 **** --- 1,88 ---- + 2008-08-19 Jaroslav Hajek + + Version 3.0.2 released. + + 2008-08-19 Jaroslav Hajek + + * DLD-FUNCTIONS/rand.cc (Frandp): Fix typo in a test. + + 2008-08-12 John W. Eaton + + * ov-struct.cc (octave_struct::subsref): Don't allow resizing for + simple x(idx) case. + + 2008-08-08 Tatsuro MATSUOKA + + * A patch fntests for rand.cc for octave for windows (cygwin, mingw ,msvc) + + 2008-08-01 Francesco Potorti + + * graphics.cc (axes::properties::properties, + axes::properties::set_defaults, axes::properties::factory_defaults): + Exchange xaxislocation and yaxislocation property values. + + 2008-07-28 John W. Eaton + + * error.cc (Flasterror, Flasterr): Unwind-protect error_state. + + 2008-07-24 John W. Eaton + + * dirfns.cc (Fmkdir): If directory already exists, return status = + true, but also set error message. + + 2008-07-21 John W. Eaton + + * OPERATORS/op-struct.cc: Define concatenation operators for + struct/matrix concatenation (valid if matrix is empty). + * OPERATORS/op-cell.cc (install_cell_ops): Likewise, for cells. + + 2008-06-25 David Bateman + + * pr-output.cc (Frats): Print usage if nargin == 0. + + 2008-06-20 Jaroslav Hajek + + * DLD-FUNCTIONS/regexp.cc (octregexp_list): Make "once" an output + argument. + (octregexp): Do not use cell arrays when "once" is requested. + + 2008-06-10 John W. Eaton + + * mexproto.h (mxCreateLogicalScalar): Declar arg as mxLogical, not int. + + 2008-06-03 Jaroslav Hajek + + * load-save.cc (Fload): Fix "-7" option. + + 2008-06-02 Jaroslav Hajek + + * ov-cell.cc (Fcellstr): For compatibility with Matlab, return {''} + when given ''. + + 2008-05-06 David Bateman + + * ov-fcn-inline.cc (Finline): Also ignore NaN, Inf, pi, NA and eps. + + * bitfcns.cc (BITOP): Treat octave_bool types and octave_scalar. + + 2008-05-06 John W. Eaton + + * ov-cell.cc (Fstruct2cell): Handle structure arrays properly. + + 2008-05-05 David Bateman + + * sysdep.cc (Fputenv): Allow single arg. Alias to setenv. + + 2008-05-04 John W. Eaton + + * ov-fcn-handle.cc (Ffunctions): Pass octave_value object instead + of Cell in structure field assignment. + + 2008-04-23 John W. Eaton + + * DLD-FUNCTIONS/__qp__.cc (qp): Avoid bounds error when removing + constraint from active set. + 2008-04-21 John W. Eaton Version 3.0.1 released. diff -cNr octave-3.0.1/src/data.cc octave-3.0.2/src/data.cc *** octave-3.0.1/src/data.cc 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/src/data.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 202,277 **** if (nargin == 2 && args(0).is_defined () && args(1).is_defined ()) { ! octave_value arg_y = args(0); ! octave_value arg_x = args(1); ! octave_idx_type y_nr = arg_y.rows (); ! octave_idx_type y_nc = arg_y.columns (); ! octave_idx_type x_nr = arg_x.rows (); ! octave_idx_type x_nc = arg_x.columns (); ! int arg_y_empty = empty_arg ("atan2", y_nr, y_nc); ! int arg_x_empty = empty_arg ("atan2", x_nr, x_nc); ! if (arg_y_empty > 0 && arg_x_empty > 0) ! return octave_value (Matrix ()); ! else if (arg_y_empty || arg_x_empty) ! return retval; ! octave_idx_type y_is_scalar = (y_nr == 1 && y_nc == 1); ! octave_idx_type x_is_scalar = (x_nr == 1 && x_nc == 1); ! if (y_is_scalar && x_is_scalar) ! { ! double y = arg_y.double_value (); ! ! if (! error_state) { ! double x = arg_x.double_value (); if (! error_state) ! retval = atan2 (y, x); ! } ! } ! else if (y_is_scalar) ! { ! double y = arg_y.double_value (); ! if (! error_state) { ! Matrix x = arg_x.matrix_value (); if (! error_state) ! retval = map_d_m (atan2, y, x); ! } ! } ! else if (x_is_scalar) ! { ! Matrix y = arg_y.matrix_value (); ! if (! error_state) { ! double x = arg_x.double_value (); if (! error_state) ! retval = map_m_d (atan2, y, x); ! } ! } ! else if (y_nr == x_nr && y_nc == x_nc) ! { ! Matrix y = arg_y.matrix_value (); ! if (! error_state) { ! Matrix x = arg_x.matrix_value (); if (! error_state) ! retval = map_m_m (atan2, y, x); } } - else - error ("atan2: nonconformant matrices"); } else print_usage (); --- 202,282 ---- if (nargin == 2 && args(0).is_defined () && args(1).is_defined ()) { ! if (args(0).is_integer_type () || args(0).is_integer_type ()) ! error ("atan2: not defined for integer types"); ! else ! { ! octave_value arg_y = args(0); ! octave_value arg_x = args(1); ! octave_idx_type y_nr = arg_y.rows (); ! octave_idx_type y_nc = arg_y.columns (); ! octave_idx_type x_nr = arg_x.rows (); ! octave_idx_type x_nc = arg_x.columns (); ! int arg_y_empty = empty_arg ("atan2", y_nr, y_nc); ! int arg_x_empty = empty_arg ("atan2", x_nr, x_nc); ! if (arg_y_empty > 0 && arg_x_empty > 0) ! return octave_value (Matrix ()); ! else if (arg_y_empty || arg_x_empty) ! return retval; ! octave_idx_type y_is_scalar = (y_nr == 1 && y_nc == 1); ! octave_idx_type x_is_scalar = (x_nr == 1 && x_nc == 1); ! if (y_is_scalar && x_is_scalar) { ! double y = arg_y.double_value (); if (! error_state) ! { ! double x = arg_x.double_value (); ! if (! error_state) ! retval = atan2 (y, x); ! } ! } ! else if (y_is_scalar) { ! double y = arg_y.double_value (); if (! error_state) ! { ! Matrix x = arg_x.matrix_value (); ! if (! error_state) ! retval = map_d_m (atan2, y, x); ! } ! } ! else if (x_is_scalar) { ! Matrix y = arg_y.matrix_value (); if (! error_state) ! { ! double x = arg_x.double_value (); ! if (! error_state) ! retval = map_m_d (atan2, y, x); ! } ! } ! else if (y_nr == x_nr && y_nc == x_nc) { ! Matrix y = arg_y.matrix_value (); if (! error_state) ! { ! Matrix x = arg_x.matrix_value (); ! ! if (! error_state) ! retval = map_m_m (atan2, y, x); ! } } + else + error ("atan2: nonconformant matrices"); } } else print_usage (); diff -cNr octave-3.0.1/src/dirfns.cc octave-3.0.2/src/dirfns.cc *** octave-3.0.1/src/dirfns.cc 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/src/dirfns.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 257,272 **** { std::string msg; ! int status = file_ops::mkdir (file_ops::tilde_expand (dirname), ! 0777, msg); ! if (status < 0) { retval(2) = "mkdir"; ! retval(1) = msg; } else ! retval(0) = true; } else print_usage (); --- 257,287 ---- { std::string msg; ! dirname = file_ops::tilde_expand (dirname); ! file_stat fs (dirname); ! ! if (fs && fs.is_dir ()) { + // For compatibility with Matlab, we return true when the + // directory already exists. + retval(2) = "mkdir"; ! retval(1) = "directory exists"; ! retval(0) = true; } else ! { ! int status = file_ops::mkdir (dirname, 0777, msg); ! ! if (status < 0) ! { ! retval(2) = "mkdir"; ! retval(1) = msg; ! } ! else ! retval(0) = true; ! } } else print_usage (); diff -cNr octave-3.0.1/src/DLD-FUNCTIONS/__qp__.cc octave-3.0.2/src/DLD-FUNCTIONS/__qp__.cc *** octave-3.0.1/src/DLD-FUNCTIONS/__qp__.cc 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/src/DLD-FUNCTIONS/__qp__.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 355,360 **** --- 355,361 ---- // At least one multiplier is negative, we // remove it from the set. + n_act--; for (octave_idx_type i = which_eig; i < n_act - n_eq; i++) { Wact(i) = Wact(i+1); *************** *** 362,368 **** Aact(n_eq+i,j) = Aact(n_eq+i+1,j); bact(n_eq+i) = bact(n_eq+i+1); } - n_act--; // Resizing the active set. Wact.resize (n_act-n_eq); --- 363,368 ---- diff -cNr octave-3.0.1/src/DLD-FUNCTIONS/rand.cc octave-3.0.2/src/DLD-FUNCTIONS/rand.cc *** octave-3.0.1/src/DLD-FUNCTIONS/rand.cc 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/src/DLD-FUNCTIONS/rand.cc 2008-08-20 07:28:21.000000000 +0200 *************** *** 950,956 **** %!test %! % Test fixed state %! randp("seed",1); ! %! assert(randp(1e9,1,6),[1000006208 1000012224 999981120 999963520 999963072 999981440]) %!test %! if (__random_statistical_tests__) %! % statistical tests may fail occasionally. --- 950,956 ---- %!test %! % Test fixed state %! randp("seed",1); ! %! assert(randp(1e9,1,6),[1000006208 1000012224 999981120 999963520 999963072 999981440],1e-6)) %!test %! if (__random_statistical_tests__) %! % statistical tests may fail occasionally. diff -cNr octave-3.0.1/src/DLD-FUNCTIONS/regexp.cc octave-3.0.2/src/DLD-FUNCTIONS/regexp.cc *** octave-3.0.1/src/DLD-FUNCTIONS/regexp.cc 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/src/DLD-FUNCTIONS/regexp.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 83,99 **** static int octregexp_list (const octave_value_list &args, const std::string &nm, bool case_insensitive, std::list &lst, ! string_vector &named, int &nopts) { int sz = 0; #if defined (HAVE_REGEX) || defined (HAVE_PCRE) int nargin = args.length(); - bool once = false; bool lineanchors = false; bool dotexceptnewline = false; bool freespacing = false; nopts = nargin - 2; std::string buffer = args(0).string_value (); if (error_state) --- 83,99 ---- static int octregexp_list (const octave_value_list &args, const std::string &nm, bool case_insensitive, std::list &lst, ! string_vector &named, int &nopts, bool &once) { int sz = 0; #if defined (HAVE_REGEX) || defined (HAVE_PCRE) int nargin = args.length(); bool lineanchors = false; bool dotexceptnewline = false; bool freespacing = false; nopts = nargin - 2; + once = false; std::string buffer = args(0).string_value (); if (error_state) *************** *** 451,457 **** std::list lst; string_vector named; int nopts; ! int sz = octregexp_list (args, nm, case_insensitive, lst, named, nopts); if (! error_state) { --- 451,458 ---- std::list lst; string_vector named; int nopts; ! bool once; ! int sz = octregexp_list (args, nm, case_insensitive, lst, named, nopts, once); if (! error_state) { *************** *** 482,517 **** retval(5) = Octave_map(); #endif ! Cell t (dim_vector(1, sz)); ! i = 0; ! for (const_iterator p = lst.begin(); p != lst.end(); p++) ! t(i++) = p->t; ! retval(4) = t; ! ! Cell m (dim_vector(1, sz)); ! i = 0; ! for (const_iterator p = lst.begin(); p != lst.end(); p++) ! m(i++) = p->m; ! retval(3) = m; ! ! ! Cell te (dim_vector(1, sz)); ! i = 0; ! for (const_iterator p = lst.begin(); p != lst.end(); p++) ! te(i++) = p->te; ! retval(2) = te; ! NDArray e (dim_vector(1, sz)); ! i = 0; ! for (const_iterator p = lst.begin(); p != lst.end(); p++) ! e(i++) = p->e; ! retval(1) = e; NDArray s (dim_vector(1, sz)); i = 0; for (const_iterator p = lst.begin(); p != lst.end(); p++) s(i++) = p->s; retval(0) = s; // Alter the order of the output arguments if (nopts > 0) --- 483,552 ---- retval(5) = Octave_map(); #endif ! if (once) ! retval(4) = sz ? lst.front ().t : Cell(); ! else ! { ! Cell t (dim_vector(1, sz)); ! i = 0; ! for (const_iterator p = lst.begin(); p != lst.end(); p++) ! t(i++) = p->t; ! retval(4) = t; ! } ! if (once) ! retval(3) = sz ? lst.front ().m : std::string(); ! else ! { ! Cell m (dim_vector(1, sz)); ! i = 0; ! for (const_iterator p = lst.begin(); p != lst.end(); p++) ! m(i++) = p->m; ! retval(3) = m; ! } + if (once) + retval(2) = sz ? lst.front ().te : Matrix(); + else + { + Cell te (dim_vector(1, sz)); + i = 0; + for (const_iterator p = lst.begin(); p != lst.end(); p++) + te(i++) = p->te; + retval(2) = te; + } + + if (once) + { + if (sz) + retval(1) = lst.front ().e; + else + retval(1) = Matrix(); + } + else + { + NDArray e (dim_vector(1, sz)); + i = 0; + for (const_iterator p = lst.begin(); p != lst.end(); p++) + e(i++) = p->e; + retval(1) = e; + } + + if (once) + { + if (sz) + retval(0) = lst.front ().s; + else + retval(0) = Matrix(); + } + else + { NDArray s (dim_vector(1, sz)); i = 0; for (const_iterator p = lst.begin(); p != lst.end(); p++) s(i++) = p->s; retval(0) = s; + } // Alter the order of the output arguments if (nopts > 0) *************** *** 911,931 **** %! [s, e, te, m, t] = regexp('short test string','\w*r\w*','once'); %! assert (s,1) %! assert (e,5) ! %! assert (size(te), [1,1]) ! %! assert (isempty(te{1})) ! %! assert (m{1},'short') ! %! ## Matlab gives [1,0] here but that seems wrong. ! %! assert (size(t), [1,1]) %!test %! [m, te, e, s, t] = regexp('short test string','\w*r\w*','once', 'match', 'tokenExtents', 'end', 'start', 'tokens'); %! assert (s,1) %! assert (e,5) ! %! assert (size(te), [1,1]) ! %! assert (isempty(te{1})) ! %! assert (m{1},'short') ! %! ## Matlab gives [1,0] here but that seems wrong. ! %! assert (size(t), [1,1]) %!testif HAVE_PCRE %! ## This test is expected to fail if PCRE is not installed --- 946,962 ---- %! [s, e, te, m, t] = regexp('short test string','\w*r\w*','once'); %! assert (s,1) %! assert (e,5) ! %! assert (isempty(te)) ! %! assert (m,'short') ! %! assert (isempty(t)) %!test %! [m, te, e, s, t] = regexp('short test string','\w*r\w*','once', 'match', 'tokenExtents', 'end', 'start', 'tokens'); %! assert (s,1) %! assert (e,5) ! %! assert (isempty(te)) ! %! assert (m,'short') ! %! assert (isempty(t)) %!testif HAVE_PCRE %! ## This test is expected to fail if PCRE is not installed *************** *** 1087,1107 **** %! [s, e, te, m, t] = regexpi('ShoRt Test String','\w*r\w*','once'); %! assert (s,1) %! assert (e,5) ! %! assert (size(te), [1,1]) ! %! assert (isempty(te{1})) ! %! assert (m{1},'ShoRt') ! %! ## Matlab gives [1,0] here but that seems wrong. ! %! assert (size(t), [1,1]) %!test %! [m, te, e, s, t] = regexpi('ShoRt Test String','\w*r\w*','once', 'match', 'tokenExtents', 'end', 'start', 'tokens'); %! assert (s,1) %! assert (e,5) ! %! assert (size(te), [1,1]) ! %! assert (isempty(te{1})) ! %! assert (m{1},'ShoRt') ! %! ## Matlab gives [1,0] here but that seems wrong. ! %! assert (size(t), [1,1]) %!testif HAVE_PCRE %! ## This test is expected to fail if PCRE is not installed --- 1118,1134 ---- %! [s, e, te, m, t] = regexpi('ShoRt Test String','\w*r\w*','once'); %! assert (s,1) %! assert (e,5) ! %! assert (isempty(te)) ! %! assert (m,'ShoRt') ! %! assert (isempty(t)) %!test %! [m, te, e, s, t] = regexpi('ShoRt Test String','\w*r\w*','once', 'match', 'tokenExtents', 'end', 'start', 'tokens'); %! assert (s,1) %! assert (e,5) ! %! assert (isempty(te)) ! %! assert (m,'ShoRt') ! %! assert (isempty(t)) %!testif HAVE_PCRE %! ## This test is expected to fail if PCRE is not installed *************** *** 1237,1243 **** std::list lst; string_vector named; int nopts; ! int sz = octregexp_list (regexpargs, nm , false, lst, named, nopts); if (error_state) return retval; --- 1264,1271 ---- std::list lst; string_vector named; int nopts; ! bool once; ! int sz = octregexp_list (regexpargs, nm , false, lst, named, nopts, once); if (error_state) return retval; *************** *** 1323,1329 **** std::list lst; string_vector named; int nopts; ! int sz = octregexp_list (regexpargs, nm, false, lst, named,nopts); if (error_state) return retval; --- 1351,1358 ---- std::list lst; string_vector named; int nopts; ! bool once; ! int sz = octregexp_list (regexpargs, nm, false, lst, named, nopts, once); if (error_state) return retval; diff -cNr octave-3.0.1/src/DOCSTRINGS octave-3.0.2/src/DOCSTRINGS *** octave-3.0.1/src/DOCSTRINGS 2008-04-21 18:56:24.000000000 +0200 --- octave-3.0.2/src/DOCSTRINGS 2008-08-14 13:41:59.000000000 +0200 *************** *** 9528,9533 **** --- 9528,9534 ---- putenv -*- texinfo -*- @deftypefn {Built-in Function} {} putenv (@var{var}, @var{value}) + @deftypefnx {Built-in Function} {} setenv (@var{var}, @var{value}) Set the value of the environment variable @var{var} to @var{value}. @end deftypefn kbhit diff -cNr octave-3.0.1/src/error.cc octave-3.0.2/src/error.cc *** octave-3.0.1/src/error.cc 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/src/error.cc 2008-08-01 08:59:25.000000000 +0200 *************** *** 1458,1463 **** --- 1458,1468 ---- octave_value retval; int nargin = args.length(); + unwind_protect::begin_frame ("Flasterror"); + + unwind_protect_int (error_state); + error_state = 0; + if (nargin < 2) { Octave_map err; *************** *** 1582,1587 **** --- 1587,1594 ---- else print_usage (); + unwind_protect::run_frame ("Flasterror"); + return retval; } *************** *** 1595,1600 **** --- 1602,1612 ---- { octave_value_list retval; + unwind_protect::begin_frame ("Flasterr"); + + unwind_protect_int (error_state); + error_state = 0; + int argc = args.length () + 1; if (argc < 4) *************** *** 1624,1629 **** --- 1636,1643 ---- else print_usage (); + unwind_protect::run_frame ("Flasterr"); + return retval; } diff -cNr octave-3.0.1/src/__gnuplot_raw__.cc octave-3.0.2/src/__gnuplot_raw__.cc *** octave-3.0.1/src/__gnuplot_raw__.cc 2008-04-21 18:28:38.000000000 +0200 --- octave-3.0.2/src/__gnuplot_raw__.cc 2008-08-14 13:08:57.000000000 +0200 *************** *** 5,33 **** /* A lexical scanner generated by flex */ - #define yy_create_buffer gpt_create_buffer - #define yy_delete_buffer gpt_delete_buffer - #define yy_flex_debug gpt_flex_debug - #define yy_init_buffer gpt_init_buffer - #define yy_flush_buffer gpt_flush_buffer - #define yy_load_buffer_state gpt_load_buffer_state - #define yy_switch_to_buffer gpt_switch_to_buffer - #define yyin gptin - #define yyleng gptleng - #define yylex gptlex - #define yylineno gptlineno - #define yyout gptout - #define yyrestart gptrestart - #define yytext gpttext - #define yywrap gptwrap - #define yyalloc gptalloc - #define yyrealloc gptrealloc - #define yyfree gptfree - #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 ! #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif --- 5,14 ---- /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 ! #define YY_FLEX_SUBMINOR_VERSION 33 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif *************** *** 49,55 **** /* C99 systems have . Non-C99 systems may or may not. */ ! #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. --- 30,36 ---- /* C99 systems have . Non-C99 systems may or may not. */ ! #if __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. *************** *** 72,77 **** --- 53,59 ---- typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; + #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN *************** *** 102,109 **** #define UINT32_MAX (4294967295U) #endif - #endif /* ! C99 */ - #endif /* ! FLEXINT_H */ #ifdef __cplusplus --- 84,89 ---- *************** *** 113,124 **** #else /* ! __cplusplus */ ! /* C99 requires __STDC__ to be defined as 1. */ ! #if defined (__STDC__) #define YY_USE_CONST ! #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST --- 93,103 ---- #else /* ! __cplusplus */ ! #if __STDC__ #define YY_USE_CONST ! #endif /* __STDC__ */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST *************** *** 198,206 **** #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T ! typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE --- 177,190 ---- #define unput(c) yyunput( c, (yytext_ptr) ) + /* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + */ + #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T ! typedef unsigned int yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE *************** *** 361,369 **** typedef int yy_state_type; extern int gptlineno; - - int gptlineno = 1; - extern char *gpttext; #define yytext_ptr gpttext --- 345,350 ---- *************** *** 632,638 **** /* NOT is not strictly a binary operator, but is close enough for us. */ /* single quote (') transpose operator is handled separately. */ ! #line 636 "" #define INITIAL 0 --- 613,619 ---- /* NOT is not strictly a binary operator, but is close enough for us. */ /* single quote (') transpose operator is handled separately. */ ! #line 617 "" #define INITIAL 0 *************** *** 650,684 **** static int yy_init_globals (void ); - /* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - - int gptlex_destroy (void ); - - int gptget_debug (void ); - - void gptset_debug (int debug_flag ); - - YY_EXTRA_TYPE gptget_extra (void ); - - void gptset_extra (YY_EXTRA_TYPE user_defined ); - - FILE *gptget_in (void ); - - void gptset_in (FILE * in_str ); - - FILE *gptget_out (void ); - - void gptset_out (FILE * out_str ); - - int gptget_leng (void ); - - char *gptget_text (void ); - - int gptget_lineno (void ); - - void gptset_lineno (int line_number ); - /* Macros after this point can all be overridden by user definitions in * section 1. */ --- 631,636 ---- *************** *** 721,727 **** /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ ! #define ECHO fwrite( gpttext, gptleng, 1, gptout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, --- 673,679 ---- /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ ! #define ECHO (void) fwrite( gpttext, gptleng, 1, gptout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, *************** *** 817,823 **** #line 128 "DLD-FUNCTIONS/__gnuplot_raw__.l" ! #line 821 "" if ( !(yy_init) ) { --- 769,775 ---- #line 128 "DLD-FUNCTIONS/__gnuplot_raw__.l" ! #line 773 "" if ( !(yy_init) ) { *************** *** 1083,1089 **** #line 250 "DLD-FUNCTIONS/__gnuplot_raw__.l" ECHO; YY_BREAK ! #line 1087 "" case YY_STATE_EOF(INITIAL): yyterminate(); --- 1035,1041 ---- #line 250 "DLD-FUNCTIONS/__gnuplot_raw__.l" ECHO; YY_BREAK ! #line 1039 "" case YY_STATE_EOF(INITIAL): yyterminate(); *************** *** 1314,1320 **** /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), ! (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } --- 1266,1272 ---- /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), ! (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } *************** *** 1338,1351 **** else ret_val = EOB_ACT_CONTINUE_SCAN; - if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) gptrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - } - (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; --- 1290,1295 ---- *************** *** 1761,1769 **** (yy_buffer_stack) = (struct yy_buffer_state**)gptalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); ! if ( ! (yy_buffer_stack) ) ! YY_FATAL_ERROR( "out of dynamic memory in gptensure_buffer_stack()" ); ! memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; --- 1705,1711 ---- (yy_buffer_stack) = (struct yy_buffer_state**)gptalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); ! memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; *************** *** 1781,1788 **** ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in gptensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); --- 1723,1728 ---- *************** *** 1827,1833 **** /** Setup the input buffer state to scan a string. The next call to gptlex() will * scan from a @e copy of @a str. ! * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use --- 1767,1773 ---- /** Setup the input buffer state to scan a string. The next call to gptlex() will * scan from a @e copy of @a str. ! * @param str a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use *************** *** 1905,1919 **** /* Accessor methods (get/set functions) to struct members. */ - /** Get the current line number. - * - */ - int gptget_lineno (void) - { - - return gptlineno; - } - /** Get the input stream. * */ --- 1845,1850 ---- *************** *** 1947,1962 **** return gpttext; } - /** Set the current line number. - * @param line_number - * - */ - void gptset_lineno (int line_number ) - { - - gptlineno = line_number; - } - /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. --- 1878,1883 ---- diff -cNr octave-3.0.1/src/graphics.cc octave-3.0.2/src/graphics.cc *** octave-3.0.1/src/graphics.cc 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/src/graphics.cc 2008-08-01 09:12:16.000000000 +0200 *************** *** 1140,1147 **** xdir ("normal"), ydir ("normal"), zdir ("normal"), ! xaxislocation ("bottom"), ! yaxislocation ("left"), linewidth (0.5), view (), visible ("on"), --- 1140,1147 ---- xdir ("normal"), ydir ("normal"), zdir ("normal"), ! xaxislocation ("left"), ! yaxislocation ("bottom"), linewidth (0.5), view (), visible ("on"), *************** *** 1441,1448 **** xdir = "normal"; ydir = "normal"; zdir = "normal"; ! xaxislocation = "left"; ! yaxislocation = "bottom"; linewidth = 0.5; Matrix tview (1, 2, 0.0); --- 1441,1448 ---- xdir = "normal"; ydir = "normal"; zdir = "normal"; ! xaxislocation = "bottom"; ! yaxislocation = "left"; linewidth = 0.5; Matrix tview (1, 2, 0.0); *************** *** 1815,1822 **** m["xdir"] = "normal"; m["ydir"] = "normal"; m["zdir"] = "normal"; ! m["xaxislocation"] = "bottom"; ! m["yaxislocation"] = "left"; m["linewidth"] = 0.5; Matrix tview (1, 2, 0.0); --- 1815,1822 ---- m["xdir"] = "normal"; m["ydir"] = "normal"; m["zdir"] = "normal"; ! m["xaxislocation"] = "left"; ! m["yaxislocation"] = "bottom"; m["linewidth"] = 0.5; Matrix tview (1, 2, 0.0); diff -cNr octave-3.0.1/src/load-save.cc octave-3.0.2/src/load-save.cc *** octave-3.0.1/src/load-save.cc 2008-04-21 18:00:20.000000000 +0200 --- octave-3.0.2/src/load-save.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 799,805 **** { format = LS_MAT5_BINARY; } ! else if (argv[i] == "7" || argv[i] == "-v7") { format = LS_MAT7_BINARY; } --- 799,805 ---- { format = LS_MAT5_BINARY; } ! else if (argv[i] == "-7" || argv[i] == "-v7") { format = LS_MAT7_BINARY; } diff -cNr octave-3.0.1/src/mexproto.h octave-3.0.2/src/mexproto.h *** octave-3.0.1/src/mexproto.h 2008-04-21 17:58:41.000000000 +0200 --- octave-3.0.2/src/mexproto.h 2008-08-01 08:50:56.000000000 +0200 *************** *** 116,122 **** extern OCTINTERP_API mxArray *mxCreateDoubleScalar (double val); extern OCTINTERP_API mxArray *mxCreateLogicalArray (mwSize ndims, const mwSize *dims); extern OCTINTERP_API mxArray *mxCreateLogicalMatrix (mwSize m, mwSize n); ! extern OCTINTERP_API mxArray *mxCreateLogicalScalar (int val); extern OCTINTERP_API mxArray *mxCreateNumericArray (mwSize ndims, const mwSize *dims, mxClassID class_id, mxComplexity flag); extern OCTINTERP_API mxArray *mxCreateNumericMatrix (mwSize m, mwSize n, mxClassID class_id, mxComplexity flag); extern OCTINTERP_API mxArray *mxCreateSparse (mwSize m, mwSize n, mwSize nzmax, mxComplexity flag); --- 116,122 ---- extern OCTINTERP_API mxArray *mxCreateDoubleScalar (double val); extern OCTINTERP_API mxArray *mxCreateLogicalArray (mwSize ndims, const mwSize *dims); extern OCTINTERP_API mxArray *mxCreateLogicalMatrix (mwSize m, mwSize n); ! extern OCTINTERP_API mxArray *mxCreateLogicalScalar (mxLogical val); extern OCTINTERP_API mxArray *mxCreateNumericArray (mwSize ndims, const mwSize *dims, mxClassID class_id, mxComplexity flag); extern OCTINTERP_API mxArray *mxCreateNumericMatrix (mwSize m, mwSize n, mxClassID class_id, mxComplexity flag); extern OCTINTERP_API mxArray *mxCreateSparse (mwSize m, mwSize n, mwSize nzmax, mxComplexity flag); diff -cNr octave-3.0.1/src/oct-gperf.h octave-3.0.2/src/oct-gperf.h *** octave-3.0.1/src/oct-gperf.h 2008-04-21 18:28:36.000000000 +0200 --- octave-3.0.2/src/oct-gperf.h 2008-08-20 07:28:35.000000000 +0200 *************** *** 1,4 **** ! /* C++ code produced by gperf version 3.0.3 */ /* Command-line: gperf -t -C -D -G -L C++ -Z octave_kw_hash octave.gperf */ /* Computed positions: -k'1,3' */ --- 1,4 ---- ! /* C++ code produced by gperf version 3.0.2 */ /* Command-line: gperf -t -C -D -G -L C++ -Z octave_kw_hash octave.gperf */ /* Computed positions: -k'1,3' */ diff -cNr octave-3.0.1/src/oct-map.cc octave-3.0.2/src/oct-map.cc *** octave-3.0.1/src/oct-map.cc 2008-04-21 17:58:41.000000000 +0200 --- octave-3.0.2/src/oct-map.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 222,228 **** } } else ! error ("field name mismatch in structure concatenation"); return retval; } --- 222,242 ---- } } else ! { ! dim_vector dv = dims (); ! ! if (dv.all_zero ()) ! retval = rb; ! else ! { ! dv = rb.dims (); ! ! if (dv.all_zero ()) ! retval = *this; ! else ! error ("invalid structure concatenation"); ! } ! } return retval; } diff -cNr octave-3.0.1/src/OPERATORS/op-cell.cc octave-3.0.2/src/OPERATORS/op-cell.cc *** octave-3.0.1/src/OPERATORS/op-cell.cc 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/src/OPERATORS/op-cell.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 50,55 **** --- 50,85 ---- DEFCATOP_FN (c_c, cell, cell, concat) + static octave_value + oct_catop_cell_matrix (octave_base_value& a1, const octave_base_value& a2, + const Array&) + { + octave_value retval; + CAST_BINOP_ARGS (const octave_cell&, const octave_matrix&); + NDArray tmp = v2.array_value (); + dim_vector dv = tmp.dims (); + if (dv.all_zero ()) + retval = octave_value (v1.cell_value ()); + else + error ("invalid concatenation of cell array with matrix"); + return retval; + } + + static octave_value + oct_catop_matrix_cell (octave_base_value& a1, const octave_base_value& a2, + const Array&) + { + octave_value retval; + CAST_BINOP_ARGS (const octave_cell&, const octave_matrix&); + NDArray tmp = v1.array_value (); + dim_vector dv = tmp.dims (); + if (dv.all_zero ()) + retval = octave_value (v2.cell_value ()); + else + error ("invalid concatenation of cell array with matrix"); + return retval; + } + DEFASSIGNANYOP_FN (assign, cell, assign); void *************** *** 60,65 **** --- 90,98 ---- INSTALL_CATOP (octave_cell, octave_cell, c_c); + INSTALL_CATOP (octave_cell, octave_matrix, cell_matrix); + INSTALL_CATOP (octave_matrix, octave_cell, matrix_cell); + INSTALL_ASSIGNANYOP (op_asn_eq, octave_cell, assign); } diff -cNr octave-3.0.1/src/OPERATORS/op-struct.cc octave-3.0.2/src/OPERATORS/op-struct.cc *** octave-3.0.1/src/OPERATORS/op-struct.cc 2008-04-21 17:58:40.000000000 +0200 --- octave-3.0.2/src/OPERATORS/op-struct.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 27,32 **** --- 27,33 ---- #include "gripes.h" #include "oct-obj.h" #include "ov.h" + #include "ov-re-mat.h" #include "ov-struct.h" #include "ov-typeinfo.h" #include "ops.h" *************** *** 48,53 **** --- 49,84 ---- DEFNDCATOP_FN (struct_struct, struct, struct, map, map, concat) + static octave_value + oct_catop_struct_matrix (octave_base_value& a1, const octave_base_value& a2, + const Array&) + { + octave_value retval; + CAST_BINOP_ARGS (const octave_struct&, const octave_matrix&); + NDArray tmp = v2.array_value (); + dim_vector dv = tmp.dims (); + if (dv.all_zero ()) + retval = octave_value (v1.map_value ()); + else + error ("invalid concatenation of structure with matrix"); + return retval; + } + + static octave_value + oct_catop_matrix_struct (octave_base_value& a1, const octave_base_value& a2, + const Array&) + { + octave_value retval; + CAST_BINOP_ARGS (const octave_struct&, const octave_matrix&); + NDArray tmp = v1.array_value (); + dim_vector dv = tmp.dims (); + if (dv.all_zero ()) + retval = octave_value (v2.map_value ()); + else + error ("invalid concatenation of structure with matrix"); + return retval; + } + void install_struct_ops (void) { *************** *** 55,60 **** --- 86,93 ---- INSTALL_UNOP (op_hermitian, octave_struct, transpose); INSTALL_CATOP (octave_struct, octave_struct, struct_struct); + INSTALL_CATOP (octave_struct, octave_matrix, struct_matrix); + INSTALL_CATOP (octave_matrix, octave_struct, matrix_struct); } /* diff -cNr octave-3.0.1/src/ov-cell.cc octave-3.0.2/src/ov-cell.cc *** octave-3.0.1/src/ov-cell.cc 2008-04-21 18:00:21.000000000 +0200 --- octave-3.0.2/src/ov-cell.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 1079,1085 **** string_vector s = args(0).all_strings (); if (! error_state) ! retval = Cell (s, true); else error ("cellstr: expecting argument to be a 2-d character array"); } --- 1079,1087 ---- string_vector s = args(0).all_strings (); if (! error_state) ! retval = (s.is_empty () ! ? Cell (octave_value (std::string ())) ! : Cell (s, true)); else error ("cellstr: expecting argument to be a 2-d character array"); } *************** *** 1114,1120 **** string_vector keys = m.keys (); ! octave_idx_type fields_numel = keys.length (); // The resulting dim_vector should have dimensions: // [numel(fields) size(struct)] --- 1116,1122 ---- string_vector keys = m.keys (); ! octave_idx_type num_fields = keys.length (); // The resulting dim_vector should have dimensions: // [numel(fields) size(struct)] *************** *** 1122,1165 **** dim_vector result_dv; result_dv.resize (m_dv.length () + 1); // Add 1 for the fields. ! result_dv(0) = fields_numel; for (int i = 1; i < result_dv.length (); i++) result_dv(i) = m_dv(i-1); - // Squeeze to be sure that a (3,1) vector doesn't get turned - // into a (3,3,1) vector. - - result_dv = result_dv.squeeze (); - Cell c (result_dv); ! // Use ra_idx both for counting and for assignments, so ! // ra_idx(0) will both contain fields_numel for each call to ! // increment_index and j for each assignment. ! Array ra_idx (result_dv.length (), 0); ! ra_idx(0) = fields_numel; ! ! for (octave_idx_type i = 0; i < m_dv.numel (); i++) { ! for (octave_idx_type j = 0; j < fields_numel; j++) ! { ! ra_idx(0) = j; ! Cell c_tmp = m.contents (keys(j)); ! if (c_tmp.length () > 1) // Is a cell. ! c(ra_idx) = c_tmp; ! else if (c_tmp.length () == 1) // Get octave_value. ! c(ra_idx) = c_tmp(0); ! else ! c(ra_idx) = Cell (); ! ! ra_idx(0) = fields_numel; } - - increment_index (ra_idx, result_dv); } retval = c; --- 1124,1149 ---- dim_vector result_dv; result_dv.resize (m_dv.length () + 1); // Add 1 for the fields. ! result_dv(0) = num_fields; for (int i = 1; i < result_dv.length (); i++) result_dv(i) = m_dv(i-1); Cell c (result_dv); ! octave_idx_type n_elts = m.numel (); ! for (octave_idx_type j = 0; j < num_fields; j++) { ! octave_idx_type k = j; ! const Cell vals = m.contents (keys(j)); ! for (octave_idx_type i = 0; i < n_elts; i++) ! { ! c(k) = vals(i); ! k += num_fields; } } retval = c; diff -cNr octave-3.0.1/src/ov-fcn-handle.cc octave-3.0.2/src/ov-fcn-handle.cc *** octave-3.0.1/src/ov-fcn-handle.cc 2008-04-21 18:00:21.000000000 +0200 --- octave-3.0.2/src/ov-fcn-handle.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 1377,1383 **** Cell parentage (dim_vector (1, 2)); parentage.elem(0) = fh_nm; parentage.elem(1) = fcn->parent_fcn_name (); ! m.assign ("parentage", parentage); } else m.assign ("type", "simple"); --- 1377,1383 ---- Cell parentage (dim_vector (1, 2)); parentage.elem(0) = fh_nm; parentage.elem(1) = fcn->parent_fcn_name (); ! m.assign ("parentage", octave_value (parentage)); } else m.assign ("type", "simple"); diff -cNr octave-3.0.1/src/ov-fcn-inline.cc octave-3.0.2/src/ov-fcn-inline.cc *** octave-3.0.1/src/ov-fcn-inline.cc 2008-04-21 18:00:21.000000000 +0200 --- octave-3.0.2/src/ov-fcn-inline.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 673,679 **** break; } ! if (! have_arg && tmp_arg != "i" && tmp_arg != "j") fargs.append (tmp_arg); tmp_arg = std::string (); --- 673,683 ---- break; } ! if (! have_arg && tmp_arg != "i" && tmp_arg != "j" && ! tmp_arg != "NaN" && tmp_arg != "nan" && ! tmp_arg != "Inf" && tmp_arg != "inf" && ! tmp_arg != "NA" && tmp_arg != "pi" && ! tmp_arg != "eps") fargs.append (tmp_arg); tmp_arg = std::string (); diff -cNr octave-3.0.1/src/ov-struct.cc octave-3.0.2/src/ov-struct.cc *** octave-3.0.1/src/ov-struct.cc 2008-04-21 18:00:21.000000000 +0200 --- octave-3.0.2/src/ov-struct.cc 2008-08-14 07:13:16.000000000 +0200 *************** *** 129,135 **** } } else ! retval(0) = map.index (idx.front (), true); } break; --- 129,135 ---- } } else ! retval(0) = map.index (idx.front (), false); } break; *************** *** 162,167 **** --- 162,175 ---- return retval; } + /* + %!test + %! x(1).a.a = 1; x(2).a.a = 2; + %! assert (size (x), [1, 2]); + %! assert (x(1).a.a, 1); + %! assert (x(2).a.a, 2); + */ + octave_value octave_struct::numeric_conv (const Cell& val, const std::string& type) diff -cNr octave-3.0.1/src/pr-output.cc octave-3.0.2/src/pr-output.cc *** octave-3.0.1/src/pr-output.cc 2008-04-21 18:00:21.000000000 +0200 --- octave-3.0.2/src/pr-output.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 2719,2736 **** int nargin = args.length (); ! unwind_protect::begin_frame ("Frats"); ! unwind_protect_int (rat_string_len); ! rat_string_len = 9; ! if (nargin == 2) ! rat_string_len = args(1).nint_value (); ! if (! error_state) ! { ! if (nargin < 3 && nargout < 2) { octave_value arg = args(0); --- 2719,2738 ---- int nargin = args.length (); ! if (nargin < 1 || nargin > 2 || nargout > 1) ! print_usage (); ! else ! { ! unwind_protect::begin_frame ("Frats"); ! unwind_protect_int (rat_string_len); ! rat_string_len = 9; ! if (nargin == 2) ! rat_string_len = args(1).nint_value (); ! if (! error_state) { octave_value arg = args(0); *************** *** 2770,2780 **** else error ("rats: expecting numeric input"); } - else - print_usage (); - } ! unwind_protect::run_frame ("Frats"); return retval; } --- 2772,2780 ---- else error ("rats: expecting numeric input"); } ! unwind_protect::run_frame ("Frats"); ! } return retval; } diff -cNr octave-3.0.1/src/sysdep.cc octave-3.0.2/src/sysdep.cc *** octave-3.0.1/src/sysdep.cc 2008-04-21 17:58:41.000000000 +0200 --- octave-3.0.2/src/sysdep.cc 2008-08-01 08:50:56.000000000 +0200 *************** *** 623,628 **** --- 623,629 ---- DEFUN (putenv, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} putenv (@var{var}, @var{value})\n\ + @deftypefnx {Built-in Function} {} setenv (@var{var}, @var{value})\n\ Set the value of the environment variable @var{var} to @var{value}.\n\ @end deftypefn") { *************** *** 630,642 **** int nargin = args.length (); ! if (nargin == 2) { std::string var = args(0).string_value (); if (! error_state) { ! std::string val = args(1).string_value (); if (! error_state) octave_env::putenv (var, val); --- 631,644 ---- int nargin = args.length (); ! if (nargin == 2 || nargin == 1) { std::string var = args(0).string_value (); if (! error_state) { ! std::string val = (nargin == 2 ! ? args(1).string_value () : std::string ()); if (! error_state) octave_env::putenv (var, val); *************** *** 651,656 **** --- 653,659 ---- return retval; } + DEFALIAS (setenv, putenv); // FIXME -- perhaps kbhit should also be able to print a prompt? diff -cNr octave-3.0.1/src/version.h octave-3.0.2/src/version.h *** octave-3.0.1/src/version.h 2008-04-21 18:01:57.000000000 +0200 --- octave-3.0.2/src/version.h 2008-08-20 07:28:21.000000000 +0200 *************** *** 24,34 **** #if !defined (octave_version_h) #define octave_version_h 1 ! #define OCTAVE_VERSION "3.0.1" #define OCTAVE_API_VERSION "api-v32" ! #define OCTAVE_RELEASE_DATE "2008-12-21" #define OCTAVE_COPYRIGHT "Copyright (C) 2008 John W. Eaton and others." --- 24,34 ---- #if !defined (octave_version_h) #define octave_version_h 1 ! #define OCTAVE_VERSION "3.0.2" #define OCTAVE_API_VERSION "api-v32" ! #define OCTAVE_RELEASE_DATE "2008-08-14" #define OCTAVE_COPYRIGHT "Copyright (C) 2008 John W. Eaton and others." diff -cNr octave-3.0.1/test/ChangeLog octave-3.0.2/test/ChangeLog *** octave-3.0.1/test/ChangeLog 2008-04-21 18:02:34.000000000 +0200 --- octave-3.0.2/test/ChangeLog 2008-08-20 07:28:21.000000000 +0200 *************** *** 1,3 **** --- 1,17 ---- + 2008-08-19 Jaroslav Hajek + + Version 3.0.2 released. + + 2008-06-02 John W. Eaton + + * test_io.m, test_system.m, octave.test/io/sprintf-1.m, + octave.test/io/sscanf-1.m, octave.test/io/tmpnam-1.m, + octave.test/system/computer-1.m, + octave.test/system/file_in_path-1.m, octave.test/system/lstat-1.m, + octave.test/system/pwd-1.m, octave.test/system/stat-1.m, + octave.test/system/strftime-1.m, octave.test/system/version-1.m: + Call ischar instead of isstr. + 2008-04-21 John W. Eaton Version 3.0.1 released. diff -cNr octave-3.0.1/test/test_io.m octave-3.0.2/test/test_io.m *** octave-3.0.1/test/test_io.m 2008-04-21 18:00:22.000000000 +0200 --- octave-3.0.2/test/test_io.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 210,217 **** %! [v2, c2, m2] = sscanf ("1 2 bar 3 4 5 6", "%d"); %! %! assert((a == 1.2 && b == 3 && c == "foo" ! %! && v1 == [1; 2; 3; 4; 5; 6] && c1 == 6 && isstr (m1) ! %! && v2 == [1; 2] && c2 == 2 && isstr (m2))); %% test/octave.test/io/sscanf-2.m %!error sscanf (); --- 210,217 ---- %! [v2, c2, m2] = sscanf ("1 2 bar 3 4 5 6", "%d"); %! %! assert((a == 1.2 && b == 3 && c == "foo" ! %! && v1 == [1; 2; 3; 4; 5; 6] && c1 == 6 && ischar (m1) ! %! && v2 == [1; 2] && c2 == 2 && ischar (m2))); %% test/octave.test/io/sscanf-2.m %!error sscanf (); *************** *** 251,257 **** %!test %! [s, msg, status] = sprintf ("%s: %d\n", "test", 1); %! ! %! assert(s == "test: 1\n" && isstr (msg) && status == 8); %% test/octave.test/io/sprintf-2.m %!error sprintf (1); --- 251,257 ---- %!test %! [s, msg, status] = sprintf ("%s: %d\n", "test", 1); %! ! %! assert(s == "test: 1\n" && ischar (msg) && status == 8); %% test/octave.test/io/sprintf-2.m %!error sprintf (1); *************** *** 340,346 **** %!error fclose (1, 2); %% test/octave.test/io/tmpnam-1.m ! %!assert(isstr (tmpnam ())); %% test/octave.test/io/tmpnam-2.m %!warning tmpnam (1); --- 340,346 ---- %!error fclose (1, 2); %% test/octave.test/io/tmpnam-1.m ! %!assert(ischar (tmpnam ())); %% test/octave.test/io/tmpnam-2.m %!warning tmpnam (1); diff -cNr octave-3.0.1/test/test_sparse.m octave-3.0.2/test/test_sparse.m *** octave-3.0.1/test/test_sparse.m 1970-01-01 01:00:00.000000000 +0100 --- octave-3.0.2/test/test_sparse.m 2008-08-14 15:32:28.000000000 +0200 *************** *** 0 **** --- 1,2904 ---- + ## THIS IS AN AUTOMATICALLY GENERATED FILE --- DO NOT EDIT --- + ## instead modify build_sparse_tests.sh to generate the tests that you want. + ## + ## test_sparse + ## + ## run preset sparse tests. All should pass. + function [passes,tests] = test_sparse + disp("writing test output to sptest.log"); + test("test_sparse","normal","sptest.log"); + endfunction + + + # ============================================================== + + + # ============================================================== + + + %!test # segfault test from edd@debian.org + %! n = 510; + %! sparse(kron((1:n)', ones(n,1)), kron(ones(n,1), (1:n)'), ones(n)); + + %% segfault tests from Fabian@isas-berlin.de + %% Note that the last four do not fail, but rather give a warning + %% of a singular matrix, which is consistent with the full matrix + %% behaviour. They are therefore disabled.. + %!testif HAVE_UMFPACK + %! assert(spinv(sparse([1,1;1,1+i])),sparse([1-1i,1i;1i,-1i]),10*eps); + % !error spinv( sparse( [1,1;1,1] ) ); + % !error spinv( sparse( [0,0;0,1] ) ); + % !error spinv( sparse( [0,0;0,1+i] ) ); + % !error spinv( sparse( [0,0;0,0] ) ); + + %% error handling in constructor + %!error sparse(1,[2,3],[1,2,3]); + %!error sparse([1,1],[1,1],[1,2],3,3,"bogus"); + %!error sparse([1,3],[1,-4],[3,5],2,2); + %!error sparse([1,3],[1,-4],[3,5i],2,2); + %!error sparse(-1,-1,1); + + # ============================================================== + + %!shared bf + %!test bf=realmin; + %% Make sure newly introduced zeros get eaten + %!assert(nnz(sparse([bf,bf,1]).^realmax),1); + %!assert(nnz(sparse([1,bf,bf]).^realmax),1); + %!assert(nnz(sparse([bf,bf,bf]).^realmax),0); + + %!assert(nnz(sparse([bf;bf;1]).^realmax),1); + %!assert(nnz(sparse([1;bf;bf]).^realmax),1); + %!assert(nnz(sparse([0.5;bf;bf]).^realmax),0); + + %!assert(nnz(sparse([bf,bf,1])*realmin),1); + %!assert(nnz(sparse([1,bf,bf])*realmin),1); + %!assert(nnz(sparse([bf,bf,bf])*realmin),0); + + %!assert(nnz(sparse([bf;bf;1])*realmin),1); + %!assert(nnz(sparse([1;bf;bf])*realmin),1); + %!assert(nnz(sparse([bf;bf;bf])*realmin),0); + + %!test bf=realmin+realmin*1i; + %% Make sure newly introduced zeros get eaten + %!assert(nnz(sparse([bf,bf,1]).^realmax),1); + %!assert(nnz(sparse([1,bf,bf]).^realmax),1); + %!assert(nnz(sparse([bf,bf,bf]).^realmax),0); + + %!assert(nnz(sparse([bf;bf;1]).^realmax),1); + %!assert(nnz(sparse([1;bf;bf]).^realmax),1); + %!assert(nnz(sparse([0.5;bf;bf]).^realmax),0); + + %!assert(nnz(sparse([bf,bf,1])*realmin),1); + %!assert(nnz(sparse([1,bf,bf])*realmin),1); + %!assert(nnz(sparse([bf,bf,bf])*realmin),0); + + %!assert(nnz(sparse([bf;bf;1])*realmin),1); + %!assert(nnz(sparse([1;bf;bf])*realmin),1); + %!assert(nnz(sparse([bf;bf;bf])*realmin),0); + + %!assert(nnz(sparse([-1,realmin,realmin]).^1.5),1); + %!assert(nnz(sparse([-1,realmin,realmin,1]).^1.5),2); + + %!assert(nnz(sparse(1,1,0)),0); # Make sure scalar v==0 doesn't confuse matters + %!assert(nnz(sparse(eye(3))*0),0); + %!assert(nnz(sparse(eye(3))-sparse(eye(3))),0); + + %!test + %! wdbz = warning ("query", "Octave:divide-by-zero"); + %! warning ("off", "Octave:divide-by-zero"); + %! assert(full(sparse(eye(3))/0),eye(3)/0); + %! warning (wdbz.state, "Octave:divide-by-zero"); + + + # ============================================================== + + %!shared as,af,bs,bf + %!test af=[1+1i,2-1i,0,0;0,0,0,3+2i;0,0,0,4]; + %!test bf=3; + %!test as=sparse(af); + %!test bs=bf; + %% Elementwise binary tests (uses as,af,bs,bf,scalar) + %!assert(as==bs,sparse(af==bf)) + %!assert(bf==as,sparse(bf==af)) + + %!assert(as!=bf,sparse(af!=bf)) + %!assert(bf!=as,sparse(bf!=af)) + + %!assert(as+bf,af+bf) + %!assert(bf+as,bf+af) + + %!assert(as-bf,af-bf) + %!assert(bf-as,bf-af) + + %!assert(as.*bf,sparse(af.*bf)) + %!assert(bf.*as,sparse(bf.*af)) + + %!assert(as./bf,sparse(af./bf),100*eps) + %!assert(bf.\as,sparse(bf.\af),100*eps) + + %!test + %! sv = as.^bf; + %! fv = af.^bf; + %! idx = find(af~=0); + %! assert(sv(:)(idx),sparse(fv(:)(idx)),100*eps) + + %% real values can be ordered (uses as,af) + %!assert(as<=bf,sparse(af<=bf)) + %!assert(bf<=as,sparse(bf<=af)) + + %!assert(as>=bf,sparse(af>=bf)) + %!assert(bf>=as,sparse(bf>=af)) + + %!assert(asbf,sparse(af>bf)) + %!assert(bf>as,sparse(bf>af)) + + %!test bf=bf+1i; + %!test bs=bf; + %% Elementwise binary tests (uses as,af,bs,bf,scalar) + %!assert(as==bs,sparse(af==bf)) + %!assert(bf==as,sparse(bf==af)) + + %!assert(as!=bf,sparse(af!=bf)) + %!assert(bf!=as,sparse(bf!=af)) + + %!assert(as+bf,af+bf) + %!assert(bf+as,bf+af) + + %!assert(as-bf,af-bf) + %!assert(bf-as,bf-af) + + %!assert(as.*bf,sparse(af.*bf)) + %!assert(bf.*as,sparse(bf.*af)) + + %!assert(as./bf,sparse(af./bf),100*eps) + %!assert(bf.\as,sparse(bf.\af),100*eps) + + %!test + %! sv = as.^bf; + %! fv = af.^bf; + %! idx = find(af~=0); + %! assert(sv(:)(idx),sparse(fv(:)(idx)),100*eps) + + + # ============================================================== + + %!test af=[1+1i,2-1i,0,0;0,0,0,3+2i;0,0,0,4]; + %!test bf=[0,1-1i,0,0;2+1i,0,0,0;3-1i,2+3i,0,0]; + %!test as=sparse(af); + %!test bs=sparse(bf); + %% Unary matrix tests (uses af,as) + %!assert(abs(as),sparse(abs(af))) + %!assert(acos(as),sparse(acos(af))) + %!assert(acosh(as),sparse(acosh(af))) + %!assert(angle(as),sparse(angle(af))) + %!assert(arg(as),sparse(arg(af))) + %!assert(asin(as),sparse(asin(af))) + %!assert(asinh(as),sparse(asinh(af))) + %!assert(atan(as),sparse(atan(af))) + %!assert(atanh(as),sparse(atanh(af))) + %!assert(ceil(as),sparse(ceil(af))) + %!assert(conj(as),sparse(conj(af))) + %!assert(cos(as),sparse(cos(af))) + %!assert(cosh(as),sparse(cosh(af))) + %!assert(exp(as),sparse(exp(af))) + %!assert(finite(as),sparse(finite(af))) + %!assert(fix(as),sparse(fix(af))) + %!assert(floor(as),sparse(floor(af))) + %!assert(imag(as),sparse(imag(af))) + %!assert(isinf(as),sparse(isinf(af))) + %!assert(isna(as),sparse(isna(af))) + %!assert(isnan(as),sparse(isnan(af))) + %!assert(log(as),sparse(log(af))) + %!assert(real(as),sparse(real(af))) + %!assert(round(as),sparse(round(af))) + %!assert(sign(as),sparse(sign(af))) + %!assert(sin(as),sparse(sin(af))) + %!assert(sinh(as),sparse(sinh(af))) + %!assert(sqrt(as),sparse(sqrt(af))) + %!assert(tan(as),sparse(tan(af))) + %!assert(tanh(as),sparse(tanh(af))) + %!assert(issparse(abs(as))&&isreal(abs(as))) + %!assert(issparse(real(as))&&isreal(real(as))) + %!assert(issparse(imag(as))&&isreal(imag(as))) + + %% Unary matrix tests (uses af,as) + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (1) + %! assert(erf(as),sparse(erf(af))) + %! else + %! assert(erf(as),erf(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (1) + %! assert(erfc(as),sparse(erfc(af))) + %! else + %! assert(erfc(as),erfc(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isalnum(as),sparse(isalnum(af))) + %! else + %! assert(isalnum(as),isalnum(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isalpha(as),sparse(isalpha(af))) + %! else + %! assert(isalpha(as),isalpha(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isascii(as),sparse(isascii(af))) + %! else + %! assert(isascii(as),isascii(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(iscntrl(as),sparse(iscntrl(af))) + %! else + %! assert(iscntrl(as),iscntrl(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isdigit(as),sparse(isdigit(af))) + %! else + %! assert(isdigit(as),isdigit(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isgraph(as),sparse(isgraph(af))) + %! else + %! assert(isgraph(as),isgraph(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(islower(as),sparse(islower(af))) + %! else + %! assert(islower(as),islower(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isprint(as),sparse(isprint(af))) + %! else + %! assert(isprint(as),isprint(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(ispunct(as),sparse(ispunct(af))) + %! else + %! assert(ispunct(as),ispunct(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isspace(as),sparse(isspace(af))) + %! else + %! assert(isspace(as),isspace(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isupper(as),sparse(isupper(af))) + %! else + %! assert(isupper(as),isupper(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isxdigit(as),sparse(isxdigit(af))) + %! else + %! assert(isxdigit(as),isxdigit(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + + %% These mapper functions always return a full matrix + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! assert(toascii(as),toascii(af)) + %! assert(tolower(as),tolower(af)) + %! assert(toupper(as),toupper(af)) + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %% Unary matrix tests (uses af,as) + %!assert(issparse(as)) + %!assert(!issparse(af)) + %!assert(!(issparse(af)&&iscomplex(af))) + %!assert(!(issparse(af)&&isreal(af))) + %!assert(spsum(as),sparse(sum(af))) + %!assert(spsum(as,1),sparse(sum(af,1))) + %!assert(spsum(as,2),sparse(sum(af,2))) + %!assert(spcumsum(as),sparse(cumsum(af))) + %!assert(spcumsum(as,1),sparse(cumsum(af,1))) + %!assert(spcumsum(as,2),sparse(cumsum(af,2))) + %!assert(spsumsq(as),sparse(sumsq(af))) + %!assert(spsumsq(as,1),sparse(sumsq(af,1))) + %!assert(spsumsq(as,2),sparse(sumsq(af,2))) + %!assert(spprod(as),sparse(prod(af))) + %!assert(spprod(as,1),sparse(prod(af,1))) + %!assert(spprod(as,2),sparse(prod(af,2))) + %!assert(spcumprod(as),sparse(cumprod(af))) + %!assert(spcumprod(as,1),sparse(cumprod(af,1))) + %!assert(spcumprod(as,2),sparse(cumprod(af,2))) + + %!assert(spmin(as),sparse(min(af))) + %!assert(full(spmin(as(:))),min(af(:))) + %!assert(spmin(as,[],1),sparse(min(af,[],1))) + %!assert(spmin(as,[],2),sparse(min(af,[],2))) + %!assert(spmin(as,[],1),sparse(min(af,[],1))) + %!assert(spmin(as,0),sparse(min(af,0))) + %!assert(spmin(as,bs),sparse(min(af,bf))) + %!assert(spmax(as),sparse(max(af))) + %!assert(full(spmax(as(:))),max(af(:))) + %!assert(spmax(as,[],1),sparse(max(af,[],1))) + %!assert(spmax(as,[],2),sparse(max(af,[],2))) + %!assert(spmax(as,[],1),sparse(max(af,[],1))) + %!assert(spmax(as,0),sparse(max(af,0))) + %!assert(spmax(as,bs),sparse(max(af,bf))) + + %!assert(as==as) + %!assert(as==af) + %!assert(af==as) + %!test + %! [ii,jj,vv,nr,nc] = spfind(as); + %! assert(af,full(sparse(ii,jj,vv,nr,nc))); + %!assert(nnz(as),sum(af(:)!=0)) + %!assert(nnz(as),nnz(af)) + %!assert(issparse(as.')) + %!assert(issparse(as')) + %!assert(issparse(-as)) + %!assert(~as,sparse(~af)) + %!assert(as.', sparse(af.')); + %!assert(as', sparse(af')); + %!assert(-as, sparse(-af)); + %!assert(~as, sparse(~af)); + %!error [i,j]=size(af);as(i-1,j+1); + %!error [i,j]=size(af);as(i+1,j-1); + %!test + %! [Is,Js,Vs] = spfind(as); + %! [If,Jf,Vf] = find(af); + %! assert(Is,If); + %! assert(Js,Jf); + %! assert(Vs,Vf); + %!error as(0,1); + %!error as(1,0); + %!assert(spfind(as),find(af)) + %!test + %! [i,j,v] = spfind(as); + %! [m,n] = size(as); + %! x = sparse(i,j,v,m,n); + %! assert(x,as); + %!test + %! [i,j,v,m,n] = spfind(as); + %! x = sparse(i,j,v,m,n); + %! assert(x,as); + %!assert(issparse(horzcat(as,as))); + %!assert(issparse(vertcat(as,as))); + %!assert(issparse(cat(1,as,as))); + %!assert(issparse(cat(2,as,as))); + %!assert(issparse([as,as])); + %!assert(issparse([as;as])); + %!assert(horzcat(as,as), sparse([af,af])); + %!assert(vertcat(as,as), sparse([af;af])); + %!assert(horzcat(as,as,as), sparse([af,af,af])); + %!assert(vertcat(as,as,as), sparse([af;af;af])); + %!assert([as,as], sparse([af,af])); + %!assert([as;as], sparse([af;af])); + %!assert([as,as,as], sparse([af,af,af])); + %!assert([as;as;as], sparse([af;af;af])); + %!assert(cat(2,as,as), sparse([af,af])); + %!assert(cat(1,as,as), sparse([af;af])); + %!assert(cat(2,as,as,as), sparse([af,af,af])); + %!assert(cat(1,as,as,as), sparse([af;af;af])); + %!assert(issparse([as,af])); + %!assert(issparse([af,as])); + %!assert([as,af], sparse([af,af])); + %!assert([as;af], sparse([af;af])); + + %% Elementwise binary tests (uses as,af,bs,bf,scalar) + %!assert(as==bs,sparse(af==bf)) + %!assert(bf==as,sparse(bf==af)) + + %!assert(as!=bf,sparse(af!=bf)) + %!assert(bf!=as,sparse(bf!=af)) + + %!assert(as+bf,af+bf) + %!assert(bf+as,bf+af) + + %!assert(as-bf,af-bf) + %!assert(bf-as,bf-af) + + %!assert(as.*bf,sparse(af.*bf)) + %!assert(bf.*as,sparse(bf.*af)) + + %!assert(as./bf,sparse(af./bf),100*eps) + %!assert(bf.\as,sparse(bf.\af),100*eps) + + %!test + %! sv = as.^bf; + %! fv = af.^bf; + %! idx = find(af~=0); + %! assert(sv(:)(idx),sparse(fv(:)(idx)),100*eps) + + %!assert(as==bs,sparse(af==bf)) + %!assert(as!=bs,sparse(af!=bf)) + %!assert(as+bs,sparse(af+bf)) + %!assert(as-bs,sparse(af-bf)) + %!assert(as.*bs,sparse(af.*bf)) + %!xtest assert(as./bs,sparse(af./bf),100*eps); + %!test + %! sv = as.^bs; + %! fv = af.^bf; + %! idx = find(af~=0); + %! assert(sv(:)(idx),sparse(fv(:)(idx)),100*eps) + + %% Matrix-matrix operators (uses af,as,bs,bf) + %!assert(as*bf',af*bf') + %!assert(af*bs',af*bf') + %!assert(as*bs',sparse(af*bf')) + + %% Matrix diagonal tests (uses af,as,bf,bs) + %!assert(spdiag(as),sparse(diag(af))) + %!assert(spdiag(bs),sparse(diag(bf))) + %!assert(spdiag(as,1),sparse(diag(af,1))) + %!assert(spdiag(bs,1),sparse(diag(bf,1))) + %!assert(spdiag(as,-1),sparse(diag(af,-1))) + %!assert(spdiag(bs,-1),sparse(diag(bf,-1))) + %!assert(spdiag(as(:)),sparse(diag(af(:)))) + %!assert(spdiag(as(:),1),sparse(diag(af(:),1))) + %!assert(spdiag(as(:),-1),sparse(diag(af(:),-1))) + %!assert(spdiag(as(:)'),sparse(diag(af(:)'))) + %!assert(spdiag(as(:)',1),sparse(diag(af(:)',1))) + %!assert(spdiag(as(:)',-1),sparse(diag(af(:)',-1))) + %!assert(spdiags(as,[0,1]),[diag(af,0),diag(af,1)]) + %!test [tb,tc]=spdiags(as); + %! assert(spdiags(tb,tc,sparse(zeros(size(as)))),as) + %! assert(spdiags(tb,tc,size(as,1),size(as,2)),as) + + %% Matrix diagonal tests (uses af,as,bf,bs) + %!assert(reshape(as,1,prod(size(as))),sparse(reshape(af,1,prod(size(af))))) + %!assert(reshape(as,prod(size(as)),1),sparse(reshape(af,prod(size(af)),1))) + %!assert(reshape(as,fliplr(size(as))),sparse(reshape(af,fliplr(size(af))))) + %!assert(reshape(bs,1,prod(size(as))),sparse(reshape(bf,1,prod(size(af))))) + %!assert(reshape(bs,prod(size(as)),1),sparse(reshape(bf,prod(size(af)),1))) + %!assert(reshape(bs,fliplr(size(as))),sparse(reshape(bf,fliplr(size(af))))) + + + # ============================================================== + + %!test # save ascii + %! savefile= tmpnam(); + %! as_save=as; save("-text",savefile,"bf","as_save","af"); + %! clear as_save; + %! load(savefile,"as_save"); + %! unlink(savefile); + %! assert(as_save,sparse(af)); + %!test # save binary + %! savefile= tmpnam(); + %! as_save=as; save("-binary",savefile,"bf","as_save","af"); + %! clear as_save; + %! load(savefile,"as_save"); + %! unlink(savefile); + %! assert(as_save,sparse(af)); + %!test # save hdf5 + %! savefile= tmpnam(); + %! as_save=as; save("-hdf5",savefile,"bf","as_save","af"); + %! clear as_save; + %! load(savefile,"as_save"); + %! unlink(savefile); + %! assert(as_save,sparse(af)); + %!test # save matlab + %! savefile= tmpnam(); + %! as_save=as; save("-mat",savefile,"bf","as_save","af"); + %! clear as_save; + %! load(savefile,"as_save"); + %! unlink(savefile); + %! assert(as_save,sparse(af)); + + # ============================================================== + + %!test bf=real(bf); + %!test as=sparse(af); + %!test bs=sparse(bf); + %% Unary matrix tests (uses af,as) + %!assert(abs(as),sparse(abs(af))) + %!assert(acos(as),sparse(acos(af))) + %!assert(acosh(as),sparse(acosh(af))) + %!assert(angle(as),sparse(angle(af))) + %!assert(arg(as),sparse(arg(af))) + %!assert(asin(as),sparse(asin(af))) + %!assert(asinh(as),sparse(asinh(af))) + %!assert(atan(as),sparse(atan(af))) + %!assert(atanh(as),sparse(atanh(af))) + %!assert(ceil(as),sparse(ceil(af))) + %!assert(conj(as),sparse(conj(af))) + %!assert(cos(as),sparse(cos(af))) + %!assert(cosh(as),sparse(cosh(af))) + %!assert(exp(as),sparse(exp(af))) + %!assert(finite(as),sparse(finite(af))) + %!assert(fix(as),sparse(fix(af))) + %!assert(floor(as),sparse(floor(af))) + %!assert(imag(as),sparse(imag(af))) + %!assert(isinf(as),sparse(isinf(af))) + %!assert(isna(as),sparse(isna(af))) + %!assert(isnan(as),sparse(isnan(af))) + %!assert(log(as),sparse(log(af))) + %!assert(real(as),sparse(real(af))) + %!assert(round(as),sparse(round(af))) + %!assert(sign(as),sparse(sign(af))) + %!assert(sin(as),sparse(sin(af))) + %!assert(sinh(as),sparse(sinh(af))) + %!assert(sqrt(as),sparse(sqrt(af))) + %!assert(tan(as),sparse(tan(af))) + %!assert(tanh(as),sparse(tanh(af))) + %!assert(issparse(abs(as))&&isreal(abs(as))) + %!assert(issparse(real(as))&&isreal(real(as))) + %!assert(issparse(imag(as))&&isreal(imag(as))) + + %% Unary matrix tests (uses af,as) + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (1) + %! assert(erf(as),sparse(erf(af))) + %! else + %! assert(erf(as),erf(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (1) + %! assert(erfc(as),sparse(erfc(af))) + %! else + %! assert(erfc(as),erfc(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isalnum(as),sparse(isalnum(af))) + %! else + %! assert(isalnum(as),isalnum(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isalpha(as),sparse(isalpha(af))) + %! else + %! assert(isalpha(as),isalpha(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isascii(as),sparse(isascii(af))) + %! else + %! assert(isascii(as),isascii(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(iscntrl(as),sparse(iscntrl(af))) + %! else + %! assert(iscntrl(as),iscntrl(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isdigit(as),sparse(isdigit(af))) + %! else + %! assert(isdigit(as),isdigit(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isgraph(as),sparse(isgraph(af))) + %! else + %! assert(isgraph(as),isgraph(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(islower(as),sparse(islower(af))) + %! else + %! assert(islower(as),islower(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isprint(as),sparse(isprint(af))) + %! else + %! assert(isprint(as),isprint(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(ispunct(as),sparse(ispunct(af))) + %! else + %! assert(ispunct(as),ispunct(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isspace(as),sparse(isspace(af))) + %! else + %! assert(isspace(as),isspace(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isupper(as),sparse(isupper(af))) + %! else + %! assert(isupper(as),isupper(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isxdigit(as),sparse(isxdigit(af))) + %! else + %! assert(isxdigit(as),isxdigit(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + + %% These mapper functions always return a full matrix + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! assert(toascii(as),toascii(af)) + %! assert(tolower(as),tolower(af)) + %! assert(toupper(as),toupper(af)) + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %% Unary matrix tests (uses af,as) + %!assert(issparse(as)) + %!assert(!issparse(af)) + %!assert(!(issparse(af)&&iscomplex(af))) + %!assert(!(issparse(af)&&isreal(af))) + %!assert(spsum(as),sparse(sum(af))) + %!assert(spsum(as,1),sparse(sum(af,1))) + %!assert(spsum(as,2),sparse(sum(af,2))) + %!assert(spcumsum(as),sparse(cumsum(af))) + %!assert(spcumsum(as,1),sparse(cumsum(af,1))) + %!assert(spcumsum(as,2),sparse(cumsum(af,2))) + %!assert(spsumsq(as),sparse(sumsq(af))) + %!assert(spsumsq(as,1),sparse(sumsq(af,1))) + %!assert(spsumsq(as,2),sparse(sumsq(af,2))) + %!assert(spprod(as),sparse(prod(af))) + %!assert(spprod(as,1),sparse(prod(af,1))) + %!assert(spprod(as,2),sparse(prod(af,2))) + %!assert(spcumprod(as),sparse(cumprod(af))) + %!assert(spcumprod(as,1),sparse(cumprod(af,1))) + %!assert(spcumprod(as,2),sparse(cumprod(af,2))) + + %!assert(spmin(as),sparse(min(af))) + %!assert(full(spmin(as(:))),min(af(:))) + %!assert(spmin(as,[],1),sparse(min(af,[],1))) + %!assert(spmin(as,[],2),sparse(min(af,[],2))) + %!assert(spmin(as,[],1),sparse(min(af,[],1))) + %!assert(spmin(as,0),sparse(min(af,0))) + %!assert(spmin(as,bs),sparse(min(af,bf))) + %!assert(spmax(as),sparse(max(af))) + %!assert(full(spmax(as(:))),max(af(:))) + %!assert(spmax(as,[],1),sparse(max(af,[],1))) + %!assert(spmax(as,[],2),sparse(max(af,[],2))) + %!assert(spmax(as,[],1),sparse(max(af,[],1))) + %!assert(spmax(as,0),sparse(max(af,0))) + %!assert(spmax(as,bs),sparse(max(af,bf))) + + %!assert(as==as) + %!assert(as==af) + %!assert(af==as) + %!test + %! [ii,jj,vv,nr,nc] = spfind(as); + %! assert(af,full(sparse(ii,jj,vv,nr,nc))); + %!assert(nnz(as),sum(af(:)!=0)) + %!assert(nnz(as),nnz(af)) + %!assert(issparse(as.')) + %!assert(issparse(as')) + %!assert(issparse(-as)) + %!assert(~as,sparse(~af)) + %!assert(as.', sparse(af.')); + %!assert(as', sparse(af')); + %!assert(-as, sparse(-af)); + %!assert(~as, sparse(~af)); + %!error [i,j]=size(af);as(i-1,j+1); + %!error [i,j]=size(af);as(i+1,j-1); + %!test + %! [Is,Js,Vs] = spfind(as); + %! [If,Jf,Vf] = find(af); + %! assert(Is,If); + %! assert(Js,Jf); + %! assert(Vs,Vf); + %!error as(0,1); + %!error as(1,0); + %!assert(spfind(as),find(af)) + %!test + %! [i,j,v] = spfind(as); + %! [m,n] = size(as); + %! x = sparse(i,j,v,m,n); + %! assert(x,as); + %!test + %! [i,j,v,m,n] = spfind(as); + %! x = sparse(i,j,v,m,n); + %! assert(x,as); + %!assert(issparse(horzcat(as,as))); + %!assert(issparse(vertcat(as,as))); + %!assert(issparse(cat(1,as,as))); + %!assert(issparse(cat(2,as,as))); + %!assert(issparse([as,as])); + %!assert(issparse([as;as])); + %!assert(horzcat(as,as), sparse([af,af])); + %!assert(vertcat(as,as), sparse([af;af])); + %!assert(horzcat(as,as,as), sparse([af,af,af])); + %!assert(vertcat(as,as,as), sparse([af;af;af])); + %!assert([as,as], sparse([af,af])); + %!assert([as;as], sparse([af;af])); + %!assert([as,as,as], sparse([af,af,af])); + %!assert([as;as;as], sparse([af;af;af])); + %!assert(cat(2,as,as), sparse([af,af])); + %!assert(cat(1,as,as), sparse([af;af])); + %!assert(cat(2,as,as,as), sparse([af,af,af])); + %!assert(cat(1,as,as,as), sparse([af;af;af])); + %!assert(issparse([as,af])); + %!assert(issparse([af,as])); + %!assert([as,af], sparse([af,af])); + %!assert([as;af], sparse([af;af])); + + %% Elementwise binary tests (uses as,af,bs,bf,scalar) + %!assert(as==bs,sparse(af==bf)) + %!assert(bf==as,sparse(bf==af)) + + %!assert(as!=bf,sparse(af!=bf)) + %!assert(bf!=as,sparse(bf!=af)) + + %!assert(as+bf,af+bf) + %!assert(bf+as,bf+af) + + %!assert(as-bf,af-bf) + %!assert(bf-as,bf-af) + + %!assert(as.*bf,sparse(af.*bf)) + %!assert(bf.*as,sparse(bf.*af)) + + %!assert(as./bf,sparse(af./bf),100*eps) + %!assert(bf.\as,sparse(bf.\af),100*eps) + + %!test + %! sv = as.^bf; + %! fv = af.^bf; + %! idx = find(af~=0); + %! assert(sv(:)(idx),sparse(fv(:)(idx)),100*eps) + + %!assert(as==bs,sparse(af==bf)) + %!assert(as!=bs,sparse(af!=bf)) + %!assert(as+bs,sparse(af+bf)) + %!assert(as-bs,sparse(af-bf)) + %!assert(as.*bs,sparse(af.*bf)) + %!xtest assert(as./bs,sparse(af./bf),100*eps); + %!test + %! sv = as.^bs; + %! fv = af.^bf; + %! idx = find(af~=0); + %! assert(sv(:)(idx),sparse(fv(:)(idx)),100*eps) + + %% Matrix-matrix operators (uses af,as,bs,bf) + %!assert(as*bf',af*bf') + %!assert(af*bs',af*bf') + %!assert(as*bs',sparse(af*bf')) + + %% Matrix diagonal tests (uses af,as,bf,bs) + %!assert(spdiag(as),sparse(diag(af))) + %!assert(spdiag(bs),sparse(diag(bf))) + %!assert(spdiag(as,1),sparse(diag(af,1))) + %!assert(spdiag(bs,1),sparse(diag(bf,1))) + %!assert(spdiag(as,-1),sparse(diag(af,-1))) + %!assert(spdiag(bs,-1),sparse(diag(bf,-1))) + %!assert(spdiag(as(:)),sparse(diag(af(:)))) + %!assert(spdiag(as(:),1),sparse(diag(af(:),1))) + %!assert(spdiag(as(:),-1),sparse(diag(af(:),-1))) + %!assert(spdiag(as(:)'),sparse(diag(af(:)'))) + %!assert(spdiag(as(:)',1),sparse(diag(af(:)',1))) + %!assert(spdiag(as(:)',-1),sparse(diag(af(:)',-1))) + %!assert(spdiags(as,[0,1]),[diag(af,0),diag(af,1)]) + %!test [tb,tc]=spdiags(as); + %! assert(spdiags(tb,tc,sparse(zeros(size(as)))),as) + %! assert(spdiags(tb,tc,size(as,1),size(as,2)),as) + + %% Matrix diagonal tests (uses af,as,bf,bs) + %!assert(reshape(as,1,prod(size(as))),sparse(reshape(af,1,prod(size(af))))) + %!assert(reshape(as,prod(size(as)),1),sparse(reshape(af,prod(size(af)),1))) + %!assert(reshape(as,fliplr(size(as))),sparse(reshape(af,fliplr(size(af))))) + %!assert(reshape(bs,1,prod(size(as))),sparse(reshape(bf,1,prod(size(af))))) + %!assert(reshape(bs,prod(size(as)),1),sparse(reshape(bf,prod(size(af)),1))) + %!assert(reshape(bs,fliplr(size(as))),sparse(reshape(bf,fliplr(size(af))))) + + + # ============================================================== + + %!assert(as<=bs,sparse(af<=bf)) + %!assert(as>=bs,sparse(af>=bf)) + %!assert(asbs,sparse(af>bf)) + + # ============================================================== + + %!test af=real(af); + %!test as=sparse(af); + %!test bs=sparse(bf); + %% Unary matrix tests (uses af,as) + %!assert(abs(as),sparse(abs(af))) + %!assert(acos(as),sparse(acos(af))) + %!assert(acosh(as),sparse(acosh(af))) + %!assert(angle(as),sparse(angle(af))) + %!assert(arg(as),sparse(arg(af))) + %!assert(asin(as),sparse(asin(af))) + %!assert(asinh(as),sparse(asinh(af))) + %!assert(atan(as),sparse(atan(af))) + %!assert(atanh(as),sparse(atanh(af))) + %!assert(ceil(as),sparse(ceil(af))) + %!assert(conj(as),sparse(conj(af))) + %!assert(cos(as),sparse(cos(af))) + %!assert(cosh(as),sparse(cosh(af))) + %!assert(exp(as),sparse(exp(af))) + %!assert(finite(as),sparse(finite(af))) + %!assert(fix(as),sparse(fix(af))) + %!assert(floor(as),sparse(floor(af))) + %!assert(imag(as),sparse(imag(af))) + %!assert(isinf(as),sparse(isinf(af))) + %!assert(isna(as),sparse(isna(af))) + %!assert(isnan(as),sparse(isnan(af))) + %!assert(log(as),sparse(log(af))) + %!assert(real(as),sparse(real(af))) + %!assert(round(as),sparse(round(af))) + %!assert(sign(as),sparse(sign(af))) + %!assert(sin(as),sparse(sin(af))) + %!assert(sinh(as),sparse(sinh(af))) + %!assert(sqrt(as),sparse(sqrt(af))) + %!assert(tan(as),sparse(tan(af))) + %!assert(tanh(as),sparse(tanh(af))) + %!assert(issparse(abs(as))&&isreal(abs(as))) + %!assert(issparse(real(as))&&isreal(real(as))) + %!assert(issparse(imag(as))&&isreal(imag(as))) + + %% Unary matrix tests (uses af,as) + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (1) + %! assert(erf(as),sparse(erf(af))) + %! else + %! assert(erf(as),erf(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (1) + %! assert(erfc(as),sparse(erfc(af))) + %! else + %! assert(erfc(as),erfc(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isalnum(as),sparse(isalnum(af))) + %! else + %! assert(isalnum(as),isalnum(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isalpha(as),sparse(isalpha(af))) + %! else + %! assert(isalpha(as),isalpha(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isascii(as),sparse(isascii(af))) + %! else + %! assert(isascii(as),isascii(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(iscntrl(as),sparse(iscntrl(af))) + %! else + %! assert(iscntrl(as),iscntrl(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isdigit(as),sparse(isdigit(af))) + %! else + %! assert(isdigit(as),isdigit(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isgraph(as),sparse(isgraph(af))) + %! else + %! assert(isgraph(as),isgraph(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(islower(as),sparse(islower(af))) + %! else + %! assert(islower(as),islower(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isprint(as),sparse(isprint(af))) + %! else + %! assert(isprint(as),isprint(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(ispunct(as),sparse(ispunct(af))) + %! else + %! assert(ispunct(as),ispunct(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isspace(as),sparse(isspace(af))) + %! else + %! assert(isspace(as),isspace(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isupper(as),sparse(isupper(af))) + %! else + %! assert(isupper(as),isupper(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isxdigit(as),sparse(isxdigit(af))) + %! else + %! assert(isxdigit(as),isxdigit(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + + %% These mapper functions always return a full matrix + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! assert(toascii(as),toascii(af)) + %! assert(tolower(as),tolower(af)) + %! assert(toupper(as),toupper(af)) + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %% Unary matrix tests (uses af,as) + %!assert(issparse(as)) + %!assert(!issparse(af)) + %!assert(!(issparse(af)&&iscomplex(af))) + %!assert(!(issparse(af)&&isreal(af))) + %!assert(spsum(as),sparse(sum(af))) + %!assert(spsum(as,1),sparse(sum(af,1))) + %!assert(spsum(as,2),sparse(sum(af,2))) + %!assert(spcumsum(as),sparse(cumsum(af))) + %!assert(spcumsum(as,1),sparse(cumsum(af,1))) + %!assert(spcumsum(as,2),sparse(cumsum(af,2))) + %!assert(spsumsq(as),sparse(sumsq(af))) + %!assert(spsumsq(as,1),sparse(sumsq(af,1))) + %!assert(spsumsq(as,2),sparse(sumsq(af,2))) + %!assert(spprod(as),sparse(prod(af))) + %!assert(spprod(as,1),sparse(prod(af,1))) + %!assert(spprod(as,2),sparse(prod(af,2))) + %!assert(spcumprod(as),sparse(cumprod(af))) + %!assert(spcumprod(as,1),sparse(cumprod(af,1))) + %!assert(spcumprod(as,2),sparse(cumprod(af,2))) + + %!assert(spmin(as),sparse(min(af))) + %!assert(full(spmin(as(:))),min(af(:))) + %!assert(spmin(as,[],1),sparse(min(af,[],1))) + %!assert(spmin(as,[],2),sparse(min(af,[],2))) + %!assert(spmin(as,[],1),sparse(min(af,[],1))) + %!assert(spmin(as,0),sparse(min(af,0))) + %!assert(spmin(as,bs),sparse(min(af,bf))) + %!assert(spmax(as),sparse(max(af))) + %!assert(full(spmax(as(:))),max(af(:))) + %!assert(spmax(as,[],1),sparse(max(af,[],1))) + %!assert(spmax(as,[],2),sparse(max(af,[],2))) + %!assert(spmax(as,[],1),sparse(max(af,[],1))) + %!assert(spmax(as,0),sparse(max(af,0))) + %!assert(spmax(as,bs),sparse(max(af,bf))) + + %!assert(as==as) + %!assert(as==af) + %!assert(af==as) + %!test + %! [ii,jj,vv,nr,nc] = spfind(as); + %! assert(af,full(sparse(ii,jj,vv,nr,nc))); + %!assert(nnz(as),sum(af(:)!=0)) + %!assert(nnz(as),nnz(af)) + %!assert(issparse(as.')) + %!assert(issparse(as')) + %!assert(issparse(-as)) + %!assert(~as,sparse(~af)) + %!assert(as.', sparse(af.')); + %!assert(as', sparse(af')); + %!assert(-as, sparse(-af)); + %!assert(~as, sparse(~af)); + %!error [i,j]=size(af);as(i-1,j+1); + %!error [i,j]=size(af);as(i+1,j-1); + %!test + %! [Is,Js,Vs] = spfind(as); + %! [If,Jf,Vf] = find(af); + %! assert(Is,If); + %! assert(Js,Jf); + %! assert(Vs,Vf); + %!error as(0,1); + %!error as(1,0); + %!assert(spfind(as),find(af)) + %!test + %! [i,j,v] = spfind(as); + %! [m,n] = size(as); + %! x = sparse(i,j,v,m,n); + %! assert(x,as); + %!test + %! [i,j,v,m,n] = spfind(as); + %! x = sparse(i,j,v,m,n); + %! assert(x,as); + %!assert(issparse(horzcat(as,as))); + %!assert(issparse(vertcat(as,as))); + %!assert(issparse(cat(1,as,as))); + %!assert(issparse(cat(2,as,as))); + %!assert(issparse([as,as])); + %!assert(issparse([as;as])); + %!assert(horzcat(as,as), sparse([af,af])); + %!assert(vertcat(as,as), sparse([af;af])); + %!assert(horzcat(as,as,as), sparse([af,af,af])); + %!assert(vertcat(as,as,as), sparse([af;af;af])); + %!assert([as,as], sparse([af,af])); + %!assert([as;as], sparse([af;af])); + %!assert([as,as,as], sparse([af,af,af])); + %!assert([as;as;as], sparse([af;af;af])); + %!assert(cat(2,as,as), sparse([af,af])); + %!assert(cat(1,as,as), sparse([af;af])); + %!assert(cat(2,as,as,as), sparse([af,af,af])); + %!assert(cat(1,as,as,as), sparse([af;af;af])); + %!assert(issparse([as,af])); + %!assert(issparse([af,as])); + %!assert([as,af], sparse([af,af])); + %!assert([as;af], sparse([af;af])); + + %% Elementwise binary tests (uses as,af,bs,bf,scalar) + %!assert(as==bs,sparse(af==bf)) + %!assert(bf==as,sparse(bf==af)) + + %!assert(as!=bf,sparse(af!=bf)) + %!assert(bf!=as,sparse(bf!=af)) + + %!assert(as+bf,af+bf) + %!assert(bf+as,bf+af) + + %!assert(as-bf,af-bf) + %!assert(bf-as,bf-af) + + %!assert(as.*bf,sparse(af.*bf)) + %!assert(bf.*as,sparse(bf.*af)) + + %!assert(as./bf,sparse(af./bf),100*eps) + %!assert(bf.\as,sparse(bf.\af),100*eps) + + %!test + %! sv = as.^bf; + %! fv = af.^bf; + %! idx = find(af~=0); + %! assert(sv(:)(idx),sparse(fv(:)(idx)),100*eps) + + %!assert(as==bs,sparse(af==bf)) + %!assert(as!=bs,sparse(af!=bf)) + %!assert(as+bs,sparse(af+bf)) + %!assert(as-bs,sparse(af-bf)) + %!assert(as.*bs,sparse(af.*bf)) + %!xtest assert(as./bs,sparse(af./bf),100*eps); + %!test + %! sv = as.^bs; + %! fv = af.^bf; + %! idx = find(af~=0); + %! assert(sv(:)(idx),sparse(fv(:)(idx)),100*eps) + + %% Matrix-matrix operators (uses af,as,bs,bf) + %!assert(as*bf',af*bf') + %!assert(af*bs',af*bf') + %!assert(as*bs',sparse(af*bf')) + + %% Matrix diagonal tests (uses af,as,bf,bs) + %!assert(spdiag(as),sparse(diag(af))) + %!assert(spdiag(bs),sparse(diag(bf))) + %!assert(spdiag(as,1),sparse(diag(af,1))) + %!assert(spdiag(bs,1),sparse(diag(bf,1))) + %!assert(spdiag(as,-1),sparse(diag(af,-1))) + %!assert(spdiag(bs,-1),sparse(diag(bf,-1))) + %!assert(spdiag(as(:)),sparse(diag(af(:)))) + %!assert(spdiag(as(:),1),sparse(diag(af(:),1))) + %!assert(spdiag(as(:),-1),sparse(diag(af(:),-1))) + %!assert(spdiag(as(:)'),sparse(diag(af(:)'))) + %!assert(spdiag(as(:)',1),sparse(diag(af(:)',1))) + %!assert(spdiag(as(:)',-1),sparse(diag(af(:)',-1))) + %!assert(spdiags(as,[0,1]),[diag(af,0),diag(af,1)]) + %!test [tb,tc]=spdiags(as); + %! assert(spdiags(tb,tc,sparse(zeros(size(as)))),as) + %! assert(spdiags(tb,tc,size(as,1),size(as,2)),as) + + %% Matrix diagonal tests (uses af,as,bf,bs) + %!assert(reshape(as,1,prod(size(as))),sparse(reshape(af,1,prod(size(af))))) + %!assert(reshape(as,prod(size(as)),1),sparse(reshape(af,prod(size(af)),1))) + %!assert(reshape(as,fliplr(size(as))),sparse(reshape(af,fliplr(size(af))))) + %!assert(reshape(bs,1,prod(size(as))),sparse(reshape(bf,1,prod(size(af))))) + %!assert(reshape(bs,prod(size(as)),1),sparse(reshape(bf,prod(size(af)),1))) + %!assert(reshape(bs,fliplr(size(as))),sparse(reshape(bf,fliplr(size(af))))) + + + # ============================================================== + + %!test # save ascii + %! savefile= tmpnam(); + %! as_save=as; save("-text",savefile,"bf","as_save","af"); + %! clear as_save; + %! load(savefile,"as_save"); + %! unlink(savefile); + %! assert(as_save,sparse(af)); + %!test # save binary + %! savefile= tmpnam(); + %! as_save=as; save("-binary",savefile,"bf","as_save","af"); + %! clear as_save; + %! load(savefile,"as_save"); + %! unlink(savefile); + %! assert(as_save,sparse(af)); + %!test # save hdf5 + %! savefile= tmpnam(); + %! as_save=as; save("-hdf5",savefile,"bf","as_save","af"); + %! clear as_save; + %! load(savefile,"as_save"); + %! unlink(savefile); + %! assert(as_save,sparse(af)); + %!test # save matlab + %! savefile= tmpnam(); + %! as_save=as; save("-mat",savefile,"bf","as_save","af"); + %! clear as_save; + %! load(savefile,"as_save"); + %! unlink(savefile); + %! assert(as_save,sparse(af)); + + # ============================================================== + + %!test bf=bf+1i*(bf~=0); + %!test as=sparse(af); + %!test bs=sparse(bf); + %% Unary matrix tests (uses af,as) + %!assert(abs(as),sparse(abs(af))) + %!assert(acos(as),sparse(acos(af))) + %!assert(acosh(as),sparse(acosh(af))) + %!assert(angle(as),sparse(angle(af))) + %!assert(arg(as),sparse(arg(af))) + %!assert(asin(as),sparse(asin(af))) + %!assert(asinh(as),sparse(asinh(af))) + %!assert(atan(as),sparse(atan(af))) + %!assert(atanh(as),sparse(atanh(af))) + %!assert(ceil(as),sparse(ceil(af))) + %!assert(conj(as),sparse(conj(af))) + %!assert(cos(as),sparse(cos(af))) + %!assert(cosh(as),sparse(cosh(af))) + %!assert(exp(as),sparse(exp(af))) + %!assert(finite(as),sparse(finite(af))) + %!assert(fix(as),sparse(fix(af))) + %!assert(floor(as),sparse(floor(af))) + %!assert(imag(as),sparse(imag(af))) + %!assert(isinf(as),sparse(isinf(af))) + %!assert(isna(as),sparse(isna(af))) + %!assert(isnan(as),sparse(isnan(af))) + %!assert(log(as),sparse(log(af))) + %!assert(real(as),sparse(real(af))) + %!assert(round(as),sparse(round(af))) + %!assert(sign(as),sparse(sign(af))) + %!assert(sin(as),sparse(sin(af))) + %!assert(sinh(as),sparse(sinh(af))) + %!assert(sqrt(as),sparse(sqrt(af))) + %!assert(tan(as),sparse(tan(af))) + %!assert(tanh(as),sparse(tanh(af))) + %!assert(issparse(abs(as))&&isreal(abs(as))) + %!assert(issparse(real(as))&&isreal(real(as))) + %!assert(issparse(imag(as))&&isreal(imag(as))) + + %% Unary matrix tests (uses af,as) + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (1) + %! assert(erf(as),sparse(erf(af))) + %! else + %! assert(erf(as),erf(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (1) + %! assert(erfc(as),sparse(erfc(af))) + %! else + %! assert(erfc(as),erfc(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isalnum(as),sparse(isalnum(af))) + %! else + %! assert(isalnum(as),isalnum(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isalpha(as),sparse(isalpha(af))) + %! else + %! assert(isalpha(as),isalpha(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isascii(as),sparse(isascii(af))) + %! else + %! assert(isascii(as),isascii(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(iscntrl(as),sparse(iscntrl(af))) + %! else + %! assert(iscntrl(as),iscntrl(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isdigit(as),sparse(isdigit(af))) + %! else + %! assert(isdigit(as),isdigit(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isgraph(as),sparse(isgraph(af))) + %! else + %! assert(isgraph(as),isgraph(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(islower(as),sparse(islower(af))) + %! else + %! assert(islower(as),islower(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isprint(as),sparse(isprint(af))) + %! else + %! assert(isprint(as),isprint(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(ispunct(as),sparse(ispunct(af))) + %! else + %! assert(ispunct(as),ispunct(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isspace(as),sparse(isspace(af))) + %! else + %! assert(isspace(as),isspace(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isupper(as),sparse(isupper(af))) + %! else + %! assert(isupper(as),isupper(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! if (0) + %! assert(isxdigit(as),sparse(isxdigit(af))) + %! else + %! assert(isxdigit(as),isxdigit(af)) + %! endif + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + + %% These mapper functions always return a full matrix + %!test + %! wn2s = warning ("query", "Octave:num-to-str"); + %! warning ("off", "Octave:num-to-str"); + %! if isreal(af) + %! assert(toascii(as),toascii(af)) + %! assert(tolower(as),tolower(af)) + %! assert(toupper(as),toupper(af)) + %! endif + %! warning (wn2s.state, "Octave:num-to-str"); + + %% Unary matrix tests (uses af,as) + %!assert(issparse(as)) + %!assert(!issparse(af)) + %!assert(!(issparse(af)&&iscomplex(af))) + %!assert(!(issparse(af)&&isreal(af))) + %!assert(spsum(as),sparse(sum(af))) + %!assert(spsum(as,1),sparse(sum(af,1))) + %!assert(spsum(as,2),sparse(sum(af,2))) + %!assert(spcumsum(as),sparse(cumsum(af))) + %!assert(spcumsum(as,1),sparse(cumsum(af,1))) + %!assert(spcumsum(as,2),sparse(cumsum(af,2))) + %!assert(spsumsq(as),sparse(sumsq(af))) + %!assert(spsumsq(as,1),sparse(sumsq(af,1))) + %!assert(spsumsq(as,2),sparse(sumsq(af,2))) + %!assert(spprod(as),sparse(prod(af))) + %!assert(spprod(as,1),sparse(prod(af,1))) + %!assert(spprod(as,2),sparse(prod(af,2))) + %!assert(spcumprod(as),sparse(cumprod(af))) + %!assert(spcumprod(as,1),sparse(cumprod(af,1))) + %!assert(spcumprod(as,2),sparse(cumprod(af,2))) + + %!assert(spmin(as),sparse(min(af))) + %!assert(full(spmin(as(:))),min(af(:))) + %!assert(spmin(as,[],1),sparse(min(af,[],1))) + %!assert(spmin(as,[],2),sparse(min(af,[],2))) + %!assert(spmin(as,[],1),sparse(min(af,[],1))) + %!assert(spmin(as,0),sparse(min(af,0))) + %!assert(spmin(as,bs),sparse(min(af,bf))) + %!assert(spmax(as),sparse(max(af))) + %!assert(full(spmax(as(:))),max(af(:))) + %!assert(spmax(as,[],1),sparse(max(af,[],1))) + %!assert(spmax(as,[],2),sparse(max(af,[],2))) + %!assert(spmax(as,[],1),sparse(max(af,[],1))) + %!assert(spmax(as,0),sparse(max(af,0))) + %!assert(spmax(as,bs),sparse(max(af,bf))) + + %!assert(as==as) + %!assert(as==af) + %!assert(af==as) + %!test + %! [ii,jj,vv,nr,nc] = spfind(as); + %! assert(af,full(sparse(ii,jj,vv,nr,nc))); + %!assert(nnz(as),sum(af(:)!=0)) + %!assert(nnz(as),nnz(af)) + %!assert(issparse(as.')) + %!assert(issparse(as')) + %!assert(issparse(-as)) + %!assert(~as,sparse(~af)) + %!assert(as.', sparse(af.')); + %!assert(as', sparse(af')); + %!assert(-as, sparse(-af)); + %!assert(~as, sparse(~af)); + %!error [i,j]=size(af);as(i-1,j+1); + %!error [i,j]=size(af);as(i+1,j-1); + %!test + %! [Is,Js,Vs] = spfind(as); + %! [If,Jf,Vf] = find(af); + %! assert(Is,If); + %! assert(Js,Jf); + %! assert(Vs,Vf); + %!error as(0,1); + %!error as(1,0); + %!assert(spfind(as),find(af)) + %!test + %! [i,j,v] = spfind(as); + %! [m,n] = size(as); + %! x = sparse(i,j,v,m,n); + %! assert(x,as); + %!test + %! [i,j,v,m,n] = spfind(as); + %! x = sparse(i,j,v,m,n); + %! assert(x,as); + %!assert(issparse(horzcat(as,as))); + %!assert(issparse(vertcat(as,as))); + %!assert(issparse(cat(1,as,as))); + %!assert(issparse(cat(2,as,as))); + %!assert(issparse([as,as])); + %!assert(issparse([as;as])); + %!assert(horzcat(as,as), sparse([af,af])); + %!assert(vertcat(as,as), sparse([af;af])); + %!assert(horzcat(as,as,as), sparse([af,af,af])); + %!assert(vertcat(as,as,as), sparse([af;af;af])); + %!assert([as,as], sparse([af,af])); + %!assert([as;as], sparse([af;af])); + %!assert([as,as,as], sparse([af,af,af])); + %!assert([as;as;as], sparse([af;af;af])); + %!assert(cat(2,as,as), sparse([af,af])); + %!assert(cat(1,as,as), sparse([af;af])); + %!assert(cat(2,as,as,as), sparse([af,af,af])); + %!assert(cat(1,as,as,as), sparse([af;af;af])); + %!assert(issparse([as,af])); + %!assert(issparse([af,as])); + %!assert([as,af], sparse([af,af])); + %!assert([as;af], sparse([af;af])); + + %% Elementwise binary tests (uses as,af,bs,bf,scalar) + %!assert(as==bs,sparse(af==bf)) + %!assert(bf==as,sparse(bf==af)) + + %!assert(as!=bf,sparse(af!=bf)) + %!assert(bf!=as,sparse(bf!=af)) + + %!assert(as+bf,af+bf) + %!assert(bf+as,bf+af) + + %!assert(as-bf,af-bf) + %!assert(bf-as,bf-af) + + %!assert(as.*bf,sparse(af.*bf)) + %!assert(bf.*as,sparse(bf.*af)) + + %!assert(as./bf,sparse(af./bf),100*eps) + %!assert(bf.\as,sparse(bf.\af),100*eps) + + %!test + %! sv = as.^bf; + %! fv = af.^bf; + %! idx = find(af~=0); + %! assert(sv(:)(idx),sparse(fv(:)(idx)),100*eps) + + %!assert(as==bs,sparse(af==bf)) + %!assert(as!=bs,sparse(af!=bf)) + %!assert(as+bs,sparse(af+bf)) + %!assert(as-bs,sparse(af-bf)) + %!assert(as.*bs,sparse(af.*bf)) + %!xtest assert(as./bs,sparse(af./bf),100*eps); + %!test + %! sv = as.^bs; + %! fv = af.^bf; + %! idx = find(af~=0); + %! assert(sv(:)(idx),sparse(fv(:)(idx)),100*eps) + + %% Matrix-matrix operators (uses af,as,bs,bf) + %!assert(as*bf',af*bf') + %!assert(af*bs',af*bf') + %!assert(as*bs',sparse(af*bf')) + + %% Matrix diagonal tests (uses af,as,bf,bs) + %!assert(spdiag(as),sparse(diag(af))) + %!assert(spdiag(bs),sparse(diag(bf))) + %!assert(spdiag(as,1),sparse(diag(af,1))) + %!assert(spdiag(bs,1),sparse(diag(bf,1))) + %!assert(spdiag(as,-1),sparse(diag(af,-1))) + %!assert(spdiag(bs,-1),sparse(diag(bf,-1))) + %!assert(spdiag(as(:)),sparse(diag(af(:)))) + %!assert(spdiag(as(:),1),sparse(diag(af(:),1))) + %!assert(spdiag(as(:),-1),sparse(diag(af(:),-1))) + %!assert(spdiag(as(:)'),sparse(diag(af(:)'))) + %!assert(spdiag(as(:)',1),sparse(diag(af(:)',1))) + %!assert(spdiag(as(:)',-1),sparse(diag(af(:)',-1))) + %!assert(spdiags(as,[0,1]),[diag(af,0),diag(af,1)]) + %!test [tb,tc]=spdiags(as); + %! assert(spdiags(tb,tc,sparse(zeros(size(as)))),as) + %! assert(spdiags(tb,tc,size(as,1),size(as,2)),as) + + %% Matrix diagonal tests (uses af,as,bf,bs) + %!assert(reshape(as,1,prod(size(as))),sparse(reshape(af,1,prod(size(af))))) + %!assert(reshape(as,prod(size(as)),1),sparse(reshape(af,prod(size(af)),1))) + %!assert(reshape(as,fliplr(size(as))),sparse(reshape(af,fliplr(size(af))))) + %!assert(reshape(bs,1,prod(size(as))),sparse(reshape(bf,1,prod(size(af))))) + %!assert(reshape(bs,prod(size(as)),1),sparse(reshape(bf,prod(size(af)),1))) + %!assert(reshape(bs,fliplr(size(as))),sparse(reshape(bf,fliplr(size(af))))) + + + # ============================================================== + + %!test af=[1+1i,2-1i,0,0;0,0,0,3+2i;0,0,0,4]; + %! as=sparse(af); + %!test bf=[0,1-1i,0,0;2+1i,0,0,0;3-1i,2+3i,0,0]; + %!test ;# invertible matrix + %! bf=af'*bf+max(abs([af(:);bf(:)]))*sparse(eye(columns(as))); + %! bs=sparse(bf); + + %% Matrix-matrix operators (uses af,as,bs,bf) + %!assert(as/bf,af/bf,100*eps) + %!assert(af/bs,af/bf,100*eps) + %!assert(as/bs,sparse(af/bf),100*eps) + %!assert(bs\af',bf\af',100*eps) + %!assert(bf\as',bf\af',100*eps) + %!assert(bs\as',sparse(bf\af'),100*eps) + + %!testif HAVE_UMFPACK + %! assert(spdet(bs+speye(size(bs))),det(bf+eye(size(bf))),100*eps*abs(det(bf+eye(size(bf))))) + + %!testif HAVE_UMFPACK + %! [l,u]=splu(sparse([1,1;1,1])); + %! assert(l*u,[1,1;1,1],10*eps); + + %!testif HAVE_UMFPACK + %! [l,u]=splu(sparse([1,1;1,1+i])); + %! assert(l,sparse([1,2,2],[1,1,2],1),10*eps); + %! assert(u,sparse([1,1,2],[1,2,2],[1,1,1i]),10*eps); + + %!testif HAVE_UMFPACK ;# permuted LU + %! [L,U] = splu(bs); + %! assert(L*U,bs,1e-10); + + %!testif HAVE_UMFPACK ;# simple LU + row permutations + %! [L,U,P] = splu(bs); + %! assert(P'*L*U,bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# simple LU + row/col permutations + %! [L,U,P,Q] = splu(bs); + %! assert(P'*L*U*Q',bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# LU with fixed column permutation + %! [L,U,P] = splu(bs,colamd(bs)); + %! assert(P'*L*U,bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U(:,colamd(bs))); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# LU with initial column permutation + %! [L,U,P,Q] = splu(bs,colamd(bs)); + %! assert(P'*L*U*Q',bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# inverse + %! assert(spinv(bs)*bs,sparse(eye(rows(bs))),1e-10); + + %!assert(bf\as',bf\af',100*eps); + %!assert(bs\af',bf\af',100*eps); + %!assert(bs\as',sparse(bf\af'),100*eps); + + + # ============================================================== + + %!test bf=real(bf); + %! bs=sparse(bf); + %% Matrix-matrix operators (uses af,as,bs,bf) + %!assert(as/bf,af/bf,100*eps) + %!assert(af/bs,af/bf,100*eps) + %!assert(as/bs,sparse(af/bf),100*eps) + %!assert(bs\af',bf\af',100*eps) + %!assert(bf\as',bf\af',100*eps) + %!assert(bs\as',sparse(bf\af'),100*eps) + + %!testif HAVE_UMFPACK + %! assert(spdet(bs+speye(size(bs))),det(bf+eye(size(bf))),100*eps*abs(det(bf+eye(size(bf))))) + + %!testif HAVE_UMFPACK + %! [l,u]=splu(sparse([1,1;1,1])); + %! assert(l*u,[1,1;1,1],10*eps); + + %!testif HAVE_UMFPACK + %! [l,u]=splu(sparse([1,1;1,1+i])); + %! assert(l,sparse([1,2,2],[1,1,2],1),10*eps); + %! assert(u,sparse([1,1,2],[1,2,2],[1,1,1i]),10*eps); + + %!testif HAVE_UMFPACK ;# permuted LU + %! [L,U] = splu(bs); + %! assert(L*U,bs,1e-10); + + %!testif HAVE_UMFPACK ;# simple LU + row permutations + %! [L,U,P] = splu(bs); + %! assert(P'*L*U,bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# simple LU + row/col permutations + %! [L,U,P,Q] = splu(bs); + %! assert(P'*L*U*Q',bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# LU with fixed column permutation + %! [L,U,P] = splu(bs,colamd(bs)); + %! assert(P'*L*U,bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U(:,colamd(bs))); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# LU with initial column permutation + %! [L,U,P,Q] = splu(bs,colamd(bs)); + %! assert(P'*L*U*Q',bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# inverse + %! assert(spinv(bs)*bs,sparse(eye(rows(bs))),1e-10); + + %!assert(bf\as',bf\af',100*eps); + %!assert(bs\af',bf\af',100*eps); + %!assert(bs\as',sparse(bf\af'),100*eps); + + + # ============================================================== + + %!test af=real(af); + %! as=sparse(af); + %% Matrix-matrix operators (uses af,as,bs,bf) + %!assert(as/bf,af/bf,100*eps) + %!assert(af/bs,af/bf,100*eps) + %!assert(as/bs,sparse(af/bf),100*eps) + %!assert(bs\af',bf\af',100*eps) + %!assert(bf\as',bf\af',100*eps) + %!assert(bs\as',sparse(bf\af'),100*eps) + + %!testif HAVE_UMFPACK + %! assert(spdet(bs+speye(size(bs))),det(bf+eye(size(bf))),100*eps*abs(det(bf+eye(size(bf))))) + + %!testif HAVE_UMFPACK + %! [l,u]=splu(sparse([1,1;1,1])); + %! assert(l*u,[1,1;1,1],10*eps); + + %!testif HAVE_UMFPACK + %! [l,u]=splu(sparse([1,1;1,1+i])); + %! assert(l,sparse([1,2,2],[1,1,2],1),10*eps); + %! assert(u,sparse([1,1,2],[1,2,2],[1,1,1i]),10*eps); + + %!testif HAVE_UMFPACK ;# permuted LU + %! [L,U] = splu(bs); + %! assert(L*U,bs,1e-10); + + %!testif HAVE_UMFPACK ;# simple LU + row permutations + %! [L,U,P] = splu(bs); + %! assert(P'*L*U,bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# simple LU + row/col permutations + %! [L,U,P,Q] = splu(bs); + %! assert(P'*L*U*Q',bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# LU with fixed column permutation + %! [L,U,P] = splu(bs,colamd(bs)); + %! assert(P'*L*U,bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U(:,colamd(bs))); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# LU with initial column permutation + %! [L,U,P,Q] = splu(bs,colamd(bs)); + %! assert(P'*L*U*Q',bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# inverse + %! assert(spinv(bs)*bs,sparse(eye(rows(bs))),1e-10); + + %!assert(bf\as',bf\af',100*eps); + %!assert(bs\af',bf\af',100*eps); + %!assert(bs\as',sparse(bf\af'),100*eps); + + + # ============================================================== + + %!test bf=bf+1i*(bf~=0); + %! bs=sparse(bf); + %% Matrix-matrix operators (uses af,as,bs,bf) + %!assert(as/bf,af/bf,100*eps) + %!assert(af/bs,af/bf,100*eps) + %!assert(as/bs,sparse(af/bf),100*eps) + %!assert(bs\af',bf\af',100*eps) + %!assert(bf\as',bf\af',100*eps) + %!assert(bs\as',sparse(bf\af'),100*eps) + + %!testif HAVE_UMFPACK + %! assert(spdet(bs+speye(size(bs))),det(bf+eye(size(bf))),100*eps*abs(det(bf+eye(size(bf))))) + + %!testif HAVE_UMFPACK + %! [l,u]=splu(sparse([1,1;1,1])); + %! assert(l*u,[1,1;1,1],10*eps); + + %!testif HAVE_UMFPACK + %! [l,u]=splu(sparse([1,1;1,1+i])); + %! assert(l,sparse([1,2,2],[1,1,2],1),10*eps); + %! assert(u,sparse([1,1,2],[1,2,2],[1,1,1i]),10*eps); + + %!testif HAVE_UMFPACK ;# permuted LU + %! [L,U] = splu(bs); + %! assert(L*U,bs,1e-10); + + %!testif HAVE_UMFPACK ;# simple LU + row permutations + %! [L,U,P] = splu(bs); + %! assert(P'*L*U,bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# simple LU + row/col permutations + %! [L,U,P,Q] = splu(bs); + %! assert(P'*L*U*Q',bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# LU with fixed column permutation + %! [L,U,P] = splu(bs,colamd(bs)); + %! assert(P'*L*U,bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U(:,colamd(bs))); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# LU with initial column permutation + %! [L,U,P,Q] = splu(bs,colamd(bs)); + %! assert(P'*L*U*Q',bs,1e-10); + %! # triangularity + %! [i,j,v]=spfind(L); + %! assert(i-j>=0); + %! [i,j,v]=spfind(U); + %! assert(j-i>=0); + + %!testif HAVE_UMFPACK ;# inverse + %! assert(spinv(bs)*bs,sparse(eye(rows(bs))),1e-10); + + %!assert(bf\as',bf\af',100*eps); + %!assert(bs\af',bf\af',100*eps); + %!assert(bs\as',sparse(bf\af'),100*eps); + + + # ============================================================== + + %!test bf=[5,0,1+1i,0;0,5,0,1-2i;1-1i,0,5,0;0,1+2i,0,5]; + %! bs=sparse(bf); + %!testif HAVE_CHOLMOD + %! assert(spchol(bs)'*spchol(bs),bs,1e-10); + %!testif HAVE_CHOLMOD + %! assert(splchol(bs)*splchol(bs)',bs,1e-10); + %!testif HAVE_CHOLMOD + %! assert(splchol(bs),spchol(bs)',1e-10); + + %!testif HAVE_CHOLMOD ;# Return Partial Cholesky factorization + %! [RS,PS] = spchol(bs); + %! assert(RS'*RS,bs,1e-10); + %! assert(PS,0); + %! [LS,PS] = splchol(bs); + %! assert(LS*LS',bs,1e-10); + %! assert(PS,0); + + %!testif HAVE_CHOLMOD ;# Permuted Cholesky factorization + %! [RS,PS,QS] = spchol(bs); + %! assert(RS'*RS,QS*bs*QS',1e-10); + %! assert(PS,0); + %! [LS,PS,QS] = splchol(bs); + %! assert(LS*LS',QS*bs*QS',1e-10); + %! assert(PS,0); + + + # ============================================================== + + %!test bf=real(bf); + %! bs=sparse(bf); + %!testif HAVE_CHOLMOD + %! assert(spchol(bs)'*spchol(bs),bs,1e-10); + %!testif HAVE_CHOLMOD + %! assert(splchol(bs)*splchol(bs)',bs,1e-10); + %!testif HAVE_CHOLMOD + %! assert(splchol(bs),spchol(bs)',1e-10); + + %!testif HAVE_CHOLMOD ;# Return Partial Cholesky factorization + %! [RS,PS] = spchol(bs); + %! assert(RS'*RS,bs,1e-10); + %! assert(PS,0); + %! [LS,PS] = splchol(bs); + %! assert(LS*LS',bs,1e-10); + %! assert(PS,0); + + %!testif HAVE_CHOLMOD ;# Permuted Cholesky factorization + %! [RS,PS,QS] = spchol(bs); + %! assert(RS'*RS,QS*bs*QS',1e-10); + %! assert(PS,0); + %! [LS,PS,QS] = splchol(bs); + %! assert(LS*LS',QS*bs*QS',1e-10); + %! assert(PS,0); + + + # ============================================================== + + %!shared r,c,m,n,fsum,funiq + %!test + %! r=[1,1,2,1,2,3]; + %! c=[2,1,1,1,2,1]; + %! m=n=0; + %%Assembly tests + %!test + %! m=max([m;r(:)]); + %! n=max([n;c(:)]); + %! funiq=fsum=zeros(m,n); + %! funiq(r(:) + m*(c(:)-1) ) = ones(size(r(:))); + %! funiq = sparse(funiq); + %! for k=1:length(r), fsum(r(k),c(k)) += 1; end + %! fsum = sparse(fsum); + %!assert(sparse(r,c,1),sparse(fsum(1:max(r),1:max(c)))); + %!assert(sparse(r,c,1,"sum"),sparse(fsum(1:max(r),1:max(c)))); + %!assert(sparse(r,c,1,"unique"),sparse(funiq(1:max(r),1:max(c)))); + %!assert(sparse(r,c,1,m,n),sparse(fsum)); + %!assert(sparse(r,c,1,m,n,"sum"),sparse(fsum)); + %!assert(sparse(r,c,1,m,n,"unique"),sparse(funiq)); + + %!assert(sparse(r,c,1i),sparse(fsum(1:max(r),1:max(c))*1i)); + %!assert(sparse(r,c,1i,"sum"),sparse(fsum(1:max(r),1:max(c))*1i)); + %!assert(sparse(r,c,1i,"unique"),sparse(funiq(1:max(r),1:max(c))*1i)); + %!assert(sparse(r,c,1i,m,n),sparse(fsum*1i)); + %!assert(sparse(r,c,1i,m,n,"sum"),sparse(fsum*1i)); + %!assert(sparse(r,c,1i,m,n,"unique"),sparse(funiq*1i)); + + %!test + %! if (issparse(funiq)) + %! assert(sparse(full(1i*funiq)),sparse(1i*funiq)); + %! endif + + %!assert(sparse(full(funiq)),funiq); + + + + # ============================================================== + + %!shared ridx,cidx,idx,as,af + %!test + %! af=[1+1i,2-1i,0,0;0,0,0,3+2i;0,0,0,4]; + %! ridx=[1,3]; cidx=[2,3]; + %!assert (sparse(42)([1,1]),sparse([42,42])) + %!assert (sparse(42*1i)([1,1]),sparse([42,42].*1i)) + %!test as=sparse(af); + + %% Point tests + %!test idx=ridx(:)+rows(as)*(cidx(:)-1); + %!assert(sparse(as(idx)),sparse(af(idx))); + %!assert(as(idx),sparse(af(idx))); + %!assert(as(idx'),sparse(af(idx'))); + %!assert(as(flipud(idx(:))),sparse(af(flipud(idx(:))))) + %!assert(as([idx,idx]),sparse(af([idx,idx]))); + %!error(as(reshape([idx;idx],[1,length(idx),2]))); + + %% Slice tests + %!assert(as(ridx,cidx), sparse(af(ridx,cidx))) + %!assert(as(ridx,:), sparse(af(ridx,:))) + %!assert(as(:,cidx), sparse(af(:,cidx))) + %!assert(as(:,:), sparse(af(:,:))) + %!assert(as((size(as,1):-1:1),:),sparse(af((size(af,1):-1:1),:))) + %!assert(as(:,(size(as,2):-1:1)),sparse(af(:,(size(af,2):-1:1)))) + + %% Indexing tests + %!assert(full(as([1,1],:)), af([1,1],:)) + %!assert(full(as(:,[1,1])), af(:,[1,1])) + %!test + %! [i,j,v] = find (as); + %! assert (as(i(1),j(1))([1,1]), sparse([v(1),v(1)])) + + %% Assignment test + %!test + %! ts=as;ts(:,:)=ts(fliplr(1:size(as,1)),:); + %! tf=af;tf(:,:)=tf(fliplr(1:size(af,1)),:); + %! assert(ts,sparse(tf)); + %!test + %! ts=as;ts(fliplr(1:size(as,1)),:)=ts; + %! tf=af;tf(fliplr(1:size(af,1)),:)=tf; + %! assert(ts,sparse(tf)); + %!test + %! ts=as;ts(:,fliplr(1:size(as,2)))=ts; + %! tf=af;tf(:,fliplr(1:size(af,2)))=tf; + %! assert(ts,sparse(tf)); + %!test + %! ts(fliplr(1:size(as,1)))=as(:,1);tf(fliplr(1:size(af,1)))=af(:,1); + %! assert(ts,sparse(tf)); + + %% Deletion tests + %!test + %! ts=as;ts(1,:)=[];tf=af;tf(1,:)=[]; + %! assert(ts,sparse(tf)); + %!test + %! ts=as;ts(:,1)=[];tf=af;tf(:,1)=[]; + %! assert(ts,sparse(tf)); + + %% Test 'end' keyword + %!assert(full(as(end)), af(end)) + %!assert(full(as(1,end)), af(1,end)) + %!assert(full(as(end,1)), af(end,1)) + %!assert(full(as(end,end)), af(end,end)) + %!assert(as(2:end,2:end), sparse(af(2:end,2:end))) + %!assert(as(1:end-1,1:end-1), sparse(af(1:end-1,1:end-1))) + %!test af=real(af); + %!test as=sparse(af); + + %% Point tests + %!test idx=ridx(:)+rows(as)*(cidx(:)-1); + %!assert(sparse(as(idx)),sparse(af(idx))); + %!assert(as(idx),sparse(af(idx))); + %!assert(as(idx'),sparse(af(idx'))); + %!assert(as(flipud(idx(:))),sparse(af(flipud(idx(:))))) + %!assert(as([idx,idx]),sparse(af([idx,idx]))); + %!error(as(reshape([idx;idx],[1,length(idx),2]))); + + %% Slice tests + %!assert(as(ridx,cidx), sparse(af(ridx,cidx))) + %!assert(as(ridx,:), sparse(af(ridx,:))) + %!assert(as(:,cidx), sparse(af(:,cidx))) + %!assert(as(:,:), sparse(af(:,:))) + %!assert(as((size(as,1):-1:1),:),sparse(af((size(af,1):-1:1),:))) + %!assert(as(:,(size(as,2):-1:1)),sparse(af(:,(size(af,2):-1:1)))) + + %% Indexing tests + %!assert(full(as([1,1],:)), af([1,1],:)) + %!assert(full(as(:,[1,1])), af(:,[1,1])) + %!test + %! [i,j,v] = find (as); + %! assert (as(i(1),j(1))([1,1]), sparse([v(1),v(1)])) + + %% Assignment test + %!test + %! ts=as;ts(:,:)=ts(fliplr(1:size(as,1)),:); + %! tf=af;tf(:,:)=tf(fliplr(1:size(af,1)),:); + %! assert(ts,sparse(tf)); + %!test + %! ts=as;ts(fliplr(1:size(as,1)),:)=ts; + %! tf=af;tf(fliplr(1:size(af,1)),:)=tf; + %! assert(ts,sparse(tf)); + %!test + %! ts=as;ts(:,fliplr(1:size(as,2)))=ts; + %! tf=af;tf(:,fliplr(1:size(af,2)))=tf; + %! assert(ts,sparse(tf)); + %!test + %! ts(fliplr(1:size(as,1)))=as(:,1);tf(fliplr(1:size(af,1)))=af(:,1); + %! assert(ts,sparse(tf)); + + %% Deletion tests + %!test + %! ts=as;ts(1,:)=[];tf=af;tf(1,:)=[]; + %! assert(ts,sparse(tf)); + %!test + %! ts=as;ts(:,1)=[];tf=af;tf(:,1)=[]; + %! assert(ts,sparse(tf)); + + %% Test 'end' keyword + %!assert(full(as(end)), af(end)) + %!assert(full(as(1,end)), af(1,end)) + %!assert(full(as(end,1)), af(end,1)) + %!assert(full(as(end,end)), af(end,end)) + %!assert(as(2:end,2:end), sparse(af(2:end,2:end))) + %!assert(as(1:end-1,1:end-1), sparse(af(1:end-1,1:end-1))) + + # ============================================================== + + %!shared alpha,beta,df,pdf,lf,plf,uf,puf,bf,cf,bcf,tf,tcf,xf,ds,pds,ls,pls,us,pus,bs,cs,bcs,ts,tcs,xs + %!test alpha=1;beta=1; + %! n=8; + %! lf=diag(1:n);lf(n-1,1)=0.5*alpha;lf(n,2)=0.25*alpha;ls=sparse(lf); + %! uf=diag(1:n);uf(1,n-1)=2*alpha;uf(2,n)=alpha;us=sparse(uf); + %! ts=spdiags(ones(n,3),-1:1,n,n)+diag(1:n); tf = full(ts); + %! df = diag(1:n).* alpha; ds = sparse(df); + %! pdf = df(randperm(n),randperm(n)); pds = sparse(pdf); + %! plf = lf(randperm(n),randperm(n)); pls = sparse(plf); + %! puf = uf(randperm(n),randperm(n)); pus = sparse(puf); + %! bs = spdiags(repmat([1:n]',1,4),-2:1,n,n).*alpha; bf = full(bs); + %! cf = lf + lf'; cs = sparse(cf); + %! bcf = bf + bf'; bcs = sparse(bcf); + %! tcf = tf + tf'; tcs = sparse(tcf); + %! xf = diag(1:n) + fliplr(diag(1:n)).*beta; xs = sparse(xf); + %!assert(ds\xf,df\xf,1e-10); + %!assert(ds\xs,sparse(df\xf),1e-10); + %!assert(pds\xf,pdf\xf,1e-10); + %!assert(pds\xs,sparse(pdf\xf),1e-10); + %!assert(ls\xf,lf\xf,1e-10); + %!assert(sparse(ls\xs),sparse(lf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(pls\xf,plf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(pls\xs),sparse(plf\xf),1e-10); + %!assert(us\xf,uf\xf,1e-10); + %!assert(sparse(us\xs),sparse(uf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(pus\xf,puf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(pus\xs),sparse(puf\xf),1e-10); + %!assert(bs\xf,bf\xf,1e-10); + %!assert(sparse(bs\xs),sparse(bf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(cs\xf,cf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(cs\xs),sparse(cf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(bcs\xf,bcf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(bcs\xs),sparse(bcf\xf),1e-10); + %!assert(ts\xf,tf\xf,1e-10); + %!assert(sparse(ts\xs),sparse(tf\xf),1e-10); + %!assert(tcs\xf,tcf\xf,1e-10); + %!assert(sparse(tcs\xs),sparse(tcf\xf),1e-10); + + %% QR solver tests + + %!function f(a, sz, feps) + %! b = randn(sz); x = a \b; + %! assert (a * x, b, feps); + %! b = randn(sz)+1i*randn(sz); x = a \ b; + %! assert (a * x, b, feps); + %! b = sprandn(sz(1),sz(2),0.2); x = a \b; + %! assert (sparse(a * x), b, feps); + %! b = sprandn(sz(1),sz(2),0.2)+1i*sprandn(sz(1),sz(2),0.2); x = a \b; + %! assert (sparse(a * x), b, feps); + %!testif HAVE_CXSPARSE + %! a = alpha*sprandn(10,11,0.2)+speye(10,11); f(a,[10,2],1e-10); + %! ## Test this by forcing matrix_type, as can't get a certain + %! ## result for over-determined systems. + %! a = alpha*sprandn(10,10,0.2)+speye(10,10); matrix_type(a, "Singular"); + %! f(a,[10,2],1e-10); + + %% Rectanguar solver tests that don't use QR + + %!test + %! ds = alpha * spdiags([1:11]',0,10,11); + %! df = full(ds); + %! xf = beta * ones(10,2); + %! xs = speye(10,10); + %!assert(ds\xf,df\xf,100*eps) + %!assert(ds\xs,sparse(df\xs),100*eps) + %!test + %! pds = ds([2,1,3:10],:); + %! pdf = full(pds); + %!assert(pds\xf,pdf\xf,100*eps) + %!assert(pds\xs,sparse(pdf\xs),100*eps) + %!test + %! ds = alpha * spdiags([1:11]',0,11,10); + %! df = full(ds); + %! xf = beta * ones(11,2); + %! xs = speye(11,11); + %!assert(ds\xf,df\xf,100*eps) + %!assert(ds\xs,sparse(df\xs),100*eps) + %!test + %! pds = ds([2,1,3:11],:); + %! pdf = full(pds); + %!assert(pds\xf,pdf\xf,100*eps) + %!assert(pds\xs,sparse(pdf\xs),100*eps) + %!test + %! us = alpha*[[speye(10,10);sparse(1,10)],[[1,1];sparse(9,2);[1,1]]]; + %!testif HAVE_UMFPACK + %! assert(us*(us\xf),xf,100*eps) + %!testif HAVE_UMFPACK + %! assert(us*(us\xs),xs,100*eps) + %!test + %! pus = us(:,[2,1,3:12]); + %!testif HAVE_UMFPACK + %! assert(pus*(pus\xf),xf,100*eps) + %!testif HAVE_UMFPACK + %! assert(pus*(pus\xs),xs,100*eps) + %!test + %! us = alpha*[speye(11,9),[1;sparse(8,1);1;0]]; + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (us, xf); + %! assert(us\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (us, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(us\xs,r\c,100*eps) + %!test + %! pus = us(:,[1:8,10,9]); + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pus, xf); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pus\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pus, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pus\xs,r\c,100*eps) + %!test + %! ls = alpha*[speye(9,11);[1,sparse(1,8),1,0]]; + %! xf = beta * ones(10,2); + %! xs = speye(10,10); + %!assert(ls*(ls\xf),xf,100*eps) + %!assert(ls*(ls\xs),xs,100*eps) + %!test + %! pls = ls([1:8,10,9],:); + %!assert(pls*(pls\xf),xf,100*eps) + %!assert(pls*(pls\xs),xs,100*eps) + %!test + %! ls = alpha*[speye(10,10),sparse(10,1);[1;1],sparse(2,9),[1;1]]; + %! xf = beta * ones(12,2); + %! xs = speye(12,12); + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (ls, xf); + %! assert(ls\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (ls, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(ls\xs,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! pls = ls(:,[1:8,10,9]); + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pls, xf); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pls\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pls, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pls\xs,r\c,100*eps) + + %!test alpha=1;beta=1i; + %! n=8; + %! lf=diag(1:n);lf(n-1,1)=0.5*alpha;lf(n,2)=0.25*alpha;ls=sparse(lf); + %! uf=diag(1:n);uf(1,n-1)=2*alpha;uf(2,n)=alpha;us=sparse(uf); + %! ts=spdiags(ones(n,3),-1:1,n,n)+diag(1:n); tf = full(ts); + %! df = diag(1:n).* alpha; ds = sparse(df); + %! pdf = df(randperm(n),randperm(n)); pds = sparse(pdf); + %! plf = lf(randperm(n),randperm(n)); pls = sparse(plf); + %! puf = uf(randperm(n),randperm(n)); pus = sparse(puf); + %! bs = spdiags(repmat([1:n]',1,4),-2:1,n,n).*alpha; bf = full(bs); + %! cf = lf + lf'; cs = sparse(cf); + %! bcf = bf + bf'; bcs = sparse(bcf); + %! tcf = tf + tf'; tcs = sparse(tcf); + %! xf = diag(1:n) + fliplr(diag(1:n)).*beta; xs = sparse(xf); + %!assert(ds\xf,df\xf,1e-10); + %!assert(ds\xs,sparse(df\xf),1e-10); + %!assert(pds\xf,pdf\xf,1e-10); + %!assert(pds\xs,sparse(pdf\xf),1e-10); + %!assert(ls\xf,lf\xf,1e-10); + %!assert(sparse(ls\xs),sparse(lf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(pls\xf,plf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(pls\xs),sparse(plf\xf),1e-10); + %!assert(us\xf,uf\xf,1e-10); + %!assert(sparse(us\xs),sparse(uf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(pus\xf,puf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(pus\xs),sparse(puf\xf),1e-10); + %!assert(bs\xf,bf\xf,1e-10); + %!assert(sparse(bs\xs),sparse(bf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(cs\xf,cf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(cs\xs),sparse(cf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(bcs\xf,bcf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(bcs\xs),sparse(bcf\xf),1e-10); + %!assert(ts\xf,tf\xf,1e-10); + %!assert(sparse(ts\xs),sparse(tf\xf),1e-10); + %!assert(tcs\xf,tcf\xf,1e-10); + %!assert(sparse(tcs\xs),sparse(tcf\xf),1e-10); + + %% QR solver tests + + %!function f(a, sz, feps) + %! b = randn(sz); x = a \b; + %! assert (a * x, b, feps); + %! b = randn(sz)+1i*randn(sz); x = a \ b; + %! assert (a * x, b, feps); + %! b = sprandn(sz(1),sz(2),0.2); x = a \b; + %! assert (sparse(a * x), b, feps); + %! b = sprandn(sz(1),sz(2),0.2)+1i*sprandn(sz(1),sz(2),0.2); x = a \b; + %! assert (sparse(a * x), b, feps); + %!testif HAVE_CXSPARSE + %! a = alpha*sprandn(10,11,0.2)+speye(10,11); f(a,[10,2],1e-10); + %! ## Test this by forcing matrix_type, as can't get a certain + %! ## result for over-determined systems. + %! a = alpha*sprandn(10,10,0.2)+speye(10,10); matrix_type(a, "Singular"); + %! f(a,[10,2],1e-10); + + %% Rectanguar solver tests that don't use QR + + %!test + %! ds = alpha * spdiags([1:11]',0,10,11); + %! df = full(ds); + %! xf = beta * ones(10,2); + %! xs = speye(10,10); + %!assert(ds\xf,df\xf,100*eps) + %!assert(ds\xs,sparse(df\xs),100*eps) + %!test + %! pds = ds([2,1,3:10],:); + %! pdf = full(pds); + %!assert(pds\xf,pdf\xf,100*eps) + %!assert(pds\xs,sparse(pdf\xs),100*eps) + %!test + %! ds = alpha * spdiags([1:11]',0,11,10); + %! df = full(ds); + %! xf = beta * ones(11,2); + %! xs = speye(11,11); + %!assert(ds\xf,df\xf,100*eps) + %!assert(ds\xs,sparse(df\xs),100*eps) + %!test + %! pds = ds([2,1,3:11],:); + %! pdf = full(pds); + %!assert(pds\xf,pdf\xf,100*eps) + %!assert(pds\xs,sparse(pdf\xs),100*eps) + %!test + %! us = alpha*[[speye(10,10);sparse(1,10)],[[1,1];sparse(9,2);[1,1]]]; + %!testif HAVE_UMFPACK + %! assert(us*(us\xf),xf,100*eps) + %!testif HAVE_UMFPACK + %! assert(us*(us\xs),xs,100*eps) + %!test + %! pus = us(:,[2,1,3:12]); + %!testif HAVE_UMFPACK + %! assert(pus*(pus\xf),xf,100*eps) + %!testif HAVE_UMFPACK + %! assert(pus*(pus\xs),xs,100*eps) + %!test + %! us = alpha*[speye(11,9),[1;sparse(8,1);1;0]]; + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (us, xf); + %! assert(us\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (us, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(us\xs,r\c,100*eps) + %!test + %! pus = us(:,[1:8,10,9]); + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pus, xf); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pus\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pus, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pus\xs,r\c,100*eps) + %!test + %! ls = alpha*[speye(9,11);[1,sparse(1,8),1,0]]; + %! xf = beta * ones(10,2); + %! xs = speye(10,10); + %!assert(ls*(ls\xf),xf,100*eps) + %!assert(ls*(ls\xs),xs,100*eps) + %!test + %! pls = ls([1:8,10,9],:); + %!assert(pls*(pls\xf),xf,100*eps) + %!assert(pls*(pls\xs),xs,100*eps) + %!test + %! ls = alpha*[speye(10,10),sparse(10,1);[1;1],sparse(2,9),[1;1]]; + %! xf = beta * ones(12,2); + %! xs = speye(12,12); + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (ls, xf); + %! assert(ls\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (ls, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(ls\xs,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! pls = ls(:,[1:8,10,9]); + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pls, xf); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pls\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pls, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pls\xs,r\c,100*eps) + + %!test alpha=1i;beta=1; + %! n=8; + %! lf=diag(1:n);lf(n-1,1)=0.5*alpha;lf(n,2)=0.25*alpha;ls=sparse(lf); + %! uf=diag(1:n);uf(1,n-1)=2*alpha;uf(2,n)=alpha;us=sparse(uf); + %! ts=spdiags(ones(n,3),-1:1,n,n)+diag(1:n); tf = full(ts); + %! df = diag(1:n).* alpha; ds = sparse(df); + %! pdf = df(randperm(n),randperm(n)); pds = sparse(pdf); + %! plf = lf(randperm(n),randperm(n)); pls = sparse(plf); + %! puf = uf(randperm(n),randperm(n)); pus = sparse(puf); + %! bs = spdiags(repmat([1:n]',1,4),-2:1,n,n).*alpha; bf = full(bs); + %! cf = lf + lf'; cs = sparse(cf); + %! bcf = bf + bf'; bcs = sparse(bcf); + %! tcf = tf + tf'; tcs = sparse(tcf); + %! xf = diag(1:n) + fliplr(diag(1:n)).*beta; xs = sparse(xf); + %!assert(ds\xf,df\xf,1e-10); + %!assert(ds\xs,sparse(df\xf),1e-10); + %!assert(pds\xf,pdf\xf,1e-10); + %!assert(pds\xs,sparse(pdf\xf),1e-10); + %!assert(ls\xf,lf\xf,1e-10); + %!assert(sparse(ls\xs),sparse(lf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(pls\xf,plf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(pls\xs),sparse(plf\xf),1e-10); + %!assert(us\xf,uf\xf,1e-10); + %!assert(sparse(us\xs),sparse(uf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(pus\xf,puf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(pus\xs),sparse(puf\xf),1e-10); + %!assert(bs\xf,bf\xf,1e-10); + %!assert(sparse(bs\xs),sparse(bf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(cs\xf,cf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(cs\xs),sparse(cf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(bcs\xf,bcf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(bcs\xs),sparse(bcf\xf),1e-10); + %!assert(ts\xf,tf\xf,1e-10); + %!assert(sparse(ts\xs),sparse(tf\xf),1e-10); + %!assert(tcs\xf,tcf\xf,1e-10); + %!assert(sparse(tcs\xs),sparse(tcf\xf),1e-10); + + %% QR solver tests + + %!function f(a, sz, feps) + %! b = randn(sz); x = a \b; + %! assert (a * x, b, feps); + %! b = randn(sz)+1i*randn(sz); x = a \ b; + %! assert (a * x, b, feps); + %! b = sprandn(sz(1),sz(2),0.2); x = a \b; + %! assert (sparse(a * x), b, feps); + %! b = sprandn(sz(1),sz(2),0.2)+1i*sprandn(sz(1),sz(2),0.2); x = a \b; + %! assert (sparse(a * x), b, feps); + %!testif HAVE_CXSPARSE + %! a = alpha*sprandn(10,11,0.2)+speye(10,11); f(a,[10,2],1e-10); + %! ## Test this by forcing matrix_type, as can't get a certain + %! ## result for over-determined systems. + %! a = alpha*sprandn(10,10,0.2)+speye(10,10); matrix_type(a, "Singular"); + %! f(a,[10,2],1e-10); + + %% Rectanguar solver tests that don't use QR + + %!test + %! ds = alpha * spdiags([1:11]',0,10,11); + %! df = full(ds); + %! xf = beta * ones(10,2); + %! xs = speye(10,10); + %!assert(ds\xf,df\xf,100*eps) + %!assert(ds\xs,sparse(df\xs),100*eps) + %!test + %! pds = ds([2,1,3:10],:); + %! pdf = full(pds); + %!assert(pds\xf,pdf\xf,100*eps) + %!assert(pds\xs,sparse(pdf\xs),100*eps) + %!test + %! ds = alpha * spdiags([1:11]',0,11,10); + %! df = full(ds); + %! xf = beta * ones(11,2); + %! xs = speye(11,11); + %!assert(ds\xf,df\xf,100*eps) + %!assert(ds\xs,sparse(df\xs),100*eps) + %!test + %! pds = ds([2,1,3:11],:); + %! pdf = full(pds); + %!assert(pds\xf,pdf\xf,100*eps) + %!assert(pds\xs,sparse(pdf\xs),100*eps) + %!test + %! us = alpha*[[speye(10,10);sparse(1,10)],[[1,1];sparse(9,2);[1,1]]]; + %!testif HAVE_UMFPACK + %! assert(us*(us\xf),xf,100*eps) + %!testif HAVE_UMFPACK + %! assert(us*(us\xs),xs,100*eps) + %!test + %! pus = us(:,[2,1,3:12]); + %!testif HAVE_UMFPACK + %! assert(pus*(pus\xf),xf,100*eps) + %!testif HAVE_UMFPACK + %! assert(pus*(pus\xs),xs,100*eps) + %!test + %! us = alpha*[speye(11,9),[1;sparse(8,1);1;0]]; + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (us, xf); + %! assert(us\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (us, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(us\xs,r\c,100*eps) + %!test + %! pus = us(:,[1:8,10,9]); + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pus, xf); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pus\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pus, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pus\xs,r\c,100*eps) + %!test + %! ls = alpha*[speye(9,11);[1,sparse(1,8),1,0]]; + %! xf = beta * ones(10,2); + %! xs = speye(10,10); + %!assert(ls*(ls\xf),xf,100*eps) + %!assert(ls*(ls\xs),xs,100*eps) + %!test + %! pls = ls([1:8,10,9],:); + %!assert(pls*(pls\xf),xf,100*eps) + %!assert(pls*(pls\xs),xs,100*eps) + %!test + %! ls = alpha*[speye(10,10),sparse(10,1);[1;1],sparse(2,9),[1;1]]; + %! xf = beta * ones(12,2); + %! xs = speye(12,12); + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (ls, xf); + %! assert(ls\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (ls, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(ls\xs,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! pls = ls(:,[1:8,10,9]); + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pls, xf); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pls\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pls, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pls\xs,r\c,100*eps) + + %!test alpha=1i;beta=1i; + %! n=8; + %! lf=diag(1:n);lf(n-1,1)=0.5*alpha;lf(n,2)=0.25*alpha;ls=sparse(lf); + %! uf=diag(1:n);uf(1,n-1)=2*alpha;uf(2,n)=alpha;us=sparse(uf); + %! ts=spdiags(ones(n,3),-1:1,n,n)+diag(1:n); tf = full(ts); + %! df = diag(1:n).* alpha; ds = sparse(df); + %! pdf = df(randperm(n),randperm(n)); pds = sparse(pdf); + %! plf = lf(randperm(n),randperm(n)); pls = sparse(plf); + %! puf = uf(randperm(n),randperm(n)); pus = sparse(puf); + %! bs = spdiags(repmat([1:n]',1,4),-2:1,n,n).*alpha; bf = full(bs); + %! cf = lf + lf'; cs = sparse(cf); + %! bcf = bf + bf'; bcs = sparse(bcf); + %! tcf = tf + tf'; tcs = sparse(tcf); + %! xf = diag(1:n) + fliplr(diag(1:n)).*beta; xs = sparse(xf); + %!assert(ds\xf,df\xf,1e-10); + %!assert(ds\xs,sparse(df\xf),1e-10); + %!assert(pds\xf,pdf\xf,1e-10); + %!assert(pds\xs,sparse(pdf\xf),1e-10); + %!assert(ls\xf,lf\xf,1e-10); + %!assert(sparse(ls\xs),sparse(lf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(pls\xf,plf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(pls\xs),sparse(plf\xf),1e-10); + %!assert(us\xf,uf\xf,1e-10); + %!assert(sparse(us\xs),sparse(uf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(pus\xf,puf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(pus\xs),sparse(puf\xf),1e-10); + %!assert(bs\xf,bf\xf,1e-10); + %!assert(sparse(bs\xs),sparse(bf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(cs\xf,cf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(cs\xs),sparse(cf\xf),1e-10); + %!testif HAVE_UMFPACK + %! assert(bcs\xf,bcf\xf,1e-10); + %!testif HAVE_UMFPACK + %! assert(sparse(bcs\xs),sparse(bcf\xf),1e-10); + %!assert(ts\xf,tf\xf,1e-10); + %!assert(sparse(ts\xs),sparse(tf\xf),1e-10); + %!assert(tcs\xf,tcf\xf,1e-10); + %!assert(sparse(tcs\xs),sparse(tcf\xf),1e-10); + + %% QR solver tests + + %!function f(a, sz, feps) + %! b = randn(sz); x = a \b; + %! assert (a * x, b, feps); + %! b = randn(sz)+1i*randn(sz); x = a \ b; + %! assert (a * x, b, feps); + %! b = sprandn(sz(1),sz(2),0.2); x = a \b; + %! assert (sparse(a * x), b, feps); + %! b = sprandn(sz(1),sz(2),0.2)+1i*sprandn(sz(1),sz(2),0.2); x = a \b; + %! assert (sparse(a * x), b, feps); + %!testif HAVE_CXSPARSE + %! a = alpha*sprandn(10,11,0.2)+speye(10,11); f(a,[10,2],1e-10); + %! ## Test this by forcing matrix_type, as can't get a certain + %! ## result for over-determined systems. + %! a = alpha*sprandn(10,10,0.2)+speye(10,10); matrix_type(a, "Singular"); + %! f(a,[10,2],1e-10); + + %% Rectanguar solver tests that don't use QR + + %!test + %! ds = alpha * spdiags([1:11]',0,10,11); + %! df = full(ds); + %! xf = beta * ones(10,2); + %! xs = speye(10,10); + %!assert(ds\xf,df\xf,100*eps) + %!assert(ds\xs,sparse(df\xs),100*eps) + %!test + %! pds = ds([2,1,3:10],:); + %! pdf = full(pds); + %!assert(pds\xf,pdf\xf,100*eps) + %!assert(pds\xs,sparse(pdf\xs),100*eps) + %!test + %! ds = alpha * spdiags([1:11]',0,11,10); + %! df = full(ds); + %! xf = beta * ones(11,2); + %! xs = speye(11,11); + %!assert(ds\xf,df\xf,100*eps) + %!assert(ds\xs,sparse(df\xs),100*eps) + %!test + %! pds = ds([2,1,3:11],:); + %! pdf = full(pds); + %!assert(pds\xf,pdf\xf,100*eps) + %!assert(pds\xs,sparse(pdf\xs),100*eps) + %!test + %! us = alpha*[[speye(10,10);sparse(1,10)],[[1,1];sparse(9,2);[1,1]]]; + %!testif HAVE_UMFPACK + %! assert(us*(us\xf),xf,100*eps) + %!testif HAVE_UMFPACK + %! assert(us*(us\xs),xs,100*eps) + %!test + %! pus = us(:,[2,1,3:12]); + %!testif HAVE_UMFPACK + %! assert(pus*(pus\xf),xf,100*eps) + %!testif HAVE_UMFPACK + %! assert(pus*(pus\xs),xs,100*eps) + %!test + %! us = alpha*[speye(11,9),[1;sparse(8,1);1;0]]; + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (us, xf); + %! assert(us\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (us, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(us\xs,r\c,100*eps) + %!test + %! pus = us(:,[1:8,10,9]); + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pus, xf); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pus\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pus, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pus\xs,r\c,100*eps) + %!test + %! ls = alpha*[speye(9,11);[1,sparse(1,8),1,0]]; + %! xf = beta * ones(10,2); + %! xs = speye(10,10); + %!assert(ls*(ls\xf),xf,100*eps) + %!assert(ls*(ls\xs),xs,100*eps) + %!test + %! pls = ls([1:8,10,9],:); + %!assert(pls*(pls\xf),xf,100*eps) + %!assert(pls*(pls\xs),xs,100*eps) + %!test + %! ls = alpha*[speye(10,10),sparse(10,1);[1;1],sparse(2,9),[1;1]]; + %! xf = beta * ones(12,2); + %! xs = speye(12,12); + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (ls, xf); + %! assert(ls\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (ls, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(ls\xs,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! pls = ls(:,[1:8,10,9]); + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pls, xf); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pls\xf,r\c,100*eps) + %!testif HAVE_CXSPARSE + %! [c,r] = spqr (pls, xs); + %! r = matrix_type(r,"Singular"); ## Force Matrix Type + %! assert(pls\xs,r\c,100*eps) + + + # ============================================================== + diff -cNr octave-3.0.1/test/test_system.m octave-3.0.2/test/test_system.m *** octave-3.0.1/test/test_system.m 2008-04-21 18:00:22.000000000 +0200 --- octave-3.0.2/test/test_system.m 2008-08-01 08:50:56.000000000 +0200 *************** *** 97,107 **** %!error asctime (1, 2); %% test/octave.test/system/strftime-1.m ! %!assert((isstr (strftime ("%%%n%t%H%I%k%l", localtime (time ()))) ! %! && isstr (strftime ("%M%p%r%R%s%S%T", localtime (time ()))) ! %! && isstr (strftime ("%X%Z%z%a%A%b%B", localtime (time ()))) ! %! && isstr (strftime ("%c%C%d%e%D%h%j", localtime (time ()))) ! %! && isstr (strftime ("%m%U%w%W%x%y%Y", localtime (time ()))))); %% test/octave.test/system/strftime-2.m %!error strftime (); --- 97,107 ---- %!error asctime (1, 2); %% test/octave.test/system/strftime-1.m ! %!assert((ischar (strftime ("%%%n%t%H%I%k%l", localtime (time ()))) ! %! && ischar (strftime ("%M%p%r%R%s%S%T", localtime (time ()))) ! %! && ischar (strftime ("%X%Z%z%a%A%b%B", localtime (time ()))) ! %! && ischar (strftime ("%c%C%d%e%D%h%j", localtime (time ()))) ! %! && ischar (strftime ("%m%U%w%W%x%y%Y", localtime (time ()))))); %% test/octave.test/system/strftime-2.m %!error strftime (); *************** *** 309,315 **** %! && struct_contains (s, "atime") %! && struct_contains (s, "mtime") %! && struct_contains (s, "ctime") ! %! && isstr (msg))); %% test/octave.test/system/stat-2.m %!error stat (); --- 309,315 ---- %! && struct_contains (s, "atime") %! && struct_contains (s, "mtime") %! && struct_contains (s, "ctime") ! %! && ischar (msg))); %% test/octave.test/system/stat-2.m %!error stat (); *************** *** 332,338 **** %! && struct_contains (s, "atime") %! && struct_contains (s, "mtime") %! && struct_contains (s, "ctime") ! %! && isstr (msg))); %% test/octave.test/system/lstat-2.m %!error lstat (); --- 332,338 ---- %! && struct_contains (s, "atime") %! && struct_contains (s, "mtime") %! && struct_contains (s, "ctime") ! %! && ischar (msg))); %% test/octave.test/system/lstat-2.m %!error lstat (); *************** *** 365,371 **** %!error fnmatch ("foo", "bar", 3); %% test/octave.test/system/file_in_path-1.m ! %!assert(isstr (file_in_path (path (), "date.m"))); %% test/octave.test/system/file_in_path-2.m %!error file_in_path ("foo", "bar", 1); --- 365,371 ---- %!error fnmatch ("foo", "bar", 3); %% test/octave.test/system/file_in_path-1.m ! %!assert(ischar (file_in_path (path (), "date.m"))); %% test/octave.test/system/file_in_path-2.m %!error file_in_path ("foo", "bar", 1); *************** *** 487,493 **** %!error cd (1); %% test/octave.test/system/pwd-1.m ! %!assert(isstr (pwd ())); %% test/octave.test/system/ls-1.m %!error ls (1); --- 487,493 ---- %!error cd (1); %% test/octave.test/system/pwd-1.m ! %!assert(ischar (pwd ())); %% test/octave.test/system/ls-1.m %!error ls (1); *************** *** 602,608 **** %!error endgrent (1); %% test/octave.test/system/computer-1.m ! %!assert((isstr (computer ()) %! && computer () == octave_config_info ("canonical_host_type"))); %% test/octave.test/system/computer-2.m --- 602,608 ---- %!error endgrent (1); %% test/octave.test/system/computer-1.m ! %!assert((ischar (computer ()) %! && computer () == octave_config_info ("canonical_host_type"))); %% test/octave.test/system/computer-2.m *************** *** 612,618 **** %!assert(isieee () == 1 || isieee () == 0); %% test/octave.test/system/version-1.m ! %!assert(isstr (version ()) && strcmp (version (), OCTAVE_VERSION)); %% test/octave.test/system/version-2.m %!warning version (1); --- 612,618 ---- %!assert(isieee () == 1 || isieee () == 0); %% test/octave.test/system/version-1.m ! %!assert(ischar (version ()) && strcmp (version (), OCTAVE_VERSION)); %% test/octave.test/system/version-2.m %!warning version (1); PATCH_EOF