Mercurial > hg > octave-nkf
changeset 14334:82a3127af11c
maint: merge stable to default to bring in Qhull2012 build fixes.
author | Rik <octave@nomad.inbox5.com> |
---|---|
date | Thu, 02 Feb 2012 09:50:10 -0800 |
parents | 17de694961f5 (diff) 99428221b4e1 (current diff) |
children | a8a2d5def558 |
files | configure.ac |
diffstat | 252 files changed, 4044 insertions(+), 2911 deletions(-) [+] |
line wrap: on
line diff
--- a/NEWS +++ b/NEWS @@ -1,3 +1,36 @@ +Summary of important user-visible changes for version 3.8: +--------------------------------------------------------- + + ** Other new functions added in 3.8.0: + + colorcube + lines + rgbplot + + ** Deprecated functions. + + The following functions were deprecated in Octave 3.4 and have been + removed from Octave 3.8. + + autocor dispatch is_global saveimage + autocov fstat krylovb strerror + betai gammai perror strerror + cellidx glpkmex perror values + cquad is_duplicate_entry replot + + The following functions have been deprecated in Octave 3.8 and will + be removed from Octave 3.12 (or whatever version is the second major + release after 3.8): + + <none yet> + + The following keywords have been deprecated in Octave 3.8 and will + be removed from Octave 3.12 (or whatever version is the second major + release after 3.8): + + static + + Summary of important user-visible changes for version 3.6: ---------------------------------------------------------
--- a/configure.ac +++ b/configure.ac @@ -27,7 +27,7 @@ EXTERN_CFLAGS="$CFLAGS" EXTERN_CXXFLAGS="$CXXFLAGS" -AC_INIT([GNU Octave], [3.6.0], [http://octave.org/bugs.html], [octave]) +AC_INIT([GNU Octave], [3.7.0+], [http://octave.org/bugs.html], [octave]) dnl PACKAGE_VERSION is set by the AC_INIT VERSION arg OCTAVE_VERSION="$PACKAGE_VERSION"
--- a/doc/interpreter/contributors.in +++ b/doc/interpreter/contributors.in @@ -169,6 +169,7 @@ Kai P. Mueller Hannes Müller Victor Munoz +Iain Murray Carmen Navarrete Todd Neal Philip Nienhuis
--- a/doc/interpreter/doccheck/aspell-octave.en.pws +++ b/doc/interpreter/doccheck/aspell-octave.en.pws @@ -120,6 +120,7 @@ chol Cholesky cholmod +chrominance cindex circ circshift @@ -138,6 +139,7 @@ collectoutput colorbar colormap +ColorOrder colperm Comint Commandline @@ -555,6 +557,7 @@ metafiles Metafont mex +mget Michelsen Microsystems MinGW @@ -565,6 +568,7 @@ MIP miscompiled Misra +mkdir mkoctfile mldivide mmd @@ -578,6 +582,7 @@ Montanet mpoles mpower +mput mrdivide MSYS mtimes @@ -771,6 +776,7 @@ Rightarrow rightarrow rline +rmdir RMS rnd roffset
--- a/doc/interpreter/grammar.txi +++ b/doc/interpreter/grammar.txi @@ -46,12 +46,12 @@ @item @code{endif} @tab @code{endmethods} @tab @code{endparfor} @item @code{endproperties} @tab @code{endswitch} @tab @code{endwhile} @item @code{enumeration} @tab @code{events} @tab @code{for} -@item @code{function} @tab @code{get} @tab @code{global} -@item @code{if} @tab @code{methods} @tab @code{otherwise} -@item @code{parfor} @tab @code{persistent} @tab @code{properties} -@item @code{return} @tab @code{set} @tab @code{static} -@item @code{switch} @tab @code{try} @tab @code{until} -@item @code{unwind_protect} @tab @code{unwind_protect_cleanup} @tab @code{while} +@item @code{function} @tab @code{global} @tab @code{if} +@item @code{methods} @tab @code{otherwise} @tab @code{parfor} +@item @code{persistent} @tab @code{properties} @tab @code{return} +@item @code{static} @tab @code{switch} @tab @code{try} +@item @code{until} @tab @code{unwind_protect} @tab @code{unwind_protect_cleanup} +@item @code{while} @end multitable The function @code{iskeyword} can be used to quickly check whether an
--- a/doc/interpreter/image.txi +++ b/doc/interpreter/image.txi @@ -127,10 +127,14 @@ @DOCSTRING(colormap) +@DOCSTRING(rgbplot) + @DOCSTRING(autumn) @DOCSTRING(bone) +@DOCSTRING(colorcube) + @DOCSTRING(cool) @DOCSTRING(copper) @@ -145,6 +149,8 @@ @DOCSTRING(jet) +@DOCSTRING(lines) + @DOCSTRING(ocean) @DOCSTRING(pink) @@ -166,9 +172,9 @@ An additional colormap is @code{gmap40}. This code map contains only colors with integer values of the red, green and blue components. This is a workaround for a limitation of gnuplot 4.0, that does not allow the color -of line or patch objects to be set, and so @code{gmap40} is useful for gnuplot -4.0 users, and in particular in conjunction with the @var{bar}, -@var{barh} or @var{contour} functions. +of line or patch objects to be set. @code{gmap40} is chiefly useful to gnuplot +4.0 users, and particularly in conjunction with the @var{bar}, @var{surf}, +and @var{contour} functions. @DOCSTRING(gmap40)
--- a/doc/interpreter/system.txi +++ b/doc/interpreter/system.txi @@ -266,16 +266,34 @@ @node FTP Objects @subsection FTP Objects +Octave supports the FTP protocol through an object-oriented interface. +Use the function @code{ftp} to create an FTP object which represents the +connection. All FTP functions take an FTP object as the first argument. + @DOCSTRING(@ftp/ftp) +@DOCSTRING(@ftp/close) + @DOCSTRING(@ftp/mget) @DOCSTRING(@ftp/mput) +@DOCSTRING(@ftp/cd) + +@DOCSTRING(@ftp/dir) + @DOCSTRING(@ftp/ascii) @DOCSTRING(@ftp/binary) +@DOCSTRING(@ftp/delete) + +@DOCSTRING(@ftp/rename) + +@DOCSTRING(@ftp/mkdir) + +@DOCSTRING(@ftp/rmdir) + @node URL Manipulation @subsection URL Manipulation
--- a/liboctave/caseless-str.h +++ b/liboctave/caseless-str.h @@ -23,6 +23,7 @@ #if !defined (octave_caseless_str_h) #define octave_caseless_str_h 1 +#include <cctype> #include <string> class caseless_str : public std::string
--- a/liboctave/regexp.h +++ b/liboctave/regexp.h @@ -33,7 +33,9 @@ #include "base-list.h" #include "str-vec.h" -class regexp +class +OCTAVE_API +regexp { public:
--- a/scripts/@ftp/ascii.m +++ b/scripts/@ftp/ascii.m @@ -18,7 +18,11 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} ascii (@var{f}) -## Put the FTP connection @var{f} into ascii mode. +## Set the FTP connection @var{f} to use ASCII mode for transfers. +## ASCII mode is only appropriate for text files as it will convert +## the remote host's newline representation to the local host's newline +## representation. +## ## @var{f} is an FTP object returned by the @code{ftp} function. ## @end deftypefn
--- a/scripts/@ftp/binary.m +++ b/scripts/@ftp/binary.m @@ -18,7 +18,10 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} binary (@var{f}) -## Put the FTP connection @var{f} into binary mode. +## Set the FTP connection @var{f} to use binary mode for transfers. +## In binary mode there is no conversion of newlines from the remote +## representation to the local representation. +## ## @var{f} is an FTP object returned by the @code{ftp} function. ## @end deftypefn
--- a/scripts/@ftp/cd.m +++ b/scripts/@ftp/cd.m @@ -19,6 +19,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} cd (@var{f}, @var{path}) ## Set the remote directory to @var{path} on the FTP connection @var{f}. +## ## @var{f} is an FTP object returned by the @code{ftp} function. ## @end deftypefn
--- a/scripts/@ftp/close.m +++ b/scripts/@ftp/close.m @@ -18,7 +18,8 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} close (@var{f}) -## Close the FTP connection represented by the given FTP object @var{f}. +## Close the FTP connection represented by the FTP object @var{f}. +## ## @var{f} is an FTP object returned by the @code{ftp} function. ## @end deftypefn
--- a/scripts/@ftp/delete.m +++ b/scripts/@ftp/delete.m @@ -18,7 +18,8 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} delete (@var{f}, @var{file}) -## Delete the remote file @var{file}, over the FTP connection @var{f}. +## Delete the remote file @var{file} over the FTP connection @var{f}. +## ## @var{f} is an FTP object returned by the @code{ftp} function. ## @end deftypefn
--- a/scripts/@ftp/dir.m +++ b/scripts/@ftp/dir.m @@ -19,7 +19,9 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {@var{lst} =} dir (@var{f}) ## List the current directory in verbose form for the FTP connection -## @var{f}. @var{f} is an FTP object returned by the @code{ftp} function. +## @var{f}. +## +## @var{f} is an FTP object returned by the @code{ftp} function. ## @end deftypefn function lst = dir (f)
--- a/scripts/@ftp/ftp.m +++ b/scripts/@ftp/ftp.m @@ -23,23 +23,38 @@ ## If @var{username} and @var{password} are not specified, user "anonymous" ## with no password is used. The returned FTP object @var{f} represents the ## established FTP connection. +## +## The list of actions for an FTP object are shown below. All functions +## require an FTP object as the first argument. +## +## @multitable @columnfractions 0.15 0.8 +## @headitem Method @tab Description +## @item ascii @tab Set transfer type to ascii +## @item binary @tab Set transfer type to binary +## @item cd @tab Change remote working directory +## @item close @tab Close FTP connection +## @item delete @tab Delete remote file +## @item dir @tab List remote directory contents +## @item mget @tab Download remote files +## @item mkdir @tab Create remote directory +## @item mput @tab Upload local files +## @item rename @tab Rename remote file or directory +## @item rmdir @tab Remove remote directory +## @end multitable +## ## @end deftypefn -function obj = ftp (host, username = "anonymous", password = "") - if (nargin == 0) - p.host = ""; - p.username = username; - p.password = password; - p.curlhandle = tmpnam ("ftp-"); - obj = class (p, "ftp"); - elseif (nargin == 1 && strcmp (class (host), "ftp")) - obj = host; +function obj = ftp (host = "", username = "anonymous", password = "") + if (nargin == 1 && isa (host, "ftp")) + obj = host; # Copy constructor else p.host = host; p.username = username; p.password = password; p.curlhandle = tmpnam ("ftp-"); - __ftp__ (p.curlhandle, host, username, password); + if (nargin > 0) + __ftp__ (p.curlhandle, host, username, password); + endif obj = class (p, "ftp"); endif endfunction
--- a/scripts/@ftp/loadobj.m +++ b/scripts/@ftp/loadobj.m @@ -30,7 +30,7 @@ b = rmfield (b, "dir"); elseif (isfield (b, "remotePwd")) ## FIXME: Can we read matlab java stringBuffer objects? - warning ("can not change remote directory in loqded FTP object"); + warning ("can not change remote directory in loaded FTP object"); b = rmfield (b, "remotePwd"); endif endfunction
--- a/scripts/@ftp/mget.m +++ b/scripts/@ftp/mget.m @@ -19,7 +19,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} mget (@var{f}, @var{file}) ## @deftypefnx {Function File} {} mget (@var{f}, @var{dir}) -## @deftypefnx {Function File} {} mget (@dots{}, @var{target}) +## @deftypefnx {Function File} {} mget (@var{f}, @var{remote_name}, @var{target}) ## Download a remote file @var{file} or directory @var{dir} to the local ## directory on the FTP connection @var{f}. @var{f} is an FTP object ## returned by the @code{ftp} function. @@ -28,8 +28,8 @@ ## files or directories on the remote server that match will be downloaded. ## ## If a third argument @var{target} is given, then a single file or -## directory will be downloaded with the name @var{target} to the local -## directory. +## directory will be downloaded to the local directory and the local name +## will be changed to @var{target}. ## @end deftypefn function mget (f, file)
--- a/scripts/@ftp/mkdir.m +++ b/scripts/@ftp/mkdir.m @@ -19,6 +19,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} mkdir (@var{f}, @var{path}) ## Create the remote directory @var{path}, over the FTP connection @var{f}. +## ## @var{f} is an FTP object returned by the @code{ftp} function. ## @end deftypefn
--- a/scripts/@ftp/mput.m +++ b/scripts/@ftp/mput.m @@ -22,7 +22,7 @@ ## the FTP connection @var{f}. @var{f} is an FTP object returned by the ## ftp function. ## -## The argument @var{file} is passed by the @dfn{glob} function and any +## The argument @var{file} is passed through the @code{glob} function and any ## files that match the wildcards in @var{file} will be uploaded. ## @end deftypefn
--- a/scripts/@ftp/rename.m +++ b/scripts/@ftp/rename.m @@ -19,8 +19,9 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} rename (@var{f}, @var{oldname}, @var{newname}) ## Rename or move the remote file or directory @var{oldname} to @var{newname}, -## over the FTP connection @var{f}. @var{f} is an FTP object returned by the -## ftp function. +## over the FTP connection @var{f}. +## +## @var{f} is an FTP object returned by the ftp function. ## @end deftypefn function rename (f, oldname, newname)
--- a/scripts/@ftp/rmdir.m +++ b/scripts/@ftp/rmdir.m @@ -19,6 +19,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} rmdir (@var{f}, @var{path}) ## Remove the remote directory @var{path}, over the FTP connection @var{f}. +## ## @var{f} is an FTP object returned by the @code{ftp} function. ## @end deftypefn
--- a/scripts/elfun/acosd.m +++ b/scripts/elfun/acosd.m @@ -25,12 +25,17 @@ ## Author: David Bateman <dbateman@free.fr> function y = acosd (x) + if (nargin != 1) print_usage (); endif - y = acos(x) .* 180 ./ pi; + + y = acos (x) .* 180 ./ pi; + endfunction -%!error(acosd()) -%!error(acosd(1,2)) -%!assert(acosd(0:0.1:1),180/pi*acos(0:0.1:1),-10*eps) + +%!assert (acosd (0:0.1:1), 180/pi*acos (0:0.1:1), -10*eps) + +%!error acosd () +%!error acosd (1, 2)
--- a/scripts/elfun/acot.m +++ b/scripts/elfun/acot.m @@ -30,18 +30,18 @@ print_usage (); endif - y = atan (1./x); + y = atan (1 ./ x); endfunction + %!test %! rt2 = sqrt (2); %! rt3 = sqrt (3); %! x = [rt3, 1, rt3/3, 0, -rt3/3, -1, -rt3]; %! v = [pi/6, pi/4, pi/3, pi/2, -pi/3, -pi/4, -pi/6]; -%! assert(all (abs (acot (x) - v) < sqrt (eps))); +%! assert (all (abs (acot (x) - v) < sqrt (eps))); -%!error acot (); +%!error acot () +%!error acot (1, 2) -%!error acot (1, 2); -
--- a/scripts/elfun/acotd.m +++ b/scripts/elfun/acotd.m @@ -25,12 +25,17 @@ ## Author: David Bateman <dbateman@free.fr> function y = acotd (x) + if (nargin != 1) print_usage (); endif + y = atand (1 ./ x); + endfunction -%!error(acotd()) -%!error(acotd(1,2)) -%!assert(acotd(0:10:90),180./pi.*acot(0:10:90),-10*eps) + +%!assert (acotd (0:10:90), 180./pi.*acot (0:10:90), -10*eps) + +%!error acotd () +%!error acotd (1, 2)
--- a/scripts/elfun/acoth.m +++ b/scripts/elfun/acoth.m @@ -34,14 +34,14 @@ endfunction + %!test %! rt2 = sqrt (2); %! rt3 = sqrt (3); %! v = -i*[pi/6, pi/4, pi/3, -pi/3, -pi/4, -pi/6]; %! x = i*[rt3, 1, rt3/3, -rt3/3, -1, -rt3]; -%! assert(all (abs (acoth (x) - v) < sqrt (eps))); +%! assert (all (abs (acoth (x) - v) < sqrt (eps))); -%!error acoth (); +%!error acoth () +%!error acoth (1, 2) -%!error acoth (1, 2); -
--- a/scripts/elfun/acsc.m +++ b/scripts/elfun/acsc.m @@ -34,14 +34,14 @@ endfunction + %!test %! rt2 = sqrt (2); %! rt3 = sqrt (3); %! v = [pi/6, pi/4, pi/3, pi/2, pi/3, pi/4, pi/6]; %! x = [2, rt2, 2*rt3/3, 1, 2*rt3/3, rt2, 2]; -%! assert(all (abs (acsc (x) - v) < sqrt (eps))); +%! assert (all (abs (acsc (x) - v) < sqrt (eps))); -%!error acsc (); +%!error acsc () +%!error acsc (1, 2) -%!error acsc (1, 2); -
--- a/scripts/elfun/acscd.m +++ b/scripts/elfun/acscd.m @@ -25,12 +25,17 @@ ## Author: David Bateman <dbateman@free.fr> function y = acscd (x) + if (nargin != 1) print_usage (); endif - y = acsc(x) .* 180 ./ pi; + + y = acsc (x) .* 180 ./ pi; + endfunction -%!error(acscd()) -%!error(acscd(1,2)) -%!assert(acscd(0:10:90),180/pi*acsc(0:10:90),-10*eps) + +%!assert (acscd (0:10:90), 180/pi*acsc (0:10:90), -10*eps) + +%!error acscd () +%!error acscd (1, 2)
--- a/scripts/elfun/acsch.m +++ b/scripts/elfun/acsch.m @@ -34,12 +34,12 @@ endfunction + %!test %! v = [pi/2*i, -pi/2*i]; %! x = [-i, i]; -%! assert(all (abs (acsch (x) - v) < sqrt (eps))); +%! assert (all (abs (acsch (x) - v) < sqrt (eps))); -%!error acsch (); +%!error acsch () +%!error acsch (1, 2) -%!error acsch (1, 2); -
--- a/scripts/elfun/asec.m +++ b/scripts/elfun/asec.m @@ -34,13 +34,13 @@ endfunction + %!test %! rt2 = sqrt (2); %! rt3 = sqrt (3); %! v = [0, pi/6, pi/4, pi/3, 2*pi/3, 3*pi/4, 5*pi/6, pi]; %! x = [1, 2*rt3/3, rt2, 2, -2, -rt2, -2*rt3/3, -1]; -%! assert(all (abs (asec (x) - v) < sqrt (eps))); +%! assert (all (abs (asec (x) - v) < sqrt (eps))); -%!error asec (); - -%!error asec (1, 2); +%!error asec () +%!error asec (1, 2)
--- a/scripts/elfun/asecd.m +++ b/scripts/elfun/asecd.m @@ -25,12 +25,17 @@ ## Author: David Bateman <dbateman@free.fr> function y = asecd (x) + if (nargin != 1) print_usage (); endif + y = asec (x) .* 180 ./ pi; -endfunction; + +endfunction -%!error(asecd()) -%!error(asecd(1,2)) -%!assert(asecd(0:10:90),180./pi.*asec(0:10:90),-10*eps) + +%!assert (asecd (0:10:90), 180./pi.*asec (0:10:90), -10*eps) + +%!error asecd () +%!error asecd (1, 2)
--- a/scripts/elfun/asech.m +++ b/scripts/elfun/asech.m @@ -34,12 +34,12 @@ endfunction + %!test %! v = [0, pi*i]; %! x = [1, -1]; -%! assert(all (abs (asech (x) - v) < sqrt (eps))); +%! assert (all (abs (asech (x) - v) < sqrt (eps))); -%!error asech (); +%!error asech () +%!error asech (1, 2) -%!error asech (1, 2); -
--- a/scripts/elfun/asind.m +++ b/scripts/elfun/asind.m @@ -25,12 +25,17 @@ ## Author: David Bateman <dbateman@free.fr> function y = asind (x) + if (nargin != 1) print_usage (); endif - y = asin(x) .* 180 ./ pi; + + y = asin (x) .* 180 ./ pi; + endfunction -%!error(asind()) -%!error(asind(1,2)) -%!assert(asind(0:0.1:1),180/pi*asin(0:0.1:1),-10*eps) + +%!assert (asind (0:0.1:1), 180/pi*asin (0:0.1:1), -10*eps) + +%!error asind () +%!error asind (1, 2)
--- a/scripts/elfun/atand.m +++ b/scripts/elfun/atand.m @@ -25,12 +25,17 @@ ## Author: David Bateman <dbateman@free.fr> function y = atand (x) + if (nargin != 1) print_usage (); endif + y = 180 ./ pi .* atan (x); + endfunction -%!error(atand()) -%!error(atand(1,2)) -%!assert(atand(0:10:90),180./pi.*atan(0:10:90),-10*eps) + +%!assert (atand (0:10:90), 180./pi.*atan (0:10:90), -10*eps) + +%!error atand () +%!error atand (1, 2)
--- a/scripts/elfun/cosd.m +++ b/scripts/elfun/cosd.m @@ -26,17 +26,22 @@ ## Author: David Bateman <dbateman@free.fr> function y = cosd (x) + if (nargin != 1) print_usage (); endif + I = x / 180; y = cos (I .* pi); I = I + 0.5; y(I == fix (I) & finite (I)) = 0; + endfunction -%!error(cosd()) -%!error(cosd(1,2)) -%!assert(cosd(0:10:80),cos(pi*[0:10:80]/180),-10*eps) -%!assert(cosd([0,180,360]) != 0) -%!assert(cosd([90,270]) == 0) + +%!assert (cosd (0:10:80), cos (pi*[0:10:80]/180), -10*eps) +%!assert (cosd ([0, 180, 360]) != 0) +%!assert (cosd ([90, 270]) == 0) + +%!error cosd () +%!error cosd (1, 2)
--- a/scripts/elfun/cot.m +++ b/scripts/elfun/cot.m @@ -30,18 +30,18 @@ print_usage (); endif - y = 1 ./ tan(x); + y = 1 ./ tan (x); endfunction + %!test %! rt2 = sqrt (2); %! rt3 = sqrt (3); %! x = [pi/6, pi/4, pi/3, pi/2, 2*pi/3, 3*pi/4, 5*pi/6]; %! v = [rt3, 1, rt3/3, 0, -rt3/3, -1, -rt3]; -%! assert(all (abs (cot (x) - v) < sqrt (eps))); +%! assert (all (abs (cot (x) - v) < sqrt (eps))); -%!error cot (); +%!error cot () +%!error cot (1, 2) -%!error cot (1, 2); -
--- a/scripts/elfun/cotd.m +++ b/scripts/elfun/cotd.m @@ -25,14 +25,19 @@ ## Author: David Bateman <dbateman@free.fr> function y = cotd (x) + if (nargin != 1) print_usage (); endif + y = 1 ./ tand (x); + endfunction -%!error(cotd()) -%!error(cotd(1,2)) -%!assert(cotd(10:10:80),cot(pi*[10:10:80]/180),-10*eps) -%!assert(cotd([0,180,360]) == Inf) -%!assert(cotd([90,270]) == 0) + +%!assert (cotd (10:10:80), cot (pi*[10:10:80]/180), -10*eps) +%!assert (cotd ([0, 180, 360]) == Inf) +%!assert (cotd ([90, 270]) == 0) + +%!error cotd () +%!error cotd (1, 2)
--- a/scripts/elfun/coth.m +++ b/scripts/elfun/coth.m @@ -34,12 +34,12 @@ endfunction + %!test %! x = [pi/2*i, 3*pi/2*i]; %! v = [0, 0]; -%! assert(all (abs (coth (x) - v) < sqrt (eps))); +%! assert (all (abs (coth (x) - v) < sqrt (eps))); -%!error coth (); +%!error coth () +%!error coth (1, 2) -%!error coth (1, 2); -
--- a/scripts/elfun/csc.m +++ b/scripts/elfun/csc.m @@ -30,18 +30,18 @@ print_usage (); endif - y = 1 ./ sin(x); + y = 1 ./ sin (x); endfunction + %!test %! rt2 = sqrt (2); %! rt3 = sqrt (3); %! x = [pi/6, pi/4, pi/3, pi/2, 2*pi/3, 3*pi/4, 5*pi/6]; %! v = [2, rt2, 2*rt3/3, 1, 2*rt3/3, rt2, 2]; -%! assert(all (abs (csc (x) - v) < sqrt (eps))); +%! assert (all (abs (csc (x) - v) < sqrt (eps))); -%!error csc (); +%!error csc () +%!error csc (1, 2) -%!error csc (1, 2); -
--- a/scripts/elfun/cscd.m +++ b/scripts/elfun/cscd.m @@ -25,15 +25,19 @@ ## Author: David Bateman <dbateman@free.fr> function y = cscd (x) + if (nargin != 1) print_usage (); endif + y = 1 ./ sind (x); + endfunction -%!error(cscd()) -%!error(cscd(1,2)) -%!assert(cscd(10:10:90),csc(pi*[10:10:90]/180),-10*eps) -%!assert(cscd([0,180,360]) == Inf) -%!assert(cscd([90,270]) != Inf) +%!assert (cscd (10:10:90), csc (pi*[10:10:90]/180), -10*eps) +%!assert (cscd ([0, 180, 360]) == Inf) +%!assert (cscd ([90, 270]) != Inf) + +%!error cscd () +%!error cscd (1, 2)
--- a/scripts/elfun/csch.m +++ b/scripts/elfun/csch.m @@ -30,16 +30,16 @@ print_usage (); endif - y = 1 ./ sinh(x); + y = 1 ./ sinh (x); endfunction + %!test %! x = [pi/2*i, 3*pi/2*i]; %! v = [-i, i]; -%! assert(all (abs (csch (x) - v) < sqrt (eps))); +%! assert (all (abs (csch (x) - v) < sqrt (eps))); -%!error csch (); +%!error csch () +%!error csch (1, 2) -%!error csch (1, 2); -
--- a/scripts/elfun/sec.m +++ b/scripts/elfun/sec.m @@ -30,18 +30,18 @@ print_usage (); endif - y = 1 ./ cos(x); + y = 1 ./ cos (x); endfunction + %!test %! rt2 = sqrt (2); %! rt3 = sqrt (3); %! x = [0, pi/6, pi/4, pi/3, 2*pi/3, 3*pi/4, 5*pi/6, pi]; %! v = [1, 2*rt3/3, rt2, 2, -2, -rt2, -2*rt3/3, -1]; -%! assert(all (abs (sec (x) - v) < sqrt (eps))); +%! assert (all (abs (sec (x) - v) < sqrt (eps))); -%!error sec (); +%!error sec () +%!error sec (1, 2) -%!error sec (1, 2); -
--- a/scripts/elfun/secd.m +++ b/scripts/elfun/secd.m @@ -25,14 +25,19 @@ ## Author: David Bateman <dbateman@free.fr> function y = secd (x) + if (nargin != 1) print_usage (); endif + y = 1 ./ cosd (x); + endfunction -%!error(secd()) -%!error(secd(1,2)) -%!assert(secd(0:10:80),sec(pi*[0:10:80]/180),-10*eps) -%!assert(secd([0,180,360]) != Inf) -%!assert(secd([90,270]) == Inf) + +%!assert (secd (0:10:80), sec (pi*[0:10:80]/180), -10*eps) +%!assert (secd ([0, 180, 360]) != Inf) +%!assert (secd ([90, 270]) == Inf) + +%!error secd () +%!error secd (1, 2)
--- a/scripts/elfun/sech.m +++ b/scripts/elfun/sech.m @@ -30,16 +30,16 @@ print_usage (); endif - y = 1 ./ cosh(x); + y = 1 ./ cosh (x); endfunction + %!test %! x = [0, pi*i]; %! v = [1, -1]; -%! assert(all (abs (sech (x) - v) < sqrt (eps))); +%! assert (all (abs (sech (x) - v) < sqrt (eps))); -%!error sech (); +%!error sech () +%!error sech (1, 2) -%!error sech (1, 2); -
--- a/scripts/elfun/sind.m +++ b/scripts/elfun/sind.m @@ -26,16 +26,21 @@ ## Author: David Bateman <dbateman@free.fr> function y = sind (x) + if (nargin != 1) print_usage (); endif + I = x / 180; y = sin (I .* pi); y(I == fix (I) & finite (I)) = 0; + endfunction -%!error(sind()) -%!error(sind(1,2)) -%!assert(sind(10:10:90),sin(pi*[10:10:90]/180),-10*eps) -%!assert(sind([0,180,360]) == 0) -%!assert(sind([90,270]) != 0) + +%!assert (sind (10:10:90), sin (pi*[10:10:90]/180), -10*eps) +%!assert (sind ([0, 180, 360]) == 0) +%!assert (sind ([90, 270]) != 0) + +%!error sind () +%!error sind (1, 2)
--- a/scripts/elfun/tand.m +++ b/scripts/elfun/tand.m @@ -27,18 +27,23 @@ ## Author: David Bateman <dbateman@free.fr> function y = tand (x) + if (nargin != 1) print_usage (); endif + I0 = x / 180; I90 = (x-90) / 180; y = tan (I0 .* pi); y(I0 == fix (I0) & finite (I0)) = 0; y(I90 == fix (I90) & finite (I90)) = Inf; -endfunction; + +endfunction + -%!error(tand()) -%!error(tand(1,2)) -%!assert(tand(10:10:80),tan(pi*[10:10:80]/180),-10*eps) -%!assert(tand([0,180,360]) == 0) -%!assert(tand([90,270]) == Inf) +%!assert (tand (10:10:80), tan (pi*[10:10:80]/180), -10*eps) +%!assert (tand ([0, 180, 360]) == 0) +%!assert (tand ([90, 270]) == Inf) + +%!error tand () +%!error tand (1, 2)
--- a/scripts/general/accumdim.m +++ b/scripts/general/accumdim.m @@ -83,7 +83,8 @@ sz = size (vals); if (nargin < 3) - [~, dim] = max (sz != 1); # first non-singleton dim + ## Find the first non-singleton dimension. + (dim = find (sz > 1, 1)) || (dim = 1); elseif (! isindex (dim)) error ("accumdim: DIM must be a valid dimension"); elseif (dim > length (sz))
--- a/scripts/general/bicubic.m +++ b/scripts/general/bicubic.m @@ -198,11 +198,16 @@ endfunction + %!demo -%! A=[13,-1,12;5,4,3;1,6,2]; -%! x=[0,1,4]+10; y=[-10,-9,-8]; -%! xi=linspace(min(x),max(x),17); -%! yi=linspace(min(y),max(y),26)'; -%! mesh(xi,yi,bicubic(x,y,A,xi,yi)); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! clf; +%! colormap ("default"); +%! A = [13,-1,12;5,4,3;1,6,2]; +%! x = [0,1,4]+10; +%! y = [-10,-9,-8]; +%! xi = linspace (min (x), max (x), 17); +%! yi = linspace (min (y), max (y), 26)'; +%! mesh (xi, yi, bicubic (x,y,A,xi,yi)); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; +
--- a/scripts/general/cell2mat.m +++ b/scripts/general/cell2mat.m @@ -78,27 +78,28 @@ endfunction -## Tests -%!shared C, D, E, F + +%!demo +%! C = {[1], [2 3 4]; [5; 9], [6 7 8; 10 11 12]}; +%! cell2mat (C) + +%!assert (cell2mat ({}), []); +%!test %! C = {[1], [2 3 4]; [5; 9], [6 7 8; 10 11 12]}; %! D = C; D(:,:,2) = C; %! E = [1 2 3 4; 5 6 7 8; 9 10 11 12]; %! F = E; F(:,:,2) = E; -%!assert (cell2mat (C), E); -%!assert (cell2mat (D), F); +%! assert (cell2mat (C), E); +%! assert (cell2mat (D), F); %!test %! m = rand (10) + i * rand (10); %! c = mat2cell (m, [1 2 3 4], [4 3 2 1]); -%! assert (cell2mat (c), m) +%! assert (cell2mat (c), m); %!test %! m = int8 (256*rand (4, 5, 6, 7, 8)); %! c = mat2cell (m, [1 2 1], [1 2 2], [3 1 1 1], [4 1 2], [3 1 4]); -%! assert (cell2mat (c), m) +%! assert (cell2mat (c), m); %!test %! m = {1, 2, 3}; %! assert (cell2mat (mat2cell (m, 1, [1 1 1])), m); -%!assert (cell2mat ({}), []); -## Demos -%!demo -%! C = {[1], [2 3 4]; [5; 9], [6 7 8; 10 11 12]}; -%! cell2mat (C) +
--- a/scripts/general/celldisp.m +++ b/scripts/general/celldisp.m @@ -78,9 +78,10 @@ endif endfunction + %!demo %! c = {1, 2, {31, 32}}; -%! celldisp(c, "b") +%! celldisp (c, "b") %!error celldisp (); %!error celldisp ({}, "name", 1);
--- a/scripts/general/cplxpair.m +++ b/scripts/general/cplxpair.m @@ -139,26 +139,28 @@ endfunction + %!demo %! [ cplxpair(exp(2i*pi*[0:4]'/5)), exp(2i*pi*[3; 2; 4; 1; 0]/5) ] -%!assert (isempty(cplxpair([]))); -%!assert (cplxpair(1), 1) -%!assert (cplxpair([1+1i, 1-1i]), [1-1i, 1+1i]) -%!assert (cplxpair([1+1i, 1+1i, 1, 1-1i, 1-1i, 2]), \ -%! [1-1i, 1+1i, 1-1i, 1+1i, 1, 2]) -%!assert (cplxpair([1+1i; 1+1i; 1; 1-1i; 1-1i; 2]), \ -%! [1-1i; 1+1i; 1-1i; 1+1i; 1; 2]) -%!assert (cplxpair([0, 1, 2]), [0, 1, 2]); +%!assert (isempty (cplxpair ([]))) +%!assert (cplxpair (1), 1) +%!assert (cplxpair ([1+1i, 1-1i]), [1-1i, 1+1i]) +%!assert (cplxpair ([1+1i, 1+1i, 1, 1-1i, 1-1i, 2]), ... +%! [1-1i, 1+1i, 1-1i, 1+1i, 1, 2]) +%!assert (cplxpair ([1+1i; 1+1i; 1; 1-1i; 1-1i; 2]), ... +%! [1-1i; 1+1i; 1-1i; 1+1i; 1; 2]) +%!assert (cplxpair ([0, 1, 2]), [0, 1, 2]) %!shared z -%! z=exp(2i*pi*[4; 3; 5; 2; 6; 1; 0]/7); -%!assert (cplxpair(z(randperm(7))), z); -%!assert (cplxpair(z(randperm(7))), z); -%!assert (cplxpair(z(randperm(7))), z); -%!assert (cplxpair([z(randperm(7)),z(randperm(7))]),[z,z]) -%!assert (cplxpair([z(randperm(7)),z(randperm(7))],[],1),[z,z]) -%!assert (cplxpair([z(randperm(7)).';z(randperm(7)).'],[],2),[z.';z.']) +%! z = exp (2i*pi*[4; 3; 5; 2; 6; 1; 0]/7); +%!assert (cplxpair (z(randperm (7))), z) +%!assert (cplxpair (z(randperm (7))), z) +%!assert (cplxpair (z(randperm (7))), z) +%!assert (cplxpair ([z(randperm(7)),z(randperm(7))]), [z,z]) +%!assert (cplxpair ([z(randperm(7)),z(randperm(7))],[],1), [z,z]) +%!assert (cplxpair ([z(randperm(7)).';z(randperm(7)).'],[],2), [z.';z.']) %!## tolerance test -%!assert (cplxpair([1i, -1i, 1+(1i*eps)],2*eps), [-1i, 1i, 1+(1i*eps)]); +%!assert (cplxpair ([1i, -1i, 1+(1i*eps)],2*eps), [-1i, 1i, 1+(1i*eps)]) +
--- a/scripts/general/interp1.m +++ b/scripts/general/interp1.m @@ -298,50 +298,54 @@ endfunction + %!demo -%! 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,"linear"); -%! spl=interp1(xp,yp,xf,"spline"); -%! cub=interp1(xp,yp,xf,"pchip"); -%! near=interp1(xp,yp,xf,"nearest"); -%! plot(xf,yf,"r",xf,near,"g",xf,lin,"b",xf,cub,"c",xf,spl,"m",xp,yp,"r*"); -%! legend ("original","nearest","linear","pchip","spline") +%! clf; +%! 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, "linear"); +%! spl = interp1 (xp,yp,xf, "spline"); +%! cub = interp1 (xp,yp,xf, "pchip"); +%! near= interp1 (xp,yp,xf, "nearest"); +%! plot (xf,yf,"r",xf,near,"g",xf,lin,"b",xf,cub,"c",xf,spl,"m",xp,yp,"r*"); +%! legend ("original", "nearest", "linear", "pchip", "spline"); %! %-------------------------------------------------------- %! % confirm that interpolated function matches the original %!demo -%! 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,"*linear"); -%! spl=interp1(xp,yp,xf,"*spline"); -%! cub=interp1(xp,yp,xf,"*cubic"); -%! near=interp1(xp,yp,xf,"*nearest"); -%! plot(xf,yf,"r",xf,near,"g",xf,lin,"b",xf,cub,"c",xf,spl,"m",xp,yp,"r*"); -%! legend ("*original","*nearest","*linear","*cubic","*spline") +%! clf; +%! 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, "*linear"); +%! spl = interp1 (xp,yp,xf, "*spline"); +%! cub = interp1 (xp,yp,xf, "*cubic"); +%! near= interp1 (xp,yp,xf, "*nearest"); +%! plot (xf,yf,"r",xf,near,"g",xf,lin,"b",xf,cub,"c",xf,spl,"m",xp,yp,"r*"); +%! legend ("*original", "*nearest", "*linear", "*cubic", "*spline"); %! %-------------------------------------------------------- %! % confirm that interpolated function matches the original %!demo +%! clf; %! t = 0 : 0.3 : pi; dt = t(2)-t(1); %! n = length (t); k = 100; dti = dt*n/k; %! ti = t(1) + [0 : k-1]*dti; %! y = sin (4*t + 0.3) .* cos (3*t - 0.1); -%! ddyc = diff(diff(interp1(t,y,ti,'cubic'))./dti)./dti; -%! ddys = diff(diff(interp1(t,y,ti,'spline'))./dti)./dti; -%! ddyp = diff(diff(interp1(t,y,ti,'pchip'))./dti)./dti; -%! plot (ti(2:end-1), ddyc,'g+',ti(2:end-1),ddys,'b*', ... -%! ti(2:end-1),ddyp,'c^'); -%! legend('cubic','spline','pchip'); -%! title("Second derivative of interpolated 'sin (4*t + 0.3) .* cos (3*t - 0.1)'"); +%! ddyc = diff (diff (interp1 (t,y,ti, "cubic")) ./dti)./dti; +%! ddys = diff (diff (interp1 (t,y,ti, "spline"))./dti)./dti; +%! ddyp = diff (diff (interp1 (t,y,ti, "pchip")) ./dti)./dti; +%! plot (ti(2:end-1),ddyc,'g+', ti(2:end-1),ddys,'b*', ti(2:end-1),ddyp,'c^'); +%! legend ("cubic", "spline", "pchip"); +%! title ("Second derivative of interpolated 'sin (4*t + 0.3) .* cos (3*t - 0.1)'"); %!demo -%! xf=0:0.05:10; yf = sin(2*pi*xf/5) - (xf >= 5); -%! xp=[0:.5:4.5,4.99,5:.5:10]; yp = sin(2*pi*xp/5) - (xp >= 5); -%! lin=interp1(xp,yp,xf,"linear"); -%! near=interp1(xp,yp,xf,"nearest"); -%! plot(xf,yf,"r",xf,near,"g",xf,lin,"b",xp,yp,"r*"); -%! legend ("original","nearest","linear") +%! clf; +%! xf = 0:0.05:10; yf = sin (2*pi*xf/5) - (xf >= 5); +%! xp = [0:.5:4.5,4.99,5:.5:10]; yp = sin (2*pi*xp/5) - (xp >= 5); +%! lin = interp1 (xp,yp,xf, "linear"); +%! near= interp1 (xp,yp,xf, "nearest"); +%! plot (xf,yf,"r", xf,near,"g", xf,lin,"b", xp,yp,"r*"); +%! legend ("original", "nearest", "linear"); %! %-------------------------------------------------------- %! % confirm that interpolated function matches the original @@ -353,18 +357,19 @@ ## confirm they are the correct values. %!shared xp, yp, xi, style -%! xp=0:2:10; yp = sin(2*pi*xp/5); +%! xp = 0:2:10; +%! yp = sin (2*pi*xp/5); %! xi = [-1, 0, 2.2, 4, 6.6, 10, 11]; - ## The following BLOCK/ENDBLOCK section is repeated for each style ## nearest, linear, cubic, spline, pchip ## The test for ppval of cubic has looser tolerance, but otherwise ## the tests are identical. ## Note that the block checks style and *style; if you add more tests -## before to add them to both sections of each block. One test, +## be sure to add them to both sections of each block. One test, ## style vs. *style, occurs only in the first section. ## There is an ENDBLOCKTEST after the final block + %!test style = "nearest"; ## BLOCK %!assert (interp1(xp, yp, [min(xp)-1, max(xp)+1],style), [NA, NA]); @@ -399,6 +404,7 @@ %! interp1(xp,yp,xi,style,"extrap"),10*eps); %!error interp1(1,1,1, style); ## ENDBLOCK + %!test style='linear'; ## BLOCK %!assert (interp1(xp, yp, [min(xp)-1, max(xp)+1],style), [NA, NA]); @@ -433,6 +439,7 @@ %! interp1(xp,yp,xi,style,"extrap"),10*eps); %!error interp1(1,1,1, style); ## ENDBLOCK + %!test style='cubic'; ## BLOCK %!assert (interp1(xp, yp, [min(xp)-1, max(xp)+1],style), [NA, NA]); @@ -467,6 +474,7 @@ %! interp1(xp,yp,xi,style,"extrap"),100*eps); %!error interp1(1,1,1, style); ## ENDBLOCK + %!test style='pchip'; ## BLOCK %!assert (interp1(xp, yp, [min(xp)-1, max(xp)+1],style), [NA, NA]); @@ -501,6 +509,7 @@ %! interp1(xp,yp,xi,style,"extrap"),10*eps); %!error interp1(1,1,1, style); ## ENDBLOCK + %!test style='spline'; ## BLOCK %!assert (interp1(xp, yp, [min(xp)-1, max(xp)+1],style), [NA, NA]);
--- a/scripts/general/interp2.m +++ b/scripts/general/interp2.m @@ -446,99 +446,119 @@ %!demo -%! A=[13,-1,12;5,4,3;1,6,2]; -%! x=[0,1,4]; y=[10,11,12]; -%! xi=linspace(min(x),max(x),17); -%! yi=linspace(min(y),max(y),26)'; -%! mesh(xi,yi,interp2(x,y,A,xi,yi,'linear')); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! clf; +%! colormap ("default"); +%! A = [13,-1,12;5,4,3;1,6,2]; +%! x = [0,1,4]; y = [10,11,12]; +%! xi = linspace (min(x), max(x), 17); +%! yi = linspace (min(y), max(y), 26)'; +%! mesh (xi,yi,interp2 (x,y,A,xi,yi, "linear")); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!demo -%! [x,y,A] = peaks(10); +%! clf; +%! colormap ("default"); +%! [x,y,A] = peaks (10); %! x = x(1,:)'; y = y(:,1); -%! xi=linspace(min(x),max(x),41); -%! yi=linspace(min(y),max(y),41)'; -%! mesh(xi,yi,interp2(x,y,A,xi,yi,'linear')); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! xi = linspace (min(x), max(x), 41); +%! yi = linspace (min(y), max(y), 41)'; +%! mesh (xi,yi,interp2 (x,y,A,xi,yi, "linear")); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!demo -%! A=[13,-1,12;5,4,3;1,6,2]; -%! x=[0,1,4]; y=[10,11,12]; -%! xi=linspace(min(x),max(x),17); -%! yi=linspace(min(y),max(y),26)'; -%! mesh(xi,yi,interp2(x,y,A,xi,yi,'nearest')); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! clf; +%! colormap ("default"); +%! A = [13,-1,12;5,4,3;1,6,2]; +%! x = [0,1,4]; y = [10,11,12]; +%! xi = linspace (min(x), max(x), 17); +%! yi = linspace (min(y), max(y), 26)'; +%! mesh (xi,yi,interp2 (x,y,A,xi,yi, "nearest")); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!demo -%! [x,y,A] = peaks(10); +%! clf; +%! colormap ("default"); +%! [x,y,A] = peaks (10); %! x = x(1,:)'; y = y(:,1); -%! xi=linspace(min(x),max(x),41); -%! yi=linspace(min(y),max(y),41)'; -%! mesh(xi,yi,interp2(x,y,A,xi,yi,'nearest')); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! xi = linspace (min(x), max(x), 41); +%! yi = linspace (min(y), max(y), 41)'; +%! mesh (xi,yi,interp2 (x,y,A,xi,yi, "nearest")); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!demo -%! A=[13,-1,12;5,4,3;1,6,2]; -%! x=[0,1,2]; y=[10,11,12]; -%! xi=linspace(min(x),max(x),17); -%! yi=linspace(min(y),max(y),26)'; -%! mesh(xi,yi,interp2(x,y,A,xi,yi,'pchip')); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! clf; +%! colormap ("default"); +%! A = [13,-1,12;5,4,3;1,6,2]; +%! x = [0,1,2]; y = [10,11,12]; +%! xi = linspace (min(x), max(x), 17); +%! yi = linspace (min(y), max(y), 26)'; +%! mesh (xi,yi,interp2 (x,y,A,xi,yi, "pchip")); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!demo -%! [x,y,A] = peaks(10); +%! clf; +%! colormap ("default"); +%! [x,y,A] = peaks (10); %! x = x(1,:)'; y = y(:,1); -%! xi=linspace(min(x),max(x),41); -%! yi=linspace(min(y),max(y),41)'; -%! mesh(xi,yi,interp2(x,y,A,xi,yi,'pchip')); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! xi = linspace (min(x), max(x), 41); +%! yi = linspace (min(y), max(y), 41)'; +%! mesh (xi,yi,interp2 (x,y,A,xi,yi, "pchip")); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!demo -%! A=[13,-1,12;5,4,3;1,6,2]; -%! x=[0,1,2]; y=[10,11,12]; -%! xi=linspace(min(x),max(x),17); -%! yi=linspace(min(y),max(y),26)'; -%! mesh(xi,yi,interp2(x,y,A,xi,yi,'cubic')); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! clf; +%! colormap ("default"); +%! A = [13,-1,12;5,4,3;1,6,2]; +%! x = [0,1,2]; y = [10,11,12]; +%! xi = linspace (min(x), max(x), 17); +%! yi = linspace (min(y), max(y), 26)'; +%! mesh (xi,yi,interp2 (x,y,A,xi,yi, "cubic")); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!demo -%! [x,y,A] = peaks(10); +%! clf; +%! colormap ("default"); +%! [x,y,A] = peaks (10); %! x = x(1,:)'; y = y(:,1); -%! xi=linspace(min(x),max(x),41); -%! yi=linspace(min(y),max(y),41)'; -%! mesh(xi,yi,interp2(x,y,A,xi,yi,'cubic')); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! xi = linspace (min(x), max(x), 41); +%! yi = linspace (min(y), max(y), 41)'; +%! mesh (xi,yi,interp2 (x,y,A,xi,yi, "cubic")); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!demo -%! A=[13,-1,12;5,4,3;1,6,2]; -%! x=[0,1,2]; y=[10,11,12]; -%! xi=linspace(min(x),max(x),17); -%! yi=linspace(min(y),max(y),26)'; -%! mesh(xi,yi,interp2(x,y,A,xi,yi,'spline')); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! clf; +%! colormap ("default"); +%! A = [13,-1,12;5,4,3;1,6,2]; +%! x = [0,1,2]; y = [10,11,12]; +%! xi = linspace (min(x), max(x), 17); +%! yi = linspace (min(y), max(y), 26)'; +%! mesh (xi,yi,interp2 (x,y,A,xi,yi, "spline")); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!demo -%! [x,y,A] = peaks(10); +%! clf; +%! colormap ("default"); +%! [x,y,A] = peaks (10); %! x = x(1,:)'; y = y(:,1); -%! xi=linspace(min(x),max(x),41); -%! yi=linspace(min(y),max(y),41)'; -%! mesh(xi,yi,interp2(x,y,A,xi,yi,'spline')); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! xi = linspace (min(x), max(x), 41); +%! yi = linspace (min(y), max(y), 41)'; +%! mesh (xi,yi,interp2 (x,y,A,xi,yi, "spline")); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!test % simple test %! x = [1,2,3]; %! y = [4,5,6,7]; -%! [X, Y] = meshgrid(x,y); +%! [X, Y] = meshgrid (x,y); %! Orig = X.^2 + Y.^3; %! xi = [1.2,2, 1.5]; %! yi = [6.2, 4.0, 5.0]'; @@ -547,7 +567,7 @@ %! [243, 245.4, 243.9; %! 65.6, 68, 66.5; %! 126.6, 129, 127.5]; -%! Result = interp2(x,y,Orig, xi, yi); +%! Result = interp2 (x,y,Orig, xi, yi); %! %! assert(Result, Expected, 1000*eps);
--- a/scripts/general/interpft.m +++ b/scripts/general/interpft.m @@ -92,25 +92,28 @@ %!demo +%! clf; %! t = 0 : 0.3 : pi; dt = t(2)-t(1); %! n = length (t); k = 100; %! ti = t(1) + [0 : k-1]*dt*n/k; %! y = sin (4*t + 0.3) .* cos (3*t - 0.1); %! yp = sin (4*ti + 0.3) .* cos (3*ti - 0.1); -%! plot (ti, yp, 'g', ti, interp1(t, y, ti, 'spline'), 'b', ... -%! ti, interpft (y, k), 'c', t, y, 'r+'); -%! legend ('sin(4t+0.3)cos(3t-0.1','spline','interpft','data'); +%! plot (ti, yp, 'g', ti, interp1(t, y, ti, "spline"), 'b', ... +%! ti, interpft (y, k), 'c', t, y, "r+"); +%! legend ("sin(4t+0.3)cos(3t-0.1)", "spline", "interpft", "data"); %!shared n,y %! x = [0:10]'; y = sin(x); n = length (x); -%!assert (interpft(y, n), y, 20*eps); -%!assert (interpft(y', n), y', 20*eps); -%!assert (interpft([y,y],n), [y,y], 20*eps); +%!assert (interpft (y, n), y, 20*eps); +%!assert (interpft (y', n), y', 20*eps); +%!assert (interpft ([y,y],n), [y,y], 20*eps); %% Test input validation %!error interpft () %!error interpft (1) %!error interpft (1,2,3) -%!error (interpft(1,[n,n])) -%!error (interpft(1,2,0)) -%!error (interpft(1,2,3)) +%!error <N must be a scalar integer> interpft (1,[2,2]) +%!error <N must be a scalar integer> interpft (1,2.1) +%!error <invalid dimension DIM> interpft (1,2,0) +%!error <invalid dimension DIM> interpft (1,2,3) +
--- a/scripts/general/interpn.m +++ b/scripts/general/interpn.m @@ -209,93 +209,98 @@ endfunction + %!demo -%! A=[13,-1,12;5,4,3;1,6,2]; -%! x=[0,1,4]; y=[10,11,12]; -%! xi=linspace(min(x),max(x),17); -%! yi=linspace(min(y),max(y),26)'; -%! mesh(xi,yi,interpn(x,y,A.',xi,yi,"linear").'); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! clf; +%! colormap ("default"); +%! A = [13,-1,12;5,4,3;1,6,2]; +%! x = [0,1,4]; y = [10,11,12]; +%! xi = linspace (min(x), max(x), 17); +%! yi = linspace (min(y), max(y), 26)'; +%! mesh (xi, yi, interpn (x,y,A.',xi,yi, "linear").'); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!demo -%! A=[13,-1,12;5,4,3;1,6,2]; -%! x=[0,1,4]; y=[10,11,12]; -%! xi=linspace(min(x),max(x),17); -%! yi=linspace(min(y),max(y),26)'; -%! mesh(xi,yi,interpn(x,y,A.',xi,yi,"nearest").'); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%! clf; +%! colormap ("default"); +%! A = [13,-1,12;5,4,3;1,6,2]; +%! x = [0,1,4]; y = [10,11,12]; +%! xi = linspace (min(x), max(x), 17); +%! yi = linspace (min(y), max(y), 26)'; +%! mesh (xi, yi, interpn (x,y,A.',xi,yi, "nearest").'); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; -%!#demo -%! A=[13,-1,12;5,4,3;1,6,2]; -%! x=[0,1,2]; y=[10,11,12]; -%! xi=linspace(min(x),max(x),17); -%! yi=linspace(min(y),max(y),26)'; -%! mesh(xi,yi,interpn(x,y,A.',xi,yi,"cubic").'); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; +%!#demo # FIXME: Uncomment when support for "cubic" has been added +%! clf; +%! colormap ("default"); +%! A = [13,-1,12;5,4,3;1,6,2]; +%! x = [0,1,2]; y = [10,11,12]; +%! xi = linspace (min(x), max(x), 17); +%! yi = linspace (min(y), max(y), 26)'; +%! mesh (xi, yi, interpn (x,y,A.',xi,yi, "cubic").'); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!demo -%! A=[13,-1,12;5,4,3;1,6,2]; -%! x=[0,1,2]; y=[10,11,12]; -%! xi=linspace(min(x),max(x),17); -%! yi=linspace(min(y),max(y),26)'; -%! mesh(xi,yi,interpn(x,y,A.',xi,yi,"spline").'); -%! [x,y] = meshgrid(x,y); -%! hold on; plot3(x(:),y(:),A(:),"b*"); hold off; - +%! clf; +%! colormap ("default"); +%! A = [13,-1,12;5,4,3;1,6,2]; +%! x = [0,1,2]; y = [10,11,12]; +%! xi = linspace (min(x), max(x), 17); +%! yi = linspace (min(y), max(y), 26)'; +%! mesh (xi, yi, interpn (x,y,A.',xi,yi, "spline").'); +%! [x,y] = meshgrid (x,y); +%! hold on; plot3 (x(:),y(:),A(:),"b*"); hold off; %!demo +%! clf; +%! colormap ("default"); %! x = y = z = -1:1; %! f = @(x,y,z) x.^2 - y - z.^2; %! [xx, yy, zz] = meshgrid (x, y, z); %! v = f (xx,yy,zz); %! xi = yi = zi = -1:0.1:1; %! [xxi, yyi, zzi] = ndgrid (xi, yi, zi); -%! vi = interpn(x, y, z, v, xxi, yyi, zzi, 'spline'); +%! vi = interpn (x, y, z, v, xxi, yyi, zzi, 'spline'); %! mesh (yi, zi, squeeze (vi(1,:,:))); - %!test -%! [x,y,z] = ndgrid(0:2); -%! f = x+y+z; -%! assert (interpn(x,y,z,f,[.5 1.5],[.5 1.5],[.5 1.5]), [1.5, 4.5]) -%! assert (interpn(x,y,z,f,[.51 1.51],[.51 1.51],[.51 1.51],'nearest'), [3, 6]) -%! assert (interpn(x,y,z,f,[.5 1.5],[.5 1.5],[.5 1.5],'spline'), [1.5, 4.5]) -%! assert (interpn(x,y,z,f,x,y,z), f) -%! assert (interpn(x,y,z,f,x,y,z,'nearest'), f) -%! assert (interpn(x,y,z,f,x,y,z,'spline'), f) +%! [x,y,z] = ndgrid (0:2); +%! f = x + y + z; +%! assert (interpn (x,y,z,f,[.5 1.5],[.5 1.5],[.5 1.5]), [1.5, 4.5]); +%! assert (interpn (x,y,z,f,[.51 1.51],[.51 1.51],[.51 1.51],"nearest"), [3, 6]); +%! assert (interpn (x,y,z,f,[.5 1.5],[.5 1.5],[.5 1.5],"spline"), [1.5, 4.5]); +%! assert (interpn (x,y,z,f,x,y,z), f); +%! assert (interpn (x,y,z,f,x,y,z,"nearest"), f); +%! assert (interpn (x,y,z,f,x,y,z,"spline"), f); %!test %! [x, y, z] = ndgrid (0:2, 1:4, 2:6); %! f = x + y + z; -%! xi = [0.5 1.0 1.5]; -%! yi = [1.5 2.0 2.5 3.5]; -%! zi = [2.5 3.5 4.0 5.0 5.5]; +%! xi = [0.5 1.0 1.5]; yi = [1.5 2.0 2.5 3.5]; zi = [2.5 3.5 4.0 5.0 5.5]; %! fi = interpn (x, y, z, f, xi, yi, zi); %! [xi, yi, zi] = ndgrid (xi, yi, zi); -%! assert (fi, xi + yi + zi) +%! assert (fi, xi + yi + zi); %!test -%! xi = 0:2; -%! yi = 1:4; -%! zi = 2:6; +%! xi = 0:2; yi = 1:4; zi = 2:6; %! [x, y, z] = ndgrid (xi, yi, zi); %! f = x + y + z; %! fi = interpn (x, y, z, f, xi, yi, zi, "nearest"); -%! assert (fi, x + y + z) +%! assert (fi, x + y + z); %!test -%! [x,y,z] = ndgrid(0:2); -%! f = x.^2+y.^2+z.^2; -%! assert (interpn(x,y,-z,f,1.5,1.5,-1.5), 7.5) +%! [x,y,z] = ndgrid (0:2); +%! f = x.^2 + y.^2 + z.^2; +%! assert (interpn (x,y,-z,f,1.5,1.5,-1.5), 7.5); -%!test % for Matlab-compatible rounding for 'nearest' -%! X = meshgrid (1:4); -%! assert (interpn (X, 2.5, 2.5, 'nearest'), 3); +%!test # for Matlab-compatible rounding for "nearest" +%! x = meshgrid (1:4); +%! assert (interpn (x, 2.5, 2.5, "nearest"), 3); -%!shared z, zout, tol +%!test %! z = zeros (3, 3, 3); %! zout = zeros (5, 5, 5); %! z(:,:,1) = [1 3 5; 3 5 7; 5 7 9]; @@ -303,12 +308,13 @@ %! z(:,:,3) = z(:,:,2) + 2; %! for n = 1:5 %! zout(:,:,n) = [1 2 3 4 5; -%! 2 3 4 5 6; +%! 2 3 4 5 6; %! 3 4 5 6 7; %! 4 5 6 7 8; %! 5 6 7 8 9] + (n-1); -%! end -%! tol = 10 * eps; -%!assert (interpn (z), zout, tol) -%!assert (interpn (z, "linear"), zout, tol) -%!assert (interpn (z, "spline"), zout, tol) +%! endfor +%! tol = 10*eps; +%! assert (interpn (z), zout, tol); +%! assert (interpn (z, "linear"), zout, tol); +%! assert (interpn (z, "spline"), zout, tol); +
--- a/scripts/general/profexplore.m +++ b/scripts/general/profexplore.m @@ -32,7 +32,7 @@ function profexplore (data) - if (nargin ~= 1) + if (nargin != 1) print_usage (); endif @@ -87,7 +87,7 @@ printf ("help Display this help message.\n"); printf ("up [N] Go up N levels, where N is an integer. Default is 1.\n"); printf ("N Go down a level into option N.\n"); - elseif (~isnan (option)) + elseif (! isnan (option)) if (option < 1 || option > length (tree)) printf ("The chosen option is out of range!\n"); else @@ -115,7 +115,7 @@ if (length (cmd) > 3 && cmd(3) == ' ') opt = fix (str2double (substr (cmd, 3))); - if (~isnan (opt) && opt > 0) + if (! isnan (opt) && opt > 0) rv = opt; return; endif
--- a/scripts/general/profile.m +++ b/scripts/general/profile.m @@ -69,31 +69,31 @@ endif switch (option) - case 'on' + case "on" __profiler_reset__ (); __profiler_enable__ (true); - case 'off' + case "off" __profiler_enable__ (false); - case 'clear' + case "clear" __profiler_reset__ (); - case 'resume' + case "resume" __profiler_enable__ (true); - case 'status' + case "status" enabled = __profiler_enable__ (); if (enabled) - enabled = 'on'; + enabled = "on"; else - enabled = 'off'; + enabled = "off"; endif - retval = struct ('ProfilerStatus', enabled); + retval = struct ("ProfilerStatus", enabled); - case 'info' + case "info" [flat, tree] = __profiler_data__ (); - retval = struct ('FunctionTable', flat, 'Hierarchical', tree); + retval = struct ("FunctionTable", flat, "Hierarchical", tree); otherwise warning ("profile: Unrecognized option '%s'", option); @@ -105,47 +105,50 @@ %!demo -%! profile ('on'); +%! profile on; %! A = rand (100); %! B = expm (A); -%! profile ('off'); -%! profile ('resume'); +%! profile off; +%! profile resume; %! C = sqrtm (A); -%! profile ('off'); -%! T = profile ('info'); +%! profile off; +%! T = profile ("info"); %! profshow (T); -%!error profile (); -%!error profile ('on', 2); - %!test %! on_struct.ProfilerStatus = "on"; %! off_struct.ProfilerStatus = "off"; -%! profile ('on'); +%! profile ("on"); %! result = logm (rand (200) + 10 * eye (200)); -%! assert (profile ('status'), on_struct); -%! profile ('off'); -%! assert (profile ('status'), off_struct); -%! profile ('resume'); +%! assert (profile ("status"), on_struct); +%! profile ("off"); +%! assert (profile ("status"), off_struct); +%! profile ("resume"); %! result = logm (rand (200) + 10 * eye (200)); -%! profile ('off'); -%! assert (profile ('status'), off_struct); -%! info = profile ('info'); +%! profile ("off"); +%! assert (profile ("status"), off_struct); +%! info = profile ("info"); %! assert (isstruct (info)); %! assert (size (info), [1, 1]); -%! assert (fieldnames (info), {'FunctionTable'; 'Hierarchical'}); +%! assert (fieldnames (info), {"FunctionTable"; "Hierarchical"}); %! ftbl = info.FunctionTable; -%! assert (fieldnames (ftbl), {'FunctionName'; 'TotalTime'; 'NumCalls'; 'IsRecursive'; 'Parents'; 'Children'}); +%! assert (fieldnames (ftbl), {"FunctionName"; "TotalTime"; "NumCalls"; "IsRecursive"; "Parents"; "Children"}); %! hier = info.Hierarchical; -%! assert (fieldnames (hier), {'Index'; 'SelfTime'; 'TotalTime'; 'NumCalls'; 'Children'}); -%! profile ('clear'); -%! info = profile ('info'); +%! assert (fieldnames (hier), {"Index"; "SelfTime"; "TotalTime"; "NumCalls"; "Children"}); +%! profile ("clear"); +%! info = profile ("info"); %! assert (isstruct (info)); %! assert (size (info), [1, 1]); -%! assert (fieldnames (info), {'FunctionTable'; 'Hierarchical'}); +%! assert (fieldnames (info), {"FunctionTable"; "Hierarchical"}); %! ftbl = info.FunctionTable; %! assert (size (ftbl), [0, 1]); -%! assert (fieldnames (ftbl), {'FunctionName'; 'TotalTime'; 'NumCalls'; 'IsRecursive'; 'Parents'; 'Children'}); +%! assert (fieldnames (ftbl), {"FunctionName"; "TotalTime"; "NumCalls"; "IsRecursive"; "Parents"; "Children"}); %! hier = info.Hierarchical; %! assert (size (hier), [0, 1]); -%! assert (fieldnames (hier), {'Index'; 'SelfTime'; 'NumCalls'; 'Children'}); +%! assert (fieldnames (hier), {"Index"; "SelfTime"; "NumCalls"; "Children"}); + +%% Test input validation +%!error profile () +%!error profile ("on", 2) +%!error profile ("INVALID_OPTION"); +
--- a/scripts/general/profshow.m +++ b/scripts/general/profshow.m @@ -81,20 +81,22 @@ endfunction + %!demo -%! profile ("on"); +%! profile on; %! A = rand (100); %! B = expm (A); -%! profile ("off"); +%! profile off; %! T = profile ("info"); %! profshow (T, 10); %!demo -%! profile ("on"); +%! profile on; %! expm (rand (500) + eye (500)); -%! profile ("off"); +%! profile off; %! profshow (profile ("info"), 5); %!error profshow (); %!error profshow (1, 2, 3); %!error profshow (struct (), 1.2); +
--- a/scripts/general/repmat.m +++ b/scripts/general/repmat.m @@ -20,12 +20,13 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} repmat (@var{A}, @var{m}) ## @deftypefnx {Function File} {} repmat (@var{A}, @var{m}, @var{n}) -## @deftypefnx {Function File} {} repmat (@var{A}, @var{m}, @var{n}, @var{p}, @dots{}) ## @deftypefnx {Function File} {} repmat (@var{A}, [@var{m} @var{n}]) ## @deftypefnx {Function File} {} repmat (@var{A}, [@var{m} @var{n} @var{p} @dots{}]) ## 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. +## @var{m} by @var{m} block matrix. For copying along more than two +## dimensions, specify the number of times to copy across each dimension +## @var{m}, @var{n}, @var{p}, @dots{}, in a vector in the second argument. ## @seealso{repelems} ## @end deftypefn
--- a/scripts/geometry/convhull.m +++ b/scripts/geometry/convhull.m @@ -20,7 +20,7 @@ ## @deftypefn {Function File} {@var{H} =} convhull (@var{x}, @var{y}) ## @deftypefnx {Function File} {@var{H} =} convhull (@var{x}, @var{y}, @var{options}) ## Compute the convex hull of the set of points defined by the -## vectors @var{x} and @var{y}. The hull @var{H} is an index vector into +## arrays @var{x} and @var{y}. The hull @var{H} is an index vector into ## the set of points and specifies which points form the enclosing hull. ## ## An optional third argument, which must be a string or cell array of strings, @@ -45,17 +45,20 @@ print_usage (); endif - if (! (isvector (x) && isvector (y) && length (x) == length (y)) - && ! size_equal (x, y)) - error ("convhull: X and Y must be the same size"); + ## convhulln expects column vectors + x = x(:); + y = y(:); + + if (length (x) != length (y)) + error ("convhull: X and Y must have the same size"); elseif (nargin == 3 && ! (ischar (options) || iscellstr (options))) error ("convhull: OPTIONS must be a string or cell array of strings"); endif if (nargin == 2) - i = convhulln ([x(:), y(:)]); + i = convhulln ([x, y]); else - i = convhulln ([x(:), y(:)], options); + i = convhulln ([x, y], options); endif n = rows (i); @@ -85,6 +88,7 @@ %!demo +%! clf; %! x = -3:0.05:3; %! y = abs (sin (x)); %! k = convhull (x, y);
--- a/scripts/geometry/delaunay.m +++ b/scripts/geometry/delaunay.m @@ -102,8 +102,9 @@ %! T = delaunay (x,y); %! VX = [ x(T(:,1)); x(T(:,2)); x(T(:,3)); x(T(:,1)) ]; %! VY = [ y(T(:,1)); y(T(:,2)); y(T(:,3)); y(T(:,1)) ]; +%! clf; +%! plot (VX,VY,"b", x,y,"r*"); %! axis ([0,1,0,1]); -%! plot (VX,VY,"b", x,y,"r*"); %!testif HAVE_QHULL %! x = [-1, 0, 1, 0];
--- a/scripts/geometry/griddata.m +++ b/scripts/geometry/griddata.m @@ -140,38 +140,46 @@ endif endfunction -%!testif HAVE_QHULL -%! [xx,yy]=meshgrid(linspace(-1,1,32)); -%! x = xx(:); -%! x = x + 10 * (2 * round(rand(size(x))) - 1) * eps; -%! y = yy(:); -%! y = y + 10 * (2 * round(rand(size(y))) - 1) * eps; -%! z = sin(2*(x.^2+y.^2)); -%! zz = griddata(x,y,z,xx,yy,'linear'); -%! zz2 = sin(2*(xx.^2+yy.^2)); -%! zz2(isnan(zz)) = NaN; -%! assert (zz, zz2, 100 * eps) + +%!demo +%! clf; +%! colormap ("default"); +%! x = 2*rand (100,1) - 1; +%! y = 2*rand (size (x)) - 1; +%! z = sin (2*(x.^2 + y.^2)); +%! [xx,yy] = meshgrid (linspace (-1,1,32)); +%! griddata (x,y,z,xx,yy); +%! title ("nonuniform grid sampled at 100 points"); + +%!demo +%! clf; +%! colormap ("default"); +%! x = 2*rand (1000,1) - 1; +%! y = 2*rand (size (x)) - 1; +%! z = sin (2*(x.^2 + y.^2)); +%! [xx,yy] = meshgrid (linspace (-1,1,32)); +%! griddata (x,y,z,xx,yy); +%! title ("nonuniform grid sampled at 1000 points"); %!demo -%! x=2*rand(100,1)-1; -%! y=2*rand(size(x))-1; -%! z=sin(2*(x.^2+y.^2)); -%! [xx,yy]=meshgrid(linspace(-1,1,32)); -%! griddata(x,y,z,xx,yy); -%! title('nonuniform grid sampled at 100 points'); +%! clf; +%! colormap ("default"); +%! x = 2*rand (1000,1) - 1; +%! y = 2*rand (size (x)) - 1; +%! z = sin (2*(x.^2 + y.^2)); +%! [xx,yy] = meshgrid (linspace (-1,1,32)); +%! griddata (x,y,z,xx,yy,"nearest"); +%! title ("nonuniform grid sampled at 1000 points with nearest neighbor"); -%!demo -%! x=2*rand(1000,1)-1; -%! y=2*rand(size(x))-1; -%! z=sin(2*(x.^2+y.^2)); -%! [xx,yy]=meshgrid(linspace(-1,1,32)); -%! griddata(x,y,z,xx,yy); -%! title('nonuniform grid sampled at 1000 points'); +%!testif HAVE_QHULL +%! [xx,yy] = meshgrid (linspace (-1,1,32)); +%! x = xx(:); +%! x = x + 10*(2*round (rand (size(x))) - 1) * eps; +%! y = yy(:); +%! y = y + 10*(2*round (rand (size(y))) - 1) * eps; +%! z = sin (2*(x.^2 + y.^2)); +%! zz = griddata (x,y,z,xx,yy,"linear"); +%! zz2 = sin (2*(xx.^2 + yy.^2)); +%! zz2(isnan (zz)) = NaN; +%! assert (zz, zz2, 100*eps); -%!demo -%! x=2*rand(1000,1)-1; -%! y=2*rand(size(x))-1; -%! z=sin(2*(x.^2+y.^2)); -%! [xx,yy]=meshgrid(linspace(-1,1,32)); -%! griddata(x,y,z,xx,yy,'nearest'); -%! title('nonuniform grid sampled at 1000 points with nearest neighbor');
--- a/scripts/geometry/inpolygon.m +++ b/scripts/geometry/inpolygon.m @@ -84,60 +84,64 @@ endfunction -%!demo -%! xv=[ 0.05840, 0.48375, 0.69356, 1.47478, 1.32158, \ -%! 1.94545, 2.16477, 1.87639, 1.18218, 0.27615, \ -%! 0.05840 ]; -%! yv=[ 0.60628, 0.04728, 0.50000, 0.50000, 0.02015, \ -%! 0.18161, 0.78850, 1.13589, 1.33781, 1.04650, \ -%! 0.60628 ]; -%! xa=[0:0.1:2.3]; -%! ya=[0:0.1:1.4]; -%! [x,y]=meshgrid(xa,ya); -%! [in,on]=inpolygon(x,y,xv,yv); -%! -%! inside=in & !on; -%! plot(xv,yv) -%! hold on -%! plot(x(inside),y(inside),"@g") -%! plot(x(~in),y(~in),"@m") -%! plot(x(on),y(on),"@b") -%! hold off -%! disp("Green points are inside polygon, magenta are outside,"); -%! disp("and blue are on boundary."); %!demo -%! xv=[ 0.05840, 0.48375, 0.69356, 1.47478, 1.32158, \ -%! 1.94545, 2.16477, 1.87639, 1.18218, 0.27615, \ -%! 0.05840, 0.73295, 1.28913, 1.74221, 1.16023, \ -%! 0.73295, 0.05840 ]; -%! yv=[ 0.60628, 0.04728, 0.50000, 0.50000, 0.02015, \ -%! 0.18161, 0.78850, 1.13589, 1.33781, 1.04650, \ -%! 0.60628, 0.82096, 0.67155, 0.96114, 1.14833, \ -%! 0.82096, 0.60628]; -%! xa=[0:0.1:2.3]; -%! ya=[0:0.1:1.4]; -%! [x,y]=meshgrid(xa,ya); -%! [in,on]=inpolygon(x,y,xv,yv); +%! xv = [ 0.05840, 0.48375, 0.69356, 1.47478, 1.32158, ... +%! 1.94545, 2.16477, 1.87639, 1.18218, 0.27615, ... +%! 0.05840 ]; +%! yv = [ 0.60628, 0.04728, 0.50000, 0.50000, 0.02015, ... +%! 0.18161, 0.78850, 1.13589, 1.33781, 1.04650, ... +%! 0.60628 ]; +%! xa = [0:0.1:2.3]; +%! ya = [0:0.1:1.4]; +%! [x,y] = meshgrid (xa, ya); +%! [in,on] = inpolygon (x, y, xv, yv); +%! inside = in & !on; %! -%! inside=in & ~ on; -%! plot(xv,yv) -%! hold on -%! plot(x(inside),y(inside),"@g") -%! plot(x(~in),y(~in),"@m") -%! plot(x(on),y(on),"@b") -%! hold off -%! disp("Green points are inside polygon, magenta are outside,"); -%! disp("and blue are on boundary."); +%! clf; +%! plot (xv, yv); +%! hold on; +%! plot (x(inside), y(inside), "@g") +%! plot (x(!in), y(!in), "@m"); +%! plot (x(on), y(on), "@b"); +%! hold off; +%! disp ("Green points are inside polygon, magenta are outside,"); +%! disp ("and blue are on boundary."); -%!error inpolygon (); -%!error inpolygon (1, 2); -%!error inpolygon (1, 2, 3); - -%!error inpolygon (1, [1,2], [3, 4], [5, 6]); -%!error inpolygon ([1,2], [3, 4], [5, 6], 1); +%!demo +%! xv = [ 0.05840, 0.48375, 0.69356, 1.47478, 1.32158, ... +%! 1.94545, 2.16477, 1.87639, 1.18218, 0.27615, ... +%! 0.05840, 0.73295, 1.28913, 1.74221, 1.16023, ... +%! 0.73295, 0.05840 ]; +%! yv = [ 0.60628, 0.04728, 0.50000, 0.50000, 0.02015, ... +%! 0.18161, 0.78850, 1.13589, 1.33781, 1.04650, ... +%! 0.60628, 0.82096, 0.67155, 0.96114, 1.14833, ... +%! 0.82096, 0.60628]; +%! xa = [0:0.1:2.3]; +%! ya = [0:0.1:1.4]; +%! [x,y] = meshgrid (xa, ya); +%! [in,on] = inpolygon (x, y, xv, yv); +%! inside = in & !on; +%! +%! clf; +%! plot (xv, yv); +%! hold on; +%! plot (x(inside), y(inside), "@g"); +%! plot (x(!in), y(!in), "@m"); +%! plot (x(on), y(on), "@b"); +%! hold off; +%! disp ("Green points are inside polygon, magenta are outside,"); +%! disp ("and blue are on boundary."); %!test %! [in, on] = inpolygon ([1, 0], [1, 0], [-1, -1, 1, 1], [-1, 1, 1, -1]); %! assert (in, [false, true]); %! assert (on, [true, false]); + +%% Test input validation +%!error inpolygon () +%!error inpolygon (1, 2) +%!error inpolygon (1, 2, 3) +%!error inpolygon (1, [1,2], [3, 4], [5, 6]) +%!error inpolygon ([1,2], [3, 4], [5, 6], 1) +
--- a/scripts/geometry/voronoi.m +++ b/scripts/geometry/voronoi.m @@ -174,7 +174,7 @@ %!demo -%! voronoi (rand(10,1), rand(10,1)); +%! voronoi (rand (10,1), rand (10,1)); %!testif HAVE_QHULL %! phi = linspace (-pi, 3/4*pi, 8);
--- a/scripts/help/help.m +++ b/scripts/help/help.m @@ -181,5 +181,6 @@ endfunction -%!assert (! isempty (findstr (help ("ls"), "List directory contents"))) +%!assert (! isempty (strfind (help ("ls"), "List directory contents"))) %!error <invalid input> help (42) +
--- a/scripts/help/unimplemented.m +++ b/scripts/help/unimplemented.m @@ -321,7 +321,6 @@ "printdlg", "printopt", "printpreview", - "profile", "profsave", "propedit", "propertyeditor", @@ -333,7 +332,6 @@ "reducepatch", "reducevolume", "resample", - "rgbplot", "root", "rotate", "rotate3d",
--- a/scripts/image/autumn.m +++ b/scripts/image/autumn.m @@ -44,7 +44,7 @@ map = [1, 0, 0]; elseif (n > 1) r = ones (n, 1); - g = (0:n - 1)' ./ (n - 1); + g = [0:(n-1)]' / (n - 1); b = zeros (n, 1); map = [r, g, b]; else @@ -53,9 +53,10 @@ endfunction + %!demo %! ## Show the 'autumn' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (autumn (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (autumn (64));
--- a/scripts/image/bone.m +++ b/scripts/image/bone.m @@ -44,21 +44,24 @@ map = [0, 0, 0]; elseif (n > 1) x = linspace (0, 1, n)'; - - r = (x < 3/4) .* (7/8 * x) + (x >= 3/4) .* (11/8 * x - 3/8); - g = (x < 3/8) .* (7/8 * x)\ - + (x >= 3/8 & x < 3/4) .* (29/24 * x - 1/8)\ + r = (x < 3/4) .* (7/8 * x) ... + + (x >= 3/4) .* (11/8 * x - 3/8); + g = (x < 3/8) .* (7/8 * x) ... + + (x >= 3/8 & x < 3/4) .* (29/24 * x - 1/8) ... + (x >= 3/4) .* (7/8 * x + 1/8); - b = (x < 3/8) .* (29/24 * x) + (x >= 3/8) .* (7/8 * x + 1/8); + b = (x < 3/8) .* (29/24 * x) ... + + (x >= 3/8) .* (7/8 * x + 1/8); map = [r, g, b]; else map = []; endif + endfunction + %!demo %! ## Show the 'bone' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (bone (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (bone (64));
--- a/scripts/image/brighten.m +++ b/scripts/image/brighten.m @@ -18,20 +18,18 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {@var{map_out} =} brighten (@var{map}, @var{beta}) +## @deftypefnx {Function File} {@var{map_out} =} brighten (@var{beta}) ## @deftypefnx {Function File} {@var{map_out} =} brighten (@var{h}, @var{beta}) -## @deftypefnx {Function File} {@var{map_out} =} brighten (@var{beta}) -## Darken or brighten 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. +## Brighten or darken a 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} must be a scalar between -1 and 1, where a +## negative value darkens and a positive value brightens the 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} +## If no output is specified then the result is written to the current colormap. +## @seealso{colormap, contrast} ## @end deftypefn function rmap = brighten (arg1, beta)
new file mode 100644 --- /dev/null +++ b/scripts/image/colorcube.m @@ -0,0 +1,96 @@ +## Copyright (C) 2012 Rik Wehbring +## +## This file is part of Octave. +## +## Octave 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 3 of the License, or (at +## your option) any later version. +## +## Octave 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 Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{map} =} colorcube () +## @deftypefnx {Function File} {@var{map} =} colorcube (@var{n}) +## Create color colormap. This colormap is composed of as many equally +## spaced colors (not grays) in the RGB color space as possible. If there +## are not a perfect number @var{n} of regularly spaced colors then the +## remaining entries in the colormap are gradients of pure red, green, blue, +## and gray. +## The argument @var{n} must be a scalar. +## If unspecified, the length of the current colormap, or 64, is used. +## @seealso{colormap} +## @end deftypefn + +function map = colorcube (n) + + if (nargin == 0) + n = rows (colormap); + elseif (nargin == 1) + if (! isscalar (n)) + error ("colorcube: argument must be a scalar"); + endif + else + print_usage (); + endif + + if (n < 9) + map = gray (n); + return; + endif + + # Create colorcube of evenly spaced points with side length of n^1/3 + cubelen = fix (cbrt (n)); + reserve = n - cubelen^3; + + if (reserve == 0) + # Steal space from blue to put the gray gradient + [r, g, b] = meshgrid (linspace (0,1,cubelen), + linspace (0,1,cubelen), + linspace (0,1,cubelen-1)); + else + [r, g, b] = meshgrid (linspace (0,1,cubelen), + linspace (0,1,cubelen), + linspace (0,1,cubelen)); + endif + + # Create map and weed out grays + map = [r(:), g(:), b(:)]; + idx = any (bsxfun (@ne, map(:, 1), map(:, 2:3)), 2); + map = map(idx, :); + + # Weed out pure colors + idx = sum (map == 0, 2); + map = map(idx != 2, :); + + # Put in remaining gradients of pure red, green, blue, and gray + reserve = n - rows (map) - 1; + csteps = fix (reserve/4); + cstepsz = 1 / csteps; + cgrad = (cstepsz:cstepsz:1)'; + gsteps = reserve - 3*csteps; + gstepsz = 1 / gsteps; + ggrad = (gstepsz:gstepsz:1)'; + map = [map + cgrad, zeros(csteps, 1), zeros(csteps, 1) + zeros(csteps, 1), cgrad, zeros(csteps, 1) + zeros(csteps, 1), zeros(csteps, 1), cgrad + 0, 0, 0 + ggrad, ggrad, ggrad]; + +endfunction + + +%!demo +%! ## Show the 'colorcube' colormap as an image +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (colorcube (64)); +
--- a/scripts/image/colormap.m +++ b/scripts/image/colormap.m @@ -17,14 +17,15 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {} colormap (@var{map}) -## @deftypefnx {Function File} {} colormap ("default") -## Set the current colormap. +## @deftypefn {Function File} {@var{cmap} =} colormap () +## @deftypefnx {Function File} {@var{cmap} =} colormap (@var{map}) +## @deftypefnx {Function File} {@var{cmap} =} colormap ("default") +## Query or 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 +## colormap 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. +## must 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.
--- a/scripts/image/contrast.m +++ b/scripts/image/contrast.m @@ -17,11 +17,12 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {} contrast (@var{x}, @var{n}) +## @deftypefn {Function File} {@var{map} =} contrast (@var{x}) +## @deftypefnx {Function File} {@var{map} =} contrast (@var{x}, @var{n}) ## Return a gray colormap that maximizes the contrast in an image. The ## returned colormap will have @var{n} rows. If @var{n} is not defined -## then the size of the current colormap is used instead. -## @seealso{colormap} +## then the size of the current colormap is used. +## @seealso{colormap, brighten} ## @end deftypefn function map = contrast (x, n) @@ -42,9 +43,22 @@ minm = min (map); map = (map - minm) ./ (max (map) - minm); map = [map, map, map]; + endfunction -%!assert (contrast(1:100,10),[([0:9]/9)',([0:9]/9)',([0:9]/9)'],1e-10) + %!demo -%! image (reshape (1:100, 10, 10)) -%! colormap (contrast (1:100,10)) +%! clf; +%! img = reshape (1:100, 10, 10); +%! imagesc (img); +%! colormap (gray (64)); +%! title ("Image with default 64 gray levels"); +%! pos = get (gcf, "position"); +%! pos(1) += pos(3) + 15; +%! figure ("position", pos); +%! colormap (contrast (img, 10)); +%! imagesc (img); +%! title ("Image with contrast enhanced"); + +%!assert (contrast (1:100,10), [([0:9]/9)',([0:9]/9)',([0:9]/9)'], 1e-10) +
--- a/scripts/image/cool.m +++ b/scripts/image/cool.m @@ -42,7 +42,7 @@ if (n == 1) map = [0, 1, 1]; elseif (n > 1) - r = (0:n - 1)' ./ (n - 1); + r = [0:(n-1)]' / (n - 1); g = 1 - r; b = ones (n, 1); map = [r, g, b]; @@ -52,9 +52,10 @@ endfunction + %!demo %! ## Show the 'cool' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (cool (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (cool (64));
--- a/scripts/image/copper.m +++ b/scripts/image/copper.m @@ -44,7 +44,8 @@ map = [0, 0, 0]; elseif (n > 1) x = linspace (0, 1, n)'; - r = (x < 4/5) .* (5/4 * x) + (x >= 4/5); + r = (x < 4/5) .* (5/4 * x) ... + + (x >= 4/5); g = 4/5 * x; b = 1/2 * x; map = [r, g, b]; @@ -54,9 +55,10 @@ endfunction + %!demo %! ## Show the 'copper' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (copper (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (copper (64));
--- a/scripts/image/flag.m +++ b/scripts/image/flag.m @@ -19,7 +19,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {@var{map} =} flag () ## @deftypefnx {Function File} {@var{map} =} flag (@var{n}) -## Create color colormap. This colormap cycles through red, white, blue +## Create color colormap. This colormap cycles through red, white, blue, ## and black with each index change. ## The argument @var{n} must be a scalar. ## If unspecified, the length of the current colormap, or 64, is used. @@ -40,20 +40,15 @@ print_usage (); endif - p = [1, 0, 0; 1, 1, 1; 0, 0, 1; 0, 0, 0]; - if (rem(n,4) == 0) - map = kron (ones (n / 4, 1), p); - else - m1 = kron (ones (fix (n / 4), 1), p); - m2 = p(1:rem (n, 4), :); - map = [m1; m2]; - endif + C = [1, 0, 0; 1, 1, 1; 0, 0, 1; 0, 0, 0]; + map = C(rem (0:(n-1), 4) + 1, :); endfunction + %!demo %! ## Show the 'flag' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (flag (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (flag (64));
--- a/scripts/image/gmap40.m +++ b/scripts/image/gmap40.m @@ -23,8 +23,8 @@ ## magenta and cyan. This colormap is specifically designed for users of ## gnuplot 4.0 where these 6 colors are the allowable ones for patch objects. ## The argument @var{n} must be a scalar. -## If unspecified, a length of 6 is assumed. Larger values -## of @var{n} result in a repetition of the above colors. +## If unspecified, a length of 6 is assumed. Larger values of @var{n} result +## in a repetition of the above colors. ## @seealso{colormap} ## @end deftypefn @@ -40,18 +40,15 @@ print_usage (); endif - if (n >= 1) - map = repmat ([1, 0, 0; 0, 1, 0; 0, 0, 1; 1, 1, 0; 1, 0, 1; 0, 1, 1], - ceil (n / 6), 1) (1:n, :); - else - map = []; - endif + C = [1, 0, 0; 0, 1, 0; 0, 0, 1; 1, 1, 0; 1, 0, 1; 0, 1, 1]; + map = C(rem (0:(n-1), 6) + 1, :); endfunction + %!demo %! ## Show the 'gmap40' colormap as an image -%! image (1:6, linspace (0, 1, 6), repmat (1:6, 6, 1)') -%! axis ([1, 6, 0, 1], "ticy", "xy") -%! colormap (gmap40 (6)) +%! image (1:6, linspace (0, 1, 6), repmat ((1:6)', 1, 6)); +%! axis ([1, 6, 0, 1], "ticy", "xy"); +%! colormap (gmap40 (6));
--- a/scripts/image/gray.m +++ b/scripts/image/gray.m @@ -23,6 +23,7 @@ ## shades of gray. ## The argument @var{n} must be a scalar. ## If unspecified, the length of the current colormap, or 64, is used. +## @seealso{colormap} ## @end deftypefn ## Author: Tony Richardson <arichard@stark.cc.oh.us> @@ -41,15 +42,16 @@ print_usage (); endif - gr = [0:(n-1)]'; + gr = [0:(n-1)]' / (n - 1); - map = [ gr, gr, gr ] / (n - 1); + map = [gr, gr, gr]; endfunction + %!demo %! ## Show the 'gray' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (gray (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (gray (64));
--- a/scripts/image/gray2ind.m +++ b/scripts/image/gray2ind.m @@ -17,10 +17,13 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {[@var{img}, @var{map}] =} gray2ind (@var{I}, @var{n}) +## @deftypefn {Function File} {[@var{img} =} gray2ind (@var{I}) +## @deftypefnx {Function File} {[@var{img} =} gray2ind (@var{I}, @var{n}) +## @deftypefnx {Function File} {[@var{img}, @var{map} =} gray2ind (@dots{}) ## Convert a gray scale intensity image to an Octave indexed image. -## The indexed image will consist of @var{n} different intensity values. If not -## given @var{n} will default to 64. +## The indexed image will consist of @var{n} different intensity values. +## If not given @var{n} defaults to 64. +## @seealso{ind2gray, rgb2ind} ## @end deftypefn ## Author: Tony Richardson <arichard@stark.cc.oh.us>
--- a/scripts/image/hot.m +++ b/scripts/image/hot.m @@ -44,9 +44,11 @@ map = [0, 0, 0]; elseif (n > 1) x = linspace (0, 1, n)'; - r = (x < 2/5) .* (5/2 * x) + (x >= 2/5); - g = (x >= 2/5 & x < 4/5) .* (5/2 * x - 1) + (x >= 4/5); - b = (x >= 4/5) .* (5*x - 4); + r = (x < 2/5) .* (5/2 * x) ... + + (x >= 2/5); + g = (x >= 2/5 & x < 4/5) .* (5/2 * x - 1) ... + + (x >= 4/5); + b = (x >= 4/5) .* (5 * x - 4); map = [r, g, b]; else map = []; @@ -54,9 +56,10 @@ endfunction + %!demo %! ## Show the 'hot' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (hot (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (hot (64));
--- a/scripts/image/hsv.m +++ b/scripts/image/hsv.m @@ -20,9 +20,9 @@ ## @deftypefn {Function File} {} hsv (@var{n}) ## Create color colormap. This colormap begins with red, changes through ## yellow, green, cyan, blue, and magenta, before returning to red. -## It is useful for displaying periodic functions. It is obtained by linearly -## varying the hue through all possible values while keeping constant maximum -## saturation and value and is equivalent to +## It is useful for displaying periodic functions. The map is obtained by +## linearly varying the hue through all possible values while keeping constant +## maximum saturation and value. The equivalent code is ## @code{hsv2rgb ([linspace(0,1,N)', ones(N,2)])}. ## ## The argument @var{n} must be a scalar. @@ -47,17 +47,18 @@ if (n == 1) map = [1, 0, 0]; elseif (n > 1) - h = linspace (0, 1, n)'; - map = hsv2rgb ([h, ones(n, 1), ones(n, 1)]); + hue = linspace (0, 1, n)'; + map = hsv2rgb ([hue, ones(n,1), ones(n,1)]); else map = []; endif endfunction + %!demo %! ## Show the 'hsv' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (hsv (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (hsv (64));
--- a/scripts/image/hsv2rgb.m +++ b/scripts/image/hsv2rgb.m @@ -17,9 +17,11 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {@var{rgb_map} =} hsv2rgb (@var{hsv_map}) -## Transform a colormap or image from the HSV space to the RGB space. -## @seealso{rgb2hsv} +## @deftypefn {Function File} {@var{rgb_map} =} hsv2rgb (@var{hsv_map}) +## @deftypefnx {Function File} {@var{rgb_img} =} hsv2rgb (@var{hsv_img}) +## Transform a colormap or image from hue-saturation-value (HSV) space to +## red-green-blue (RGB) space. +## @seealso{rgb2hsv, ind2rgb, ntsc2rgb} ## @end deftypefn ## Author: Kai Habel <kai.habel@gmx.de> @@ -27,10 +29,10 @@ function rgb_map = hsv2rgb (hsv_map) -## Each color value x = (r,g,b) is calculated with -## x = (1-sat)*val+sat*val*f_x(hue) -## where f_x(hue) is a piecewise defined function for -## each color with f_r(hue-2/3) = f_g(hue) = f_b(hue-1/3). + ## Each color value x = (r,g,b) is calculated with + ## x = (1-sat)*val+sat*val*f_x(hue) + ## where f_x(hue) is a piecewise defined function for + ## each color with f_r(hue-2/3) = f_g(hue) = f_b(hue-1/3). if (nargin != 1) print_usage ();
--- a/scripts/image/image.m +++ b/scripts/image/image.m @@ -20,24 +20,24 @@ ## @deftypefn {Function File} {} image (@var{img}) ## @deftypefnx {Function File} {} image (@var{x}, @var{y}, @var{img}) ## @deftypefnx {Function File} {@var{h} =} image (@dots{}) -## Display a matrix as a color image. The elements of @var{img} are indices -## into the current colormap, and the colormap will be scaled so that the -## extremes of @var{img} are mapped to the extremes of the colormap. +## Display a matrix as a color image. ## +## The elements of @var{img} are indices into the current colormap. ## 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 +## @var{x} and @var{y}. If you are using gnuplot 4.1 or earlier, these ## variables are ignored. ## +## The optional return value @var{h} is a graphics handle to the image. +## ## Implementation Note: The origin (0, 0) for images is located in the ## upper left. For ordinary plots, the origin is located in the lower ## left. Octave handles this inversion by plotting the data normally, ## and then reversing the direction of the y-axis by setting the -## @code{ydir} property to @code{"reverse"}. This has implications whenever +## @code{ydir} property to "reverse". This has implications whenever ## an image and an ordinary plot need to be overlaid. The recommended ## solution is to display the image and then plot the reversed ydata ## using, for example, @code{flipud (ydata,1)}. ## -## The optional return value @var{h} is a graphics handle to the image. ## @seealso{imshow, imagesc, colormap} ## @end deftypefn @@ -90,7 +90,7 @@ ## Generic image creation. ## ## 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 +## @var{x} and @var{y}. If you're not using gnuplot 4.2 or later, these ## variables are ignored. ## Author: Tony Richardson <arichard@stark.cc.oh.us> @@ -175,64 +175,69 @@ endfunction + %!demo -%! clf +%! clf; +%! colormap ("default"); %! img = 1 ./ hilb (11); %! x = -5:5; %! y = x; -%! subplot (2,2,1) -%! h = image (abs(x), abs(y), img); -%! set (h, "cdatamapping", "scaled") -%! ylabel ("limits = [4.5, 15.5]") -%! title ('image (abs(x), abs(y), img)') -%! subplot (2,2,2) -%! h = image (-x, y, img); -%! set (h, "cdatamapping", "scaled") -%! title ('image (-x, y, img)') -%! subplot (2,2,3) -%! h = image (x, -y, img); -%! set (h, "cdatamapping", "scaled") -%! title ('image (x, -y, img)') -%! ylabel ("limits = [-5.5, 5.5]") -%! subplot (2,2,4) -%! h = image (-x, -y, img); -%! set (h, "cdatamapping", "scaled") -%! title ('image (-x, -y, img)') +%! subplot (2,2,1); +%! h = image (abs(x), abs(y), img); +%! set (h, "cdatamapping", "scaled"); +%! ylabel ("limits = [4.5, 15.5]"); +%! title ("image (abs(x), abs(y), img)"); +%! subplot (2,2,2); +%! h = image (-x, y, img); +%! set (h, "cdatamapping", "scaled"); +%! title ("image (-x, y, img)"); +%! subplot (2,2,3); +%! h = image (x, -y, img); +%! set (h, "cdatamapping", "scaled"); +%! title ("image (x, -y, img)"); +%! ylabel ("limits = [-5.5, 5.5]"); +%! subplot (2,2,4); +%! h = image (-x, -y, img); +%! set (h, "cdatamapping", "scaled"); +%! title ("image (-x, -y, img)"); %!demo -%! clf +%! clf; +%! colormap ("default"); %! g = 0.1:0.1:10; %! h = g'*g; %! imagesc (g, g, sin (h)); -%! hold on +%! hold on; %! imagesc (g, g+12, cos (h/2)); -%! axis ([0 10 0 22]) -%! hold off -%! title ("two consecutive images") +%! axis ([0 10 0 22]); +%! hold off; +%! title ("two consecutive images"); %!demo -%! clf +%! clf; +%! colormap ("default"); %! g = 0.1:0.1:10; %! h = g'*g; %! imagesc (g, g, sin (h)); -%! hold all -%! plot (g, 11.0 * ones (size (g))) +%! hold all; +%! plot (g, 11.0 * ones (size (g))); %! imagesc (g, g+12, cos (h/2)); -%! axis ([0 10 0 22]) -%! hold off -%! title ("image, line, image") +%! axis ([0 10 0 22]); +%! hold off; +%! title ("image, line, image"); %!demo -%! clf +%! clf; +%! colormap ("default"); %! g = 0.1:0.1:10; %! h = g'*g; -%! plot (g, 10.5 * ones (size (g))) -%! hold all +%! plot (g, 10.5 * ones (size (g))); +%! hold all; %! imagesc (g, g, sin (h)); -%! plot (g, 11.0 * ones (size (g))) +%! plot (g, 11.0 * ones (size (g))); %! imagesc (g, g+12, cos (h/2)); -%! plot (g, 11.5 * ones (size (g))) -%! axis ([0 10 0 22]) -%! hold off -%! title ("line, image, line, image, line") +%! plot (g, 11.5 * ones (size (g))); +%! axis ([0 10 0 22]); +%! hold off; +%! title ("line, image, line, image, line");
--- a/scripts/image/imshow.m +++ b/scripts/image/imshow.m @@ -176,35 +176,46 @@ endfunction -%!error imshow () # no arguments -%!error imshow ({"cell"}) # No image or filename given -%!error imshow (ones(4,4,4)) # Too many dimensions in image + +%!demo +%! clf; +%! imshow ("default.img"); %!demo -%! imshow ("default.img"); +%! clf; +%! imshow ("default.img"); +%! colormap (autumn (64)); %!demo -%! imshow ("default.img"); -%! colormap ("autumn"); +%! clf; +%! [I, M] = imread ("default.img"); +%! imshow (I, M); %!demo -%! [I, M] = imread ("default.img"); -%! imshow (I, M); +%! clf; +%! [I, M] = imread ("default.img"); +%! [R, G, B] = ind2rgb (I, M); +%! imshow (cat (3, R, G*0.5, B*0.8)); %!demo -%! [I, M] = imread ("default.img"); -%! [R, G, B] = ind2rgb (I, M); -%! imshow (cat(3, R, G*0.5, B*0.8)); +%! clf; +%! imshow (rand (100, 100)); %!demo -%! imshow (rand (100, 100)); +%! clf; +%! imshow (rand (100, 100, 3)); %!demo -%! imshow (rand (100, 100, 3)); +%! clf; +%! imshow (100*rand (100, 100, 3)); %!demo -%! imshow (100*rand (100, 100, 3)); +%! clf; +%! imshow (rand (100, 100)); +%! colormap (jet (64)); -%!demo -%! imshow (rand (100, 100)); -%! colormap (jet); +%% Test input validation +%!error imshow () +%!error <IM must be an image> imshow ({"cell"}) +%!error <expecting MxN or MxNx3 matrix> imshow (ones (4,4,4)) +
--- a/scripts/image/ind2gray.m +++ b/scripts/image/ind2gray.m @@ -17,11 +17,12 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {} ind2gray (@var{x}, @var{map}) -## Convert an Octave indexed image to a gray scale intensity image. +## @deftypefn {Function File} {} ind2gray (@var{x}) +## @deftypefnx {Function File} {} ind2gray (@var{x}, @var{map}) +## Convert a color 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} +## @seealso{gray2ind, ind2rgb} ## @end deftypefn ## Author: Tony Richardson <arichard@stark.cc.oh.us>
--- a/scripts/image/ind2rgb.m +++ b/scripts/image/ind2rgb.m @@ -17,13 +17,14 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {@var{rgb} =} ind2rgb (@var{x}, @var{map}) -## @deftypefnx {Function File} {[@var{R}, @var{R}, @var{R}] =} ind2rgb (@var{x}, @var{map}) +## @deftypefn {Function File} {@var{rgb} =} ind2rgb (@var{x}) +## @deftypefnx {Function File} {@var{rgb} =} ind2rgb (@var{x}, @var{map}) +## @deftypefnx {Function File} {[@var{R}, @var{G}, @var{B}] =} ind2rgb (@dots{}) ## 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} +## @seealso{rgb2ind, ind2gray, hsv2rgb, ntsc2rgb} ## @end deftypefn ## Author: Tony Richardson <arichard@stark.cc.oh.us>
--- a/scripts/image/jet.m +++ b/scripts/image/jet.m @@ -43,12 +43,15 @@ if (n == 1) map = [0, 0, 0.5]; elseif (n > 1) - x = linspace(0, 1, n)'; - r = (x >= 3/8 & x < 5/8) .* (4 * x - 3/2)\ - + (x >= 5/8 & x < 7/8) + (x >= 7/8) .* (-4 * x + 9/2); - g = (x >= 1/8 & x < 3/8) .* (4 * x - 1/2)\ - + (x >= 3/8 & x < 5/8) + (x >= 5/8 & x < 7/8) .* (-4 * x + 7/2); - b = (x < 1/8) .* (4 * x + 1/2) + (x >= 1/8 & x < 3/8)\ + x = linspace (0, 1, n)'; + r = (x >= 3/8 & x < 5/8) .* (4 * x - 3/2) ... + + (x >= 5/8 & x < 7/8) ... + + (x >= 7/8) .* (-4 * x + 9/2); + g = (x >= 1/8 & x < 3/8) .* (4 * x - 1/2) ... + + (x >= 3/8 & x < 5/8) ... + + (x >= 5/8 & x < 7/8) .* (-4 * x + 7/2); + b = (x < 1/8) .* (4 * x + 1/2) ... + + (x >= 1/8 & x < 3/8) ... + (x >= 3/8 & x < 5/8) .* (-4 * x + 5/2); map = [r, g, b]; else @@ -57,9 +60,10 @@ endfunction + %!demo %! ## Show the 'jet' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (jet (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (jet (64));
new file mode 100644 --- /dev/null +++ b/scripts/image/lines.m @@ -0,0 +1,54 @@ +## Copyright (C) 2012 Rik Wehbring +## +## This file is part of Octave. +## +## Octave 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 3 of the License, or (at +## your option) any later version. +## +## Octave 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 Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{map} =} lines () +## @deftypefnx {Function File} {@var{map} =} lines (@var{n}) +## Create color colormap. This colormap is composed of the list of colors +## in the current axes "ColorOrder" property. The default is blue, +## green, red, cyan, pink, yellow, and gray. +## The argument @var{n} must be a scalar. +## If unspecified, the length of the current colormap, or 64, is used. +## @seealso{colormap} +## @end deftypefn + +function map = lines (n) + + if (nargin == 0) + n = rows (colormap); + elseif (nargin == 1) + if (! isscalar (n)) + error ("lines: argument must be a scalar"); + endif + else + print_usage (); + endif + + C = get (gca, "colororder"); + nr = rows (C); + map = C(rem (0:(n-1), nr) + 1, :); + +endfunction + + +%!demo +%! ## Show the 'lines' colormap as an image +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (lines (64)); +
--- a/scripts/image/module.mk +++ b/scripts/image/module.mk @@ -4,6 +4,7 @@ image/autumn.m \ image/bone.m \ image/brighten.m \ + image/colorcube.m \ image/colormap.m \ image/contrast.m \ image/cool.m \ @@ -24,6 +25,7 @@ image/ind2gray.m \ image/ind2rgb.m \ image/jet.m \ + image/lines.m \ image/ntsc2rgb.m \ image/ocean.m \ image/pink.m \ @@ -32,6 +34,8 @@ image/rgb2hsv.m \ image/rgb2ind.m \ image/rgb2ntsc.m \ + image/rgbplot.m \ + image/spinmap.m \ image/spring.m \ image/summer.m \ image/white.m \
--- a/scripts/image/ntsc2rgb.m +++ b/scripts/image/ntsc2rgb.m @@ -17,9 +17,11 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {} ntsc2rgb (@var{yiq}) -## Transform a colormap or image from NTSC to RGB. -## @seealso{rgb2ntsc} +## @deftypefn {Function File} {@var{rgb_map} =} ntsc2rgb (@var{yiq_map}) +## @deftypefnx {Function File} {@var{rgb_img} =} ntsc2rgb (@var{yiq_img}) +## Transform a colormap or image from luminance-chrominance (NTSC) space to +## red-green-blue (RGB) space. +## @seealso{rgb2ntsc, hsv2rgb, ind2rgb} ## @end deftypefn ## Author: Tony Richardson <arichard@stark.cc.oh.us>
--- a/scripts/image/ocean.m +++ b/scripts/image/ocean.m @@ -23,6 +23,7 @@ ## of blue. ## The argument @var{n} must be a scalar. ## If unspecified, the length of the current colormap, or 64, is used. +## @seealso{colormap} ## @end deftypefn ## Author: Tony Richardson <arichard@stark.cc.oh.us> @@ -44,22 +45,21 @@ cutin = fix (n/3); dr = (n - 1) / cutin; - r = prepad ([0:dr:(n-1)], n)'; dg = (n - 1) / (2 * cutin); - - g = prepad([0:dg:(n-1)], n)'; + g = prepad ([0:dg:(n-1)], n)'; b = [0:(n-1)]'; - map = [ r, g, b ] / (n - 1); + map = [r, g, b] / (n - 1); endfunction + %!demo %! ## Show the 'ocean' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (ocean (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (ocean (64));
--- a/scripts/image/pink.m +++ b/scripts/image/pink.m @@ -44,12 +44,13 @@ map = [0, 0, 0]; elseif (n > 1) x = linspace (0, 1, n)'; - r = (x < 3/8) .* (14/9 * x) + (x >= 3/8) .* (2/3 * x + 1/3); - g = (x < 3/8) .* (2/3 * x)\ - + (x >= 3/8 & x < 3/4) .* (14/9 * x - 1/3)\ + r = (x < 3/8) .* (14/9 * x) ... + + (x >= 3/8) .* (2/3 * x + 1/3); + g = (x < 3/8) .* (2/3 * x) ... + + (x >= 3/8 & x < 3/4) .* (14/9 * x - 1/3) ... + (x >= 3/4) .* (2/3 * x + 1/3); - b = (x < 3/4) .* (2/3 * x) + (x >= 3/4) .* (2 * x - 1); - + b = (x < 3/4) .* (2/3 * x) ... + + (x >= 3/4) .* (2 * x - 1); map = sqrt ([r, g, b]); else map = []; @@ -57,9 +58,10 @@ endfunction + %!demo %! ## Show the 'pink' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (pink (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (pink (64));
--- a/scripts/image/prism.m +++ b/scripts/image/prism.m @@ -40,19 +40,15 @@ print_usage (); endif - p = [1, 0, 0; 1, 1/2, 0; 1, 1, 0; 0, 1, 0; 0, 0, 1; 2/3, 0, 1]; - - if (rem (n, 6) == 0) - map = kron(ones (fix (n / 6), 1), p); - else - map = [kron(ones (fix (n / 6), 1), p); p(1:rem (n, 6), :)]; - endif + C = [1, 0, 0; 1, 1/2, 0; 1, 1, 0; 0, 1, 0; 0, 0, 1; 2/3, 0, 1]; + map = C(rem (0:(n-1), 6) + 1, :); endfunction + %!demo %! ## Show the 'prism' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (prism (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (prism (64));
--- a/scripts/image/rainbow.m +++ b/scripts/image/rainbow.m @@ -47,11 +47,14 @@ map = [1, 0, 0]; elseif (n > 1) x = linspace (0, 1, n)'; - r = (x < 2/5) + (x >= 2/5 & x < 3/5) .* (-5 * x + 3)\ + r = (x < 2/5) ... + + (x >= 2/5 & x < 3/5) .* (-5 * x + 3) ... + (x >= 4/5) .* (10/3 * x - 8/3); - g = (x < 2/5) .* (5/2 * x) + (x >= 2/5 & x < 3/5)\ + g = (x < 2/5) .* (5/2 * x) ... + + (x >= 2/5 & x < 3/5) ... + (x >= 3/5 & x < 4/5) .* (-5 * x + 4); - b = (x >= 3/5 & x < 4/5) .* (5 * x - 3) + (x >= 4/5); + b = (x >= 3/5 & x < 4/5) .* (5 * x - 3) + + (x >= 4/5); map = [r, g, b]; else map = []; @@ -59,9 +62,10 @@ endfunction + %!demo %! ## Show the 'rainbow' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (rainbow (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (rainbow (64));
--- a/scripts/image/rgb2hsv.m +++ b/scripts/image/rgb2hsv.m @@ -17,16 +17,18 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {@var{hsv_map} =} rgb2hsv (@var{rgb}) -## Transform a colormap or image from the RGB space to the HSV space. -## -## A color in the RGB space consists of the red, green and blue intensities. +## @deftypefn {Function File} {@var{hsv_map} =} rgb2hsv (@var{rgb}) +## @deftypefnx {Function File} {@var{hsv_map} =} rgb2hsv (@var{rgb}) +## Transform a colormap or image from red-green-blue (RGB) space to +## hue-saturation-value (HSV) space. ## -## 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} +## A color in the RGB space consists of red, green, and blue intensities. +## +## A color in HSV space is represented by hue, saturation and value +## (brightness) levels. 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, rgb2ind, rgb2ntsc} ## @end deftypefn ## Author: Kai Habel <kai.habel@gmx.de>
--- a/scripts/image/rgb2ind.m +++ b/scripts/image/rgb2ind.m @@ -19,8 +19,8 @@ ## -*- 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 an RGB image to an Octave indexed image. -## @seealso{ind2rgb, rgb2ntsc} +## Convert an image in red-green-blue (RGB) space to an indexed image. +## @seealso{ind2rgb, rgb2hsv, rgb2ntsc} ## @end deftypefn ## Bugs: The color map may have duplicate entries.
--- a/scripts/image/rgb2ntsc.m +++ b/scripts/image/rgb2ntsc.m @@ -17,9 +17,11 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {} rgb2ntsc (@var{rgb}) -## Transform a colormap or image from RGB to NTSC. -## @seealso{ntsc2rgb} +## @deftypefn {Function File} {@var{yiq_map} =} rgb2ntsc (@var{rgb_map}) +## @deftypefnx {Function File} {@var{yiq_img} =} rgb2ntsc (@var{rgb_img}) +## Transform a colormap or image from red-green-blue (RGB) space to +## luminance-chrominance (NTSC) space. +## @seealso{ntsc2rgb, rgb2hsv, rgb2ind} ## @end deftypefn ## Author: Tony Richardson <arichard@stark.cc.oh.us>
new file mode 100644 --- /dev/null +++ b/scripts/image/rgbplot.m @@ -0,0 +1,60 @@ +## Copyright (C) 2012 Rik Wehbring +## +## This file is part of Octave. +## +## Octave 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 3 of the License, or (at +## your option) any later version. +## +## Octave 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 Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} rgbplot (@var{cmap}) +## Plot the components of a colormap. +## +## The first column is plotted in red, the second column in green, and +## the third column in blue. The values are between 0 and 1 and represent +## the intensity of the RGB components in the given indexed color. +## @seealso{colormap} +## @end deftypefn + +function rgbplot (cmap) + + if (nargin != 1) + print_usage (); + endif + + if (! ismatrix (cmap) || ndims (cmap) != 2 || columns (cmap) != 3) + error ("rgbplot: CMAP must be a matrix of size Nx3"); + elseif (any (cmap(:) < 0) || any (cmap(:) > 1)) + error ("rgbplot: CMAP intensities must be in the range [0, 1]"); + endif + + plot (cmap(:,1),"r", cmap(:,2),"g", cmap(:,3),"b"); + set (gca, 'ytick', 0:0.1:1); + xlabel ("color index"); + +endfunction + + +%!demo +%! clf; +%! rgbplot (ocean); + +%%test input validation +%!error rgbplot () +%!error rgbplot (1,2) +%!error <CMAP must be a matrix of size Nx3> rgbplot ({0 1 0}) +%!error <CMAP must be a matrix of size Nx3> rgbplot (ones (3,3,3)) +%!error <CMAP must be a matrix of size Nx3> rgbplot (ones (3,4)) +%!error <CMAP intensities must be in the range> rgbplot ([0 0 -2]) +%!error <CMAP intensities must be in the range> rgbplot ([0 0 2]) +
rename from scripts/plot/spinmap.m rename to scripts/image/spinmap.m --- a/scripts/plot/spinmap.m +++ b/scripts/image/spinmap.m @@ -17,41 +17,56 @@ ## <http://www.gnu.org/licenses/>. ## -*- 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. +## @deftypefn {Function File} {} spinmap () +## @deftypefnx {Function File} {} spinmap (@var{t}) +## @deftypefnx {Function File} {} spinmap (@var{t}, @var{inc}) +## @deftypefnx {Function File} {} spinmap ("inf") +## Cycle the colormap for @var{t} seconds with a color increment of @var{inc}. +## Both parameters are optional. The default cycle time is 5 seconds and the +## default increment is 2. If the option "inf" is given then cycle +## continuously until @kbd{Control-C} is pressed. ## -## A higher value of @var{inc} causes a faster cycle through the -## colormap. -## @seealso{gca, colorbar} +## When rotating the original color 1 becomes color 2, color 2 becomes +## color 3, etc. A positive or negative increment is allowed and a higher +## value of @var{inc} will cause faster cycling through the colormap. +## @seealso{colormap} ## @end deftypefn ## Author: Kai Habel <kai.habel at gmx.de> -function spinmap (t, inc) +function spinmap (t = 5, inc = 2) - if (nargin == 0) - inc = 2; - t = 5; - elseif (nargin == 1) - inc = 2; + if (nargin > 2) + print_usage (); + elseif (ischar (t)) + if (strcmpi (t, "inf")) + t = Inf; + else + error ('spinmap: time T must be a real scalar or "inf"'); + endif + elseif (! isscalar (t) || ! isreal (t)) + error ("spinmap: time T must be a real scalar"); endif - cmap = get (gcf (), "colormap"); - clen = rows (cmap); + cmap = cmap_orig = get (gcf (), "colormap"); t0 = clock; - while (etime (clock, t0) < t) - for n = 1:inc:clen - newmap = shift (cmap, n, 1); - set (gcf (), "colormap", newmap); - drawnow (); - endfor + cmap = shift (cmap, inc, 1); + set (gcf (), "colormap", cmap); + drawnow (); endwhile - set (gcf (), "colormap", cmap); + set (gcf (), "colormap", cmap_orig); endfunction + +%!demo +%! clf; +%! colormap (rainbow (128)); +%! imagesc (1:8); +%! axis off; +%! title ("Rotate color bars to the right"); +%! spinmap (3, 1); +
--- a/scripts/image/spring.m +++ b/scripts/image/spring.m @@ -43,7 +43,7 @@ map = [1, 0, 1]; elseif (n > 1) r = ones (n, 1); - g = (0:n - 1)' ./ (n - 1); + g = [0:(n-1)]' / (n - 1); b = 1 - g; map = [r, g, b]; else @@ -52,9 +52,10 @@ endfunction + %!demo %! ## Show the 'spring' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (spring (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (spring (64));
--- a/scripts/image/summer.m +++ b/scripts/image/summer.m @@ -27,6 +27,7 @@ ## Author: Kai Habel <kai.habel@gmx.de> ## Date: 06/03/2000 + function map = summer (n) if (nargin == 0) @@ -42,10 +43,9 @@ if (n == 1) map = [0, 0.5, 0.4]; elseif (n > 1) - r = (0:n - 1)' ./ (n - 1); - g = 0.5 + r ./ 2; + r = [0:(n-1)]' / (n - 1); + g = 0.5 + r / 2; b = 0.4 * ones (n, 1); - map = [r, g, b]; else map = []; @@ -53,9 +53,10 @@ endfunction + %!demo %! ## Show the 'summer' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (summer (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (summer (64));
--- a/scripts/image/white.m +++ b/scripts/image/white.m @@ -39,17 +39,14 @@ print_usage (); endif - if (n > 0) - map = ones (n, 3); - else - map = []; - endif + map = ones (n, 3); endfunction + %!demo %! ## Show the 'white' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (white (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (white (64));
--- a/scripts/image/winter.m +++ b/scripts/image/winter.m @@ -43,9 +43,8 @@ map = [0, 0, 1]; elseif (n > 1) r = zeros (n, 1); - g = (0:n - 1)' ./ (n - 1); - b = 1 - g ./ 2; - + g = [0:(n-1)]' / (n - 1); + b = 1 - g / 2; map = [r, g, b]; else map = []; @@ -53,9 +52,10 @@ endfunction + %!demo %! ## Show the 'winter' colormap as an image -%! image (1:64, linspace (0, 1, 64), repmat (1:64, 64, 1)') -%! axis ([1, 64, 0, 1], "ticy", "xy") -%! colormap (winter (64)) +%! image (1:64, linspace (0, 1, 64), repmat ((1:64)', 1, 64)); +%! axis ([1, 64, 0, 1], "ticy", "xy"); +%! colormap (winter (64));
--- a/scripts/io/strread.m +++ b/scripts/io/strread.m @@ -401,7 +401,7 @@ ## Replace TreatAsEmpty char sequences by empty strings if (! isempty (empty_str)) for ii = 1:numel (empty_str) - idz = strmatch (empty_str{ii}, words, "exact"); + idz = strncmp (empty_str{ii}, words, length (empty_str{ii})); words(idz) = {""}; endfor endif
--- a/scripts/io/textread.m +++ b/scripts/io/textread.m @@ -106,10 +106,10 @@ ## Determine EOL from file. Search for EOL candidates in first 3000 chars eol_srch_len = min (length (str), 3000); ## First try DOS (CRLF) - if (! isempty (findstr ("\r\n", str(1 : eol_srch_len)))) + if (! isempty (strfind ("\r\n", str(1 : eol_srch_len)))) eol_char = "\r\n"; ## Perhaps old Macintosh? (CR) - elseif (! isempty (findstr ("\r", str(1 : eol_srch_len)))) + elseif (! isempty (strfind ("\r", str(1 : eol_srch_len)))) eol_char = "\r"; ## Otherwise, use plain UNIX (LF) else
--- a/scripts/io/textscan.m +++ b/scripts/io/textscan.m @@ -104,14 +104,11 @@ whitespace = " \b\t"; else ## Check if there's at least one string format specifier - fmt = strrep (format, "%", " %"); - fmt = regexp (fmt, '[^ ]+', 'match'); - fmt = strtrim (fmt(strmatch ("%", fmt))) - has_str_fmt = all (cellfun ("isempty", strfind (strtrim (fmt(strmatch ("%", fmt))), 's'))); - ## If there is a format, AND whitespace value = empty, + has_str_fmt = regexp (format, '%[*]?\d*s', "once"); + ## If there is a string format AND whitespace value = empty, ## don't add a space (char(32)) to whitespace - if (! (isempty (args{ipos+1}) && has_str_fmt)) - args{ipos+1} = unique ([" ", whitespace]); + if (! (isempty (args{ipos+1}) && has_str_fmt)) + args{ipos+1} = unique ([" ", args{ipos+1}]); endif endif @@ -185,7 +182,7 @@ if (! isempty (endofline)) if (ischar (args{endofline + 1})) eol_char = args{endofline + 1}; - if (isempty (strmatch (eol_char, {"", "\n", "\r", "\r\n"}, 'exact'))) + if (! any (strcmp (eol_char, {"", "\n", "\r", "\r\n"}))) error ("textscan: illegal EndOfLine character value specified"); endif else @@ -195,10 +192,10 @@ ## Determine EOL from file. Search for EOL candidates in first 3000 chars eol_srch_len = min (length (str), 3000); ## First try DOS (CRLF) - if (! isempty (findstr ("\r\n", str(1 : eol_srch_len)))) + if (! isempty (strfind ("\r\n", str(1 : eol_srch_len)))) eol_char = "\r\n"; ## Perhaps old Macintosh? (CR) - elseif (! isempty (findstr ("\r", str(1 : eol_srch_len)))) + elseif (! isempty (strfind ("\r", str(1 : eol_srch_len)))) eol_char = "\r"; ## Otherwise, use plain UNIX (LF) else
--- a/scripts/linear-algebra/condest.m +++ b/scripts/linear-algebra/condest.m @@ -194,45 +194,46 @@ endfunction + %!demo -%! N = 100; -%! A = randn (N) + eye (N); -%! condest (A) -%! [L,U,P] = lu (A); -%! condest (A, @(x) U\ (L\ (P*x)), @(x) P'*(L'\ (U'\x))) -%! condest (@(x) A*x, @(x) A'*x, @(x) U\ (L\ (P*x)), @(x) P'*(L'\ (U'\x)), N) -%! norm (inv (A), 1) * norm (A, 1) +%! N = 100; +%! A = randn (N) + eye (N); +%! condest (A) +%! [L,U,P] = lu (A); +%! condest (A, @(x) U \ (L \ (P*x)), @(x) P'*(L' \ (U'\x))) +%! condest (@(x) A*x, @(x) A'*x, @(x) U \ (L \ (P*x)), @(x) P'*(L' \ (U'\x)), N) +%! norm (inv (A), 1) * norm (A, 1) ## Yes, these test bounds are really loose. There's ## enough randomization to trigger odd cases with hilb(). %!test -%! N = 6; -%! A = hilb (N); -%! cA = condest (A); -%! cA_test = norm (inv (A), 1) * norm (A, 1); -%! assert (cA, cA_test, -2^-8); +%! N = 6; +%! A = hilb (N); +%! cA = condest (A); +%! cA_test = norm (inv (A), 1) * norm (A, 1); +%! assert (cA, cA_test, -2^-8); %!test -%! N = 6; -%! A = hilb (N); -%! solve = @(x) A\x; solve_t = @(x) A'\x; -%! cA = condest (A, solve, solve_t); -%! cA_test = norm (inv (A), 1) * norm (A, 1); -%! assert (cA, cA_test, -2^-8); +%! N = 6; +%! A = hilb (N); +%! solve = @(x) A\x; solve_t = @(x) A'\x; +%! cA = condest (A, solve, solve_t); +%! cA_test = norm (inv (A), 1) * norm (A, 1); +%! assert (cA, cA_test, -2^-8); %!test -%! N = 6; -%! A = hilb (N); -%! apply = @(x) A*x; apply_t = @(x) A'*x; -%! solve = @(x) A\x; solve_t = @(x) A'\x; -%! cA = condest (apply, apply_t, solve, solve_t, N); -%! cA_test = norm (inv (A), 1) * norm (A, 1); -%! assert (cA, cA_test, -2^-6); +%! N = 6; +%! A = hilb (N); +%! apply = @(x) A*x; apply_t = @(x) A'*x; +%! solve = @(x) A\x; solve_t = @(x) A'\x; +%! cA = condest (apply, apply_t, solve, solve_t, N); +%! cA_test = norm (inv (A), 1) * norm (A, 1); +%! assert (cA, cA_test, -2^-6); %!test -%! N = 12; -%! A = hilb (N); -%! [rcondA, v] = condest (A); -%! x = A*v; -%! assert (norm(x, inf), 0, eps); +%! N = 12; +%! A = hilb (N); +%! [rcondA, v] = condest (A); +%! x = A*v; +%! assert (norm(x, inf), 0, eps);
--- a/scripts/linear-algebra/onenormest.m +++ b/scripts/linear-algebra/onenormest.m @@ -238,53 +238,54 @@ v(ind_best) = 1; endfunction + %!demo -%! N = 100; -%! A = randn(N) + eye(N); -%! [L,U,P] = lu(A); -%! nm1inv = onenormest(@(x) U\(L\(P*x)), @(x) P'*(L'\(U'\x)), N, 30) -%! norm(inv(A), 1) +%! N = 100; +%! A = randn (N) + eye (N); +%! [L,U,P] = lu (A); +%! nm1inv = onenormest (@(x) U\(L\(P*x)), @(x) P'*(L'\(U'\x)), N, 30) +%! norm (inv (A), 1) %!test -%! N = 10; -%! A = ones (N); -%! [nm1, v1, w1] = onenormest (A); -%! [nminf, vinf, winf] = onenormest (A', 6); -%! assert (nm1, N, -2*eps); -%! assert (nminf, N, -2*eps); -%! assert (norm (w1, 1), nm1 * norm (v1, 1), -2*eps) -%! assert (norm (winf, 1), nminf * norm (vinf, 1), -2*eps) +%! N = 10; +%! A = ones (N); +%! [nm1, v1, w1] = onenormest (A); +%! [nminf, vinf, winf] = onenormest (A', 6); +%! assert (nm1, N, -2*eps); +%! assert (nminf, N, -2*eps); +%! assert (norm (w1, 1), nm1 * norm (v1, 1), -2*eps) +%! assert (norm (winf, 1), nminf * norm (vinf, 1), -2*eps) %!test -%! N = 10; -%! A = ones (N); -%! [nm1, v1, w1] = onenormest (@(x) A*x, @(x) A'*x, N, 3); -%! [nminf, vinf, winf] = onenormest (@(x) A'*x, @(x) A*x, N, 3); -%! assert (nm1, N, -2*eps); -%! assert (nminf, N, -2*eps); -%! assert (norm (w1, 1), nm1 * norm (v1, 1), -2*eps) -%! assert (norm (winf, 1), nminf * norm (vinf, 1), -2*eps) +%! N = 10; +%! A = ones (N); +%! [nm1, v1, w1] = onenormest (@(x) A*x, @(x) A'*x, N, 3); +%! [nminf, vinf, winf] = onenormest (@(x) A'*x, @(x) A*x, N, 3); +%! assert (nm1, N, -2*eps); +%! assert (nminf, N, -2*eps); +%! assert (norm (w1, 1), nm1 * norm (v1, 1), -2*eps) +%! assert (norm (winf, 1), nminf * norm (vinf, 1), -2*eps) %!test -%! N = 5; -%! A = hilb (N); -%! [nm1, v1, w1] = onenormest (A); -%! [nminf, vinf, winf] = onenormest (A', 6); -%! assert (nm1, norm (A, 1), -2*eps); -%! assert (nminf, norm (A, inf), -2*eps); -%! assert (norm (w1, 1), nm1 * norm (v1, 1), -2*eps) -%! assert (norm (winf, 1), nminf * norm (vinf, 1), -2*eps) +%! N = 5; +%! A = hilb (N); +%! [nm1, v1, w1] = onenormest (A); +%! [nminf, vinf, winf] = onenormest (A', 6); +%! assert (nm1, norm (A, 1), -2*eps); +%! assert (nminf, norm (A, inf), -2*eps); +%! assert (norm (w1, 1), nm1 * norm (v1, 1), -2*eps) +%! assert (norm (winf, 1), nminf * norm (vinf, 1), -2*eps) ## Only likely to be within a factor of 10. %!test -%! old_state = rand ("state"); -%! restore_state = onCleanup (@() rand ("state", old_state)); -%! rand ('state', 42); % Initialize to guarantee reproducible results -%! N = 100; -%! A = rand (N); -%! [nm1, v1, w1] = onenormest (A); -%! [nminf, vinf, winf] = onenormest (A', 6); -%! assert (nm1, norm (A, 1), -.1); -%! assert (nminf, norm (A, inf), -.1); -%! assert (norm (w1, 1), nm1 * norm (v1, 1), -2*eps) -%! assert (norm (winf, 1), nminf * norm (vinf, 1), -2*eps) +%! old_state = rand ("state"); +%! restore_state = onCleanup (@() rand ("state", old_state)); +%! rand ('state', 42); % Initialize to guarantee reproducible results +%! N = 100; +%! A = rand (N); +%! [nm1, v1, w1] = onenormest (A); +%! [nminf, vinf, winf] = onenormest (A', 6); +%! assert (nm1, norm (A, 1), -.1); +%! assert (nminf, norm (A, inf), -.1); +%! assert (norm (w1, 1), nm1 * norm (v1, 1), -2*eps) +%! assert (norm (winf, 1), nminf * norm (vinf, 1), -2*eps)
--- a/scripts/miscellaneous/news.m +++ b/scripts/miscellaneous/news.m @@ -17,20 +17,27 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {} news (@var{package}) -## Display the current NEWS file for Octave or installed package. +## @deftypefn {Function File} {} news +## @deftypefnx {Function File} {} news (@var{package}) +## Display the current NEWS file for Octave or an installed package. ## -## If @var{package} is the name of an installed package, display the current -## NEWS file for that package. +## When called without an argument, display the NEWS file for Octave. +## When given a package name @var{package}, display the current NEWS file for +## that package. ## @end deftypefn function news (package = "octave") - if (ischar (package) && strcmpi (package, "octave")) + if (nargin > 1) + print_usage (); + elseif (! ischar (package)) + error ("news: PACKAGE must be a string"); + endif + + if (strcmpi (package, "octave")) octetcdir = octave_config_info ("octetcdir"); newsfile = fullfile (octetcdir, "NEWS"); - - elseif (nargin == 1 && ischar (package)) + else installed = pkg ("list"); names = cellfun (@(x) x.name, installed, "UniformOutput", false); ## we are nice and let the user use any case on the package name @@ -39,25 +46,25 @@ error ("Package '%s' is not installed.", package); endif newsfile = fullfile (installed{pos}.dir, "packinfo", "NEWS"); - - else - print_usage; endif - if (exist (newsfile, "file")) - f = fopen (newsfile, "r"); - while (ischar (line = fgets (f))) - puts (line); - endwhile - else + if (! exist (newsfile, "file")) if (strcmpi (package, "octave")) error ("news: unable to locate NEWS file"); else - error ("news: unable to locate NEWS file of %s package", package); + error ("news: unable to locate NEWS file for package %s", package); endif endif + fid = fopen (newsfile, "r"); + while (ischar (line = fgets (fid))) + puts (line); + endwhile + fclose (fid); + endfunction -## Remove from test statistics. No real tests possible -%!assert (1) + +%!error news (1, 2) +%!error <PACKAGE must be a string> news (1) +%!error <Package .* is not installed> news ("__NOT_A_VALID_PKG_NAME__")
--- a/scripts/path/matlabroot.m +++ b/scripts/path/matlabroot.m @@ -25,11 +25,12 @@ ## @seealso{OCTAVE_HOME} ## @end deftypefn -function val = matlabroot () +function retval = matlabroot () - val = OCTAVE_HOME; + retval = OCTAVE_HOME; endfunction + %!assert (matlabroot(), OCTAVE_HOME())
--- a/scripts/path/pathdef.m +++ b/scripts/path/pathdef.m @@ -21,7 +21,7 @@ ## @deftypefn {Function File} {@var{val} =} pathdef () ## Return the default path for Octave. ## The path information is extracted from one of three sources. -## In order of preference, those are; +## The possible sources, in order of preference, are: ## ## @enumerate ## @item @file{~/.octaverc} @@ -30,7 +30,7 @@ ## ## @item Octave's path prior to changes by any octaverc. ## @end enumerate -## @seealso{path, addpath, rmpath, genpath, savepath, pathsep} +## @seealso{path, addpath, rmpath, genpath, savepath} ## @end deftypefn function val = pathdef () @@ -39,10 +39,10 @@ pathdir = octave_config_info ("localstartupfiledir"); site_octaverc = fullfile (pathdir, "octaverc"); - ## Locate the user ~\.octaverc file. + ## Locate the user's ~/.octaverc file. user_octaverc = fullfile ("~", ".octaverc"); - ## Extract the specified paths from the site and user octaverc"s. + ## Extract the specified paths from the site and user octavercs. site_path = __extractpath__ (site_octaverc); if (exist (user_octaverc, "file")) user_path = __extractpath__ (user_octaverc); @@ -50,9 +50,7 @@ user_path = ""; endif - ## A path definition in the user octaverc has precedence over the - ## site. - + ## A path definition in the user rcfile has precedence over the site rcfile. if (! isempty (user_path)) val = user_path; elseif (! isempty (site_path)) @@ -73,9 +71,10 @@ function specifiedpath = __extractpath__ (savefile) ## The majority of this code was borrowed from savepath.m. - ## FIXME -- is there some way to share the common parts instead of - ## duplicating? - + ## FIXME: is there some way to share the common parts instead of duplicating? + ## ANSWER: Yes. Create a private directory and extract this section of code + ## and place it there in a new function only visible by pathdef() and + ## savepath(). beginstring = "## Begin savepath auto-created section, do not edit"; endstring = "## End savepath auto-created section"; @@ -85,31 +84,22 @@ ## Parse the file if it exists to see if we should replace a section ## or create a section. - startline = 0; - endline = 0; + startline = endline = 0; filelines = {}; if (exist (savefile) == 2) - ## read in all lines of the file [fid, msg] = fopen (savefile, "rt"); if (fid < 0) error ("__extractpath__: could not open savefile, %s: %s", savefile, msg); endif unwind_protect linenum = 0; - while (linenum >= 0) - result = fgetl (fid); - if (isnumeric (result)) - ## End at the end of file. - linenum = -1; - else - linenum++; - filelines{linenum} = result; - ## Find the first and last lines if they exist in the file. - if (strcmp (result, beginstring)) - startline = linenum + 1; - elseif (strcmp (result, endstring)) - endline = linenum - 1; - endif + while (ischar (line = fgetl (fid))) + filelines{++linenum} = line; + ## find the first and last lines if they exist in the file + if (strcmp (line, beginstring)) + startline = linenum; + elseif (strcmp (line, endstring)) + endline = linenum; endif endwhile unwind_protect_cleanup
--- a/scripts/path/savepath.m +++ b/scripts/path/savepath.m @@ -17,19 +17,21 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {} savepath (@var{file}) -## Save the portion of the current function search path, that is -## not set during Octave's initialization process, to @var{file}. +## @deftypefn {Function File} {} savepath () +## @deftypefnx {Function File} {} savepath (@var{file}) +## @deftypefnx {Function File} {@var{status} =} savepath (@dots{}) +## Save the unique portion of the current function search path that is +## not set during Octave's initialization process 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} +## @seealso{path, addpath, rmpath, genpath, pathdef} ## @end deftypefn ## Author: Bill Denney <bill@givebillmoney.com> -function varargout = savepath (file) +function retval = savepath (file) - retval = 1; + ret = 1; beginstring = "## Begin savepath auto-created section, do not edit"; endstring = "## End savepath auto-created section"; @@ -38,40 +40,30 @@ file = fullfile ("~", ".octaverc"); endif - ## parse the file if it exists to see if we should replace a section - ## or create a section - startline = 0; - endline = 0; + ## parse the file if it exists to see if we should replace an + ## existing section or create a new section + startline = endline = 0; filelines = {}; if (exist (file) == 2) - ## read in all lines of the file [fid, msg] = fopen (file, "rt"); if (fid < 0) error ("savepath: could not open file, %s: %s", file, msg); endif unwind_protect linenum = 0; - while (linenum >= 0) - result = fgetl (fid); - if (isnumeric (result)) - ## end at the end of file - linenum = -1; - else - linenum = linenum + 1; - filelines{linenum} = result; - ## find the first and last lines if they exist in the file - if (strcmp (result, beginstring)) - startline = linenum; - elseif (strcmp (result, endstring)) - endline = linenum; - endif + while (ischar (line = fgetl (fid))) + filelines{++linenum} = line; + ## find the first and last lines if they exist in the file + if (strcmp (line, beginstring)) + startline = linenum; + elseif (strcmp (line, endstring)) + endline = linenum; endif endwhile unwind_protect_cleanup closeread = fclose (fid); if (closeread < 0) - error ("savepath: could not close file after reading, %s", - file); + error ("savepath: could not close file after reading, %s", file); endif end_unwind_protect endif @@ -116,15 +108,16 @@ workingpath = parsepath (path); command_line_path = parsepath (command_line_path ()); octave_path = parsepath (getenv ("OCTAVE_PATH")); - if (isempty (pathdef ())) + pathdef = pathdef (); + if (isempty (pathdef)) ## This occurs when running octave via run-octave. In this instance ## the entire path is specified via the command line and pathdef() ## is empty. - [tmp, n] = setdiff (workingpath, octave_path); + [~, n] = setdiff (workingpath, octave_path); default_path = command_line_path; else - [tmp, n] = setdiff (workingpath, union (command_line_path, octave_path)); - default_path = parsepath (pathdef ()); + [~, n] = setdiff (workingpath, union (command_line_path, octave_path)); + default_path = parsepath (pathdef); endif ## This is the path we'd like to preserve when octave is run. path_to_preserve = workingpath (sort (n)); @@ -133,34 +126,33 @@ [pkg_user, pkg_system] = pkg ("list"); pkg_user_path = cell (1, numel (pkg_user)); pkg_system_path = cell (1, numel (pkg_system)); - for n = 1:numel(pkg_user) + for n = 1:numel (pkg_user) pkg_user_path{n} = pkg_user{n}.archprefix; endfor - for n = 1:numel(pkg_system) + for n = 1:numel (pkg_system) pkg_system_path{n} = pkg_system{n}.archprefix; endfor pkg_path = union (pkg_user_path, pkg_system_path); ## Rely on Octave's initialization to include the pkg path elements. if (! isempty (pkg_path)) - [tmp, n] = setdiff (path_to_preserve, strcat (pkg_path, ":")); - path_to_preserve = path_to_preserve (sort (n)); + [~, n] = setdiff (path_to_preserve, strcat (pkg_path, ":")); + path_to_preserve = path_to_preserve(sort (n)); endif ## Split the path to be saved into two groups. Those path elements that ## belong at the beginning and those at the end. if (! isempty (default_path)) - n1 = strmatch (default_path{1}, path_to_preserve, "exact"); - n2 = strmatch (default_path{end}, path_to_preserve, "exact"); + n1 = find (strcmp (default_path{1}, path_to_preserve)); + n2 = find (strcmp (default_path{end}, path_to_preserve)); n_middle = round (0.5*(n1+n2)); - [tmp, n] = setdiff (path_to_preserve, default_path); - path_to_save = path_to_preserve (sort (n)); + [~, n] = setdiff (path_to_preserve, default_path); + path_to_save = path_to_preserve(sort (n)); ## Remove pwd - path_to_save = path_to_save (! strcmpi (path_to_save, - strcat (".", pathsep))); + path_to_save = path_to_save(! strcmp (path_to_save, ["." pathsep])); n = ones (size (path_to_save)); - for m = 1:numel(path_to_save) - n(m) = strmatch (path_to_save{m}, path_to_preserve); + for m = 1:numel (path_to_save) + n(m) = find (strcmp (path_to_save{m}, path_to_preserve)); endfor path_to_save_begin = path_to_save(n <= n_middle); path_to_save_end = path_to_save(n > n_middle); @@ -199,16 +191,16 @@ endif end_unwind_protect - retval = 0; + ret = 0; - if (nargout == 1) - varargout{1} = retval; + if (nargout > 0) + retval = ret; endif endfunction function path_elements = parsepath (p) pat = sprintf ('([^%s]+[%s$])', pathsep, pathsep); - [~, ~, ~, path_elements] = regexpi (strcat (p, pathsep), pat); + path_elements = regexpi (strcat (p, pathsep), pat, "match"); endfunction
--- a/scripts/pkg/pkg.m +++ b/scripts/pkg/pkg.m @@ -1883,7 +1883,7 @@ endif ## Get classes in dir - class_idx = strmatch ("@", files); + class_idx = find (strncmp (files, '@', 1)); for k = 1:length (class_idx) class_name = files {class_idx (k)}; class_dir = fullfile (dir, class_name); @@ -2006,21 +2006,21 @@ ## Now check if the package is loaded. tmppath = strrep (path(), "\\", "/"); for i = 1:length (installed_pkgs_lst) - if (findstr (tmppath, strrep (installed_pkgs_lst{i}.dir, "\\", "/"))) + if (strfind (tmppath, strrep (installed_pkgs_lst{i}.dir, '\', '/'))) installed_pkgs_lst{i}.loaded = true; else installed_pkgs_lst{i}.loaded = false; endif endfor for i = 1:length (local_packages) - if (findstr (tmppath, strrep (local_packages{i}.dir, "\\", "/"))) + if (strfind (tmppath, strrep (local_packages{i}.dir, '\', '/'))) local_packages{i}.loaded = true; else local_packages{i}.loaded = false; endif endfor for i = 1:length (global_packages) - if (findstr (tmppath, strrep (global_packages{i}.dir, "\\", "/"))) + if (strfind (tmppath, strrep (global_packages{i}.dir, '\', '/'))) global_packages{i}.loaded = true; else global_packages{i}.loaded = false; @@ -2398,7 +2398,7 @@ else isglob = false; endif - pos = findstr (nm, ext); + pos = strfind (nm, ext); if (pos) if (! isglob && (length(nm) - pos(end) != length(ext) - 1)) continue;
--- a/scripts/plot/__gnuplot_drawnow__.m +++ b/scripts/plot/__gnuplot_drawnow__.m @@ -122,8 +122,8 @@ ## toolkit. [term, opts_str] = gnuplot_trim_term (term); term = lower (term); - if (strcmpi (term, "lua")) - ## Replace "lau tikz" with + if (strcmp (term, "lua")) + ## Replace "lua tikz" with just "tikz" term = "tikz"; opts_str = strrep (opts_str, "tikz", ""); endif @@ -147,10 +147,10 @@ if (! isempty (h) && isfigure (h)) ## Generate gnuplot title string for plot windows. - if (output_to_screen (term) && ~strcmp (term, "dumb")) + if (output_to_screen (term) && ! strcmp (term, "dumb")) fig.numbertitle = get (h, "numbertitle"); fig.name = strrep (get (h, "name"), "\"", "\\\""); - if (strcmpi (get (h, "numbertitle"), "on")) + if (strcmp (get (h, "numbertitle"), "on")) title_str = sprintf ("Figure %d", h); else title_str = ""; @@ -186,8 +186,8 @@ gnuplot_pos = position_in_pixels(1:2); gnuplot_size = position_in_pixels(3:4); if (! (output_to_screen (term) - || any (strcmp (term, {"emf", "gif", "jpeg", "pbm", "png", ... - "pngcairo", "svg"})))) + || any (strcmp (term, {"canvas", "emf", "gif", "jpeg", ... + "pbm", "png", "pngcairo", "svg"})))) ## Convert to inches gnuplot_pos = gnuplot_pos / 72; gnuplot_size = gnuplot_size / 72; @@ -205,12 +205,12 @@ endif switch (term) case terminals_with_size - size_str = sprintf ("size %g,%g", gnuplot_size); + size_str = sprintf ("size %.12g,%.12g", gnuplot_size); case "tikz" size_str = sprintf ("size %gin,%gin", gnuplot_size); case "dumb" new_stream = 1; - if (~isempty (getenv ("COLUMNS")) && ~isempty (getenv ("LINES"))) + if (! isempty (getenv ("COLUMNS")) && ! isempty (getenv ("LINES"))) ## Let dumb use full text screen size (minus prompt lines). n = sprintf ("%i", -2 - length (find (sprintf ("%s", PS1) == "\n"))); ## n = the number of times \n appears in PS1
--- a/scripts/plot/axis.m +++ b/scripts/plot/axis.m @@ -352,208 +352,215 @@ endfunction -%!demo -%! clf -%! t=0:0.01:2*pi; x=sin(t); -%! -%! subplot(221); -%! plot(t, x); -%! title("normal plot"); -%! -%! subplot(222); -%! plot(t, x); -%! title("square plot"); -%! axis("square"); -%! -%! subplot(223); -%! plot(t, x); -%! title("equal plot"); -%! axis("equal"); -%! -%! subplot(224); -%! plot(t, x); -%! title("normal plot again"); -%! axis("normal"); %!demo -%! clf -%! t=0:0.01:2*pi; x=sin(t); +%! clf; +%! t = 0:0.01:2*pi; +%! x = sin (t); +%! +%! subplot (221); +%! plot (t, x); +%! title ('normal plot'); +%! +%! subplot (222); +%! plot (t, x); +%! title ('square plot'); +%! axis ('square'); +%! +%! subplot (223); +%! plot (t, x); +%! title ('equal plot'); +%! axis ('equal'); %! -%! subplot(121); -%! plot(t, x); -%! title("ij plot"); -%! axis("ij"); +%! subplot (224); +%! plot (t, x); +%! title ('normal plot again'); +%! axis ('normal'); + +%!demo +%! clf; +%! t = 0:0.01:2*pi; +%! x = sin (t); %! -%! subplot(122); -%! plot(t, x); -%! title("xy plot"); -%! axis("xy"); +%! subplot (121); +%! plot (t, x); +%! title ('ij plot'); +%! axis ('ij'); +%! +%! subplot (122); +%! plot (t, x); +%! title ('xy plot'); +%! axis ('xy'); %!demo -%! clf -%! t=0:0.01:2*pi; x=sin(t); +%! clf; +%! t = 0:0.01:2*pi; +%! x = sin (t); %! -%! subplot(331); -%! plot(t, x); -%! title("x tics and labels"); -%! axis("ticx"); +%! subplot (331); +%! plot (t, x); +%! title ('x tics and labels'); +%! axis ('ticx'); %! -%! subplot(332); -%! plot(t, x); -%! title("y tics and labels"); -%! axis("ticy"); +%! subplot (332); +%! plot (t, x); +%! title ('y tics and labels'); +%! axis ('ticy'); %! -%! subplot(333); -%! plot(t, x); -%! title("axis off"); -%! axis("off"); +%! subplot (333); +%! plot (t, x); +%! title ('axis off'); +%! axis ('off'); %! -%! subplot(334); -%! plot(t, x); -%! title("x and y tics, x labels"); -%! axis("labelx","tic"); +%! subplot (334); +%! plot (t, x); +%! title ('x and y tics, x labels'); +%! axis ('labelx','tic'); %! -%! subplot(335); -%! plot(t, x); -%! title("x and y tics, y labels"); -%! axis("labely","tic"); +%! subplot (335); +%! plot (t, x); +%! title ('x and y tics, y labels'); +%! axis ('labely','tic'); %! -%! subplot(336); -%! plot(t, x); -%! title("all tics but no labels"); -%! axis("nolabel","tic"); +%! subplot (336); +%! plot (t, x); +%! title ('all tics but no labels'); +%! axis ('nolabel','tic'); %! -%! subplot(337); -%! plot(t, x); -%! title("x tics, no labels"); -%! axis("nolabel","ticx"); +%! subplot (337); +%! plot (t, x); +%! title ('x tics, no labels'); +%! axis ('nolabel','ticx'); %! -%! subplot(338); -%! plot(t, x); -%! title("y tics, no labels"); -%! axis("nolabel","ticy"); +%! subplot (338); +%! plot (t, x); +%! title ('y tics, no labels'); +%! axis ('nolabel','ticy'); %! -%! subplot(339); -%! plot(t, x); -%! title("all tics and labels"); -%! axis("on"); +%! subplot (339); +%! plot (t, x); +%! title ('all tics and labels'); +%! axis ('on'); %!demo -%! clf -%! t=0:0.01:2*pi; x=sin(t); +%! clf; +%! t = 0:0.01:2*pi; +%! x = sin (t); %! -%! subplot(321); -%! plot(t, x); -%! title("axes at [0 3 0 1]") -%! axis([0,3,0,1]); +%! subplot (321); +%! plot (t, x); +%! title ('axes at [0 3 0 1]'); +%! axis ([0,3,0,1]); %! -%! subplot(322); -%! plot(t, x); -%! title("auto"); -%! axis("auto"); +%! subplot (322); +%! plot (t, x); +%! title ('auto'); +%! axis ('auto'); %! -%! subplot(323); -%! plot(t, x, ";sine [0:2pi];"); hold on; -%! plot(-3:3,-3:3, ";line (-3,-3)->(3,3);"); hold off; -%! title("manual"); -%! axis("manual"); +%! subplot (323); +%! plot (t, x, ';sine [0:2pi];'); hold on; +%! plot (-3:3,-3:3, ';line (-3,-3)->(3,3);'); hold off; +%! title ('manual'); +%! axis ('manual'); %! -%! subplot(324); -%! plot(t, x, ";sine [0:2pi];"); -%! title("axes at [0 3 0 1], then autox"); -%! axis([0,3,0,1]); axis("autox"); +%! subplot (324); +%! plot (t, x, ';sine [0:2pi];'); +%! title ('axes at [0 3 0 1], then autox'); +%! axis ([0,3,0,1]); +%! axis ('autox'); %! -%! subplot(325); -%! plot(t, x, ";sine [0:2p];"); -%! axis([3,6,0,1]); axis("autoy"); -%! title("axes at [3 6 0 1], then autoy"); +%! subplot (325); +%! plot (t, x, ';sine [0:2p];'); +%! title ('axes at [3 6 0 1], then autoy'); +%! axis ([3,6,0,1]); +%! axis ('autoy'); %! -%! subplot(326); -%! plot(t, sin(t), t, -2*sin(t/2)) -%! axis("tight"); -%! title("tight"); +%! subplot (326); +%! plot (t, sin(t), t, -2*sin(t/2)); +%! axis ('tight'); +%! title ('tight'); %!demo -%! clf -%! axis image -%! x=0:0.1:10; -%! plot(x,sin(x)) -%! axis image -%! title("image") +%! clf; +%! x = 0:0.1:10; +%! plot (x, sin(x)); +%! axis image; +%! title ('image'); %!demo -%! clf -%! [x,y,z] = peaks(50); -%! x1 = max(x(:)); -%! pcolor(x-x1,y-x1/2,z) -%! hold on -%! [x,y,z] = sombrero; -%! s = x1/max(x(:)); -%! pcolor(s*x+x1,s*y+x1/2,5*z) -%! axis tight +%! clf; +%! colormap ('default'); +%! [x,y,z] = peaks (50); +%! x1 = max (x(:)); +%! pcolor (x-x1, y-x1/2, z); +%! hold on; +%! [x,y,z] = sombrero (); +%! s = x1 / max (x(:)); +%! pcolor (s*x+x1, s*y+x1/2, 5*z); +%! axis tight; %!demo -%! clf +%! clf; %! x = -10:10; -%! plot (x, x, x, -x) -%! set (gca, "yscale", "log") -%! legend ({"x >= 1", "x <= 1"}, "location", "north") -%! title ("ylim = [1, 10]") +%! plot (x,x, x,-x); +%! set (gca, 'yscale', 'log'); +%! legend ({'x >= 1', 'x <= 1'}, 'location', 'north'); +%! title ('ylim = [1, 10]'); %!demo -%! clf -%! loglog (1:20, "-s") -%! axis tight +%! clf; +%! loglog (1:20, '-s'); +%! axis tight; %!demo -%! clf +%! clf; %! x = -10:0.1:10; -%! y = sin(x)./(1+abs(x)) + x*0.1 - .4; -%! plot (x, y) -%! title ("no plot box") -%! set (gca, "xaxislocation", "zero") -%! set (gca, "yaxislocation", "zero") -%! box off +%! y = sin (x)./(1 + abs (x)) + 0.1*x - 0.4; +%! plot (x, y); +%! title ('no plot box'); +%! set (gca, 'xaxislocation', 'zero'); +%! set (gca, 'yaxislocation', 'zero'); +%! box off; %!demo -%! clf +%! clf; %! x = -10:0.1:10; -%! y = sin(x)./(1+abs(x)) + x*0.1 - .4; -%! plot (x, y) -%! title ("no plot box") -%! set (gca, "xaxislocation", "zero") -%! set (gca, "yaxislocation", "left") -%! box off +%! y = sin (x)./(1+abs (x)) + 0.1*x - 0.4; +%! plot (x, y); +%! title ('no plot box'); +%! set (gca, 'xaxislocation', 'zero'); +%! set (gca, 'yaxislocation', 'left'); +%! box off; %!demo -%! clf +%! clf; %! x = -10:0.1:10; -%! y = sin(x)./(1+abs(x)) + x*0.1 - .4; -%! plot (x, y) -%! title ("no plot box") -%! set (gca, "xaxislocation", "zero") -%! set (gca, "yaxislocation", "right") -%! box off +%! y = sin (x)./(1+abs (x)) + 0.1*x - 0.4; +%! plot (x, y); +%! title ('no plot box'); +%! set (gca, 'xaxislocation', 'zero'); +%! set (gca, 'yaxislocation', 'right'); +%! box off; %!demo -%! clf +%! clf; %! x = -10:0.1:10; -%! y = sin(x)./(1+abs(x)) + x*0.1 - .4; -%! plot (x, y) -%! title ("no plot box") -%! set (gca, "xaxislocation", "bottom") -%! set (gca, "yaxislocation", "zero") -%! box off +%! y = sin (x)./(1+abs (x)) + 0.1*x - 0.4; +%! plot (x, y); +%! title ('no plot box'); +%! set (gca, 'xaxislocation', 'bottom'); +%! set (gca, 'yaxislocation', 'zero'); +%! box off; %!demo -%! clf +%! clf; %! x = -10:0.1:10; -%! y = sin(x)./(1+abs(x)) + x*0.1 - .4; -%! plot (x, y) -%! title ("no plot box") -%! set (gca, "xaxislocation", "top") -%! set (gca, "yaxislocation", "zero") -%! box off +%! y = sin (x)./(1+abs (x)) + 0.1*x - 0.4; +%! plot (x, y); +%! title ('no plot box'); +%! set (gca, 'xaxislocation', 'top'); +%! set (gca, 'yaxislocation', 'zero'); +%! box off; %!test %! hf = figure ("visible", "off"); @@ -571,9 +578,9 @@ %! hf = figure ("visible", "off"); %! unwind_protect %! a = logspace (-5, 1, 10); -%! loglog (a, -a) +%! loglog (a, -a); %! axis tight; -%! assert (axis (), [1e-5, 10, -10, -1e-5]) +%! assert (axis (), [1e-5, 10, -10, -1e-5]); %! unwind_protect_cleanup %! close (hf); %! end_unwind_protect
--- a/scripts/plot/clabel.m +++ b/scripts/plot/clabel.m @@ -127,16 +127,19 @@ else retval = __clabel__ (c, v, hparent, label_spacing, [], varargin{:}); endif + endfunction %!demo -%! clf -%! [c, h] = contour (peaks(), -4:6); -%! clabel (c, h, -4:2:6, "fontsize", 12); +%! clf; +%! colormap ('default'); +%! [c, h] = contour (peaks (), -4:6); +%! clabel (c, h, -4:2:6, 'fontsize', 12); %!demo -%! clf -%! [c, h] = contourf (peaks(), -7:6); -%! clabel (c, h, -6:2:6, "fontsize", 12); +%! clf; +%! colormap ('default'); +%! [c, h] = contourf (peaks (), -7:6); +%! clabel (c, h, -6:2:6, 'fontsize', 12);
--- a/scripts/plot/colorbar.m +++ b/scripts/plot/colorbar.m @@ -362,252 +362,288 @@ endfunction -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! imagesc(x) -%! colorbar(); - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! imagesc(x) -%! colorbar("westoutside"); - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! imagesc(x) -%! colorbar("peer", gca (), "northoutside"); - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! imagesc(x) -%! colorbar("southoutside"); - -%!demo -%! clf -%! contour(peaks()) -%! colorbar("west"); - -%!demo -%! clf -%! subplot(2,2,1) -%! contour(peaks()) -%! colorbar("east"); -%! subplot(2,2,2) -%! contour(peaks()) -%! colorbar("west"); -%! subplot(2,2,3) -%! contour(peaks()) -%! colorbar("north"); -%! subplot(2,2,4) -%! contour(peaks()) -%! colorbar("south"); - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! subplot(2,2,1) -%! imagesc(x) -%! colorbar(); -%! subplot(2,2,2) -%! imagesc(x) -%! colorbar("westoutside"); -%! subplot(2,2,3) -%! imagesc(x) -%! colorbar("northoutside"); -%! subplot(2,2,4) -%! imagesc(x) -%! colorbar("southoutside"); - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! subplot(1,2,1) -%! imagesc(x) -%! axis square; -%! colorbar(); -%! subplot(1,2,2) -%! imagesc(x) -%! axis square; -%! colorbar("westoutside"); - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! subplot(1,2,1) -%! imagesc(x) -%! axis square; -%! colorbar("northoutside"); -%! subplot(1,2,2) -%! imagesc(x) -%! axis square; -%! colorbar("southoutside"); %!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! subplot(2,1,1) -%! imagesc(x) -%! axis square; -%! colorbar(); -%! subplot(2,1,2) -%! imagesc(x) -%! axis square; -%! colorbar("westoutside"); - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! subplot(2,1,1) -%! imagesc(x) -%! axis square; -%! colorbar("northoutside"); -%! subplot(2,1,2) -%! imagesc(x) -%! axis square; -%! colorbar("southoutside"); - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! subplot(1,2,1) -%! imagesc(x) -%! colorbar(); -%! subplot(1,2,2) -%! imagesc(x) -%! colorbar("westoutside"); - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! subplot(1,2,1) -%! imagesc(x) -%! colorbar("northoutside"); -%! subplot(1,2,2) -%! imagesc(x) -%! colorbar("southoutside"); - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! subplot(2,1,1) -%! imagesc(x) -%! colorbar(); -%! subplot(2,1,2) -%! imagesc(x) -%! colorbar("westoutside"); - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! subplot(2,1,1) -%! imagesc(x) -%! colorbar("northoutside"); -%! subplot(2,1,2) -%! imagesc(x) -%! colorbar("southoutside"); - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! subplot(1,2,1) -%! contour(x) -%! axis square; -%! colorbar("east"); -%! xlim ([1, 64]) -%! ylim ([1, 64]) -%! subplot(1,2,2) -%! contour(x) -%! colorbar("west"); -%! xlim ([1, 64]) -%! ylim ([1, 64]) - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! contour (x) -%! xlim ([1, 64]) -%! ylim ([1, 64]) -%! colorbar (); -%! colorbar off - -%!demo -%! clf -%! n = 64; x = kron (1:n,ones(n,1)); x = abs(x - x.'); -%! contour (x) -%! xlim ([1, 64]) -%! ylim ([1, 64]) -%! colorbar (); +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! imagesc (x); %! colorbar (); %!demo -%! clf -%! imagesc (1./hilb(99)); -%! h = colorbar; +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! imagesc (x); +%! colorbar ('westoutside'); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! imagesc (x); +%! colorbar ('peer', gca (), 'northoutside'); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! imagesc (x); +%! colorbar ('southoutside'); + +%!demo +%! clf; +%! colormap ('default'); +%! contour (peaks ()); +%! colorbar ('west'); + +%!demo +%! clf; +%! colormap ('default'); +%! subplot (2,2,1); +%! contour (peaks ()); +%! colorbar ('east'); +%! subplot (2,2,2); +%! contour (peaks ()); +%! colorbar ('west'); +%! subplot (2,2,3); +%! contour (peaks ()); +%! colorbar ('north'); +%! subplot (2,2,4); +%! contour (peaks ()); +%! colorbar ('south'); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! subplot (2,2,1); +%! imagesc (x); +%! colorbar (); +%! subplot (2,2,2); +%! imagesc (x); +%! colorbar ('westoutside'); +%! subplot (2,2,3); +%! imagesc (x); +%! colorbar ('northoutside'); +%! subplot (2,2,4); +%! imagesc (x); +%! colorbar ('southoutside'); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! subplot (1,2,1); +%! imagesc (x); +%! axis square; +%! colorbar (); +%! subplot (1,2,2); +%! imagesc (x); +%! axis square; +%! colorbar ('westoutside'); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! subplot (1,2,1); +%! imagesc (x); +%! axis square; +%! colorbar ('northoutside'); +%! subplot (1,2,2); +%! imagesc (x); +%! axis square; +%! colorbar ('southoutside'); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! subplot (2,1,1); +%! imagesc (x); +%! axis square; +%! colorbar (); +%! subplot (2,1,2); +%! imagesc (x); +%! axis square; +%! colorbar ('westoutside'); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! subplot (2,1,1); +%! imagesc (x); +%! axis square; +%! colorbar ('northoutside'); +%! subplot (2,1,2); +%! imagesc (x); +%! axis square; +%! colorbar ('southoutside'); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! subplot (1,2,1); +%! imagesc (x); +%! colorbar (); +%! subplot (1,2,2); +%! imagesc (x); +%! colorbar ('westoutside'); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! subplot (1,2,1); +%! imagesc (x); +%! colorbar ('northoutside'); +%! subplot (1,2,2); +%! imagesc (x); +%! colorbar ('southoutside'); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! subplot (2,1,1); +%! imagesc (x); +%! colorbar (); +%! subplot (2,1,2); +%! imagesc (x); +%! colorbar ('westoutside'); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! subplot (2,1,1); +%! imagesc (x); +%! colorbar ('northoutside'); +%! subplot (2,1,2); +%! imagesc (x); +%! colorbar ('southoutside'); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! subplot (1,2,1); +%! contour (x); +%! axis square; +%! colorbar ('east'); +%! xlim ([1, 64]); +%! ylim ([1, 64]); +%! subplot (1,2,2); +%! contour (x); +%! colorbar ('west'); +%! xlim ([1, 64]); +%! ylim ([1, 64]); + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! contour (x); +%! xlim ([1, 64]); +%! ylim ([1, 64]); +%! colorbar (); +%! colorbar off; + +%!demo +%! clf; +%! colormap ('default'); +%! n = 64; x = kron (1:n, ones (n,1)); x = abs (x - x.'); +%! contour (x); +%! xlim ([1, 64]); +%! ylim ([1, 64]); +%! colorbar (); + +%!demo +%! clf; +%! colormap ('default'); +%! imagesc (1 ./ hilb (99)); +%! h = colorbar (); %! set (h, 'yscale', 'log'); %!demo -%! clf +%! clf; +%! colormap ('default'); %! imagesc (log10 (1 ./ hilb (99))); -%! h = colorbar; -%! ytick = get(h, "ytick"); -%! set (h, "yticklabel", sprintf ('10^{%g}|', ytick)); - -%!demo -%! clf -%! n=5;x=linspace(0,5,n);y=linspace(0,1,n); -%! imagesc(1./hilb(n)); axis equal; colorbar +%! h = colorbar (); +%! ytick = get (h, 'ytick'); +%! set (h, 'yticklabel', sprintf ('10^{%g}|', ytick)); %!demo -%! clf -%! n=5;x=linspace(0,5,n);y=linspace(0,1,n); -%! imagesc(x,y,1./hilb(n)); axis equal; colorbar +%! clf; +%! colormap ('default'); +%! n = 5; x = linspace (0,5,n); y = linspace (0,1,n); +%! imagesc (1 ./ hilb (n)); +%! axis equal; +%! colorbar (); %!demo -%! clf -%! n=5;x=linspace(0,5,n);y=linspace(0,1,n); -%! imagesc(y,x,1./hilb(n)); axis equal; colorbar -## This requires that the axes position be properly determined for "axes equal" - -%!demo -%! clf -%! axes -%! colorbar -%! hold on -%! contour(peaks) -%! hold off +%! clf; +%! colormap ('default'); +%! n = 5; x = linspace (0,5,n); y = linspace (0,1,n); +%! imagesc (x, y, 1 ./ hilb (n)); +%! axis equal; +%! colorbar (); %!demo -%! clf -%! plot([0, 2]) -%! colorbar ("east") -%! axis square +%! clf; +%! colormap ('default'); +%! n = 5; x = linspace (0,5,n); y = linspace (0,1,n); +%! imagesc (y, x, 1 ./ hilb (n)); +%! axis equal; +%! colorbar (); + +## This requires that the axes position be properly determined for 'axis equal' +%!demo +%! clf; +%! colormap ('default'); +%! axes; +%! colorbar (); +%! hold on; +%! contour (peaks ()); +%! hold off; %!demo -%! clf -%! plot([0, 2]) -%! colorbar ("eastoutside") -%! axis square +%! clf; +%! colormap ('default'); +%! plot ([0, 2]); +%! colorbar ('east'); +%! axis square; %!demo -%! clf -%! pcolor (peaks (20)) -%! shading ("interp") -%! axis ("tight", "square") -%! colorbar () -#%! axes('color','none','box','on','activepositionproperty','position') +%! clf; +%! colormap ('default'); +%! plot ([0, 2]); +%! colorbar ('eastoutside'); +%! axis square; %!demo -%! clf -%! plot([0, 2]) -%! colorbar ("east") -%! axis equal +%! clf; +%! colormap ('default'); +%! pcolor (peaks (20)); +%! shading interp; +%! axis ('tight', 'square'); +%! colorbar (); +#%! axes ('color','none','box','on','activepositionproperty','position'); %!demo -%! clf -%! plot([0, 2]) -%! colorbar ("eastoutside") -%! axis equal +%! clf; +%! colormap ('default'); +%! plot ([0, 2]); +%! colorbar ('east'); +%! axis equal; + +%!demo +%! clf; +%! colormap ('default'); +%! plot ([0, 2]); +%! colorbar ('eastoutside'); +%! axis equal; +
--- a/scripts/plot/comet.m +++ b/scripts/plot/comet.m @@ -78,11 +78,11 @@ endfunction + %!demo -%! clf +%! clf; %! t = 0:.1:2*pi; -%! x = cos(2*t).*(cos(t).^2); -%! y = sin(2*t).*(sin(t).^2); -%! comet(x,y) +%! x = cos (2*t) .* (cos (t).^2); +%! y = sin (2*t) .* (sin (t).^2); +%! comet (x, y); -
--- a/scripts/plot/comet3.m +++ b/scripts/plot/comet3.m @@ -80,7 +80,9 @@ endfunction + %!demo -%! clf +%! clf; %! t = 0:pi/20:5*pi; %! comet3 (cos(t), sin(t), t, 0.01); +
--- a/scripts/plot/compass.m +++ b/scripts/plot/compass.m @@ -112,7 +112,7 @@ %!demo -%! clf +%! clf; %! randn_9x1_data = [-2.555884; 0.394974; -0.191871; -1.147024; 1.355425; -0.437335; -0.014370; -0.941312; 1.240300]; %! randn_1x9_data = [1.42934, -1.10821, -1.70404, 0.63357, -0.68337, -1.19771, -0.96502, -1.12810, 0.22457]; %! a = toeplitz ([1;randn_9x1_data], [1,randn_1x9_data]);
--- a/scripts/plot/contour.m +++ b/scripts/plot/contour.m @@ -70,23 +70,27 @@ endfunction + %!demo -%! clf () +%! clf; +%! colormap ('default'); %! [x, y, z] = peaks (); %! contour (x, y, z); %!demo -%! clf () -%! [theta, r] = meshgrid (linspace (0, 2*pi, 64), linspace(0,1,64)); +%! clf; +%! colormap ('default'); +%! [theta, r] = meshgrid (linspace (0,2*pi,64), linspace (0,1,64)); %! [X, Y] = pol2cart (theta, r); -%! Z = sin(2*theta).*(1-r); -%! contour(X, Y, abs(Z), 10) +%! Z = sin (2*theta) .* (1-r); +%! contour (X, Y, abs(Z), 10); %!demo -%! clf () +%! clf; +%! colormap ('default'); %! x = linspace (-2, 2); %! [x, y] = meshgrid (x); -%! z = sqrt (x.^2 + y.^2) ./ (x.^2 + y.^2+1); -%! contourf (x, y, z, [0.4, 0.4]) -%! title ("The hole should be filled with the background color") +%! z = sqrt (x.^2 + y.^2) ./ (x.^2 + y.^2 + 1); +%! contourf (x, y, z, [0.4, 0.4]); +%! title ('The hole should be filled with the background color');
--- a/scripts/plot/contour3.m +++ b/scripts/plot/contour3.m @@ -74,13 +74,15 @@ endfunction + %!demo -%! clf +%! clf; %! contour3 (peaks (19)); -%! hold on -%! surface (peaks (19), "facecolor", "none", "edgecolor", "black") -%! colormap hot -%! axis tight -%! zlim auto -%! hold off -%! box off +%! hold on; +%! surface (peaks (19), 'facecolor', 'none', 'edgecolor', 'black'); +%! colormap (hot (64)); +%! axis tight; +%! zlim auto; +%! box off; +%! hold off; +
--- a/scripts/plot/contourf.m +++ b/scripts/plot/contourf.m @@ -78,16 +78,21 @@ c = ctmp; h = htmp; endif + endfunction + %!demo -%! clf +%! clf; +%! colormap ('default'); %! [x, y, z] = peaks (50); -%! contourf (x, y, z, -7:9) +%! contourf (x, y, z, -7:9); %!demo -%! clf -%! [theta, r] = meshgrid (linspace (0, 2*pi, 64), linspace(0,1,64)); +%! clf; +%! colormap ('default'); +%! [theta, r] = meshgrid (linspace (0,2*pi,64), linspace (0,1,64)); %! [X, Y] = pol2cart (theta, r); -%! Z = sin(2*theta).*(1-r); -%! contourf(X, Y, abs(Z), 10) +%! Z = sin (2*theta) .* (1-r); +%! contourf (X, Y, abs (Z), 10); +
--- a/scripts/plot/cylinder.m +++ b/scripts/plot/cylinder.m @@ -85,8 +85,11 @@ endfunction + %!demo -%! clf +%! clf; +%! colormap ('default'); %! [x, y, z] = cylinder (10:-1:0,50); %! surf (x, y, z); -%! title ("a cone") +%! title ('a cone'); +
--- a/scripts/plot/daspect.m +++ b/scripts/plot/daspect.m @@ -89,45 +89,46 @@ endfunction -%!demo -%! x = 0:0.01:4; -%! clf -%! plot (x, cos (x), x, sin (x)) -%! axis square -%! daspect ([1 1 1]) -%! title ("square plot-box with axis limits [0, 4, -2, 2]") %!demo +%! clf; %! x = 0:0.01:4; -%! clf -%! plot (x, cos (x), x, sin (x)) -%! axis ([0 4 -1 1]) -%! daspect ([2 1 1]) -%! title ("square plot-box with axis limits [0, 4, -1, 1]") +%! plot (x,cos(x), x,sin(x)); +%! axis square; +%! daspect ([1 1 1]); +%! title ('square plot-box with axis limits [0, 4, -2, 2]'); + +%!demo +%! clf; +%! x = 0:0.01:4; +%! plot (x,cos (x), x,sin (x)); +%! axis ([0 4 -1 1]); +%! daspect ([2 1 1]); +%! title ('square plot-box with axis limits [0, 4, -1, 1]'); %!demo +%! clf; %! x = 0:0.01:4; -%! clf -%! plot (x, cos (x), x, sin (x)) -%! daspect ([1 2 1]) -%! pbaspect ([2 1 1]) -%! title ("2x1 plot box with axis limits [0, 4, -2, 2]") +%! plot (x,cos(x), x,sin(x)); +%! daspect ([1 2 1]); +%! pbaspect ([2 1 1]); +%! title ('2x1 plot box with axis limits [0, 4, -2, 2]'); %!demo +%! clf; %! x = 0:0.01:4; -%! clf -%! plot (x, cos (x), x, sin (x)) -%! axis square -%! set (gca, "activepositionproperty", "position") -%! daspect ([1 1 1]) -%! title ("square plot-box with axis limits [0, 4, -2, 2]") +%! plot (x,cos(x), x, sin(x)); +%! axis square; +%! set (gca, 'activepositionproperty', 'position'); +%! daspect ([1 1 1]); +%! title ('square plot-box with axis limits [0, 4, -2, 2]'); %!demo +%! clf; %! x = 0:0.01:4; -%! clf -%! plot (x, cos (x), x, sin (x)) -%! axis ([0 4 -1 1]) -%! set (gca, "activepositionproperty", "position") -%! daspect ([2 1 1]) -%! title ("square plot-box with axis limits [0, 4, -1, 1]") +%! plot (x,cos(x), x,sin(x)); +%! axis ([0 4 -1 1]); +%! set (gca, 'activepositionproperty', 'position'); +%! daspect ([2 1 1]); +%! title ('square plot-box with axis limits [0, 4, -1, 1]');
--- a/scripts/plot/ellipsoid.m +++ b/scripts/plot/ellipsoid.m @@ -69,6 +69,8 @@ endfunction + %!demo -%! clf +%! clf; %! ellipsoid (0, 0, 1, 2, 3, 4, 20); +
--- a/scripts/plot/errorbar.m +++ b/scripts/plot/errorbar.m @@ -138,39 +138,39 @@ %!demo -%! clf +%! clf; %! rand_1x11_data1 = [0.82712, 0.50325, 0.35613, 0.77089, 0.20474, 0.69160, 0.30858, 0.88225, 0.35187, 0.14168, 0.54270]; %! rand_1x11_data2 = [0.506375, 0.330106, 0.017982, 0.859270, 0.140641, 0.327839, 0.275886, 0.162453, 0.807592, 0.318509, 0.921112]; %! errorbar (0:10, rand_1x11_data1, 0.25*rand_1x11_data2); %!demo -%! clf +%! clf; %! rand_1x11_data3 = [0.423650, 0.142331, 0.213195, 0.129301, 0.975891, 0.012872, 0.635327, 0.338829, 0.764997, 0.401798, 0.551850]; %! rand_1x11_data4 = [0.682566, 0.456342, 0.132390, 0.341292, 0.108633, 0.601553, 0.040455, 0.146665, 0.309187, 0.586291, 0.540149]; -%! errorbar(0:10, rand_1x11_data3, rand_1x11_data4, ">"); +%! errorbar (0:10, rand_1x11_data3, rand_1x11_data4, '>'); %!demo -%! clf +%! clf; %! x = 0:0.5:2*pi; %! err = x/100; %! y1 = sin (x); %! y2 = cos (x); -%! hg = errorbar (x, y1, err, "~", x, y2, err, ">"); +%! hg = errorbar (x, y1, err, '~', x, y2, err, '>'); %!demo -%! clf +%! clf; %! x = 0:0.5:2*pi; %! err = x/100; %! y1 = sin (x); %! y2 = cos (x); -%! hg = errorbar (x, y1, err, err, "#r", x, y2, err, err, "#~"); +%! hg = errorbar (x, y1, err, err, '#r', x, y2, err, err, '#~'); %!demo -%! clf +%! clf; %! x = 0:0.5:2*pi; %! err = x/100; %! y1 = sin (x); %! y2 = cos (x); -%! hg = errorbar (x, y1, err, err, err, err, "~>", ... -%! x, y2, err, err, err, err, "#~>-*"); +%! hg = errorbar (x, y1, err, err, err, err, '~>', ... +%! x, y2, err, err, err, err, '#~>-*');
--- a/scripts/plot/ezcontour.m +++ b/scripts/plot/ezcontour.m @@ -58,11 +58,13 @@ if (nargout > 0) retval = h; endif + endfunction %!demo -%! clf -%! f = @(x,y) sqrt(abs(x .* y)) ./ (1 + x.^2 + y.^2); +%! clf; +%! colormap ('default'); +%! f = @(x,y) sqrt (abs (x .* y)) ./ (1 + x.^2 + y.^2); %! ezcontour (f, [-3, 3]);
--- a/scripts/plot/ezcontourf.m +++ b/scripts/plot/ezcontourf.m @@ -58,10 +58,13 @@ if (nargout > 0) retval = h; endif + endfunction %!demo -%! clf -%! f = @(x,y) sqrt(abs(x .* y)) ./ (1 + x.^2 + y.^2); +%! clf; +%! colormap ('default'); +%! f = @(x,y) sqrt (abs (x .* y)) ./ (1 + x.^2 + y.^2); %! ezcontourf (f, [-3, 3]); +
--- a/scripts/plot/ezmesh.m +++ b/scripts/plot/ezmesh.m @@ -79,16 +79,19 @@ if (nargout > 0) retval = h; endif + endfunction %!demo -%! clf -%! f = @(x,y) sqrt(abs(x .* y)) ./ (1 + x.^2 + y.^2); +%! clf; +%! colormap ('default'); +%! f = @(x,y) sqrt (abs (x .* y)) ./ (1 + x.^2 + y.^2); %! ezmesh (f, [-3, 3]); %!demo -%! clf +%! clf; +%! colormap ('default'); %! fx = @(s,t) cos (s) .* cos(t); %! fy = @(s,t) sin (s) .* cos(t); %! fz = @(s,t) sin (t);
--- a/scripts/plot/ezmeshc.m +++ b/scripts/plot/ezmeshc.m @@ -69,11 +69,13 @@ if (nargout > 0) retval = h; endif + endfunction %!demo -%! clf -%! f = @(x,y) sqrt(abs(x .* y)) ./ (1 + x.^2 + y.^2); +%! clf; +%! colormap ('default'); +%! f = @(x,y) sqrt (abs (x .* y)) ./ (1 + x.^2 + y.^2); %! ezmeshc (f, [-3, 3]);
--- a/scripts/plot/ezplot.m +++ b/scripts/plot/ezplot.m @@ -77,18 +77,19 @@ if (nargout > 0) retval = h; endif + endfunction %!demo -%! clf -%! ezplot (@cos, @sin) +%! clf; +%! ezplot (@cos, @sin); %!demo -%! clf -%! ezplot ("1/x") +%! clf; +%! ezplot ('1/x'); %!demo -%! clf -%! ezplot (inline ("x^2 - y^2 = 1")) +%! clf; +%! ezplot (inline ('x^2 - y^2 = 1'));
--- a/scripts/plot/ezplot3.m +++ b/scripts/plot/ezplot3.m @@ -57,11 +57,12 @@ if (nargout > 0) retval = h; endif + endfunction %!demo -%! clf +%! clf; %! fx = @(t) cos (t); %! fy = @(t) sin (t); %! fz = @(t) t;
--- a/scripts/plot/ezpolar.m +++ b/scripts/plot/ezpolar.m @@ -52,10 +52,11 @@ if (nargout > 0) retval = h; endif + endfunction %!demo -%! clf +%! clf; %! ezpolar (@(t) 1 + sin (t));
--- a/scripts/plot/ezsurf.m +++ b/scripts/plot/ezsurf.m @@ -79,16 +79,19 @@ if (nargout > 0) retval = h; endif + endfunction %!demo -%! clf -%! f = @(x,y) sqrt(abs(x .* y)) ./ (1 + x.^2 + y.^2); +%! clf; +%! colormap ('default'); +%! f = @(x,y) sqrt (abs (x .* y)) ./ (1 + x.^2 + y.^2); %! ezsurf (f, [-3, 3]); %!demo -%! clf +%! clf; +%! colormap ('default'); %! fx = @(s,t) cos (s) .* cos(t); %! fy = @(s,t) sin (s) .* cos(t); %! fz = @(s,t) sin (t);
--- a/scripts/plot/ezsurfc.m +++ b/scripts/plot/ezsurfc.m @@ -69,11 +69,13 @@ if (nargout > 0) retval = h; endif + endfunction %!demo -%! clf -%! f = @(x,y) sqrt(abs(x .* y)) ./ (1 + x.^2 + y.^2); +%! clf; +%! colormap ('default'); +%! f = @(x,y) sqrt (abs (x .* y)) ./ (1 + x.^2 + y.^2); %! ezsurfc (f, [-3, 3]);
--- a/scripts/plot/feather.m +++ b/scripts/plot/feather.m @@ -111,7 +111,7 @@ %!demo -%! clf -%! phi = [0 : 15 : 360] * pi / 180; -%! feather (sin (phi), cos (phi)) +%! clf; +%! phi = [0 : 15 : 360] * pi/180; +%! feather (sin (phi), cos (phi));
--- a/scripts/plot/figure.m +++ b/scripts/plot/figure.m @@ -17,8 +17,10 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {} figure (@var{n}) -## @deftypefnx {Function File} {} figure (@var{n}, @var{property}, @var{value}, @dots{}) +## @deftypefn {Function File} {} figure +## @deftypefnx {Function File} {} figure @var{n} +## @deftypefnx {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. ## @@ -37,7 +39,10 @@ init_new_figure = false; if (mod (nargs, 2) == 1) tmp = varargin{1}; - if (ishandle (tmp) && strcmp (get (tmp, "type"), "figure")) + if (ischar (tmp)) + tmp = str2double (tmp); + endif + if (isfigure (tmp)) f = tmp; varargin(1) = []; nargs--; @@ -54,7 +59,7 @@ ## Check to see if we already have a figure on the screen. If we do, ## then update it if it is different from the figure we are creating ## or switching to. - cf = get (0, "currentfigure"); + cf = get (0, "currentfigure"); # Can't use gcf() because it calls figure() if (! isempty (cf) && cf != 0) if (isnan (f) || cf != f) drawnow (); @@ -64,7 +69,7 @@ if (rem (nargs, 2) == 0) if (isnan (f) || init_new_figure) if (ismac () && strcmp (graphics_toolkit (), "fltk")) - ## FIXME - Hack for fltk-aqua to work around bug # 31931 + ## FIXME - Hack for fltk-aqua to work around bug #31931 f = __go_figure__ (f); drawnow (); if (! isempty (varargin)) @@ -81,9 +86,8 @@ print_usage (); endif - cf = get (0, "currentfigure"); - if (strcmp (get (cf, "__graphics_toolkit__"), "fltk")) - __add_default_menu__ (cf); + if (strcmp (get (f, "__graphics_toolkit__"), "fltk")) + __add_default_menu__ (f); endif if (nargout > 0)
--- a/scripts/plot/fill.m +++ b/scripts/plot/fill.m @@ -46,16 +46,16 @@ set (h, "nextplot", "add"); endif if (i == length (iargs)) - args = varargin (iargs(i):end); + args = varargin(iargs(i):end); else - args = varargin (iargs(i):iargs(i+1)-1); + args = varargin(iargs(i):iargs(i+1)-1); endif newplot (); [tmp, fail] = __patch__ (h, args{:}); if (fail) - print_usage(); + print_usage (); endif - htmp (end + 1) = tmp; + htmp(end + 1, 1) = tmp; endfor if (strncmp (nextplot, "replace", 7)) set (h, "nextplot", nextplot); @@ -74,7 +74,7 @@ iargs = []; i = 1; while (i < nargin) - iargs (end + 1) = i; + iargs(end + 1) = i; if (ischar (varargin{i}) && (strcmpi (varargin{i}, "faces") || strcmpi (varargin{i}, "vertices"))) @@ -96,17 +96,10 @@ elseif (ischar (varargin{i})) colspec = tolower (varargin{i}); collen = length (colspec); - - if (strncmp (colspec, "blue", collen) - || strncmp (colspec, "black", collen) - || strncmp (colspec, "k", collen) - || strncmp (colspec, "black", collen) - || strncmp (colspec, "red", collen) - || strncmp (colspec, "green", collen) - || strncmp (colspec, "yellow", collen) - || strncmp (colspec, "magenta", collen) - || strncmp (colspec, "cyan", collen) - || strncmp (colspec, "white", collen)) + if (any (strncmp (colspec, + {"blue", "black", "k", "red", "green", ... + "yellow", "magenta", "cyan", "white"}, + collen))) i++; break; endif @@ -116,13 +109,14 @@ endwhile endif endwhile + endfunction %!demo -%! clf -%! t1 = (1/16:1/8:1)*2*pi; -%! t2 = ((1/16:1/8:1) + 1/32)*2*pi; +%! clf; +%! t1 = (1/16:1/8:1) * 2*pi; +%! t2 = ((1/16:1/8:1) + 1/32) * 2*pi; %! x1 = sin (t1) - 0.8; %! y1 = cos (t1); %! x2 = sin (t2) + 0.8;
--- a/scripts/plot/fplot.m +++ b/scripts/plot/fplot.m @@ -127,10 +127,12 @@ endif endfunction -%!demo -%! clf -%! fplot ("cos", [0, 2*pi]) %!demo -%! clf -%! fplot ("[cos(x), sin(x)]", [0, 2*pi]) +%! clf; +%! fplot ('cos', [0, 2*pi]); + +%!demo +%! clf; +%! fplot ('[cos(x), sin(x)]', [0, 2*pi]); +
--- a/scripts/plot/graphics_toolkit.m +++ b/scripts/plot/graphics_toolkit.m @@ -83,13 +83,13 @@ %! end_unwind_protect %!testif HAVE_FLTK -%! old_toolkit = graphics_toolkit (); -%! switch old_toolkit -%! case {"gnuplot"} -%! new_toolkit = "fltk"; -%! otherwise -%! new_toolkit = "gnuplot"; -%! endswitch -%! assert (graphics_toolkit (new_toolkit), old_toolkit) -%! assert (graphics_toolkit (old_toolkit), new_toolkit) +%! old_toolkit = graphics_toolkit (); +%! switch old_toolkit +%! case {"gnuplot"} +%! new_toolkit = "fltk"; +%! otherwise +%! new_toolkit = "gnuplot"; +%! endswitch +%! assert (graphics_toolkit (new_toolkit), old_toolkit) +%! assert (graphics_toolkit (old_toolkit), new_toolkit)
--- a/scripts/plot/grid.m +++ b/scripts/plot/grid.m @@ -98,24 +98,23 @@ endfunction + %!demo -%! clf -%! subplot (2,2,1) -%! plot (1:100) -%! grid minor -%! grid minor -%! grid -%! title ("no grid") -%! subplot (2,2,2) -%! plot (1:100) -%! grid -%! title ("grid on") -%! subplot (2,2,3) -%! plot (1:100) -%! grid minor -%! title ("grid minor") -%! subplot (2,2,4) -%! semilogy (1:100) -%! grid minor -%! title ("grid minor") +%! clf; +%! subplot (2,2,1); +%! plot (1:100); +%! grid off; +%! title ('no grid'); +%! subplot (2,2,2); +%! plot (1:100); +%! grid on; +%! title ('grid on'); +%! subplot (2,2,3); +%! plot (1:100); +%! grid minor; +%! title ('grid minor'); +%! subplot (2,2,4); +%! semilogy (1:100); +%! grid minor; +%! title ('grid minor');
--- a/scripts/plot/hold.m +++ b/scripts/plot/hold.m @@ -94,57 +94,61 @@ endfunction + %!demo -%! clf +%! clf; %! A = rand (100); %! [X, Y] = find (A > 0.9); -%! imshow (A) -%! hold on -%! plot (X, Y, 'o') -%! hold off +%! imshow (A); +%! hold on; +%! plot (X, Y, 'o'); +%! hold off; %!demo -%! clf -%! hold on -%! imagesc(1./hilb(4)); -%! plot (1:4, "-s") -%! hold off +%! clf; +%! colormap ('default'); +%! hold on; +%! imagesc (1 ./ hilb (4)); +%! plot (1:4, '-s'); +%! hold off; %!demo -%! clf -%! hold on -%! imagesc(1./hilb(2)); -%! imagesc(1./hilb(4)); -%! hold off +%! clf; +%! colormap ('default'); +%! hold on; +%! imagesc (1 ./ hilb (2)); +%! imagesc (1 ./ hilb (4)); +%! hold off; %!demo -%! clf -%! hold on -%! plot (1:4, "-s") -%! imagesc(1./hilb(4)); -%! hold off +%! clf; +%! colormap ('default'); +%! hold on; +%! plot (1:4, '-s'); +%! imagesc (1 ./ hilb (4)); +%! hold off; %!demo -%! clf -%! colormap (jet) +%! clf; +%! colormap ('default'); %! t = linspace (-3, 3, 50); %! [x, y] = meshgrid (t, t); %! z = peaks (x, y); %! contourf (x, y, z, 10); -%! hold ("on"); -%! plot (vec (x), vec (y), "^"); -%! patch ([-1.0 1.0 1.0 -1.0 -1.0], [-1.0 -1.0 1.0 1.0 -1.0], "red"); +%! hold on; +%! plot (x(:), y(:), '^'); +%! patch ([-1.0 1.0 1.0 -1.0 -1.0], [-1.0 -1.0 1.0 1.0 -1.0], 'red'); %! xlim ([-2.0 2.0]); %! ylim ([-2.0 2.0]); -%! colorbar ("SouthOutside"); -%! title ("Test script for some plot functions"); +%! colorbar ('SouthOutside'); +%! title ('Test script for some plot functions'); ##hold on %!test %! hf = figure ("visible", "off"); %! unwind_protect %! p = plot ([0 1]); -%! assert (!ishold); +%! assert (! ishold); %! hold on; %! assert (ishold); %! p1 = fill ([0 1 1], [0 0 1],"black"); @@ -160,14 +164,15 @@ %! hf = figure ("visible", "off"); %! unwind_protect %! p = plot ([0 1]); -%! assert (!ishold); +%! assert (! ishold); %! hold on; %! assert (ishold); %! p1 = fill ([0 1 1], [0 0 1],"black"); -%! hold off +%! hold off; %! p2 = fill ([0 1 0], [0 1 1], "red"); %! assert (length (get (hf, "children")), 1); %! assert (length (get (gca, "children")), 1); %! unwind_protect_cleanup %! close (hf); %! end_unwind_protect +
--- a/scripts/plot/isosurface.m +++ b/scripts/plot/isosurface.m @@ -190,10 +190,16 @@ endfunction +%!demo +%! clf; +%! [x,y,z] = meshgrid (-2:0.5:2, -2:0.5:2, -2:0.5:2); +%! v = x.^2 + y.^2 + z.^2; +%! isosurface (x, y, z, v, 1); + %!shared x, y, z, val -%! [x, y, z] = meshgrid (0:1, 0:1, 0:1); ## Points for single -%! val = [0, 0; 0, 0]; ## cube and a 3--dim -%! val(:,:,2) = [0, 0; 1, 0]; ## array of values +%! [x, y, z] = meshgrid (0:1, 0:1, 0:1); %% Points for single +%! val = [0, 0; 0, 0]; %% cube and a 3-D +%! val(:,:,2) = [0, 0; 1, 0]; %% array of values %!test %! fv = isosurface (x, y, z, val, 0.3); %! assert (isfield (fv, "vertices"), true); @@ -218,8 +224,3 @@ %! assert (size (v), [3 3]); %! assert (size (c), [3 1]); -%!demo -%! clf -%! [x,y,z] = meshgrid(-2:0.5:2, -2:0.5:2, -2:0.5:2); -%! v = x.^2 + y.^2 + z.^2; -%! isosurface (x, y, z, v, 1)
--- a/scripts/plot/legend.m +++ b/scripts/plot/legend.m @@ -147,7 +147,7 @@ if (isscalar (kids)) kids = get(kids, "children")(:); else - kids = [get(kids, "children"){:}](:); + kids = flipud ([get(kids, "children"){:}](:)); endif endif nargs = numel (varargin); @@ -195,7 +195,7 @@ ## Validate the position type is valid outside = false; - inout = findstr (position, "outside"); + inout = strfind (position, "outside"); if (! isempty (inout)) outside = true; position = position(1:inout-1); @@ -442,7 +442,7 @@ endif if (strcmp (position, "default")) position = get (hlegend, "location"); - inout = findstr (position, "outside"); + inout = strfind (position, "outside"); if (! isempty (inout)) outside = true; position = position(1:inout-1); @@ -972,190 +972,216 @@ endif endfunction + %!demo -%! clf +%! clf; %! x = 0:1; -%! plot (x, x, ";I am Blue;", x, 2*x, ";I am Green;", x, 3*x, ";I am Red;") +%! plot (x,x,';I am Blue;', x,2*x,';I am Green;', x,3*x,';I am Red;'); %!demo -%! clf +%! clf; %! x = 0:1; -%! plot (x, x, ";I am Blue;", x, 2*x, x, 3*x, ";I am Red;") -%! title ("Blue and Green keys, with Green mising") +%! plot (x, x, ';\alpha;', ... +%! x, 2*x, ';\beta=2\alpha;', ... +%! x, 3*x, ';\gamma=3\alpha;'); %!demo -%! clf -%! plot(1:10, 1:10, 1:10, fliplr(1:10)); -%! title("incline is blue and decline is green"); -%! legend({"I am blue", "I am green"}, "location", "east"); -%! legend({"I am blue", "I am green"}, "location", "east"); -%! legend hide -%! legend show +%! clf; +%! x = 0:1; +%! plot (x,x,';I am Blue;', x,2*x, x,3*x,';I am Red;'); +%! title ('Blue and Green keys, with Green missing'); + +%!demo +%! clf; +%! plot (1:10, 1:10, 1:10, fliplr (1:10)); +%! title ('incline is blue and decline is green'); +%! legend ({'I am blue', 'I am green'}, 'location', 'east'); %!demo -%! clf -%! plot(1:10, 1:10, 1:10, fliplr(1:10)); -%! title("Legend is hidden") -%! legend({"I am blue", "I am green"}, "location", "east"); -%! legend hide +%! clf; +%! plot (1:10, 1:10, 1:10, fliplr (1:10)); +%! title ('Legend is hidden') +%! legend ({'I am blue', 'I am green'}, 'location', 'east'); +%! legend hide; %!demo -%! clf -%! plot(1:10, 1:10, 1:10, fliplr(1:10)); -%! title("Legend with box on") -%! legend({"I am blue", "I am green"}, "location", "east"); -%! legend boxon +%! clf; +%! plot (1:10, 1:10, 1:10, fliplr (1:10)); +%! title ('Legend with box on'); +%! legend ({'I am blue', 'I am green'}, 'location', 'east'); +%! legend boxon; %!demo -%! clf -%! plot(1:10, 1:10, 1:10, fliplr(1:10)); -%! title("Legend with text to the right") -%! legend({"I am blue", "I am green"}, "location", "east"); -%! legend right +%! clf; +%! plot (1:10, 1:10, 1:10, fliplr (1:10)); +%! title ('Legend with text to the right'); +%! legend ({'I am blue', 'I am green'}, 'location', 'east'); +%! legend right; %!demo -%! clf -%! plot(1:10, 1:10); -%! title("a very long label can sometimes cause problems"); -%! legend({"hello world"}, "location", "northeastoutside"); +%! clf; +%! plot (1:10, 1:10); +%! title ('a very long label can sometimes cause problems'); +%! legend ({'hello world'}, 'location', 'northeastoutside'); %!demo -%! clf -%! plot(1:10, 1:10); -%! title("a very long label can sometimes cause problems"); -%! legend("hello world", "location", "northeastoutside"); +%! clf; +%! plot (1:10, 1:10); +%! title ('a very long label can sometimes cause problems'); +%! legend ('hello world', 'location', 'northeastoutside'); %!demo -%! clf +%! clf; %! labels = {}; -%! colororder = get (gca, "colororder"); +%! colororder = get (gca, 'colororder'); %! for i = 1:5 -%! h = plot(1:100, i + rand(100,1)); hold on; -%! set (h, "color", colororder(i,:)) -%! labels = {labels{:}, cstrcat("Signal ", num2str(i))}; -%! endfor +%! h = plot (1:100, i + rand(100,1)); hold on; +%! set (h, 'color', colororder(i,:)); +%! labels = {labels{:}, ['Signal ', num2str(i)]}; +%! end %! hold off; -%! title("Signals with random offset and uniform noise") -%! xlabel("Sample Nr [k]"); ylabel("Amplitude [V]"); -%! legend(labels, "location", "southoutside"); -%! legend("boxon"); +%! title ('Signals with random offset and uniform noise'); +%! xlabel ('Sample Nr [k]'); ylabel ('Amplitude [V]'); +%! legend (labels, 'location', 'southoutside'); +%! legend ('boxon'); %!demo -%! clf +%! clf; %! labels = {}; -%! colororder = get (gca, "colororder"); +%! colororder = get (gca, 'colororder'); %! for i = 1:5 -%! h = plot(1:100, i + rand(100,1)); hold on; -%! set (h, "color", colororder(i,:)) -%! labels = {labels{:}, cstrcat("Signal ", num2str(i))}; -%! endfor +%! h = plot (1:100, i + rand (100,1)); hold on; +%! set (h, 'color', colororder(i,:)); +%! labels = {labels{:}, ['Signal ', num2str(i)]}; +%! end %! hold off; -%! title("Signals with random offset and uniform noise") -%! xlabel("Sample Nr [k]"); ylabel("Amplitude [V]"); -%! legend(labels{:}, "location", "southoutside") -%! legend("boxon") +%! title ('Signals with random offset and uniform noise'); +%! xlabel ('Sample Nr [k]'); ylabel ('Amplitude [V]'); +%! legend (labels{:}, 'location', 'southoutside'); +%! legend ('boxon'); %!demo -%! clf +%! clf; %! x = linspace (0, 10); %! plot (x, x); -%! hold ("on"); -%! stem (x, x.^2, 'g') -%! legend ("linear"); -%! hold ("off"); +%! hold on; +%! stem (x, x.^2, 'g'); +%! legend ('linear'); +%! hold off; %!demo -%! clf +%! clf; %! x = linspace (0, 10); %! plot (x, x, x, x.^2); -%! legend ("linear"); +%! legend ('linear'); %!demo -%! clf +%! clf; %! x = linspace (0, 10); %! plot (x, x, x, x.^2); -%! legend ("linear", "quadratic"); +%! legend ('linear', 'quadratic'); %!demo -%! clf +%! clf; %! rand_2x3_data1 = [0.341447, 0.171220, 0.284370; 0.039773, 0.731725, 0.779382]; %! bar (rand_2x3_data1); %! ylim ([0 1.0]); -%! legend ({"1st Bar", "2nd Bar", "3rd Bar"}); +%! legend ({'1st Bar', '2nd Bar', '3rd Bar'}); %!demo -%! clf +%! clf; %! rand_2x3_data2 = [0.44804, 0.84368, 0.23012; 0.72311, 0.58335, 0.90531]; %! bar (rand_2x3_data2); %! ylim ([0 1.2]); -%! legend ("1st Bar", "2nd Bar", "3rd Bar"); -%! legend right +%! legend ('1st Bar', '2nd Bar', '3rd Bar'); +%! legend right; %!demo -%! clf +%! clf; %! x = 0:0.1:7; -%! h = plot (x, sin(x), x, cos(x), x, sin(x.^2/10), x, cos(x.^2/10)); -%! title ("Only the sin() objects have keylabels"); -%! legend (h([1, 3]), {"sin(x)", "sin(x^2/10)"}, "location", "southwest"); +%! h = plot (x,sin(x), x,cos(x), x,sin(x.^2/10), x,cos(x.^2/10)); +%! title ('Only the sin() objects have keylabels'); +%! legend (h([1, 3]), {'sin(x)', 'sin(x^2/10)'}, 'location', 'southwest'); %!demo -%! clf +%! clf; %! x = 0:0.1:10; -%! plot (x, sin(x), ";sin(x);") -%! hold all -%! plot (x, cos(x), ";cos(x);") -%! hold off +%! plot (x, sin(x), ';sin(x);'); +%! hold all; +%! plot (x, cos(x), ';cos(x);'); +%! hold off; %!demo -%! clf +%! clf; %! x = 0:0.1:10; -%! plot (x, sin(x), ";sin(x);") -%! hold all -%! plot (x, cos(x), ";cos(x);") -%! hold off -%! legend ({"sin(x)", "cos(x)"}, "location", "northeastoutside") +%! plot (x, sin(x), ';sin(x);'); +%! hold all; +%! plot (x, cos(x), ';cos(x);'); +%! hold off; +%! legend ({'sin(x)', 'cos(x)'}, 'location', 'northeastoutside'); %!demo -%! clf +%! clf; %! x = 0:10; %! plot (x, rand (11)); -%! xlabel ("Indices") -%! ylabel ("Random Values") -%! title ("Legend ""off"" should delete the legend") -%! legend (cellstr (num2str ((1:10)')), "location", "northeastoutside") -%! legend off -%! axis ([0, 10, 0 1]) +%! xlabel ('Indices'); +%! ylabel ('Random Values'); +%! title ('Legend ''off'' should delete the legend'); +%! legend (cellstr (num2str ((1:10)')), 'location', 'northeastoutside'); +%! legend off; +%! axis ([0, 10, 0 1]); + +%!demo +%! clf; +%! x = (1:5)'; +%! subplot (2, 2, 1); +%! plot (x, rand (numel (x))); +%! legend (cellstr (num2str (x)), 'location', 'northwestoutside'); +%! legend boxon; +%! subplot (2, 2, 2); +%! plot (x, rand (numel (x))); +%! legend (cellstr (num2str (x)), 'location', 'northeastoutside'); +%! legend boxon; +%! subplot (2, 2, 3); +%! plot (x, rand (numel (x))); +%! legend (cellstr (num2str (x)), 'location', 'southwestoutside'); +%! legend boxon; +%! subplot (2, 2, 4); +%! plot (x, rand (numel (x))); +%! legend (cellstr (num2str (x)), 'location', 'southeastoutside'); +%! legend boxon; %!demo -%! clf -%! x = 1:5; -%! subplot (2, 2, 1) -%! plot (x, rand (numel (x))); -%! legend (cellstr (num2str (x')), "location", "northwestoutside") -%! legend boxon -%! subplot (2, 2, 2) -%! plot (x, rand (numel (x))); -%! legend (cellstr (num2str (x')), "location", "northeastoutside") -%! legend boxon -%! subplot (2, 2, 3); -%! plot (x, rand (numel (x))); -%! legend (cellstr (num2str (x')), "location", "southwestoutside") -%! legend boxon -%! subplot (2, 2, 4) -%! plot (x, rand (numel (x))); -%! legend (cellstr (num2str (x')), "location", "southeastoutside") -%! legend boxon +%! clf; +%! plot (rand (2)); +%! title ('Warn of extra labels'); +%! legend ('Hello', 'World', 'interpreter', 'foobar'); + +%!demo +%! clf; +%! plot (rand (2)); +%! title ('Turn off TeX interpreter'); +%! h = legend ('Hello_World', 'foo^bar'); +%! set (h, 'interpreter', 'none'); %!demo -%! clf -%! plot (rand (2)) -%! title ("Warn of extra labels") -%! legend ("Hello", "World", "interpreter", "foobar") +%! x = 0:10; +%! y1 = rand (size (x)); +%! y2 = rand (size (x)); +%! [ax, h1, h2] = plotyy (x, y1, x, y2); +%! legend ([h1, h2], {'Blue', 'Green'}, 'location', 'south'); %!demo -%! clf -%! plot (rand (2)) -%! title ("Turn off TeX interpreter") -%! h = legend ("Hello_World", "foo^bar"); -%! set (h, "interpreter", "none") +%! x = 0:10; +%! y1 = rand (size (x)); +%! y2 = rand (size (x)); +%! [ax, h1, h2] = plotyy (x, y1, x, y2); +%! legend ({'Blue', 'Green'}, 'location', 'south'); +%!demo +%! x = 0:10; +%! y1 = rand (size (x)); +%! y2 = rand (size (x)); +%! [ax, h1, h2] = plotyy (x, y1, x, y2); +%! legend ('Blue', 'Green', 'location', 'south'); +
--- a/scripts/plot/loglog.m +++ b/scripts/plot/loglog.m @@ -62,37 +62,38 @@ endfunction + %!demo -%! clf (); +%! clf; %! t = 1:0.01:10; %! x = sort ((t .* (1 + rand (size (t)))) .^ 2); %! y = ((t .* (1 + rand (size (t)))) .^ 2); %! loglog (x, y); %!demo -%! clf (); +%! clf; %! a = logspace (-5, 1, 10); %! b =-logspace (-5, 1, 10); %! -%! subplot (1, 2, 1) -%! loglog (a, b) -%! xlabel ('loglog (a, b)') +%! subplot (1,2,1); +%! loglog (a, b); +%! xlabel ('loglog (a, b)'); %! -%! subplot (1, 2, 2) -%! loglog (a, abs (b)) -%! set (gca, 'ydir', 'reverse') -%! xlabel ('loglog (a, abs (b))') +%! subplot (1,2,2); +%! loglog (a, abs (b)); +%! set (gca, 'ydir', 'reverse'); +%! xlabel ('loglog (a, abs (b))'); %!test %! hf = figure ("visible", "off"); %! unwind_protect %! a = logspace (-5, 1, 10); %! b = logspace (-5, 1, 10); -%! loglog (a, b) +%! loglog (a, b); %! assert (get (gca, "yscale"), "log"); %! assert (get (gca, "xscale"), "log"); %! unwind_protect_cleanup -%! close (hf); +%! close (hf); %! end_unwind_protect %!test @@ -100,10 +101,10 @@ %! unwind_protect %! a = logspace (-5, 1, 10); %! b =-logspace (-5, 1, 10); -%! loglog (a, b) -%! axis tight +%! loglog (a, b); +%! axis tight; %! assert (all (get (gca, "ytick") < 0)); %! unwind_protect_cleanup -%! close (hf); +%! close (hf); %! end_unwind_protect
--- a/scripts/plot/loglogerr.m +++ b/scripts/plot/loglogerr.m @@ -60,12 +60,13 @@ endfunction + %!demo -%! clf +%! clf; %! x = exp (log(0.01):0.2:log(10)); %! y = wblpdf (x, 3, 2); %! eyu = 2*rand (size (y)) .* y; %! eyl = 0.5*rand (size (y)) .* y; -%! loglogerr (x, y, eyl, eyu, "#~x-") -%! xlim (x([1, end])) +%! loglogerr (x, y, eyl, eyu, '#~x-'); +%! xlim (x([1, end]));
--- a/scripts/plot/module.mk +++ b/scripts/plot/module.mk @@ -166,7 +166,6 @@ plot/sombrero.m \ plot/specular.m \ plot/sphere.m \ - plot/spinmap.m \ plot/stairs.m \ plot/stem.m \ plot/stem3.m \
--- a/scripts/plot/pareto.m +++ b/scripts/plot/pareto.m @@ -105,16 +105,16 @@ %!demo -%! clf +%! clf; %! colormap (jet (64)); -%! Cheese = {"Cheddar", "Swiss", "Camembert", "Munster", "Stilton", "Blue"}; +%! Cheese = {'Cheddar', 'Swiss', 'Camembert', 'Munster', 'Stilton', 'Blue'}; %! Sold = [105, 30, 70, 10, 15, 20]; %! pareto (Sold, Cheese); %!demo -%! clf -%! % Suppose that we want establish which products makes 80 % of turnover. -%! Codes = {"AB4","BD7","CF8","CC5","AD11","BB5","BB3","AD8","DF3","DE7"}; +%! clf; +%! % Suppose that we want establish which products makes 80% of turnover. +%! Codes = {'AB4','BD7','CF8','CC5','AD11','BB5','BB3','AD8','DF3','DE7'}; %! Value = [2.35 7.9 2.45 1.1 0.15 13.45 5.4 2.05 0.85 1.65]'; %! SoldUnits = [54723 41114 16939 1576091 168000 687197 120222 168195, ... %! 1084118 55576]';
--- a/scripts/plot/patch.m +++ b/scripts/plot/patch.m @@ -59,69 +59,70 @@ endfunction + %!demo -%! ## Patches with same number of vertices -%! clf -%! t1 = (1/16:1/8:1)'*2*pi; -%! t2 = ((1/16:1/8:1)' + 1/32)*2*pi; +%! %% Patches with same number of vertices +%! clf; +%! t1 = (1/16:1/8:1)' * 2*pi; +%! t2 = ((1/16:1/8:1)' + 1/32) * 2*pi; %! x1 = sin (t1) - 0.8; %! y1 = cos (t1); %! x2 = sin (t2) + 0.8; %! y2 = cos (t2); -%! patch([x1,x2],[y1,y2],'r'); +%! patch ([x1,x2], [y1,y2], 'r'); %!demo -%! ## Unclosed patch -%! clf -%! t1 = (1/16:1/8:1)'*2*pi; -%! t2 = ((1/16:1/16:1)' + 1/32)*2*pi; +%! %% Unclosed patch +%! clf; +%! t1 = (1/16:1/8:1)' * 2*pi; +%! t2 = ((1/16:1/16:1)' + 1/32) * 2*pi; %! x1 = sin (t1) - 0.8; %! y1 = cos (t1); %! x2 = sin (t2) + 0.8; %! y2 = cos (t2); -%! patch([[x1;NaN(8,1)],x2],[[y1;NaN(8,1)],y2],'r'); +%! patch ([[x1;NaN(8,1)],x2], [[y1;NaN(8,1)],y2], 'r'); %!demo -%! ## Specify vertices and faces separately -%! clf -%! t1 = (1/16:1/8:1)'*2*pi; -%! t2 = ((1/16:1/16:1)' + 1/32)*2*pi; +%! %% Specify vertices and faces separately +%! clf; +%! t1 = (1/16:1/8:1)' * 2*pi; +%! t2 = ((1/16:1/16:1)' + 1/32) * 2*pi; %! x1 = sin (t1) - 0.8; %! y1 = cos (t1); %! x2 = sin (t2) + 0.8; %! y2 = cos (t2); %! vert = [x1, y1; x2, y2]; %! fac = [1:8,NaN(1,8);9:24]; -%! patch('Faces',fac,'Vertices',vert,'FaceColor','r'); +%! patch ('Faces',fac, 'Vertices',vert, 'FaceColor','r'); %!demo -%! ## Specify vertices and faces separately -%! clf -%! t1 = (1/16:1/8:1)'*2*pi; -%! t2 = ((1/16:1/16:1)' + 1/32)*2*pi; +%! %% Specify vertices and faces separately +%! clf; +%! t1 = (1/16:1/8:1)' * 2*pi; +%! t2 = ((1/16:1/16:1)' + 1/32) * 2*pi; %! x1 = sin (t1) - 0.8; %! y1 = cos (t1); %! x2 = sin (t2) + 0.8; %! y2 = cos (t2); %! vert = [x1, y1; x2, y2]; %! fac = [1:8,NaN(1,8);9:24]; -%! patch('Faces',fac,'Vertices',vert,'FaceVertexCData', [0, 1, 0; 0, 0, 1]); +%! patch ('Faces',fac, 'Vertices',vert, 'FaceVertexCData', [0, 1, 0; 0, 0, 1]); %!demo -%! ## Property change on multiple patches -%! clf -%! t1 = (1/16:1/8:1)'*2*pi; -%! t2 = ((1/16:1/8:1)' + 1/32)*2*pi; +%! %% Property change on multiple patches +%! clf; +%! t1 = (1/16:1/8:1)' * 2*pi; +%! t2 = ((1/16:1/8:1)' + 1/32) * 2*pi; %! x1 = sin (t1) - 0.8; %! y1 = cos (t1); %! x2 = sin (t2) + 0.8; %! y2 = cos (t2); -%! h = patch([x1,x2],[y1,y2],cat (3,[0,0],[1,0],[0,1])); +%! h = patch ([x1,x2], [y1,y2], cat (3,[0,0],[1,0],[0,1])); %! pause (1); %! set (h, 'FaceColor', 'r'); %!demo -%! clf +%! clf; %! vertices = [0, 0, 0; %! 1, 0, 0; %! 1, 1, 0; @@ -132,11 +133,11 @@ %! 3, 4, 5; %! 4, 1, 5]; %! patch ('Vertices', vertices, 'Faces', faces, ... -%! 'FaceVertexCData', jet(4), 'FaceColor', 'flat'); +%! 'FaceVertexCData', jet (4), 'FaceColor', 'flat'); %! view (-37.5, 30); %!demo -%! clf +%! clf; %! vertices = [0, 0, 0; %! 1, 0, 0; %! 1, 1, 0; @@ -146,64 +147,64 @@ %! 2, 3, 5; %! 3, 4, 5; %! 4, 1, 5]; -%! patch ('Vertices', vertices, 'Faces', faces, ... -%! 'FaceVertexCData', jet(5), 'FaceColor', 'interp'); +%! patch ('Vertices', vertices, 'Faces', faces, ... +%! 'FaceVertexCData', jet (5), 'FaceColor', 'interp'); %! view (-37.5, 30); %!demo -%! clf -%! colormap (jet); +%! clf; +%! colormap (jet (64)); %! x = [0 1 1 0]; %! y = [0 0 1 1]; %! subplot (2, 1, 1); -%! title ("Blue, Light-Green, and Red Horizontal Bars"); -%! patch (x, y + 0, 1); -%! patch (x, y + 1, 2); -%! patch (x, y + 2, 3); +%! title ('Blue, Light-Green, and Red Horizontal Bars'); +%! patch (x, y + 0, 1); +%! patch (x, y + 1, 2); +%! patch (x, y + 2, 3); %! subplot (2, 1, 2); -%! title ("Blue, Light-Green, and Red Vertical Bars"); -%! patch (x + 0, y, 1 * ones (size (x))); -%! patch (x + 1, y, 2 * ones (size (x))); -%! patch (x + 2, y, 3 * ones (size (x))); +%! title ('Blue, Light-Green, and Red Vertical Bars'); +%! patch (x + 0, y, 1 * ones (size (x))); +%! patch (x + 1, y, 2 * ones (size (x))); +%! patch (x + 2, y, 3 * ones (size (x))); %!demo -%! clf -%! colormap (jet); +%! clf; +%! colormap (jet (64)); %! x = [0 1 1 0]; %! y = [0 0 1 1]; %! subplot (2, 1, 1); -%! title ("Blue horizontal bars: Dark to Light"); -%! patch (x, y + 0, 1, "cdatamapping", "direct"); -%! patch (x, y + 1, 9, "cdatamapping", "direct"); -%! patch (x, y + 2, 17, "cdatamapping", "direct"); +%! title ('Blue horizontal bars: Dark to Light'); +%! patch (x, y + 0, 1, 'cdatamapping', 'direct'); +%! patch (x, y + 1, 9, 'cdatamapping', 'direct'); +%! patch (x, y + 2, 17, 'cdatamapping', 'direct'); %! subplot (2, 1, 2); -%! title ("Blue vertical bars: Dark to Light") -%! patch (x + 0, y, 1 * ones (size (x)), "cdatamapping", "direct"); -%! patch (x + 1, y, 9 * ones (size (x)), "cdatamapping", "direct"); -%! patch (x + 2, y, 17 * ones (size (x)), "cdatamapping", "direct"); +%! title ('Blue vertical bars: Dark to Light'); +%! patch (x + 0, y, 1 * ones (size (x)), 'cdatamapping', 'direct'); +%! patch (x + 1, y, 9 * ones (size (x)), 'cdatamapping', 'direct'); +%! patch (x + 2, y, 17 * ones (size (x)), 'cdatamapping', 'direct'); %!demo %! clf; -%! colormap (jet); +%! colormap (jet (64)); %! x = [ 0 0; 1 1; 1 0 ]; %! y = [ 0 0; 0 1; 1 1 ]; -%! p = patch (x, y, "facecolor", "b"); -%! title ("Two blue triangles"); -%! set (p, "cdatamapping", "direct", "facecolor", "flat", "cdata", [1 32]); -%! title ("Direct mapping of colors: Light-Green UL and Blue LR triangles"); +%! p = patch (x, y, 'facecolor', 'b'); +%! title ('Two blue triangles'); +%! set (p, 'cdatamapping', 'direct', 'facecolor', 'flat', 'cdata', [1 32]); +%! title ('Direct mapping of colors: Light-Green UL and Blue LR triangles'); %!demo %! clf; -%! colormap (jet); +%! colormap (jet (64)); %! x = [ 0 0; 1 1; 1 0 ]; %! y = [ 0 0; 0 1; 1 1 ]; %! p = patch (x, y, [1 32]); -%! title ("Autoscaling of colors: Red UL and Blue LR triangles"); +%! title ('Autoscaling of colors: Red UL and Blue LR triangles'); %!test %! hf = figure ("visible", "off"); %! unwind_protect -%! h = patch; +%! h = patch (); %! assert (findobj (hf, "type", "patch"), h); %! assert (get (h, "xdata"), [0; 1; 0], eps); %! assert (get (h, "ydata"), [1; 1; 0], eps);
--- a/scripts/plot/pbaspect.m +++ b/scripts/plot/pbaspect.m @@ -89,25 +89,26 @@ endfunction + %!demo +%! clf; %! x = 0:0.01:4; -%! clf -%! plot (x, cos (x), x, sin (x)) -%! pbaspect ([1 1 1]) -%! title ("plot box should be square") +%! plot (x,cos(x), x,sin(x)); +%! pbaspect ([1 1 1]); +%! title ('plot box is square'); %!demo -%! x = 0:0.01:4; -%! clf -%! plot (x, cos (x), x, sin (x)) -%! pbaspect ([2 1 1]) -%! title ("plot box aspect ratio should be 2x1") +%! clf; +%! x = 0:0.01:4;; +%! plot (x,cos(x), x,sin(x)); +%! pbaspect ([2 1 1]); +%! title ('plot box aspect ratio is 2x1'); %!demo +%! clf; %! x = 0:0.01:4; -%! clf -%! plot (x, cos (x), x, sin (x)) -%! daspect ([1 1 1]) -%! pbaspect ([2 1 1]) -%! title ("plot box should be 2x1, and axes [0 4 -1 1]") +%! plot (x,cos(x), x,sin(x)); +%! daspect ([1 1 1]); +%! pbaspect ([2 1 1]); +%! title ('plot box is 2x1, and axes [0 4 -1 1]');
--- a/scripts/plot/pcolor.m +++ b/scripts/plot/pcolor.m @@ -81,14 +81,18 @@ endfunction + %!demo -%! clf -%! [~,~,Z]=peaks; -%! pcolor(Z); +%! clf; +%! colormap ('default'); +%! [~,~,Z] = peaks (); +%! pcolor (Z); %!demo -%! clf -%! [X,Y,Z]=sombrero; -%! [Fx,Fy] = gradient(Z); -%! pcolor(X,Y,Fx+Fy); +%! clf; +%! colormap ('default'); +%! [X,Y,Z] = sombrero (); +%! [Fx,Fy] = gradient (Z); +%! pcolor (X,Y,Fx+Fy); %! shading interp; +
--- a/scripts/plot/pie.m +++ b/scripts/plot/pie.m @@ -68,20 +68,20 @@ %!demo -%! clf +%! clf; %! pie ([3, 2, 1], [0, 0, 1]); %! colormap ([1,0,0;0,1,0;0,0,1;1,1,0;1,0,1;0,1,1]); %!demo -%! clf -%! pie ([3, 2, 1], [0, 0, 1], {"Cheddar", "Swiss", "Camembert"}); +%! clf; +%! pie ([3, 2, 1], [0, 0, 1], {'Cheddar', 'Swiss', 'Camembert'}); %! colormap ([1,0,0;0,1,0;0,0,1;1,1,0;1,0,1;0,1,1]); %! axis ([-2,2,-2,2]); %!demo -%! clf -%! pie ([0.17, 0.34, 0.41], {"Cheddar", "Swiss", "Camembert"}); +%! clf; +%! pie ([0.17, 0.34, 0.41], {'Cheddar', 'Swiss', 'Camembert'}); %! colormap ([1,0,0;0,1,0;0,0,1;1,1,0;1,0,1;0,1,1]); %! axis ([-2,2,-2,2]); -%! title ("missing slice"); +%! title ('missing slice');
--- a/scripts/plot/pie3.m +++ b/scripts/plot/pie3.m @@ -69,20 +69,20 @@ %!demo -%! clf +%! clf; %! pie3 ([5:-1:1], [0, 0, 1, 0, 0]); %! colormap ([1,0,0;0,1,0;0,0,1;1,1,0;1,0,1;0,1,1]); %!demo -%! clf -%! pie3 ([3, 2, 1], [0, 0, 1], {"Cheddar", "Swiss", "Camembert"}); +%! clf; +%! pie3 ([3, 2, 1], [0, 0, 1], {'Cheddar', 'Swiss', 'Camembert'}); %! colormap ([1,0,0;0,1,0;0,0,1;1,1,0;1,0,1;0,1,1]); %! axis ([-2,2,-2,2]); %!demo -%! clf -%! pie3 ([0.17, 0.34, 0.41], {"Cheddar", "Swiss", "Camembert"}); +%! clf; +%! pie3 ([0.17, 0.34, 0.41], {'Cheddar', 'Swiss', 'Camembert'}); %! colormap ([1,0,0;0,1,0;0,0,1;1,1,0;1,0,1;0,1,1]); %! axis ([-2,2,-2,2]); -%! title ("missing slice"); +%! title ('missing slice');
--- a/scripts/plot/plot3.m +++ b/scripts/plot/plot3.m @@ -338,8 +338,10 @@ endfunction + %!demo -%! clf +%! clf; %! z = [0:0.05:5]; -%! plot3 (cos(2*pi*z), sin(2*pi*z), z, ";helix;"); -%! plot3 (z, exp(2i*pi*z), ";complex sinusoid;"); +%! plot3 (cos(2*pi*z), sin(2*pi*z), z, ';helix;'); +%! plot3 (z, exp(2i*pi*z), ';complex sinusoid;'); +
--- a/scripts/plot/plotmatrix.m +++ b/scripts/plot/plotmatrix.m @@ -96,8 +96,8 @@ endfunction %!demo -%! clf -%! plotmatrix (randn (100, 3), 'g+') +%! clf; +%! plotmatrix (randn (100, 3), 'g+'); function plotmatrixdelete (h, d, ax) for i = 1 : numel (ax)
--- a/scripts/plot/plotyy.m +++ b/scripts/plot/plotyy.m @@ -226,43 +226,44 @@ endif endfunction + %!demo -%! clf +%! clf; %! 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"); -%! axes (ax(1)) -%! text (0.5, 0.5, "Left Axis", ... -%! "color", [0 0 1], "horizontalalignment", "center") -%! axes (ax(2)) -%! text (4.5, 80, "Right Axis", ... -%! "color", [0 0.5 0], "horizontalalignment", "center") +%! ax = plotyy (x,y1, x-1,y2, @plot, @semilogy); +%! xlabel ('X'); +%! ylabel (ax(1), 'Axis 1'); +%! ylabel (ax(2), 'Axis 2'); +%! axes (ax(1)); +%! text (0.5, 0.5, 'Left Axis', ... +%! 'color', [0 0 1], 'horizontalalignment', 'center'); +%! axes (ax(2)); +%! text (4.5, 80, 'Right Axis', ... +%! 'color', [0 0.5 0], 'horizontalalignment', 'center'); %!demo -%! clf +%! clf; +%! colormap ('default'); %! x = linspace (-1, 1, 201); -%! subplot (2, 2, 1) -%! plotyy (x, sin(pi*x), x, 10*cos(pi*x)) -%! subplot (2, 2, 2) -%! surf (peaks (25)) -%! subplot (2, 2, 3) -%! contour (peaks (25)) -%! subplot (2, 2, 4) -%! plotyy (x, 10*sin(2*pi*x), x, cos(2*pi*x)) -%! axis square +%! subplot (2,2,1); +%! plotyy (x,sin(pi*x), x,10*cos(pi*x)); +%! subplot (2,2,2); +%! surf (peaks (25)); +%! subplot (2,2,3); +%! contour (peaks (25)); +%! subplot (2,2,4); +%! plotyy (x,10*sin(2*pi*x), x,cos(2*pi*x)); +%! axis square; %!demo -%! clf +%! clf; %! x = linspace (-1, 1, 201); -%! subplot (1, 1, 1); %! hax = plotyy (x, sin(pi*x), x, cos(pi*x)); -%! ylabel ("Blue and on the Left") -%! ylabel (hax(2), "Green and on the Right") -%! xlabel ("xlabel") +%! ylabel ('Blue on the Left'); +%! ylabel (hax(2), 'Green on the Right'); +%! xlabel ('xlabel'); function deleteplotyy (h, d, ax2, t2) if (ishandle (ax2) && strcmp (get (ax2, "type"), "axes")
--- a/scripts/plot/polar.m +++ b/scripts/plot/polar.m @@ -217,14 +217,14 @@ %!demo -%! clf -%! theta = linspace (0, 2*pi, 1000); +%! clf; +%! theta = linspace (0,2*pi,1000); %! rho = sin (7*theta); %! polar (theta, rho); %!demo -%! clf -%! theta = linspace (0, 10*pi, 1000); +%! clf; +%! theta = linspace (0,10*pi,1000); %! rho = sin (5/4*theta); %! polar (theta, rho);
--- a/scripts/plot/print.m +++ b/scripts/plot/print.m @@ -370,6 +370,10 @@ else fontsize = opts.fontsize; endif + if (! isempty (opts.scalefontsize) && ! opt.scalefontsize != 1) + ## This is done to work around the bbox being whole numbers. + fontsize = fontsize * opts.scalefontsize; + endif set (h(ishandle(h)), "fontsize", fontsize); endif endif
--- a/scripts/plot/private/__ezplot__.m +++ b/scripts/plot/private/__ezplot__.m @@ -117,10 +117,10 @@ endif elseif (isa (fun, "function_handle")) fstr = func2str (fun); - if (length (findstr (fstr, ")")) != 0) - args = regexp (substr (fstr, 3, findstr (fstr, ")")(1) - 3), + if (! isempty (strfind (fstr, ')'))) + args = regexp (substr (fstr, 3, strfind (fstr, ')')(1) - 3), '(\w+)', 'tokens'); - fstr = substr (fstr, findstr (fstr, ")")(1) + 1); + fstr = substr (fstr, strfind (fstr, ')')(1) + 1); else args = {{"x"}}; endif @@ -175,10 +175,10 @@ elseif (isa (funy, "function_handle")) parametric = true; fstry = func2str (funy); - if (length (findstr (fstry, ")")) != 0) - args = regexp (substr (fstry, 3, findstr (fstry, ")")(1) - 3), + if (! isempty (strfind (fstry, ')'))) + args = regexp (substr (fstry, 3, strfind (fstry, ')')(1) - 3), '(\w+)', 'tokens'); - fstry = substr (fstry, findstr (fstry, ")")(1) + 1); + fstry = substr (fstry, strfind (fstry, ')')(1) + 1); else args = {{"y"}}; endif @@ -216,12 +216,12 @@ fstrz = formula (funz); elseif (isa (funz, "function_handle")) fstrz = func2str (funz); - args = regexp (substr (fstrz, 3, findstr (fstrz, ")")(1) - 3), + args = regexp (substr (fstrz, 3, strfind (fstrz, ')')(1) - 3), '(\w+)', 'tokens'); if (length (args) != nargs) error ("%s: excepting a function of %d arguments", func, nargs); endif - fstrz = substr (fstrz, findstr (fstrz, ")")(1) + 1); + fstrz = substr (fstrz, strfind (fstrz, ')')(1) + 1); else error ("%s: parametric plots expect 3 functions", func); endif
--- a/scripts/plot/private/__go_draw_axes__.m +++ b/scripts/plot/private/__go_draw_axes__.m @@ -453,7 +453,7 @@ endif kids = kids(1:(end-1)); - if (strcmpi (obj.visible, "off")) + if (strcmp (obj.visible, "off")) continue; endif @@ -1544,7 +1544,7 @@ keypos = hlgnd.location; if (ischar (keypos)) keypos = lower (keypos); - keyout = findstr (keypos, "outside"); + keyout = strfind (keypos, "outside"); if (! isempty (keyout)) inout = "outside"; keypos = keypos(1:keyout-1); @@ -2206,7 +2206,6 @@ endif if (ischar (ticklabel)) if (size (ticklabel, 1) == 1 && any (ticklabel == "|")) - n = setdiff (findstr (ticklabel, "|"), findstr (ticklabel, '\|')); ticklabel = strsplit (ticklabel, "|"); else ticklabel = cellstr (ticklabel);
--- a/scripts/plot/private/__pltopt__.m +++ b/scripts/plot/private/__pltopt__.m @@ -206,7 +206,7 @@ elseif (topt == ";") t = index (opt(2:end), ";"); if (t) - options.key = undo_string_escapes (opt(2:t)); + options.key = opt(2:t); n = t+1; else if (err_on_invalid)
--- a/scripts/plot/private/__print_parse_opts__.m +++ b/scripts/plot/private/__print_parse_opts__.m @@ -36,6 +36,7 @@ arg_st.fig2dev_binary = __quote_path__ (__find_binary__ ("fig2dev")); arg_st.fontsize = ""; arg_st.font = ""; + arg_st.scalefontsize = 1; arg_st.force_solid = 0; # 0=default, -1=dashed, +1=solid arg_st.formatted_for_printing = false; arg_st.ghostscript.binary = __quote_path__ (__ghostscript_binary__ ()); @@ -326,8 +327,12 @@ arg_st.ghostscript.pageoffset = paperposition(1:2); endif else - ## Convert canvas size to points from pixles. - arg_st.canvas_size = arg_st.canvas_size * 72 / arg_st.ghostscript.resolution; + ## Convert canvas size to points from pixels. + if (! isempty (arg_st.fontsize)) + ## Work around the eps bbox having whole numbers (both gnuplot & gl2ps). + arg_st.scalefontsize = arg_st.ghostscript.resolution / 72; + endif + arg_st.ghostscript.resolution = 72; arg_st.ghostscript.papersize = arg_st.canvas_size; arg_st.ghostscript.epscrop = true; arg_st.ghostscript.pageoffset = [0, 0];
--- a/scripts/plot/quiver.m +++ b/scripts/plot/quiver.m @@ -83,17 +83,17 @@ %!demo -%! clf +%! clf; %! [x,y] = meshgrid (1:2:20); %! h = quiver (x,y, sin (2*pi*x/10), sin (2*pi*y/10)); -%! set (h, "maxheadsize", 0.33); +%! set (h, 'maxheadsize', 0.33); %!demo -%! clf -%! axis ("equal"); -%! x = linspace (0,3,80); +%! clf; +%! axis ('equal'); +%! x = linspace (0, 3, 80); %! y = sin (2*pi*x); %! theta = 2*pi*x + pi/2; %! quiver (x, y, sin (theta)/10, cos (theta)/10); -%! hold on; plot(x,y,"r"); hold off; +%! hold on; plot (x,y,'r'); hold off;
--- a/scripts/plot/quiver3.m +++ b/scripts/plot/quiver3.m @@ -84,35 +84,38 @@ endfunction + %!demo -%! clf -%! colormap (jet (64)); +%! clf; +%! colormap ('default'); %! [x,y] = meshgrid (-1:0.1:1); -%! z = sin (2*pi * sqrt (x.^2+y.^2)); -%! theta = 2*pi * sqrt (x.^2+y.^2) + pi/2; +%! z = sin (2*pi * sqrt (x.^2 + y.^2)); +%! theta = 2*pi * sqrt (x.^2 + y.^2) + pi/2; %! quiver3 (x, y, z, sin (theta), cos (theta), ones (size (z))); %! hold on; %! mesh (x,y,z); %! hold off; %!demo -%! clf +%! clf; +%! colormap ('default'); %! [x, y, z] = peaks (25); %! surf (x, y, z); %! hold on; %! [u, v, w] = surfnorm (x, y, z / 10); %! h = quiver3 (x, y, z, u, v, w); -%! set (h, "maxheadsize", 0.33); +%! set (h, 'maxheadsize', 0.33); %! hold off; %!demo -%! clf +%! clf; +%! colormap ('default'); %! [x, y, z] = peaks (25); %! surf (x, y, z); %! hold on; %! [u, v, w] = surfnorm (x, y, z / 10); %! h = quiver3 (x, y, z, u, v, w); -%! set (h, "maxheadsize", 0.33); +%! set (h, 'maxheadsize', 0.33); %! hold off; -%! shading interp +%! shading interp;
--- a/scripts/plot/rectangle.m +++ b/scripts/plot/rectangle.m @@ -205,18 +205,18 @@ %!demo -%! clf -%! axis equal -%! rectangle ("Position", [0.05, 0.05, 0.9, 0.9], "Curvature", [0.5, 0.5]); +%! clf; +%! axis equal; +%! rectangle ('Position', [0.05, 0.05, 0.9, 0.9], 'Curvature', [0.5, 0.5]); %!demo -%! clf -%! axis equal -%! rectangle ("Position", [0.05, 0.05, 0.9, 0.4], "Curvature", 1.0); +%! clf; +%! axis equal; +%! rectangle ('Position', [0.05, 0.05, 0.9, 0.4], 'Curvature', 1.0); %!demo -%! clf -%! axis equal -%! h = rectangle ("Position", [0.05, 0.05, 0.9, 0.4], "Curvature", 1.0); -%! set (h, "FaceColor", [0, 1, 0]); +%! clf; +%! axis equal; +%! h = rectangle ('Position', [0.05, 0.05, 0.9, 0.4], 'Curvature', 1.0); +%! set (h, 'FaceColor', [0, 1, 0]);
--- a/scripts/plot/refresh.m +++ b/scripts/plot/refresh.m @@ -19,24 +19,25 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} refresh () ## @deftypefnx {Function File} {} refresh (@var{h}) -## Refresh a figure, forcing it to be redrawn. Called without an -## argument the current figure is redrawn, otherwise the figure pointed +## Refresh a figure, forcing it to be redrawn. When called without an +## argument the current figure is redrawn. Otherwise, the figure pointed ## to by @var{h} is redrawn. ## @seealso{drawnow} ## @end deftypefn function refresh (h) - if (nargin == 1) - if (!ishandle (h) || !strcmp (get (h, "type"), "figure")) - error ("refresh: expecting argument to be a valid figure handle"); + if (nargin > 1) + print_usage (); + elseif (nargin == 1) + if (! isfigure (h)) + error ("refresh: H must be a valid figure handle"); endif - elseif (nargin > 1) - print_usage (); else h = gcf (); endif - set(h,"__modified__", "on"); + set (h, "__modified__", "on"); drawnow (); + endfunction
--- a/scripts/plot/refreshdata.m +++ b/scripts/plot/refreshdata.m @@ -42,9 +42,9 @@ ## y = sin (x); ## plot (x, y, "ydatasource", "y"); ## for i = 1 : 100 -## pause(0.1) +## pause (0.1) ## y = sin (x + 0.1 * i); -## refreshdata(); +## refreshdata (); ## endfor ## @end group ## @end example @@ -103,15 +103,18 @@ endif endfor endfor + endfunction + %!demo -%! clf +%! clf; %! x = 0:0.1:10; %! y = sin (x); -%! plot (x, y, "ydatasource", "y"); +%! plot (x, y, 'ydatasource', 'y'); %! for i = 1 : 100 -%! pause(0.1) +%! pause (0.1); %! y = sin (x + 0.1 * i); -%! refreshdata(gcf(), "caller"); -%! endfor +%! refreshdata (gcf (), 'caller'); +%! end +
--- a/scripts/plot/ribbon.m +++ b/scripts/plot/ribbon.m @@ -31,9 +31,11 @@ ## Author: Kai Habel <kai.habel at gmx.de> -function h = ribbon (x, y, width) +function h = ribbon (x, y, width = 0.75) - newplot (); + if (nargin < 1 || nargin > 3) + print_usage (); + endif if (nargin == 1) y = x; @@ -42,54 +44,52 @@ endif [nr, nc] = size (y); x = repmat ((1:nr)', 1, nc); - width = 0.75; - elseif (nargin == 2) - width = 0.75; - elseif (nargin != 3) - print_usage (); endif if (isvector (x) && isvector (y)) if (length (x) != length (y)) - error ("ribbon: in case of vectors, X and Y must have same length"); + error ("ribbon: vectors X and Y must have the same length"); else [x, y] = meshgrid (x, y); endif else - if (! size_equal(x, y)) - error ("ribbon: in case of matrices, X and Y must have same size"); + if (! size_equal (x, y)) + error ("ribbon: matrices X and Y must have the same size"); endif endif + newplot (); + [nr, nc] = size (y); - tmp = zeros (1, nc); + htmp = zeros (nc, 1); for c = nc:-1:1 zz = [y(:,c), y(:,c)]; yy = x(:,c); xx = [c - width / 2, c + width / 2]; [xx, yy] = meshgrid (xx, yy); - cc = ones (size (zz)) * c; - tmp(c) = surface (xx, yy, zz, cc); + cc = repmat (c, size (zz)); + htmp(c) = surface (xx, yy, zz, cc); endfor - ax = get (tmp(c), "parent"); - if (! ishold ()) - set (ax, "view", [-37.5, 30], "box", "off", "xgrid", "on", - "ygrid", "on", "zgrid", "on"); + ax = get (htmp(1), "parent"); + set (ax, "view", [-37.5, 30], "box", "off", + "xgrid", "on", "ygrid", "on", "zgrid", "on"); endif if (nargout > 0) - h = tmp; + h = htmp; endif endfunction %!demo -%! clf +%! clf; +%! colormap ('default'); %! [x, y, z] = sombrero (); %! [x, y] = meshgrid (x, y); %! ribbon (y, z); +%!FIXME: Could have some input validation tests here
--- a/scripts/plot/rose.m +++ b/scripts/plot/rose.m @@ -106,6 +106,6 @@ %!demo -%! clf +%! clf; %! rose ([2*randn(1e5, 1), pi + 2*randn(1e5, 1)]);
--- a/scripts/plot/scatter.m +++ b/scripts/plot/scatter.m @@ -82,102 +82,107 @@ %!demo -%! clf +%! clf; %! x = randn (100, 1); %! y = randn (100, 1); -%! scatter (x, y, "r"); +%! scatter (x, y, 'r'); +%! title ('Scatter plot with red bubbles'); %!demo -%! clf +%! clf; %! x = randn (100, 1); %! y = randn (100, 1); %! scatter (x, y, [], sqrt (x.^2 + y.^2)); +%! title ('Scatter plot with bubble color determined by distance from origin'); %!demo -%! clf +%! clf; %! rand_10x1_data1 = [0.171577, 0.404796, 0.025469, 0.335309, 0.047814, 0.898480, 0.639599, 0.700247, 0.497798, 0.737940]; %! rand_10x1_data2 = [0.75495, 0.83991, 0.80850, 0.73603, 0.19360, 0.72573, 0.69371, 0.74388, 0.13837, 0.54143]; %! x = rand_10x1_data1; %! y = rand_10x1_data2; %! s = 10 - 10*log (x.^2 + y.^2); -%! h = scatter (x, y, s, s, "s", "filled"); +%! h = scatter (x, y, s, s, 's', 'filled'); +%! title ({'Scatter plot with filled square markers', ... +%! 'size and color of markers determined by algorithm'}); %!demo -%! clf +%! clf; %! rand_10x1_data3 = [0.42262, 0.51623, 0.65992, 0.14999, 0.68385, 0.55929, 0.52251, 0.92204, 0.19762, 0.93726]; %! rand_10x1_data4 = [0.020207, 0.527193, 0.443472, 0.061683, 0.370277, 0.947349, 0.249591, 0.666304, 0.134247, 0.920356]; %! x = rand_10x1_data3; %! y = rand_10x1_data4; %! s = 10 - 10*log (x.^2 + y.^2); -%! h = scatter (x, y, [], "r", "s", "filled"); +%! h = scatter (x, y, [], 'r', 's', 'filled'); %!demo -%! clf +%! clf; %! rand_10x1_data5 = [0.777753, 0.093848, 0.183162, 0.399499, 0.337997, 0.686724, 0.073906, 0.651808, 0.869273, 0.137949]; %! rand_10x1_data6 = [0.37460, 0.25027, 0.19510, 0.51182, 0.54704, 0.56087, 0.24853, 0.75443, 0.42712, 0.44273]; %! x = rand_10x1_data5; %! y = rand_10x1_data6; %! s = 10 - 10*log (x.^2 + y.^2); -%! h = scatter (x, y, [], "r", "s"); +%! h = scatter (x, y, [], 'r', 's'); %!demo +%! clf; %! k = 1; -%! clf %! for m = [1, 3] %! for n = [101, 50, 1] %! x = rand (n, 1); %! y = rand (n, 1); %! if (m > 1) -%! str = "Three Colors"; +%! str = 'Three Colors'; %! idx = ceil (rand (n, 1) * 3); -%! colors = eye(3); +%! colors = eye (3); %! colors = colors(idx, :); %! else -%! str = "Random Colors"; +%! str = 'Random Colors'; %! colors = rand (n, m); -%! endif +%! end %! if (n == 1) -%! str = sprintf ("%s: 1 point", str); +%! str = sprintf ('%s: 1 point', str); %! elseif (n < 100) -%! str = sprintf ("%s: < 100 points", str); +%! str = sprintf ('%s: < 100 points', str); %! else -%! str = sprintf ("%s: > 100 points", str); -%! endif -%! subplot (2, 3, k) +%! str = sprintf ('%s: > 100 points', str); +%! end +%! subplot (2,3,k); %! k = k + 1; -%! scatter (x, y, 15, colors, "filled") -%! axis ([0 1 0 1]) -%! title (str) -%! endfor -%! endfor +%! scatter (x, y, 15, colors, 'filled'); +%! axis ([0 1 0 1]); +%! title (str); +%! end +%! end %!demo +%! clf; %! k = 1; -%! clf %! for m = [1, 3] %! for n = [101, 50, 1] %! x = rand (n, 1); %! y = rand (n, 1); %! if (m > 1) -%! str = "Three Colors"; +%! str = 'Three Colors'; %! idx = ceil (rand (n, 1) * 3); -%! colors = eye(3); +%! colors = eye (3); %! colors = colors(idx, :); %! else -%! str = "Random Colors"; +%! str = 'Random Colors'; %! colors = rand (n, m); -%! endif +%! end %! if (n == 1) -%! str = sprintf ("%s: 1 point", str); +%! str = sprintf ('%s: 1 point', str); %! elseif (n < 100) -%! str = sprintf ("%s: < 100 points", str); +%! str = sprintf ('%s: < 100 points', str); %! else -%! str = sprintf ("%s: > 100 points", str); -%! endif -%! subplot (2, 3, k) +%! str = sprintf ('%s: > 100 points', str); +%! end +%! subplot (2,3,k); %! k = k + 1; -%! scatter (x, y, 15, colors) -%! axis ([0 1 0 1]) -%! title (str) -%! endfor -%! endfor +%! scatter (x, y, 15, colors); +%! axis ([0 1 0 1]); +%! title (str); +%! end +%! end +
--- a/scripts/plot/scatter3.m +++ b/scripts/plot/scatter3.m @@ -84,28 +84,27 @@ %!demo -%! clf +%! clf; %! [x, y, z] = peaks (20); %! scatter3 (x(:), y(:), z(:), [], z(:)); +%! %% Default scatter3 with constant size bubbles and color determined by Z %!demo -%! clf -%! x = rand (20,1); -%! y = rand (20,1); -%! z = rand (20,1); -%! scatter3 (x(:), y(:), z(:), 10, z(:), "s"); +%! clf; +%! x = rand (20,1); y = rand (20,1); z = rand (20,1); +%! scatter3 (x(:), y(:), z(:), 10, z(:), 's'); +%! %% scatter3 using a square marker of size 10 and color determined by Z %!demo -%! clf -%! x = rand (20,1); -%! y = rand (20,1); -%! z = rand (20,1); -%! scatter3 (x(:), y(:), z(:), 20*z(:), z(:), "s"); +%! clf; +%! x = rand (20,1); y = rand (20,1); z = rand (20,1); +%! scatter3 (x(:), y(:), z(:), 20*z(:), [], 's'); +%! %% scatter3 using a square marker whose size is determined by Z %!demo -%! clf -%! x = rand (20,1); -%! y = rand (20,1); -%! z = rand (20,1); -%! scatter3 (x(:), y(:), z(:), 20*z(:), [], "s"); +%! clf; +%! x = rand (20,1); y = rand (20,1); z = rand (20,1); +%! scatter3 (x(:), y(:), z(:), 20*z(:), z(:), 's'); +%! %% scatter3 using a square marker. +%! %% Size and color of marker are determined by Z
--- a/scripts/plot/semilogx.m +++ b/scripts/plot/semilogx.m @@ -64,38 +64,38 @@ %!demo -%! clf (); +%! clf; %! x = 1:0.01:10; %! y = (x .* (1 + rand (size (x)))) .^ 2; %! semilogx (y, x); %!demo -%! clf (); +%! clf; %! x = logspace (-5, 1, 10); %! y = logspace (-5, 1, 10); %! -%! subplot (1, 2, 1); -%! semilogx (x, y); -%! xlabel ("semilogx (x, y)"); +%! subplot (1,2,1); +%! semilogx (x, y); +%! xlabel ('semilogx (x, y)'); %! -%! subplot (1, 2, 2); -%! semilogx (-x, y); -%! xlabel ("semilogx (-x, y)"); +%! subplot (1,2,2); +%! semilogx (-x, y); +%! xlabel ('semilogx (-x, y)'); %!demo -%! clf (); +%! clf; %! x = logspace (-5, 1, 10); %! y = logspace (-5, 1, 10); %! -%! subplot (1, 2, 1); -%! semilogx (x, y); -%! set (gca, "xdir", "reverse", "activepositionproperty", "outerposition") -%! xlabel ({"semilogx (x, y)", "xdir = reversed"}) +%! subplot (1,2,1); +%! semilogx (x, y); +%! set (gca, 'xdir', 'reverse', 'activepositionproperty', 'outerposition'); +%! xlabel ({'semilogx (x, y)', 'xdir = reversed'}); %! -%! subplot (1, 2, 2); -%! semilogx (-x, y); -%! set (gca, "xdir", "reverse", "activepositionproperty", "outerposition"); -%! xlabel ({"semilogx (-x, y)", "xdir = reversed"}); +%! subplot (1,2,2); +%! semilogx (-x, y); +%! set (gca, 'xdir', 'reverse', 'activepositionproperty', 'outerposition'); +%! xlabel ({'semilogx (-x, y)', 'xdir = reversed'}); %!test %! hf = figure ("visible", "off");
--- a/scripts/plot/semilogxerr.m +++ b/scripts/plot/semilogxerr.m @@ -60,10 +60,12 @@ endfunction + %!demo -%! clf +%! clf; %! x = exp (log(0.01):0.2:log(10)); %! y = wblpdf (x, 2, 2); %! ey = 0.5*rand (size (y)) .* y; -%! semilogxerr (x, y, ey, "#~x-") -%! xlim (x([1, end])) +%! semilogxerr (x, y, ey, '#~x-'); +%! xlim (x([1, end])); +
--- a/scripts/plot/semilogy.m +++ b/scripts/plot/semilogy.m @@ -63,39 +63,40 @@ endfunction + %!demo -%! clf (); +%! clf; %! x = 1:0.01:10; %! y = (x .* (1 + rand (size (x)))) .^ 2; %! semilogy (x, y); %!demo -%! clf (); +%! clf; %! x = logspace (-5, 1, 10); %! y = logspace (-5, 1, 10); %! %! subplot (2, 1, 1); %! semilogy (x, y); -%! ylabel ("semilogy (x, y)"); +%! ylabel ('semilogy (x, y)'); %! %! subplot (2, 1, 2); %! semilogy (x, -y); -%! ylabel ("semilogy (x, -y)"); +%! ylabel ('semilogy (x, -y)'); %!demo -%! clf (); +%! clf; %! x = logspace (-5, 1, 10); %! y = logspace (-5, 1, 10); %! %! subplot (2, 1, 1); %! semilogy (x, y); -%! set (gca, "ydir", "reverse", "activepositionproperty", "outerposition"); -%! ylabel ({"semilogy (x, y)", "ydir = reversed"}); +%! set (gca, 'ydir', 'reverse', 'activepositionproperty', 'outerposition'); +%! ylabel ({'semilogy (x, y)', 'ydir = reversed'}); %! %! subplot (2, 1, 2); %! semilogy (x, -y); -%! set (gca, "ydir", "reverse", "activepositionproperty", "outerposition"); -%! ylabel ({"semilogy (x, -y)", "ydir = reversed"}); +%! set (gca, 'ydir', 'reverse', 'activepositionproperty', 'outerposition'); +%! ylabel ({'semilogy (x, -y)', 'ydir = reversed'}); %!test %! hf = figure ("visible", "off");
--- a/scripts/plot/semilogyerr.m +++ b/scripts/plot/semilogyerr.m @@ -60,12 +60,13 @@ endfunction + %!demo -%! clf +%! clf; %! x = 0.25:0.25:10; %! y = wblpdf (x, 4, 2); %! eyu = rand (size (y)); %! eyl = 1.0 - 1./(1+eyu); -%! semilogyerr (x, y, eyl.*y, eyu.*y, "~-d") -%! xlim ([0 10]) +%! semilogyerr (x, y, eyl.*y, eyu.*y, '~-d'); +%! xlim ([0 10]);
--- a/scripts/plot/shading.m +++ b/scripts/plot/shading.m @@ -75,39 +75,44 @@ %!demo -%! clf -%! colormap (jet) -%! sombrero -%! shading faceted -%! title ('shading "faceted"') +%! clf; +%! colormap ('default'); +%! sombrero (); +%! shading faceted; +%! title ('shading ''faceted'''); %!demo -%! clf -%! sombrero -%! shading flat -%! title ('shading "flat"') +%! clf; +%! colormap ('default'); +%! sombrero (); +%! shading flat; +%! title ('shading ''flat'''); + +%!demo +%! clf; +%! colormap ('default'); +%! sombrero (); +%! shading interp; +%! title ('shading ''interp'''); %!demo -%! clf -%! sombrero -%! shading interp -%! title ('shading "interp"') - -%!demo -%! clf -%! pcolor (peaks ()) -%! shading faceted -%! title ('shading "faceted"') +%! clf; +%! colormap ('default'); +%! pcolor (peaks ()); +%! shading faceted; +%! title ('shading ''faceted'''); %!demo -%! clf -%! pcolor (peaks ()) -%! shading flat -%! title ('shading "flat"') +%! clf; +%! colormap ('default'); +%! pcolor (peaks ()); +%! shading flat; +%! title ('shading ''flat'''); %!demo -%! clf -%! pcolor (peaks ()) -%! shading interp -%! title ('shading "interp"') +%! clf; +%! colormap ('default'); +%! pcolor (peaks ()); +%! shading interp; +%! title ('shading ''interp''');
--- a/scripts/plot/slice.m +++ b/scripts/plot/slice.m @@ -182,13 +182,15 @@ %!demo -%! clf +%! clf; +%! colormap ('default'); %! [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, []); %!demo -%! clf +%! clf; +%! colormap ('default'); %! [x, y, z] = meshgrid (linspace (-8, 8, 32)); %! v = sin (sqrt (x.^2 + y.^2 + z.^2)) ./ (sqrt (x.^2 + y.^2 + z.^2)); %! [xi, yi] = meshgrid (linspace (-7, 7));
--- a/scripts/plot/sombrero.m +++ b/scripts/plot/sombrero.m @@ -61,6 +61,9 @@ endfunction + %!demo -%! clf +%! clf; +%! colormap ('default'); %! sombrero (); +
--- a/scripts/plot/stairs.m +++ b/scripts/plot/stairs.m @@ -210,14 +210,14 @@ %!demo -%! clf +%! clf; %! x = 1:10; %! rand_1x10_data1 = [0.073, 0.455, 0.837, 0.124, 0.426, 0.781, 0.004, 0.024, 0.519, 0.698]; %! y = rand_1x10_data1; %! stairs (x, y); %!demo -%! clf +%! clf; %! x = 1:10; %! rand_1x10_data2 = [0.014, 0.460, 0.622, 0.394, 0.531, 0.378, 0.466, 0.788, 0.342, 0.893]; %! y = rand_1x10_data2; @@ -225,11 +225,11 @@ %! plot (xs, ys); %!demo -%! clf +%! clf; %! stairs (1:9); %!demo -%! clf +%! clf; %! [xs, ys] = stairs (9:-1:1); %! plot (xs, ys);
--- a/scripts/plot/stem.m +++ b/scripts/plot/stem.m @@ -88,45 +88,45 @@ %!demo -%! clf +%! clf; %! x = 1:10; %! stem (x); %!demo -%! clf +%! clf; %! x = 1:10; %! y = 2*x; %! stem (x, y); %!demo -%! clf +%! clf; %! x = 1:10; %! y = 2*x; -%! h = stem (x, y, "r"); +%! h = stem (x, y, 'r'); %!demo -%! clf +%! clf; %! x = 1:10; %! y = 2*x; -%! h = stem (x, y, "-.k"); +%! h = stem (x, y, '-.k'); %!demo -%! clf +%! clf; %! x = 1:10; %! y = 2*x; -%! h = stem (x, y, "-.k."); +%! h = stem (x, y, '-.k.'); %!demo -%! clf +%! clf; %! x = 1:10; %! y = 2*x; -%! h = stem (x, y, "filled"); +%! h = stem (x, y, 'filled'); %!demo -%! clf -%! x = [0 : 10]'; +%! clf; +%! x = (0 : 10)'; %! y = [sin(x), cos(x)]; %! h = stem (x, y); -%! set (h(2), "color", "g"); -%! set (h(1), "basevalue", -1) +%! set (h(2), 'color', 'g'); +%! set (h(1), 'basevalue', -1)
--- a/scripts/plot/stem3.m +++ b/scripts/plot/stem3.m @@ -52,7 +52,9 @@ endfunction + %!demo -%! clf +%! clf; %! theta = 0:0.2:6; -%! stem3 (cos (theta), sin (theta), theta) +%! stem3 (cos(theta), sin(theta), theta); +
--- a/scripts/plot/subplot.m +++ b/scripts/plot/subplot.m @@ -328,38 +328,38 @@ endfunction %!demo -%! clf +%! clf; %! r = 3; %! c = 3; %! fmt = {'horizontalalignment', 'center', 'verticalalignment', 'middle'}; -%! for n = 1:(r*c) -%! subplot (r, c, n) -%! xlabel (sprintf ("xlabel #%d", n)) -%! ylabel (sprintf ("ylabel #%d", n)) -%! title (sprintf ("title #%d", n)) -%! text (0.5, 0.5, sprintf('subplot(%d,%d,%d)', r, c, n), fmt{:}) -%! axis ([0 1 0 1]) -%! endfor -%! subplot (r, c, 1:3) -%! xlabel (sprintf ("xlabel #%d:%d", 1, 3)) -%! ylabel (sprintf ("ylabel #%d:%d", 1, 3)) -%! title (sprintf ("title #%d:%d", 1, 3)) -%! text (0.5, 0.5, sprintf('subplot(%d,%d,%d:%d)', r, c, 1, 3), fmt{:}) -%! axis ([0 1 0 1]) +%! for n = 1 : r*c +%! subplot (r, c, n); +%! xlabel (sprintf ('xlabel #%d', n)); +%! ylabel (sprintf ('ylabel #%d', n)); +%! title (sprintf ('title #%d', n)); +%! text (0.5, 0.5, sprintf('subplot(%d,%d,%d)', r, c, n), fmt{:}); +%! axis ([0 1 0 1]); +%! end +%! subplot (r, c, 1:3); +%! xlabel (sprintf ('xlabel #%d:%d', 1, 3)); +%! ylabel (sprintf ('ylabel #%d:%d', 1, 3)); +%! title (sprintf ('title #%d:%d', 1, 3)); +%! text (0.5, 0.5, sprintf('subplot(%d,%d,%d:%d)', r, c, 1, 3), fmt{:}); +%! axis ([0 1 0 1]); %!demo -%! clf +%! clf; %! x = 0:1; %! for n = 1:4 -%! subplot (2, 2, n, "align") -%! plot (x, x) -%! xlabel (sprintf ("xlabel (2,2,%d)", n)) -%! ylabel (sprintf ("ylabel (2,2,%d)", n)) -%! title (sprintf ("title (2,2,%d)", n)) -%! endfor -%! subplot (1, 2, 1, "align") -%! plot (x, x) -%! xlabel ("xlabel (1,2,1)") -%! ylabel ("ylabel (1,2,1)") -%! title ("title (1,2,1)") +%! subplot (2, 2, n, 'align'); +%! plot (x, x); +%! xlabel (sprintf ('xlabel (2,2,%d)', n)); +%! ylabel (sprintf ('ylabel (2,2,%d)', n)); +%! title (sprintf ('title (2,2,%d)', n)); +%! end +%! subplot (1, 2, 1, 'align'); +%! plot (x, x); +%! xlabel ('xlabel (1,2,1)'); +%! ylabel ('ylabel (1,2,1)'); +%! title ('title (1,2,1)');
--- a/scripts/plot/surf.m +++ b/scripts/plot/surf.m @@ -66,20 +66,23 @@ %!demo -%! clf -%! [~,~,Z] = peaks; +%! clf; +%! colormap ('default'); +%! [~,~,Z] = peaks (); %! surf (Z); %!demo -%! clf -%! [~,~,Z] = sombrero; +%! clf; +%! colormap ('default'); +%! [~,~,Z] = sombrero (); %! [Fx,Fy] = gradient (Z); %! surf (Z, Fx+Fy); %! shading interp; %!demo -%! clf -%! [X,Y,Z] = sombrero; +%! clf; +%! colormap ('default'); +%! [X,Y,Z] = sombrero (); %! [~,Fy] = gradient (Z); %! surf (X, Y, Z, Fy); %! shading interp;
--- a/scripts/plot/surface.m +++ b/scripts/plot/surface.m @@ -166,8 +166,8 @@ endfunction + ## Functional tests for surface() are in surf.m, surfc.m, surfl.m, and pcolor.m - %!test %! hf = figure ("visible", "off"); %! unwind_protect
--- a/scripts/plot/surfc.m +++ b/scripts/plot/surfc.m @@ -74,21 +74,26 @@ endfunction -%!demo -%! clf -%! [~,~,Z]=peaks; -%! surfc(Z); %!demo -%! clf -%! [~,~,Z]=sombrero; -%! [Fx,Fy] = gradient(Z); -%! surfc(Z,Fx+Fy); +%! clf; +%! colormap ('default'); +%! [~,~,Z] = peaks (); +%! surfc (Z); + +%!demo +%! clf; +%! colormap ('default'); +%! [~,~,Z] = sombrero (); +%! [Fx,Fy] = gradient (Z); +%! surfc (Z, Fx+Fy); %! shading interp; %!demo -%! clf -%! [X,Y,Z]=sombrero; -%! [~,Fy] = gradient(Z); -%! surfc(X,Y,Z,Fy); +%! clf; +%! colormap ('default'); +%! [X,Y,Z] = sombrero (); +%! [~,Fy] = gradient (Z); +%! surfc (X,Y,Z,Fy); %! shading interp; +
--- a/scripts/plot/surfl.m +++ b/scripts/plot/surfl.m @@ -23,21 +23,21 @@ ## @deftypefnx {Function File} {} surfl (@var{x}, @var{y}, @var{z}, @var{L}, @var{P}) ## @deftypefnx {Function File} {} surfl (@dots{}, "light") ## Plot a lighted 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. +## @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. ## -## The light direction can be specified using @var{L}. It can be -## given as 2-element vector [azimuth, elevation] in degrees or as 3-element -## vector [lx, ly, lz]. -## The default value is rotated 45° counter-clockwise from the current view. +## The light direction can be specified using @var{L}. It can be given as a +## 2-element vector [azimuth, elevation] in degrees or as a 3-element vector +## [lx, ly, lz]. The default value is rotated 45 degrees counterclockwise +## from the current view. ## ## The material properties of the surface can specified using a 4-element vector ## @var{P} = [@var{AM} @var{D} @var{SP} @var{exp}] which defaults to ## @var{p} = [0.55 0.6 0.4 10]. +## ## @table @asis ## @item "AM" strength of ambient light ## @@ -49,17 +49,16 @@ ## @end table ## ## The default lighting mode "cdata", changes the cdata property to give the -## impression -## of a lighted surface. Please note: the alternative "light" mode, which -## creates a light -## object to illuminate the surface is not implemented (yet). +## impression of a lighted surface. Please note: the alternative "light" +## mode, which creates a light object to illuminate the surface is not +## implemented (yet). ## ## Example: ## ## @example ## @group -## colormap(bone); -## surfl(peaks); +## colormap (bone); +## surfl (peaks); ## shading interp; ## @end group ## @end example @@ -80,12 +79,12 @@ ## Check for lighting type. use_cdata = true; if (ischar (varargin{end})) - lstr = varargin{end}; - if (strncmp (tolower (lstr), "light", 5)) + lstr = tolower (varargin{end}); + if (strncmp (lstr, "light", 5)) warning ("light method not supported (yet), using cdata method instead"); ## This can be implemented when light objects are supported. use_cdata = false; - elseif (strncmp (tolower (lstr), "cdata", 5)) + elseif (strncmp (lstr, "cdata", 5)) use_cdata = true; else error ("surfl: unknown lighting method"); @@ -123,7 +122,7 @@ endif endif - tmp = surface (varargin{:}); + htmp = surface (varargin{:}); if (! ishold ()) set (h, "view", [-37.5, 30], "xgrid", "on", "ygrid", "on", "zgrid", "on", "clim", [0 1]); @@ -144,7 +143,7 @@ lv = (R * vv.').'; endif - vn = get (tmp, "vertexnormals"); + vn = get (htmp, "vertexnormals"); dar = get (h, "plotboxaspectratio"); vn(:,:,1) *= dar(1); vn(:,:,2) *= dar(2); @@ -152,37 +151,38 @@ ## Normalize vn. vn = vn ./ repmat (sqrt (sumsq (vn, 3)), [1, 1, 3]); - [nr, nc] = size(get(tmp, "zdata")); + [nr, nc] = size(get(htmp, "zdata")); ## Ambient, diffuse, and specular term. cdata = (r(1) * ones (nr, nc) + r(2) * diffuse (vn(:,:,1), vn(:,:,2), vn(:,:,3), lv) + r(3) * specular (vn(:,:,1), vn(:,:,2), vn(:,:,3), lv, vv, r(4))); - set (tmp, "cdata", cdata ./ sum (r(1:3))); + set (htmp, "cdata", cdata ./ sum (r(1:3))); unwind_protect_cleanup axes (oldh); end_unwind_protect if (nargout > 0) - retval = tmp; + retval = htmp; endif endfunction + %!demo -%! clf -%! [X,Y,Z]=sombrero; -%! colormap(copper); -%! surfl(X,Y,Z); +%! clf; +%! [X,Y,Z] = sombrero (); +%! colormap (copper (64)); +%! surfl (X,Y,Z); %! shading interp; %!demo -%! clf -%! [X,Y,Z]=sombrero; -%! colormap(copper); -%! [az, el] = view; -%! surfl(X,Y,Z,[az+225,el],[0.2 0.6 0.4 25]); +%! clf; +%! [X,Y,Z] = sombrero (); +%! colormap (copper (64)); +%! [az, el] = view (); +%! surfl (X,Y,Z, [az+225,el], [0.2 0.6 0.4 25]); %! shading interp;
--- a/scripts/plot/surfnorm.m +++ b/scripts/plot/surfnorm.m @@ -141,17 +141,21 @@ endfunction + %!demo -%! clf -%! colormap (jet (64)) -%! [x, y, z] = peaks(10); +%! clf; +%! colormap ('default'); +%! [x, y, z] = peaks (10); %! surfnorm (x, y, z); %!demo -%! clf -%! surfnorm (peaks(10)); +%! clf; +%! colormap ('default'); +%! surfnorm (peaks (10)); %!demo -%! clf -%! surfnorm (peaks(32)); -%! shading interp +%! clf; +%! colormap ('default'); +%! surfnorm (peaks (32)); +%! shading interp; +
--- a/scripts/plot/text.m +++ b/scripts/plot/text.m @@ -126,97 +126,98 @@ endfunction + %!demo -%! clf -%! ha = {"left", "center", "right"}; -%! va = {"bottom", "middle", "top"}; +%! clf; +%! ha = {'left', 'center', 'right'}; +%! va = {'bottom', 'middle', 'top'}; %! x = [0.25 0.5 0.75]; -%! y = [0.25 0.5 0.75]; +%! y = x; %! for t = 0:30:359; %! for nh = 1:numel(ha) %! for nv = 1:numel(va) -%! text (x(nh), y(nv), "Hello World", ... -%! "rotation", t, ... -%! "horizontalalignment", ha{nh}, ... -%! "verticalalignment", va{nv}); -%! endfor -%! endfor -%! endfor -%! set (gca, "xtick", [0.25, 0.5, 0.75], ... -%! "xticklabel", ha, ... -%! "ytick", [0.25, 0.5, 0.75], ... -%! "yticklabel", va); +%! text (x(nh), y(nv), 'Hello World', ... +%! 'rotation', t, ... +%! 'horizontalalignment', ha{nh}, ... +%! 'verticalalignment', va{nv}); +%! end +%! end +%! end +%! set (gca, 'xtick', [0.25, 0.5, 0.75], ... +%! 'xticklabel', ha, ... +%! 'ytick', [0.25, 0.5, 0.75], ... +%! 'yticklabel', va); %! axis ([0 1 0 1]); -%! xlabel ("horizontal alignment"); -%! ylabel ("vertical alignment"); -%! title ("text alignment and rotation (0:30:360 degrees)") +%! xlabel ('horizontal alignment'); +%! ylabel ('vertical alignment'); +%! title ('text alignment and rotation (0:30:360 degrees)'); %!demo -%! clf -%! h = mesh (peaks, "edgecolor", 0.7 * [1 1 1], ... -%! "facecolor", "none", ... -%! "facealpha", 0); +%! clf; +%! h = mesh (peaks, 'edgecolor', 0.7 * [1 1 1], ... +%! 'facecolor', 'none', ... +%! 'facealpha', 0); %! for t = 0:45:359; -%! text (25, 25, 0, "Vertical Alignment = Bottom", ... -%! "rotation", t, ... -%! "horizontalalignment", "left", ... -%! "verticalalignment", "bottom"); -%! endfor +%! text (25, 25, 0, 'Vertical Alignment = Bottom', ... +%! 'rotation', t, ... +%! 'horizontalalignment', 'left', ... +%! 'verticalalignment', 'bottom'); +%! end %! caxis ([-100 100]); -%! title ("Vertically Aligned at Bottom"); +%! title ('Vertically Aligned at Bottom'); %!demo -%! clf +%! clf; %! axis ([0 8 0 8]); -%! title (["1st title";"2nd title"]); -%! xlabel (["1st xlabel";"2nd xlabel"]); -%! ylabel (["1st ylabel";"2nd ylabel"]); -%! text (4, 4, {"Hello", "World"}, ... -%! "horizontalalignment", "center", ... -%! "verticalalignment", "middle"); -%! grid on +%! title (['1st title';'2nd title']); +%! xlabel (['1st xlabel';'2nd xlabel']); +%! ylabel (['1st ylabel';'2nd ylabel']); +%! text (4, 4, {'Hello', 'World'}, ... +%! 'horizontalalignment', 'center', ... +%! 'verticalalignment', 'middle'); +%! grid on; %!demo -%! clf -%! h = mesh (peaks, "edgecolor", 0.7 * [1 1 1], ... -%! "facecolor", "none", ... -%! "facealpha", 0); -%! title (["1st title";"2nd title"]); -%! xlabel (["1st xlabel";"2nd xlabel"]); -%! ylabel (["1st ylabel";"2nd ylabel"]); -%! zlabel (["1st zlabel";"2nd zlabel"]); -%! text (0, 0, 5, {"Hello", "World"}, ... -%! "horizontalalignment", "center", ... -%! "verticalalignment", "middle"); +%! clf; +%! h = mesh (peaks (), 'edgecolor', 0.7 * [1 1 1], ... +%! 'facecolor', 'none', ... +%! 'facealpha', 0); +%! title (['1st title';'2nd title']); +%! xlabel (['1st xlabel';'2nd xlabel']); +%! ylabel (['1st ylabel';'2nd ylabel']); +%! zlabel (['1st zlabel';'2nd zlabel']); +%! text (0, 0, 5, {'Hello', 'World'}, ... +%! 'horizontalalignment', 'center', ... +%! 'verticalalignment', 'middle'); %! hold on; -%! plot3 (0, 0, 5, "+k"); +%! plot3 (0, 0, 5, '+k'); %!demo -%! clf -%! h = text (0.5, 0.3, "char"); -%! assert ("char", class (get (h, "string"))); -%! h = text (0.5, 0.4, ["char row 1"; "char row 2"]); -%! assert ("char", class (get (h, "string"))); -%! h = text (0.5, 0.6, {"cell2str (1,1)", "cell2str (1,2)"; "cell2str (2,1)", "cell2str (2,2)"}); -%! assert ("cell", class (get (h, "string"))); -%! h = text (0.5, 0.8, "foobar"); -%! set (h, "string", 1:3); -%! h = text ([0.1, 0.1], [0.3, 0.4], "one string & two objects"); -%! assert ("char", class (get (h(1), "string"))); -%! assert ("char", class (get (h(2), "string"))); -%! h = text ([0.1, 0.1], [0.5, 0.6], {"one cellstr & two objects"}); -%! assert ("cell", class (get (h(1), "string"))); -%! assert ("cell", class (get (h(2), "string"))); -%! h = text ([0.1, 0.1], [0.7, 0.8], {"cellstr 1 object 1", "cellstr 2 object 2"}); -%! assert ("char", class (get (h(1), "string"))); -%! assert ("char", class (get (h(2), "string"))); -%! h = text ([0.1, 0.1], [0.1, 0.2], ["1st string & 1st object"; "2nd string & 2nd object"]); -%! assert ("char", class (get (h(1), "string"))); -%! assert ("char", class (get (h(2), "string"))); -%! h = text (0.7, 0.6, "single string"); -%! assert ("char", class (get (h, "string"))); -%! h = text (0.7, 0.5, {"single cell-string"}); -%! assert ("cell", class (get (h, "string"))); +%! clf; +%! h = text (0.5, 0.3, 'char'); +%! assert ('char', class (get (h, 'string'))); +%! h = text (0.5, 0.4, ['char row 1'; 'char row 2']); +%! assert ('char', class (get (h, 'string'))); +%! h = text (0.5, 0.6, {'cell2str (1,1)', 'cell2str (1,2)'; 'cell2str (2,1)', 'cell2str (2,2)'}); +%! assert ('cell', class (get (h, 'string'))); +%! h = text (0.5, 0.8, 'foobar'); +%! set (h, 'string', 1:3); +%! h = text ([0.1, 0.1], [0.3, 0.4], 'one string & two objects'); +%! assert ('char', class (get (h(1), 'string'))); +%! assert ('char', class (get (h(2), 'string'))); +%! h = text ([0.1, 0.1], [0.5, 0.6], {'one cellstr & two objects'}); +%! assert ('cell', class (get (h(1), 'string'))); +%! assert ('cell', class (get (h(2), 'string'))); +%! h = text ([0.1, 0.1], [0.7, 0.8], {'cellstr 1 object 1', 'cellstr 2 object 2'}); +%! assert ('char', class (get (h(1), 'string'))); +%! assert ('char', class (get (h(2), 'string'))); +%! h = text ([0.1, 0.1], [0.1, 0.2], ['1st string & 1st object'; '2nd string & 2nd object']); +%! assert ('char', class (get (h(1), 'string'))); +%! assert ('char', class (get (h(2), 'string'))); +%! h = text (0.7, 0.6, 'single string'); +%! assert ('char', class (get (h, 'string'))); +%! h = text (0.7, 0.5, {'single cell-string'}); +%! assert ('cell', class (get (h, 'string'))); %! xlabel (1:2); %! ylabel (1:2); %! title (1:2);
--- a/scripts/plot/title.m +++ b/scripts/plot/title.m @@ -46,18 +46,18 @@ %!demo -%! clf (); -%! ax = axes(); -%! xl = get (ax,"title"); -%! title ("Testing title"); -%! assert (get (xl,"string"), "Testing title"); +%! clf; +%! ax = axes (); +%! xl = get (ax,'title'); +%! title ('Testing title'); +%! assert (get (xl, 'string'), 'Testing title'); %!demo -%! clf (); +%! clf; %! plot3 ([0,1], [0,1], [0,1]); -%! xl = get(gca (), "title"); -%! title ("Testing title"); -%! assert (get (xl,"string"),"Testing title"); +%! xl = get (gca (), 'title'); +%! title ('Testing title'); +%! assert (get (xl, 'string'), 'Testing title'); %!test %! hf = figure ("visible", "off"); @@ -65,7 +65,7 @@ %! ax = axes(); %! xl = get (ax,"title"); %! title ("Testing title"); -%! assert (get (xl,"string"), "Testing title"); +%! assert (get (xl, "string"), "Testing title"); %! unwind_protect_cleanup %! close (hf); %! end_unwind_protect @@ -75,8 +75,8 @@ %! unwind_protect %! plot3 ([0,1], [0,1], [0,1]); %! xl = get (gca (), "title"); -%! title("Testing title"); -%! assert (get (xl,"string"), "Testing title"); +%! title ("Testing title"); +%! assert (get (xl, "string"), "Testing title"); %! unwind_protect_cleanup %! close (hf); %! end_unwind_protect
--- a/scripts/plot/trimesh.m +++ b/scripts/plot/trimesh.m @@ -56,10 +56,10 @@ %!demo -%! clf -%! old_state = rand ("state"); -%! restore_state = onCleanup (@() rand ("state", old_state)); -%! rand ("state", 10); +%! clf; +%! old_state = rand ('state'); +%! restore_state = onCleanup (@() rand ('state', old_state)); +%! rand ('state', 10); %! N = 10; %! x = 3 - 6 * rand (N, N); %! y = 3 - 6 * rand (N, N);
--- a/scripts/plot/triplot.m +++ b/scripts/plot/triplot.m @@ -48,10 +48,10 @@ %!demo -%! clf -%! old_state = rand ("state"); -%! restore_state = onCleanup (@() rand ("state", old_state)); -%! rand ("state", 2); +%! clf; +%! old_state = rand ('state'); +%! restore_state = onCleanup (@() rand ('state', old_state)); +%! rand ('state', 2); %! N = 20; %! x = rand (N, 1); %! y = rand (N, 1);
--- a/scripts/plot/trisurf.m +++ b/scripts/plot/trisurf.m @@ -71,33 +71,37 @@ endfunction + %!demo -%! clf +%! clf; +%! colormap ('default'); %! N = 31; %! [x, y] = meshgrid (1:N); %! tri = delaunay (x, y); %! z = peaks (N); -%! h = trisurf (tri, x, y, z, "facecolor", "interp"); -%! axis tight -%! zlim auto -%! title (sprintf ("facecolor = %s", get (h, "facecolor"))) +%! h = trisurf (tri, x, y, z, 'facecolor', 'interp'); +%! axis tight; +%! zlim auto; +%! title (sprintf ('facecolor = %s', get (h, 'facecolor'))); %!demo -%! clf +%! clf; +%! colormap ('default'); %! N = 31; %! [x, y] = meshgrid (1:N); %! tri = delaunay (x, y); %! z = peaks (N); -%! h = trisurf (tri, x, y, z, "facecolor", "flat"); -%! axis tight -%! zlim auto -%! title (sprintf ("facecolor = %s", get (h, "facecolor"))) +%! h = trisurf (tri, x, y, z, 'facecolor', 'flat'); +%! axis tight; +%! zlim auto; +%! title (sprintf ('facecolor = %s', get (h, 'facecolor'))); %!demo -%! clf -%! old_state = rand ("state"); -%! restore_state = onCleanup (@() rand ("state", old_state)); -%! rand ("state", 10); +%! clf; +%! colormap ('default'); +%! old_state = rand ('state'); +%! restore_state = onCleanup (@() rand ('state', old_state)); +%! rand ('state', 10); %! N = 10; %! x = 3 - 6 * rand (N, N); %! y = 3 - 6 * rand (N, N); @@ -106,7 +110,8 @@ %! trisurf (tri, x(:), y(:), z(:)); %!demo -%! clf +%! clf; +%! colormap ('default'); %! x = rand (100, 1); %! y = rand (100, 1); %! z = x.^2 + y.^2; @@ -114,18 +119,20 @@ %! trisurf (tri, x, y, z); %!demo -%! clf +%! clf; +%! colormap ('default'); %! x = rand (100, 1); %! y = rand (100, 1); %! z = x.^2 + y.^2; %! tri = delaunay (x, y); -%! trisurf (tri, x, y, z, "facecolor", "interp"); +%! trisurf (tri, x, y, z, 'facecolor', 'interp'); %!demo -%! clf +%! clf; +%! colormap ('default'); %! x = rand (100, 1); %! y = rand (100, 1); %! z = x.^2 + y.^2; %! tri = delaunay (x, y); -%! trisurf (tri, x, y, z, "facecolor", "interp", "edgecolor", "k"); +%! trisurf (tri, x, y, z, 'facecolor', 'interp', 'edgecolor', 'k');
--- a/scripts/plot/uigetdir.m +++ b/scripts/plot/uigetdir.m @@ -58,9 +58,10 @@ endfunction + %!demo -%! uigetdir(pwd, "Select Directory") +%! uigetdir (pwd, 'Select Directory'); ## Remove from test statistics. No real tests possible. -%!test -%! assert (1); +%!assert (1) +
--- a/scripts/plot/uigetfile.m +++ b/scripts/plot/uigetfile.m @@ -98,9 +98,10 @@ for i = 1 : length (varargin) val = varargin{i}; if (ischar (val)) - if (strncmpi (val, "multiselect", 11)) + val = tolower (val); + if (strncmp (val, "multiselect", 11)) idx1 = i; - elseif (strncmpi (val, "position", 8)) + elseif (strncmp (val, "position", 8)) idx2 = i; endif endif @@ -185,9 +186,10 @@ endfunction + %!demo -%! uigetfile({"*.gif;*.png;*.jpg", "Supported Picture Formats"}) +%! uigetfile ({'*.gif;*.png;*.jpg', 'Supported Picture Formats'}); ## Remove from test statistics. No real tests possible. -%!test -%! assert (1); +%!assert (1); +
--- a/scripts/plot/uimenu.m +++ b/scripts/plot/uimenu.m @@ -91,14 +91,14 @@ %!demo -%! clf +%! clf; %! surfl (peaks); -%! colormap (copper); -%! shading ("interp"); -%! f = uimenu ("label", "&File", "accelerator", "f"); -%! e = uimenu ("label", "&Edit", "accelerator", "e"); -%! uimenu (f, "label", "Close", "accelerator", "q", "callback", "close (gcf)"); -%! uimenu (e, "label", "Toggle &Grid", "accelerator", "g", "callback", "grid (gca)"); +%! colormap (copper (64)); +%! shading ('interp'); +%! f = uimenu ('label', '&File', 'accelerator', 'f'); +%! e = uimenu ('label', '&Edit', 'accelerator', 'e'); +%! uimenu (f, 'label', 'Close', 'accelerator', 'q', 'callback', 'close (gcf)'); +%! uimenu (e, 'label', 'Toggle &Grid', 'accelerator', 'g', 'callback', 'grid (gca)'); %!testif HAVE_FLTK %! toolkit = graphics_toolkit (); @@ -124,11 +124,11 @@ %! hf = figure ("visible", "off"); %! unwind_protect %! uif = findall (hf, "label", "&file"); -%! assert (ishghandle (uif)) +%! assert (ishghandle (uif)); %! uie = findall (hf, "label", "&edit"); -%! assert (ishghandle (uie)) +%! assert (ishghandle (uie)); %! uih = findall (hf, "label", "&help"); -%! assert (ishghandle (uih)) +%! assert (ishghandle (uih)); %! unwind_protect_cleanup %! close (hf); %! graphics_toolkit (toolkit); @@ -141,7 +141,7 @@ %! unwind_protect %! uie = findall (hf, "label", "&edit"); %! myui = uimenu (uie, "label", "mylabel"); -%! assert (ancestor (myui, "uimenu", "toplevel"), uie) +%! assert (ancestor (myui, "uimenu", "toplevel"), uie); %! unwind_protect_cleanup %! close (hf); %! graphics_toolkit (toolkit);
--- a/scripts/plot/uiputfile.m +++ b/scripts/plot/uiputfile.m @@ -120,9 +120,10 @@ endfunction + %!demo -%! uiputfile({"*.gif;*.png;*.jpg", "Supported Picture Formats"}) +%! uiputfile ({'*.gif;*.png;*.jpg', 'Supported Picture Formats'}); ## Remove from test statistics. No real tests possible. -%!test -%! assert (1); +%!assert (1) +
--- a/scripts/plot/uiresume.m +++ b/scripts/plot/uiresume.m @@ -29,8 +29,8 @@ function uiresume (h) - if (! ishandle (h) || ! strcmp (get (h, "type"), "figure")) - error ("uiresume: invalid figure handle"); + if (! isfigure (h)) + error ("uiresume: invalid figure handle H"); endif try
--- a/scripts/plot/uiwait.m +++ b/scripts/plot/uiwait.m @@ -47,8 +47,8 @@ h = get (0, "currentfigure"); else h = varargin{1}; - if (! ishandle (h) || ! strcmp (get (h, "type"), "figure")) - error ("uiwait: invalid figure handle"); + if (! isfigure (h)) + error ("uiwait: invalid figure handle H"); endif if (nargin > 1) timeout = varargin{2}; @@ -63,7 +63,7 @@ if (! strcmp (get (h, "__uiwait_state__"), "none")) error ("uiwait: an active uiwait call for this figure already exists"); endif - set (h, "__uiwait_state__", "active"); + set (h, "__uiwait_state__", "active"); end_try_catch waitfor_args = {h, "__uiwait_state__", "triggered"}; if (! isempty (timeout))
--- a/scripts/plot/waitbar.m +++ b/scripts/plot/waitbar.m @@ -26,7 +26,7 @@ ## Return a handle @var{h} to a new waitbar object. The waitbar is ## filled to fraction @var{frac} which must be in the range [0, 1]. The ## optional message @var{msg} is centered and displayed above the waitbar. -## The appearance of the waitbar figure window can be configured by passing +## The appearance of the waitbar figure window can be configured by passing ## property/value pairs to the function. ## ## When called with a single input the current waitbar, if it exists, is @@ -136,46 +136,46 @@ %!demo -%! h = waitbar (0, "0.00%"); +%! h = waitbar (0, '0.00%'); %! for i = 0:0.01:1 -%! waitbar (i, h, sprintf ("%.2f%%", 100*i)); -%! endfor +%! waitbar (i, h, sprintf ('%.2f%%', 100*i)); +%! end %! close (h); %!demo -%! h = waitbar (0, "please wait..."); +%! h = waitbar (0, 'please wait...'); %! for i = 0:0.01:0.6 %! waitbar (i); -%! endfor +%! end %! i = 0.3; -%! waitbar (i, h, "don't you hate taking a step backward?") +%! waitbar (i, h, 'don''t you hate taking a step backward?'); %! pause (0.5); %! for i = i:0.005:0.7 %! waitbar (i, h); -%! endfor -%! waitbar (i, h, "or stalling?") +%! end +%! waitbar (i, h, 'or stalling?'); %! pause (1); %! for i = i:0.003:0.8 -%! waitbar (i, h, "just a little longer now") -%! endfor +%! waitbar (i, h, 'just a little longer now'); +%! end %! for i = i:0.001:1 -%! waitbar (i, h, "please don't be impatient") -%! endfor +%! waitbar (i, h, 'please don''t be impatient'); +%! end %! close (h); %!demo -%! h1 = waitbar (0, "Waitbar #1"); -%! h2 = waitbar (0, "Waitbar #2"); -%! h2pos = get (h2, "position"); -%! h2pos(1) += h2pos(3) + 50; -%! set (h2, "position", h2pos); +%! h1 = waitbar (0, 'Waitbar #1'); +%! h2 = waitbar (0, 'Waitbar #2'); +%! h2pos = get (h2, 'position'); +%! h2pos(1) = h2pos(1) + (h2pos(3) + 50); +%! set (h2, 'position', h2pos); %! pause (0.5); %! for i = 1:4 %! waitbar (i/4, h1); %! pause (0.5); %! waitbar (i/4, h2); %! pause (0.5); -%! endfor +%! end %! pause (0.5); %! close (h1); %! close (h2);
--- a/scripts/plot/xlim.m +++ b/scripts/plot/xlim.m @@ -49,34 +49,34 @@ endif endfunction + %!demo -%! clf (); +%! clf; %! line (); %! xlim ([0.2, 0.8]); -%! title ("xlim is [0.2, 0.8]"); +%! title ('xlim is [0.2, 0.8]'); %! assert (xlim (), [0.2, 0.8]); %!demo -%! clf (); +%! clf; %! line (); %! xlim ('auto'); -%! title ("xlim is auto"); -%! assert (xlim ("mode"), "auto"); +%! title ('xlim is auto'); +%! assert (xlim ('mode'), 'auto'); %!demo -%! clf (); +%! clf; %! plot3 ([0,1], [0,1], [0,1]); %! xlim ([0.2, 0.8]); -%! title ("xlim is [0.2, 0.8]"); +%! title ('xlim is [0.2, 0.8]'); %! assert (xlim (), [0.2, 0.8]); %!demo -%! clf (); +%! clf; %! plot3 ([0,1], [0,1], [0,1]); %! xlim ('auto'); -%! title ("xlim is auto"); -%! assert (xlim ("mode"), "auto"); - +%! title ('xlim is auto'); +%! assert (xlim ('mode'), 'auto'); %!test %! hf = figure ("visible", "off"); @@ -98,3 +98,4 @@ %! unwind_protect_cleanup %! close (hf); %! end_unwind_protect +
--- a/scripts/plot/ylim.m +++ b/scripts/plot/ylim.m @@ -45,33 +45,34 @@ endif endfunction + %!demo -%! clf (); +%! clf; %! line (); %! ylim ([0.2, 0.8]); -%! title ("ylim is [0.2, 0.8]"); +%! title ('ylim is [0.2, 0.8]'); %! assert (ylim (), [0.2, 0.8]); %!demo -%! clf (); +%! clf; %! line (); %! ylim ('auto'); -%! title ("ylim is auto"); -%! assert (ylim ("mode"), "auto"); +%! title ('ylim is auto'); +%! assert (ylim ('mode'), 'auto'); %!demo -%! clf (); +%! clf; %! plot3 ([0,1], [0,1], [0,1]); %! ylim ([0.2, 0.8]); -%! title ("ylim is [0.2, 0.8]"); +%! title ('ylim is [0.2, 0.8]'); %! assert (ylim (), [0.2, 0.8]); %!demo -%! clf (); +%! clf; %! plot3 ([0,1], [0,1], [0,1]); %! ylim ('auto'); -%! title ("ylim is auto"); -%! assert (ylim ("mode"), "auto"); +%! title ('ylim is auto'); +%! assert (ylim ('mode'), 'auto'); %!test %! hf = figure ("visible", "off"); @@ -94,3 +95,4 @@ %! unwind_protect_cleanup %! close (hf); %! end_unwind_protect +
--- a/scripts/plot/zlim.m +++ b/scripts/plot/zlim.m @@ -45,33 +45,34 @@ endif endfunction + %!demo -%! clf (); +%! clf; %! line (); %! zlim ([0.2, 0.8]); -%! title ("zlim is [0.2, 0.8]"); +%! title ('zlim is [0.2, 0.8]'); %! assert (zlim (), [0.2, 0.8]); %!demo -%! clf (); +%! clf; %! line (); %! zlim ('auto'); -%! title ("zlim is auto"); -%! assert (zlim ("mode"), "auto"); +%! title ('zlim is auto'); +%! assert (zlim ('mode'), 'auto'); %!demo -%! clf (); +%! clf; %! plot3 ([0,1], [0,1], [0,1]); %! zlim ([0.2, 0.8]); -%! title ("zlim is [0.2, 0.8]"); +%! title ('zlim is [0.2, 0.8]'); %! assert (zlim (), [0.2, 0.8]); %!demo -%! clf (); +%! clf; %! plot3 ([0,1], [0,1], [0,1]); %! zlim ('auto'); -%! title ("zlim is auto"); -%! assert (zlim ("mode"), "auto"); +%! title ('zlim is auto'); +%! assert (zlim ('mode'), 'auto'); %!test %! hf = figure ("visible", "off"); @@ -94,3 +95,4 @@ %! unwind_protect_cleanup %! close (hf); %! end_unwind_protect +
--- a/scripts/polynomial/mkpp.m +++ b/scripts/polynomial/mkpp.m @@ -79,34 +79,36 @@ endfunction + %!demo # linear interpolation -%! x=linspace(0,pi,5)'; -%! t=[sin(x),cos(x)]; -%! m=diff(t)./(x(2)-x(1)); -%! b=t(1:4,:); -%! pp = mkpp(x, [m(:),b(:)]); -%! xi=linspace(0,pi,50); -%! plot(x,t,"x",xi,ppval(pp,xi)); -%! legend("control","interp"); +%! x = linspace (0,pi,5)'; +%! t = [sin(x), cos(x)]; +%! m = diff (t) ./ (x(2)-x(1)); +%! b = t(1:4,:); +%! pp = mkpp (x, [m(:),b(:)]); +%! xi = linspace (0,pi,50); +%! plot (x,t,"x", xi,ppval (pp,xi)); +%! legend ("control","interp"); %!shared b,c,pp -%! b = 1:3; c = 1:24; pp=mkpp(b,c); -%!assert (pp.pieces,2); -%!assert (pp.order,12); -%!assert (pp.dim,1); -%!assert (size(pp.coefs),[2,12]); -%! pp=mkpp(b,c,2); -%!assert (pp.pieces,2); -%!assert (pp.order,6); -%!assert (pp.dim,2); -%!assert (size(pp.coefs),[4,6]); -%! pp=mkpp(b,c,3); -%!assert (pp.pieces,2); -%!assert (pp.order,4); -%!assert (pp.dim,3); -%!assert (size(pp.coefs),[6,4]); -%! pp=mkpp(b,c,[2,3]); -%!assert (pp.pieces,2); -%!assert (pp.order,2); -%!assert (pp.dim,[2,3]); -%!assert (size(pp.coefs),[12,2]); +%! b = 1:3; c = 1:24; pp = mkpp (b,c); +%!assert (pp.pieces, 2); +%!assert (pp.order, 12); +%!assert (pp.dim, 1); +%!assert (size (pp.coefs), [2,12]); +%! pp = mkpp(b,c,2); +%!assert (pp.pieces, 2); +%!assert (pp.order, 6); +%!assert (pp.dim, 2); +%!assert (size (pp.coefs), [4,6]); +%! pp = mkpp(b,c,3); +%!assert (pp.pieces, 2); +%!assert (pp.order, 4); +%!assert (pp.dim, 3); +%!assert (size (pp.coefs), [6,4]); +%! pp = mkpp(b,c,[2,3]); +%!assert (pp.pieces, 2); +%!assert (pp.order, 2); +%!assert (pp.dim, [2,3]); +%!assert (size (pp.coefs), [12,2]); +
--- a/scripts/polynomial/pchip.m +++ b/scripts/polynomial/pchip.m @@ -125,45 +125,47 @@ endfunction + %!demo %! x = 0:8; %! y = [1, 1, 1, 1, 0.5, 0, 0, 0, 0]; %! xi = 0:0.01:8; -%! yspline = spline(x,y,xi); -%! ypchip = pchip(x,y,xi); -%! title("pchip and spline fit to discontinuous function"); -%! plot(xi,yspline,xi,ypchip,"-",x,y,"+"); -%! legend ("spline","pchip","data"); +%! yspline = spline (x,y,xi); +%! ypchip = pchip (x,y,xi); +%! title ("pchip and spline fit to discontinuous function"); +%! plot (xi,yspline, xi,ypchip,"-", x,y,"+"); +%! legend ("spline", "pchip", "data"); %! %------------------------------------------------------------------- %! % confirm that pchip agreed better to discontinuous data than spline %!shared x,y,y2,pp,yi1,yi2,yi3 %! x = 0:8; %! y = [1, 1, 1, 1, 0.5, 0, 0, 0, 0]; -%!assert (pchip(x,y,x), y); -%!assert (pchip(x,y,x'), y'); -%!assert (pchip(x',y',x'), y'); -%!assert (pchip(x',y',x), y); -%!assert (isempty(pchip(x',y',[]))); -%!assert (isempty(pchip(x,y,[]))); -%!assert (pchip(x,[y;y],x), [pchip(x,y,x);pchip(x,y,x)]) -%!assert (pchip(x,[y;y],x'), [pchip(x,y,x);pchip(x,y,x)]) -%!assert (pchip(x',[y;y],x), [pchip(x,y,x);pchip(x,y,x)]) -%!assert (pchip(x',[y;y],x'), [pchip(x,y,x);pchip(x,y,x)]) +%!assert (pchip (x,y,x), y) +%!assert (pchip (x,y,x'), y') +%!assert (pchip (x',y',x'), y') +%!assert (pchip (x',y',x), y) +%!assert (isempty (pchip(x',y',[]))) +%!assert (isempty (pchip(x,y,[]))) +%!assert (pchip (x,[y;y],x), [pchip(x,y,x);pchip(x,y,x)]) +%!assert (pchip (x,[y;y],x'), [pchip(x,y,x);pchip(x,y,x)]) +%!assert (pchip (x',[y;y],x), [pchip(x,y,x);pchip(x,y,x)]) +%!assert (pchip (x',[y;y],x'), [pchip(x,y,x);pchip(x,y,x)]) %!test -%! x=(0:8)*pi/4;y=[sin(x);cos(x)]; -%! y2(:,:,1)=y;y2(:,:,2)=y+1;y2(:,:,3)=y-1; -%! pp=pchip(x,shiftdim(y2,2)); -%! yi1=ppval(pp,(1:4)*pi/4); -%! yi2=ppval(pp,repmat((1:4)*pi/4,[5,1])); -%! yi3=ppval(pp,[pi/2,pi]); -%!assert(size(pp.coefs),[48,4]); -%!assert(pp.pieces,8); -%!assert(pp.order,4); -%!assert(pp.dim,[3,2]); -%!assert(ppval(pp,pi),[0,-1;1,0;-1,-2],1e-14); -%!assert(yi3(:,:,2),ppval(pp,pi),1e-14); -%!assert(yi3(:,:,1),[1,0;2,1;0,-1],1e-14); -%!assert(squeeze(yi1(1,2,:)),[1/sqrt(2); 0; -1/sqrt(2);-1],1e-14); -%!assert(size(yi2),[3,2,5,4]); -%!assert(squeeze(yi2(1,2,3,:)),[1/sqrt(2); 0; -1/sqrt(2);-1],1e-14); +%! x = (0:8)*pi/4; y = [sin(x);cos(x)]; +%! y2(:,:,1) = y; y2(:,:,2) = y+1; y2(:,:,3) = y-1; +%! pp = pchip (x, shiftdim (y2,2)); +%! yi1 = ppval (pp, (1:4)*pi/4); +%! yi2 = ppval (pp, repmat ((1:4)*pi/4, [5,1])); +%! yi3 = ppval (pp, [pi/2,pi]); +%!assert (size (pp.coefs), [48,4]) +%!assert (pp.pieces, 8) +%!assert (pp.order, 4) +%!assert (pp.dim, [3,2]) +%!assert (ppval (pp,pi), [0,-1;1,0;-1,-2], 1e-14) +%!assert (yi3(:,:,2), ppval(pp,pi), 1e-14) +%!assert (yi3(:,:,1), [1,0;2,1;0,-1], 1e-14) +%!assert (squeeze (yi1(1,2,:)), [1/sqrt(2); 0; -1/sqrt(2);-1], 1e-14) +%!assert (size (yi2), [3,2,5,4]) +%!assert (squeeze (yi2(1,2,3,:)), [1/sqrt(2); 0; -1/sqrt(2);-1], 1e-14) +
--- a/scripts/polynomial/polyaffine.m +++ b/scripts/polynomial/polyaffine.m @@ -73,16 +73,16 @@ %!demo %! f = [1/5 4/5 -7/5 -2]; %! g = polyaffine (f, [1, 1.2]); -%! x = linspace (-4, 4, 100); -%! plot(x, polyval (f, x), x, polyval (g, x)); +%! x = linspace (-4,4,100); +%! plot (x,polyval(f, x), x,polyval(g, x)); %! legend ("original", "affine"); %! axis ([-4 4 -3 5]); -%! grid ("on"); +%! grid on; %!test %! f = [1/5 4/5 -7/5 -2]; %! mu = [1, 1.2]; %! g = polyaffine (f, mu); -%! x = linspace (-4, 4, 100); +%! x = linspace (-4,4,100); %! assert (polyval (f, x, [], mu), polyval (g, x), 1e-10);
--- a/scripts/polynomial/polyreduce.m +++ b/scripts/polynomial/polyreduce.m @@ -31,35 +31,28 @@ if (nargin != 1) print_usage (); - endif - - if (!isvector (c) || isempty (c)) + elseif (! isvector (c) || isempty (c)) error ("polyreduce: C must be a non-empty vector"); endif - if (! isempty (c)) - - index = find (c != 0); - - if (isempty (index)) + idx = find (c != 0, 1); - p = 0; - - else - - p = c(index (1):length (c)); - - endif - + if (isempty (idx)) + p = 0; + else + p = c(idx:end); endif endfunction -%!assert(all (all (polyreduce ([0, 0, 1, 2, 3]) == [1, 2, 3]))); -%!assert(all (all (polyreduce ([1, 2, 3, 0, 0]) == [1, 2, 3, 0, 0]))); +%!assert (polyreduce ([0, 0, 1, 2, 3]), [1, 2, 3]) +%!assert (polyreduce ([1, 2, 3, 0, 0]), [1, 2, 3, 0, 0]) +%!assert (polyreduce ([1, 0, 3]), [1, 0, 3]) +%!assert (polyreduce ([0, 0, 0]), 0) -%!assert(all (all (polyreduce ([1, 0, 3]) == [1, 0, 3]))); +%!error polyreduce () +%!error polyreduce (1, 2) +%!error <C must be a non-empty vector> polyreduce ([1, 2; 3, 4]) +%!error <C must be a non-empty vector> polyreduce ([]) -%!error polyreduce ([1, 2; 3, 4]); -
--- a/scripts/polynomial/spline.m +++ b/scripts/polynomial/spline.m @@ -107,7 +107,7 @@ a = a(2:end-1,:); endif - if (~issorted (x)) + if (! issorted (x)) [x, idx] = sort(x); a = a(idx,:); endif @@ -244,37 +244,38 @@ endfunction + %!demo -%! x = 0:10; y = sin(x); -%! xspline = 0:0.1:10; yspline = spline(x,y,xspline); -%! title("spline fit to points from sin(x)"); -%! plot(xspline,sin(xspline),"r",xspline,yspline,"g-",x,y,"b+"); -%! legend("original","interpolation","interpolation points"); +%! x = 0:10; y = sin (x); +%! xspline = 0:0.1:10; yspline = spline (x,y,xspline); +%! title ("spline fit to points from sin(x)"); +%! plot (xspline,sin(xspline),"r", xspline,yspline,"g-", x,y,"b+"); +%! legend ("original", "interpolation", "interpolation points"); %! %-------------------------------------------------------- %! % confirm that interpolated function matches the original %!shared x,y,abserr -%! x = [0:10]; y = sin(x); abserr = 1e-14; -%!assert (spline(x,y,x), y, abserr); -%!assert (spline(x,y,x'), y', abserr); -%!assert (spline(x',y',x'), y', abserr); -%!assert (spline(x',y',x), y, abserr); -%!assert (isempty(spline(x',y',[]))); -%!assert (isempty(spline(x,y,[]))); -%!assert (spline(x,[y;y],x), [spline(x,y,x);spline(x,y,x)],abserr) -%!assert (spline(x,[y;y],x'), [spline(x,y,x);spline(x,y,x)],abserr) -%!assert (spline(x',[y;y],x), [spline(x,y,x);spline(x,y,x)],abserr) -%!assert (spline(x',[y;y],x'), [spline(x,y,x);spline(x,y,x)],abserr) +%! x = [0:10]; y = sin (x); abserr = 1e-14; +%!assert (spline (x,y,x), y, abserr) +%!assert (spline (x,y,x'), y', abserr) +%!assert (spline (x',y',x'), y', abserr) +%!assert (spline (x',y',x), y, abserr) +%!assert (isempty (spline (x',y',[]))) +%!assert (isempty (spline (x,y,[]))) +%!assert (spline (x,[y;y],x), [spline(x,y,x);spline(x,y,x)], abserr) +%!assert (spline (x,[y;y],x'), [spline(x,y,x);spline(x,y,x)], abserr) +%!assert (spline (x',[y;y],x), [spline(x,y,x);spline(x,y,x)], abserr) +%!assert (spline (x',[y;y],x'), [spline(x,y,x);spline(x,y,x)], abserr) %! y = cos(x) + i*sin(x); -%!assert (spline(x,y,x), y, abserr) -%!assert (real(spline(x,y,x)), real(y), abserr); -%!assert (real(spline(x,y,x.')), real(y).', abserr); -%!assert (real(spline(x.',y.',x.')), real(y).', abserr); -%!assert (real(spline(x.',y,x)), real(y), abserr); -%!assert (imag(spline(x,y,x)), imag(y), abserr); -%!assert (imag(spline(x,y,x.')), imag(y).', abserr); -%!assert (imag(spline(x.',y.',x.')), imag(y).', abserr); -%!assert (imag(spline(x.',y,x)), imag(y), abserr); +%!assert (spline (x,y,x), y, abserr) +%!assert (real (spline (x,y,x)), real (y), abserr) +%!assert (real (spline (x,y,x.')), real (y).', abserr) +%!assert (real (spline (x.',y.',x.')), real (y).', abserr) +%!assert (real (spline (x.',y,x)), real (y), abserr) +%!assert (imag (spline (x,y,x)), imag (y), abserr) +%!assert (imag (spline (x,y,x.')), imag (y).', abserr) +%!assert (imag (spline (x.',y.',x.')), imag (y).', abserr) +%!assert (imag (spline (x.',y,x)), imag (y), abserr) %!test %! xnan = 5; %! y(x==xnan) = NaN; @@ -303,3 +304,4 @@ %! pp = spline (x,y); %! [x,P] = unmkpp (pp); %! assert (norm (P-[7,-9,1,3]), 0, abserr); +
--- a/scripts/prefs/private/prefsfile.m +++ b/scripts/prefs/private/prefsfile.m @@ -27,25 +27,6 @@ retval = "~/.octave_prefs"; - ## Transition users to new filename if necessary - ## FIXME: Delete before 3.6.0 release - oldname = tilde_expand ("~/.octave-prefs"); - if (exist (oldname, "file")) - newname = tilde_expand (retval); - if (exist (newname, "file")) - error (["Octave uses the file ~/.octave_prefs to store preferences.\n",... - " The old file name was ~/.octave-prefs.\n",... - " Both files exist."... - " User must manually delete one of the files.\n"]); - endif - status = movefile (oldname, newname); - if (! status) - error (["Octave uses the file ~/.octave_prefs to store preferences.\n", - " The old file name was ~/.octave-prefs.\n", - " User must manually rename the old file to the new name.\n"]); - endif - endif - endfunction %% Testing these functions will require some care to avoid wiping out
--- a/scripts/sparse/bicgstab.m +++ b/scripts/sparse/bicgstab.m @@ -206,11 +206,12 @@ endfunction + %!demo %! % Solve system of A*x=b -%! A = [5 -1 3;-1 2 -2;3 -2 3] -%! b = [7;-1;4] -%! [x, flag, relres, iter, resvec] = bicgstab(A, b) +%! A = [5 -1 3;-1 2 -2;3 -2 3]; +%! b = [7;-1;4]; +%! [x, flag, relres, iter, resvec] = bicgstab (A, b) %!shared A, b, n, M1, M2 %!
--- a/scripts/sparse/cgs.m +++ b/scripts/sparse/cgs.m @@ -189,12 +189,11 @@ endfunction - %!demo %! % Solve system of A*x=b -%! A=[5 -1 3;-1 2 -2;3 -2 3] -%! b=[7;-1;4] -%! [a,b,c,d,e]=cgs(A,b) +%! A = [5 -1 3;-1 2 -2;3 -2 3]; +%! b = [7;-1;4]; +%! [a,b,c,d,e] = cgs (A,b) %!shared A, b, n, M %! @@ -223,3 +222,4 @@ %! b = sum (A, 2); %! [x, flag, relres, iter, resvec] = cgs (A, b, tol, [], diag (diag (A))); %! assert (x, ones (size (b)), 1e-7); +
--- a/scripts/sparse/gplot.m +++ b/scripts/sparse/gplot.m @@ -66,13 +66,13 @@ %! 0 0 0 0 1 0 0 %! 0 0 0 0 1 0 0]; %! -%! xy = [1, 0 +%! xy = [1 , 0 %! 1.5, 1 -%! 2, 0 +%! 2 , 0 %! 2.5, 2 %! 3.5, 1 -%! 3, 0 -%! 4, 0]; +%! 3 , 0 +%! 4 , 0]; %! %! clf; %! gplot (A, xy, "o-");
--- a/scripts/sparse/pcg.m +++ b/scripts/sparse/pcg.m @@ -389,145 +389,154 @@ endif endfunction + %!demo -%! -%! # Simplest usage of pcg (see also 'help pcg') -%! -%! N = 10; -%! A = diag ([1:N]); b = rand (N, 1); y = A \ b; #y is the true solution -%! x = pcg (A, b); -%! printf('The solution relative error is %g\n', norm (x - y) / norm (y)); -%! -%! # You shouldn't be afraid if pcg issues some warning messages in this -%! # example: watch out in the second example, why it takes N iterations -%! # of pcg to converge to (a very accurate, by the way) solution +%! # Simplest usage of pcg (see also 'help pcg') +%! +%! N = 10; +%! A = diag ([1:N]); b = rand (N, 1); +%! y = A \ b; # y is the true solution +%! x = pcg (A, b); +%! printf ("The solution relative error is %g\n", norm (x - y) / norm (y)); +%! +%! # You shouldn't be afraid if pcg issues some warning messages in this +%! # example: watch out in the second example, why it takes N iterations +%! # of pcg to converge to (a very accurate, by the way) solution + %!demo -%! -%! # Full output from pcg, except for the eigenvalue estimates -%! # We use this output to plot the convergence history -%! -%! N = 10; -%! A = diag ([1:N]); b = rand (N, 1); X = A \ b; #X is the true solution -%! [x, flag, relres, iter, resvec] = pcg (A, b); -%! printf('The solution relative error is %g\n', norm (x - X) / norm (X)); -%! title('Convergence history'); xlabel('Iteration'); ylabel('log(||b-Ax||/||b||)'); -%! semilogy([0:iter], resvec / resvec(1),'o-g'); -%! legend('relative residual'); +%! # Full output from pcg, except for the eigenvalue estimates +%! # We use this output to plot the convergence history +%! +%! N = 10; +%! A = diag ([1:N]); b = rand (N, 1); +%! X = A \ b; # X is the true solution +%! [x, flag, relres, iter, resvec] = pcg (A, b); +%! printf ("The solution relative error is %g\n", norm (x - X) / norm (X)); +%! title ("Convergence history"); +%! semilogy ([0:iter], resvec / resvec(1), "o-g"); +%! xlabel ("Iteration"); ylabel ("log(||b-Ax||/||b||)"); +%! legend ("relative residual"); + %!demo -%! -%! # Full output from pcg, including the eigenvalue estimates -%! # Hilbert matrix is extremely ill conditioned, so pcg WILL have problems -%! -%! N = 10; -%! A = hilb (N); b = rand (N, 1); X = A \ b; #X is the true solution -%! [x, flag, relres, iter, resvec, eigest] = pcg (A, b, [], 200); -%! printf('The solution relative error is %g\n', norm (x - X) / norm (X)); -%! printf('Condition number estimate is %g\n', eigest(2) / eigest (1)); -%! printf('Actual condition number is %g\n', cond (A)); -%! title('Convergence history'); xlabel('Iteration'); ylabel('log(||b-Ax||)'); -%! semilogy([0:iter], resvec,['o-g';'+-r']); -%! legend('absolute residual','absolute preconditioned residual'); +%! # Full output from pcg, including the eigenvalue estimates +%! # Hilbert matrix is extremely ill-conditioned, so pcg WILL have problems +%! +%! N = 10; +%! A = hilb (N); b = rand (N, 1); +%! X = A \ b; # X is the true solution +%! [x, flag, relres, iter, resvec, eigest] = pcg (A, b, [], 200); +%! printf ("The solution relative error is %g\n", norm (x - X) / norm (X)); +%! printf ("Condition number estimate is %g\n", eigest(2) / eigest(1)); +%! printf ("Actual condition number is %g\n", cond (A)); +%! title ("Convergence history"); +%! semilogy ([0:iter], resvec, ["o-g";"+-r"]); +%! xlabel ("Iteration"); ylabel ("log(||b-Ax||)"); +%! legend ("absolute residual", "absolute preconditioned residual"); + %!demo %! -%! # Full output from pcg, including the eigenvalue estimates -%! # We use the 1-D Laplacian matrix for A, and cond(A) = O(N^2) -%! # and that's the reasone we need some preconditioner; here we take -%! # a very simple and not powerful Jacobi preconditioner, -%! # which is the diagonal of A +%! # Full output from pcg, including the eigenvalue estimates +%! # We use the 1-D Laplacian matrix for A, and cond(A) = O(N^2) +%! # and that's the reason we need some preconditioner; here we take +%! # a very simple and not powerful Jacobi preconditioner, +%! # which is the diagonal of A %! -%! N = 100; -%! A = zeros (N, N); -%! for i=1 : N - 1 # form 1-D Laplacian matrix -%! A (i:i+1, i:i+1) = [2 -1; -1 2]; -%! endfor -%! b = rand (N, 1); X = A \ b; #X is the true solution -%! maxit = 80; -%! printf('System condition number is %g\n', cond (A)); -%! # No preconditioner: the convergence is very slow! +%! N = 100; +%! A = zeros (N, N); +%! for i = 1 : N - 1 # form 1-D Laplacian matrix +%! A(i:i+1, i:i+1) = [2 -1; -1 2]; +%! endfor +%! b = rand (N, 1); +%! X = A \ b; # X is the true solution +%! maxit = 80; +%! printf ("System condition number is %g\n", cond (A)); +%! # No preconditioner: the convergence is very slow! %! -%! [x, flag, relres, iter, resvec, eigest] = pcg (A, b, [], maxit); -%! printf('System condition number estimate is %g\n', eigest(2) / eigest(1)); -%! title('Convergence history'); xlabel('Iteration'); ylabel('log(||b-Ax||)'); -%! semilogy([0:iter], resvec(:,1), 'o-g'); -%! legend('NO preconditioning: absolute residual'); -%! -%! pause(1); -%! # Test Jacobi preconditioner: it will not help much!!! +%! [x, flag, relres, iter, resvec, eigest] = pcg (A, b, [], maxit); +%! printf ("System condition number estimate is %g\n", eigest(2) / eigest(1)); +%! title ("Convergence history"); +%! semilogy ([0:iter], resvec(:,1), "o-g"); +%! xlabel ("Iteration"); ylabel ("log(||b-Ax||)"); +%! legend ("NO preconditioning: absolute residual"); %! -%! M = diag (diag (A)); # Jacobi preconditioner -%! [x, flag, relres, iter, resvec, eigest] = pcg (A, b, [], maxit, M); -%! printf('JACOBI preconditioned system condition number estimate is %g\n', eigest(2) / eigest(1)); -%! hold on; -%! semilogy([0:iter], resvec(:,1), 'o-r'); -%! legend('NO preconditioning: absolute residual', ... -%! 'JACOBI preconditioner: absolute residual'); +%! pause (1); +%! # Test Jacobi preconditioner: it will not help much!!! %! -%! pause(1); -%! # Test nonoverlapping block Jacobi preconditioner: it will help much! +%! M = diag (diag (A)); # Jacobi preconditioner +%! [x, flag, relres, iter, resvec, eigest] = pcg (A, b, [], maxit, M); +%! printf ("JACOBI preconditioned system condition number estimate is %g\n", eigest(2) / eigest(1)); +%! hold on; +%! semilogy ([0:iter], resvec(:,1), "o-r"); +%! legend ("NO preconditioning: absolute residual", ... +%! "JACOBI preconditioner: absolute residual"); +%! +%! pause (1); +%! # Test nonoverlapping block Jacobi preconditioner: it will help much! %! -%! M = zeros (N, N); k = 4; -%! for i = 1 : k : N # form 1-D Laplacian matrix -%! M (i:i+k-1, i:i+k-1) = A (i:i+k-1, i:i+k-1); -%! endfor -%! [x, flag, relres, iter, resvec, eigest] = pcg (A, b, [], maxit, M); -%! printf('BLOCK JACOBI preconditioned system condition number estimate is %g\n', eigest(2) / eigest(1)); -%! semilogy ([0:iter], resvec(:,1),'o-b'); -%! legend('NO preconditioning: absolute residual', ... -%! 'JACOBI preconditioner: absolute residual', ... -%! 'BLOCK JACOBI preconditioner: absolute residual'); -%! hold off; +%! M = zeros (N, N); k = 4; +%! for i = 1 : k : N # form 1-D Laplacian matrix +%! M(i:i+k-1, i:i+k-1) = A(i:i+k-1, i:i+k-1); +%! endfor +%! [x, flag, relres, iter, resvec, eigest] = pcg (A, b, [], maxit, M); +%! printf ("BLOCK JACOBI preconditioned system condition number estimate is %g\n", eigest(2) / eigest(1)); +%! semilogy ([0:iter], resvec(:,1), "o-b"); +%! legend ("NO preconditioning: absolute residual", ... +%! "JACOBI preconditioner: absolute residual", ... +%! "BLOCK JACOBI preconditioner: absolute residual"); +%! hold off; + %!test -%! -%! #solve small diagonal system +%! # solve small diagonal system %! -%! N = 10; -%! A = diag ([1:N]); b = rand (N, 1); X = A \ b; #X is the true solution -%! [x, flag] = pcg (A, b, [], N+1); -%! assert(norm (x - X) / norm (X), 0, 1e-10); -%! assert(flag, 0); -%! +%! N = 10; +%! A = diag ([1:N]); b = rand (N, 1); +%! X = A \ b; # X is the true solution +%! [x, flag] = pcg (A, b, [], N+1); +%! assert (norm (x - X) / norm (X), 0, 1e-10); +%! assert (flag, 0); + %!test +%! # solve small indefinite diagonal system +%! # despite A is indefinite, the iteration continues and converges +%! # indefiniteness of A is detected %! -%! #solve small indefinite diagonal system -%! #despite A is indefinite, the iteration continues and converges -%! #indefiniteness of A is detected -%! -%! N = 10; -%! A = diag([1:N] .* (-ones(1, N) .^ 2)); b = rand (N, 1); X = A \ b; #X is the true solution -%! [x, flag] = pcg (A, b, [], N+1); -%! assert(norm (x - X) / norm (X), 0, 1e-10); -%! assert(flag, 3); -%! +%! N = 10; +%! A = diag([1:N] .* (-ones(1, N) .^ 2)); b = rand (N, 1); +%! X = A \ b; # X is the true solution +%! [x, flag] = pcg (A, b, [], N+1); +%! assert (norm (x - X) / norm (X), 0, 1e-10); +%! assert (flag, 3); + %!test -%! -%! #solve tridiagonal system, do not converge in default 20 iterations +%! # solve tridiagonal system, do not converge in default 20 iterations %! -%! N = 100; -%! A = zeros (N, N); -%! for i = 1 : N - 1 # form 1-D Laplacian matrix -%! A (i:i+1, i:i+1) = [2 -1; -1 2]; -%! endfor -%! b = ones (N, 1); X = A \ b; #X is the true solution -%! [x, flag, relres, iter, resvec, eigest] = pcg (A, b, 1e-12); -%! assert(flag); -%! assert(relres > 1.0); -%! assert(iter, 20); #should perform max allowable default number of iterations -%! +%! N = 100; +%! A = zeros (N, N); +%! for i = 1 : N - 1 # form 1-D Laplacian matrix +%! A(i:i+1, i:i+1) = [2 -1; -1 2]; +%! endfor +%! b = ones (N, 1); +%! X = A \ b; # X is the true solution +%! [x, flag, relres, iter, resvec, eigest] = pcg (A, b, 1e-12); +%! assert (flag); +%! assert (relres > 1.0); +%! assert (iter, 20); # should perform max allowable default number of iterations + %!test +%! # solve tridiagonal system with 'perfect' preconditioner +%! # which converges in one iteration, so the eigest does not +%! # work and issues a warning %! -%! #solve tridiagonal system with 'prefect' preconditioner -%! #converges in one iteration, so the eigest does not work -%! #and issues a warning -%! -%! N = 100; -%! A = zeros (N, N); -%! for i = 1 : N - 1 # form 1-D Laplacian matrix -%! A (i:i+1, i:i+1) = [2 -1; -1 2]; -%! endfor -%! b = ones (N, 1); X = A \ b; #X is the true solution -%! [x, flag, relres, iter, resvec, eigest] = pcg (A, b, [], [], A, [], b); -%! assert(norm (x - X) / norm (X), 0, 1e-6); -%! assert(flag, 0); -%! assert(iter, 1); #should converge in one iteration -%! assert(isnan (eigest), isnan ([NaN, NaN])); -%! +%! N = 100; +%! A = zeros (N, N); +%! for i = 1 : N - 1 # form 1-D Laplacian matrix +%! A (i:i+1, i:i+1) = [2 -1; -1 2]; +%! endfor +%! b = ones (N, 1); +%! X = A \ b; # X is the true solution +%! [x, flag, relres, iter, resvec, eigest] = pcg (A, b, [], [], A, [], b); +%! assert (norm (x - X) / norm (X), 0, 1e-6); +%! assert (flag, 0); +%! assert (iter, 1); # should converge in one iteration +%! assert (isnan (eigest), isnan ([NaN, NaN])); +
--- a/scripts/sparse/pcr.m +++ b/scripts/sparse/pcr.m @@ -110,7 +110,7 @@ ## @sc{Example 1:} Simplest use of @code{pcr} ## ## @example -## x = pcr(A, b) +## x = pcr (A, b) ## @end example ## ## @sc{Example 2:} @code{pcr} with a function which computes @@ -300,132 +300,143 @@ endfunction + %!demo -%! -%! # Simplest usage of PCR (see also 'help pcr') +%! # Simplest usage of PCR (see also 'help pcr') %! -%! N = 20; -%! A = diag(linspace(-3.1,3,N)); b = rand(N,1); y = A\b; #y is the true solution -%! x = pcr(A,b); -%! printf('The solution relative error is %g\n', norm(x-y)/norm(y)); -%! -%! # You shouldn't be afraid if PCR issues some warning messages in this -%! # example: watch out in the second example, why it takes N iterations -%! # of PCR to converge to (a very accurate, by the way) solution -%!demo +%! N = 20; +%! A = diag (linspace (-3.1,3,N)); b = rand (N,1); +%! y = A \ b; # y is the true solution +%! x = pcr (A,b); +%! printf ("The solution relative error is %g\n", norm (x-y) / norm (y)); %! -%! # Full output from PCR -%! # We use this output to plot the convergence history +%! # You shouldn't be afraid if PCR issues some warning messages in this +%! # example: watch out in the second example, why it takes N iterations +%! # of PCR to converge to (a very accurate, by the way) solution + +%!demo +%! # Full output from PCR +%! # We use this output to plot the convergence history %! -%! N = 20; -%! A = diag(linspace(-3.1,30,N)); b = rand(N,1); X = A\b; #X is the true solution -%! [x, flag, relres, iter, resvec] = pcr(A,b); -%! printf('The solution relative error is %g\n', norm(x-X)/norm(X)); -%! title('Convergence history'); xlabel('Iteration'); ylabel('log(||b-Ax||/||b||)'); -%! semilogy([0:iter],resvec/resvec(1),'o-g;relative residual;'); +%! N = 20; +%! A = diag (linspace(-3.1,30,N)); b = rand (N,1); +%! X = A \ b; # X is the true solution +%! [x, flag, relres, iter, resvec] = pcr (A,b); +%! printf ("The solution relative error is %g\n", norm (x-X) / norm (X)); +%! clf; +%! title ("Convergence history"); +%! xlabel ("Iteration"); ylabel ("log(||b-Ax||/||b||)"); +%! semilogy ([0:iter], resvec/resvec(1), "o-g;relative residual;"); + %!demo -%! -%! # Full output from PCR -%! # We use indefinite matrix based on the Hilbert matrix, with one -%! # strongly negative eigenvalue -%! # Hilbert matrix is extremely ill conditioned, so is ours, -%! # and that's why PCR WILL have problems +%! # Full output from PCR +%! # We use indefinite matrix based on the Hilbert matrix, with one +%! # strongly negative eigenvalue +%! # Hilbert matrix is extremely ill conditioned, so is ours, +%! # and that's why PCR WILL have problems %! -%! N = 10; -%! A = hilb(N); A(1,1)=-A(1,1); b = rand(N,1); X = A\b; #X is the true solution -%! printf('Condition number of A is %g\n', cond(A)); -%! [x, flag, relres, iter, resvec] = pcr(A,b,[],200); -%! if (flag == 3) -%! printf('PCR breakdown. System matrix is [close to] singular\n'); -%! end -%! title('Convergence history'); xlabel('Iteration'); ylabel('log(||b-Ax||)'); -%! semilogy([0:iter],resvec,'o-g;absolute residual;'); +%! N = 10; +%! A = hilb (N); A(1,1) = -A(1,1); b = rand (N,1); +%! X = A \ b; # X is the true solution +%! printf ("Condition number of A is %g\n", cond (A)); +%! [x, flag, relres, iter, resvec] = pcr (A,b,[],200); +%! if (flag == 3) +%! printf ("PCR breakdown. System matrix is [close to] singular\n"); +%! end +%! clf; +%! title ("Convergence history"); +%! xlabel ("Iteration"); ylabel ("log(||b-Ax||)"); +%! semilogy ([0:iter], resvec, "o-g;absolute residual;"); + %!demo +%! # Full output from PCR +%! # We use an indefinite matrix based on the 1-D Laplacian matrix for A, +%! # and here we have cond(A) = O(N^2) +%! # That's the reason we need some preconditioner; here we take +%! # a very simple and not powerful Jacobi preconditioner, +%! # which is the diagonal of A %! -%! # Full output from PCR -%! # We use an indefinite matrix based on the 1-D Laplacian matrix for A, -%! # and here we have cond(A) = O(N^2) -%! # That's the reason we need some preconditioner; here we take -%! # a very simple and not powerful Jacobi preconditioner, -%! # which is the diagonal of A -%! -%! # Note that we use here indefinite preconditioners! +%! # Note that we use here indefinite preconditioners! %! -%! N = 100; -%! A = zeros(N,N); -%! for i=1:N-1 # form 1-D Laplacian matrix -%! A(i:i+1,i:i+1) = [2 -1; -1 2]; -%! endfor -%! A = [A, zeros(size(A)); zeros(size(A)), -A]; -%! b = rand(2*N,1); X = A\b; #X is the true solution -%! maxit = 80; -%! printf('System condition number is %g\n',cond(A)); -%! # No preconditioner: the convergence is very slow! +%! N = 100; +%! A = zeros (N,N); +%! for i=1:N-1 # form 1-D Laplacian matrix +%! A(i:i+1,i:i+1) = [2 -1; -1 2]; +%! endfor +%! A = [A, zeros(size(A)); zeros(size(A)), -A]; +%! b = rand (2*N,1); +%! X = A \ b; # X is the true solution +%! maxit = 80; +%! printf ("System condition number is %g\n", cond (A)); +%! # No preconditioner: the convergence is very slow! %! -%! [x, flag, relres, iter, resvec] = pcr(A,b,[],maxit); -%! title('Convergence history'); xlabel('Iteration'); ylabel('log(||b-Ax||)'); -%! semilogy([0:iter],resvec,'o-g;NO preconditioning: absolute residual;'); -%! -%! pause(1); -%! # Test Jacobi preconditioner: it will not help much!!! +%! [x, flag, relres, iter, resvec] = pcr (A,b,[],maxit); +%! clf; +%! title ("Convergence history"); +%! xlabel ("Iteration"); ylabel ("log(||b-Ax||)"); +%! semilogy ([0:iter], resvec, "o-g;NO preconditioning: absolute residual;"); %! -%! M = diag(diag(A)); # Jacobi preconditioner -%! [x, flag, relres, iter, resvec] = pcr(A,b,[],maxit,M); -%! hold on; -%! semilogy([0:iter],resvec,'o-r;JACOBI preconditioner: absolute residual;'); +%! pause (1); +%! # Test Jacobi preconditioner: it will not help much!!! %! -%! pause(1); -%! # Test nonoverlapping block Jacobi preconditioner: this one should give -%! # some convergence speedup! +%! M = diag (diag (A)); # Jacobi preconditioner +%! [x, flag, relres, iter, resvec] = pcr (A,b,[],maxit,M); +%! hold on; +%! semilogy ([0:iter],resvec,"o-r;JACOBI preconditioner: absolute residual;"); %! -%! M = zeros(N,N);k=4; -%! for i=1:k:N # get k x k diagonal blocks of A -%! M(i:i+k-1,i:i+k-1) = A(i:i+k-1,i:i+k-1); -%! endfor -%! M = [M, zeros(size(M)); zeros(size(M)), -M]; -%! [x, flag, relres, iter, resvec] = pcr(A,b,[],maxit,M); -%! semilogy([0:iter],resvec,'o-b;BLOCK JACOBI preconditioner: absolute residual;'); -%! hold off; +%! pause (1); +%! # Test nonoverlapping block Jacobi preconditioner: this one should give +%! # some convergence speedup! +%! +%! M = zeros (N,N); k = 4; +%! for i=1:k:N # get k x k diagonal blocks of A +%! M(i:i+k-1,i:i+k-1) = A(i:i+k-1,i:i+k-1); +%! endfor +%! M = [M, zeros(size (M)); zeros(size(M)), -M]; +%! [x, flag, relres, iter, resvec] = pcr (A,b,[],maxit,M); +%! semilogy ([0:iter], resvec, "o-b;BLOCK JACOBI preconditioner: absolute residual;"); +%! hold off; + %!test -%! -%! #solve small indefinite diagonal system -%! -%! N = 10; -%! A = diag(linspace(-10.1,10,N)); b = ones(N,1); X = A\b; #X is the true solution -%! [x, flag] = pcr(A,b,[],N+1); -%! assert(norm(x-X)/norm(X)<1e-10); -%! assert(flag,0); +%! # solve small indefinite diagonal system %! -%!test -%! -%! #solve tridiagonal system, do not converge in default 20 iterations -%! #should perform max allowable default number of iterations -%! -%! N = 100; -%! A = zeros(N,N); -%! for i=1:N-1 # form 1-D Laplacian matrix -%! A(i:i+1,i:i+1) = [2 -1; -1 2]; -%! endfor -%! b = ones(N,1); X = A\b; #X is the true solution -%! [x, flag, relres, iter, resvec] = pcr(A,b,1e-12); -%! assert(flag,1); -%! assert(relres>0.6); -%! assert(iter,20); -%! +%! N = 10; +%! A = diag (linspace (-10.1,10,N)); b = ones (N,1); +%! X = A \ b; # X is the true solution +%! [x, flag] = pcr (A,b,[],N+1); +%! assert (norm (x-X) / norm (X) < 1e-10); +%! assert (flag, 0); + %!test -%! -%! #solve tridiagonal system with 'prefect' preconditioner -%! #converges in one iteration +%! # solve tridiagonal system, do not converge in default 20 iterations +%! # should perform max allowable default number of iterations %! -%! N = 100; -%! A = zeros(N,N); -%! for i=1:N-1 # form 1-D Laplacian matrix -%! A(i:i+1,i:i+1) = [2 -1; -1 2]; -%! endfor -%! b = ones(N,1); X = A\b; #X is the true solution -%! [x, flag, relres, iter] = pcr(A,b,[],[],A,b); -%! assert(norm(x-X)/norm(X)<1e-6); -%! assert(relres<1e-6); -%! assert(flag,0); -%! assert(iter,1); #should converge in one iteration +%! N = 100; +%! A = zeros (N,N); +%! for i=1:N-1 # form 1-D Laplacian matrix +%! A(i:i+1,i:i+1) = [2 -1; -1 2]; +%! endfor +%! b = ones (N,1); +%! X = A \ b; # X is the true solution +%! [x, flag, relres, iter, resvec] = pcr (A,b,1e-12); +%! assert (flag, 1); +%! assert (relres > 0.6); +%! assert (iter, 20); + +%!test +%! # solve tridiagonal system with "perfect" preconditioner +%! # converges in one iteration %! +%! N = 100; +%! A = zeros (N,N); +%! for i=1:N-1 # form 1-D Laplacian matrix +%! A(i:i+1,i:i+1) = [2 -1; -1 2]; +%! endfor +%! b = ones (N,1); +%! X = A \ b; # X is the true solution +%! [x, flag, relres, iter] = pcr (A,b,[],[],A,b); +%! assert (norm (x-X) / norm(X) < 1e-6); +%! assert (relres < 1e-6); +%! assert (flag, 0); +%! assert (iter, 1); # should converge in one iteration +
--- a/scripts/sparse/treeplot.m +++ b/scripts/sparse/treeplot.m @@ -196,10 +196,14 @@ endfunction -%!demo -%! % Plot a simple tree plot -%! treeplot([2 4 2 0 6 4 6]) %!demo +%! clf; +%! treeplot ([2 4 2 0 6 4 6]); +%! % Plot a simple tree plot + +%!demo +%! clf; +%! treeplot ([2 4 2 0 6 4 6], "b+", "g"); %! % Plot a simple tree plot defining the edge and node styles -%! treeplot([2 4 2 0 6 4 6], "b+", "g") +
--- a/scripts/startup/__finish__.m +++ b/scripts/startup/__finish__.m @@ -23,9 +23,9 @@ ## Check for the existence of the function/script, @file{finish}, in the ## path or current working directory and execute it. This function is -## intended to be excecuted upon a clean exit form Octave. This is +## intended to be excecuted upon a clean exit from Octave. This is ## accomplished in the system script @file{startup/octaverc} by use of -## the built-in function @code{onexit}. +## the built-in function @code{atexit}. function __finish__ () @@ -36,5 +36,6 @@ endfunction + ## No test needed for internal helper function. %!assert (1)
--- a/scripts/statistics/base/var.m +++ b/scripts/statistics/base/var.m @@ -51,6 +51,9 @@ ## normalizes with @math{N}, this provides the second moment around the mean ## @end table ## +## If @math{N==1} the value of @var{opt} is ignored and normalization +## by @math{N} is used. +## ## If the optional argument @var{dim} is given, operate along this dimension. ## @seealso{cov, std, skewness, kurtosis, moment} ## @end deftypefn
--- a/scripts/statistics/base/zscore.m +++ b/scripts/statistics/base/zscore.m @@ -17,23 +17,31 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {} zscore (@var{x}) -## @deftypefnx {Function File} {} zscore (@var{x}, @var{dim}) +## @deftypefn {Function File} {[@var{z}, @var{mu}, @var{sigma}] =} zscore (@var{x}) +## @deftypefnx {Function File} {[@var{z}, @var{mu}, @var{sigma}] =} zscore (@var{x}, @var{opt}) +## @deftypefnx {Function File} {[@var{z}, @var{mu}, @var{sigma}] =} zscore (@var{x}, @var{opt}, @var{dim}) ## If @var{x} is a vector, subtract its mean and divide by its standard -## deviation. +## deviation. If the standard deviation is zero, divide by 1 instead. +## The optional parameter @var{opt} determines the normalization to use +## when computing the standard deviation and is the same as the +## corresponding parameter for @code{std}. ## ## If @var{x} is a matrix, do the above along the first non-singleton -## dimension. -## If the optional argument @var{dim} is given, operate along this dimension. -## @seealso{center} +## dimension. If the third optional argument @var{dim} is given, operate +## along this dimension. +## +## The mean and standard deviation along @var{dim} are given in @var{mu} +## and @var{sigma} respectively. +## +## @seealso{mean, std, center} ## @end deftypefn ## Author: KH <Kurt.Hornik@wu-wien.ac.at> ## Description: Subtract mean and divide by standard deviation -function z = zscore (x, dim) +function [z, mu, sigma] = zscore (x, opt, dim) - if (nargin != 1 && nargin != 2) + if (nargin < 1 || nargin > 3 ) print_usage (); endif @@ -41,9 +49,17 @@ error ("zscore: X must be a numeric vector or matrix"); endif + if (nargin < 2) + opt = 0; + else + if (opt != 0 && opt != 1 || ! isscalar(opt)) + error("zscore: OPT must be empty, 0, or 1"); + endif + endif + nd = ndims (x); sz = size (x); - if (nargin != 2) + if (nargin < 3) ## Find the first non-singleton dimension. (dim = find (sz > 1, 1)) || (dim = 1); else @@ -57,11 +73,17 @@ if (n == 0) z = x; else - x = center (x, dim); # center also promotes integer to double for next line - z = zeros (sz, class (x)); - s = std (x, [], dim); + + if (isinteger (x)) + x = double (x); + endif + + mu = mean (x, dim); + sigma = std (x, opt, dim); + s = sigma; s(s==0) = 1; - z = bsxfun (@rdivide, x, s); + ## FIXME: Use normal broadcasting once we can disable that warning + z = bsxfun (@rdivide, bsxfun (@minus, x, mu), s); endif endfunction @@ -79,6 +101,6 @@ %!error zscore (['A'; 'B']) %!error zscore (1, ones(2,2)) %!error zscore (1, 1.5) -%!error zscore (1, 0) +%!error zscore (1, 1, 0) %!error zscore (1, 3)
--- a/scripts/strings/strmatch.m +++ b/scripts/strings/strmatch.m @@ -26,7 +26,6 @@ ## 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}. ## Trailing spaces and nulls in @var{s} and @var{A} are ignored when matching. -## option. ## ## For example: ## @@ -44,7 +43,8 @@ ## @end example ## ## @strong{Caution:} @code{strmatch} is scheduled for deprecation. Use -## @code{strcmpi} or @code{strncmpi} in all new code. +## @code{strncmp} (normal case), or @code{strcmp} ("exact" case), or +## @code{regexp} in all new code. ## @seealso{strfind, findstr, strcmp, strncmp, strcmpi, strncmpi, find} ## @end deftypefn
--- a/scripts/strings/strtok.m +++ b/scripts/strings/strtok.m @@ -133,7 +133,7 @@ %!demo -%! strtok("this is the life") +%! strtok ("this is the life") %! % split at the first space, returning "this" %!demo
--- a/scripts/testfun/demo.m +++ b/scripts/testfun/demo.m @@ -35,8 +35,9 @@ ## @example ## @group ## %!demo -## %! t=0:0.01:2*pi; x = sin(t); -## %! plot (t,x) +## %! t = 0:0.01:2*pi; +## %! x = sin (t); +## %! plot (t,x); ## %! %------------------------------------------------- ## %! % the figure window shows one cycle of a sine wave ## @end group @@ -144,9 +145,11 @@ endfunction + %!demo -%! t=0:0.01:2*pi; x = sin(t); -%! plot (t,x) +%! t = 0:0.01:2*pi; +%! x = sin (t); +%! plot (t,x); %! %------------------------------------------------- %! % the figure window shows one cycle of a sine wave
--- a/scripts/testfun/example.m +++ b/scripts/testfun/example.m @@ -84,10 +84,12 @@ endfunction -%!## warning: don't modify the demos without modifying the tests! +## WARNING: don't modify the demos without modifying the tests! %!demo %! example ('example'); + %!demo +%! clf; %! t=0:0.01:2*pi; x = sin(t); %! plot (t,x) @@ -95,8 +97,8 @@ %!test %! [code, idx] = example ('example'); %! assert (code, ... -%! "\n example ('example');\n t=0:0.01:2*pi; x = sin(t);\n plot (t,x)") -%! assert (idx, [1, 23, 63]); +%! "\n example ('example');\n clf;\n t=0:0.01:2*pi; x = sin(t);\n plot (t,x)") +%! assert (idx, [1, 23, 69]); %% Test input validation %!error example
--- a/scripts/testfun/rundemos.m +++ b/scripts/testfun/rundemos.m @@ -82,8 +82,11 @@ else str = fscanf (fid, "%s"); fclose (fid); - retval = findstr (str, "%!demo"); + retval = strfind (str, "%!demo"); endif endfunction -%!error rundemos ("foo", 1); + +%!error rundemos ("foo", 1) +%!error <DIRECTORY argument> rundemos ("#_TOTALLY_/_INVALID_/_PATHNAME_#") +
--- a/scripts/testfun/speed.m +++ b/scripts/testfun/speed.m @@ -357,16 +357,16 @@ %% because of another bug (#34497). %!demo %! fstr_build_orig = cstrcat ( -%! "function x = build_orig (n)\n", -%! " ## extend the target vector on the fly\n", -%! " for i=0:n-1, x([1:100]+i*100) = 1:100; endfor\n", -%! "endfunction"); +%! "function x = build_orig (n)\n", +%! " ## extend the target vector on the fly\n", +%! " for i=0:n-1, x([1:100]+i*100) = 1:100; endfor\n", +%! "endfunction"); %! fstr_build = cstrcat ( -%! "function x = build (n)\n", -%! " ## preallocate the target vector\n", -%! " x = zeros (1, n*100);\n", -%! " for i=0:n-1, x([1:100]+i*100) = 1:100; endfor\n", -%! "endfunction"); +%! "function x = build (n)\n", +%! " ## preallocate the target vector\n", +%! " x = zeros (1, n*100);\n", +%! " for i=0:n-1, x([1:100]+i*100) = 1:100; endfor\n", +%! "endfunction"); %! %! disp ("-----------------------"); %! disp (fstr_build_orig); @@ -381,20 +381,21 @@ %! disp ("Preallocated vector test.\nThis takes a little while..."); %! speed("build (n)", "", 1000, "build_orig (n)"); %! clear -f build build_orig +%! disp ("-----------------------"); %! disp ("Note how much faster it is to pre-allocate a vector."); %! disp ("Notice the peak speedup ratio."); %!demo %! fstr_build_orig = cstrcat ( -%! "function x = build_orig (n)\n", -%! " for i=0:n-1, x([1:100]+i*100) = 1:100; endfor\n", -%! "endfunction"); +%! "function x = build_orig (n)\n", +%! " for i=0:n-1, x([1:100]+i*100) = 1:100; endfor\n", +%! "endfunction"); %! fstr_build = cstrcat ( -%! "function x = build (n)\n", -%! " idx = [1:100]';\n", -%! " x = idx(:,ones(1,n));\n", -%! " x = reshape (x, 1, n*100);\n", -%! "endfunction"); +%! "function x = build (n)\n", +%! " idx = [1:100]';\n", +%! " x = idx(:,ones(1,n));\n", +%! " x = reshape (x, 1, n*100);\n", +%! "endfunction"); %! %! disp ("-----------------------"); %! disp (fstr_build_orig); @@ -425,7 +426,8 @@ %! assert (isnumeric (T_f2)); %! assert (length (T_f2) > 10); -%% This test is known to fail on operating systems with low resolution timers such as MinGW +%% This test is known to fail on operating systems with low resolution timers +%% such as MinGW %!xtest %! [order, n, T_f1, T_f2] = speed ("sum (x)", "", [100, 1000], "v = 0; for i = 1:length (x), v += x(i); endfor"); %! assert (isstruct (order));
--- a/scripts/testfun/test.m +++ b/scripts/testfun/test.m @@ -805,15 +805,15 @@ %!## demo blocks %!demo # multiline demo block -%! t=[0:0.01:2*pi]; x=sin(t); -%! plot(t,x); +%! t = [0:0.01:2*pi]; x = sin (t); +%! plot (t,x); %! % you should now see a sine wave in your figure window %!demo a=3 # single line demo blocks work too %!## this is a comment block. it can contain anything. %!## %! it is the "#" as the block type that makes it a comment -%! and it stays as a comment even through continuation lines +%! and it stays as a comment even through continuation lines %! which means that it works well with commenting out whole tests % !# failure tests. All the following should fail. These tests should @@ -838,3 +838,4 @@ % ! ## These don't signal an error, so the test for an error fails. Note % ! ## that the call doesn't reference the current fid (it is unavailable), % ! ## so of course the informational message is not printed in the log. +
--- a/scripts/time/calendar.m +++ b/scripts/time/calendar.m @@ -88,14 +88,14 @@ endfunction -## demos %!demo %! ## Calendar for current month %! calendar () + %!demo +%! ## Calendar for October, 1957 %! calendar (1957, 10) -## tests %!assert ((calendar(2000,2))'(2:31), [0:29]) %!assert ((calendar(1957,10))'(2:33), [0:31])
--- a/scripts/time/datestr.m +++ b/scripts/time/datestr.m @@ -281,13 +281,14 @@ endfunction -## demos %!demo %! ## Current date and time in default format %! datestr (now ()) + %!demo %! ## Current date (integer portion of datenum) %! datestr (fix (now ())) + %!demo %! ## Current time (fractional portion of datenum) %! datestr (rem (now (), 1)) @@ -335,3 +336,4 @@ %% Test input validation %!error datestr () %!error datestr (1, 2, 3, 4) +
--- a/scripts/time/datetick.m +++ b/scripts/time/datetick.m @@ -46,7 +46,9 @@ endfunction + %!demo +%! clf; %! yr = 1900:10:2000; %! pop = [76.094, 92.407, 106.461, 123.077 131.954, 151.868, 179.979, ... %! 203.984, 227.225, 249.623, 282.224]; @@ -56,16 +58,17 @@ %! datetick ("x", "YYYY"); %!demo -%! yr =1988:2:2002; -%! yr =datenum(yr,1,1); +%! clf; +%! yr = 1988:2:2002; +%! yr = datenum (yr,1,1); %! pr = [12.1 13.3 12.6 13.1 13.3 14.1 14.4 15.2]; -%! plot(yr,pr); -%! xlabel('year') -%! ylabel('average price') -%! ax=gca; -%! set(ax,'xtick',datenum(1990:5:2005,1,1)) -%! datetick(2,'keepticks') -%! set(ax,'ytick',12:16) +%! plot (yr, pr); +%! xlabel ("year"); +%! ylabel ("average price"); +%! ax = gca (); +%! set (ax, "xtick", datenum (1990:5:2005,1,1)); +%! datetick (2, "keepticks"); +%! set (ax, "ytick", 12:16); ## Remove from test statistics. No real tests possible. %!assert (1)
--- a/scripts/time/weekday.m +++ b/scripts/time/weekday.m @@ -84,12 +84,14 @@ %!demo %! ## Current weekday %! [n, s] = weekday (now ()) + %!demo %! ## Weekday from datenum input %! [n, s] = weekday (728647) + %!demo %! ## Weekday of new millennium from datestr input -%! [n, s] = weekday ('1-Jan-2000') +%! [n, s] = weekday ("1-Jan-2000") # tests %!assert (weekday (728647), 2)
--- a/src/DLD-FUNCTIONS/__init_fltk__.cc +++ b/src/DLD-FUNCTIONS/__init_fltk__.cc @@ -1301,7 +1301,7 @@ pixel2pos (ax_obj, Fl::event_x (), Fl::event_y (), x1, y1); if (gui_mode == pan_zoom) - ap.translate_view (x0 - x1, y0 - y1); + ap.translate_view (x0, x1, y0, y1); else if (gui_mode == rotate_zoom) { double daz, del; @@ -1390,31 +1390,38 @@ axes::properties& ap = dynamic_cast<axes::properties&> (ax_obj.get_properties ()); pixel2pos (ax_obj, pos_x, pos_y, x0, y0); - pixel2pos (ax_obj, Fl::event_x (), Fl::event_y (), - x1, y1); + int pos_x1 = Fl::event_x (); + int pos_y1 = Fl::event_y (); + pixel2pos (ax_obj, pos_x1, pos_y1, x1, y1); Matrix xl (1,2,0); Matrix yl (1,2,0); - if (x0 < x1) + int dx = abs (pos_x - pos_x1); + int dy = abs (pos_y - pos_y1); + // Smallest zoom box must be 4 pixels square + if ((dx > 4) && (dy > 4)) { - xl(0) = x0; - xl(1) = x1; - } - else - { - xl(0) = x1; - xl(1) = x0; + if (x0 < x1) + { + xl(0) = x0; + xl(1) = x1; + } + else + { + xl(0) = x1; + xl(1) = x0; + } + if (y0 < y1) + { + yl(0) = y0; + yl(1) = y1; + } + else + { + yl(0) = y1; + yl(1) = y0; + } + ap.zoom (xl, yl); } - if (y0 < y1) - { - yl(0) = y0; - yl(1) = y1; - } - else - { - yl(0) = y1; - yl(1) = y0; - } - ap.zoom (xl, yl); mark_modified (); } } @@ -2036,7 +2043,7 @@ } return retval; -#else +#else error ("mouse_wheel_zoom: not available without OpenGL and FLTK libraries"); return octave_value (); #endif
--- a/src/DLD-FUNCTIONS/config-module.awk +++ b/src/DLD-FUNCTIONS/config-module.awk @@ -71,7 +71,7 @@ } printf ("DLD_FUNCTIONS_%s_la_LDFLAGS = -avoid-version -module $(NO_UNDEFINED_LDFLAG) %s $(OCT_LINK_OPTS)\n", basename, ldflags[i]); - printf ("DLD_FUNCTIONS_%s_la_LIBADD = liboctinterp.la ../liboctave/liboctave.la ../libcruft/libcruft.la %s $(OCT_LINK_DEPS)\n", + printf ("DLD_FUNCTIONS_%s_la_LIBADD = $(DLD_LIBOCTINTERP_LIBADD) ../liboctave/liboctave.la ../libcruft/libcruft.la %s $(OCT_LINK_DEPS)\n", basename, libraries[i]); } }
--- a/src/DLD-FUNCTIONS/qr.cc +++ b/src/DLD-FUNCTIONS/qr.cc @@ -1176,7 +1176,7 @@ @var{R}@tie{}upper trapezoidal, return the QR@tie{}factorization of\n\ @w{[A(:,1:j-1) A(:,j+1:n)]}, i.e., @var{A} with one column deleted\n\ (if @var{orient} is \"col\"), or the QR@tie{}factorization of\n\ -@w{[A(1:j-1,:);A(j+1:n,:)]}, i.e., @var{A} with one row deleted (if\n \ +@w{[A(1:j-1,:);A(j+1:n,:)]}, i.e., @var{A} with one row deleted (if\n\ @var{orient} is \"row\").\n\ \n\ The default value of @var{orient} is \"col\".\n\
--- a/src/Makefile.am +++ b/src/Makefile.am @@ -484,9 +484,11 @@ if AMCOND_ENABLE_DYNAMIC_LINKING OCT_FILES = $(DLD_FUNCTIONS_LIBS:.la=.oct) OCT_STAMP_FILES = $(subst DLD-FUNCTIONS/,DLD-FUNCTIONS/$(am__leading_dot),$(DLD_FUNCTIONS_LIBS:.la=.oct-stamp)) + DLD_LIBOCTINTERP_LIBADD = liboctinterp.la else OCT_FILES = OCT_STAMP_FILES = + DLD_LIBOCTINTERP_LIBADD = endif liboctinterp_la_SOURCES = \
--- a/src/debug.cc +++ b/src/debug.cc @@ -655,12 +655,16 @@ for (bp_table::fname_line_map_iterator it = bp_list.begin (); it != bp_list.end (); it++) { - octave_stdout << "breakpoint in " << it->first << " at line(s) "; - bp_table::intmap m = it->second; size_t nel = m.size (); + octave_stdout << "breakpoint in " << it->first; + if (nel > 1) + octave_stdout << " at lines "; + else + octave_stdout << " at line "; + for (size_t j = 0; j < nel; j++) octave_stdout << m[j] << ((j < nel - 1) ? ", " : "."); @@ -792,11 +796,15 @@ "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} dbtype ()\n\ @deftypefnx {Loadable Function} {} dbtype (\"startl:endl\")\n\ +@deftypefnx {Loadable Function} {} dbtype (\"startl:end\")\n\ @deftypefnx {Loadable Function} {} dbtype (\"@var{func}\")\n\ +@deftypefnx {Loadable Function} {} dbtype (\"@var{func}\", \"startl\")\n\ @deftypefnx {Loadable Function} {} dbtype (\"@var{func}\", \"startl:endl\")\n\ +@deftypefnx {Loadable Function} {} dbtype (\"@var{func}\", \"startl:end\")\n\ When in debugging mode and called with no arguments, list the script file\n\ being debugged with line numbers. An optional range specification,\n\ specified as a string, can be used to list only a portion of the file.\n\ +The special keyword \"end\" is a valid line number specification.\n\ \n\ When called with the name of a function, list that script file\n\ with line numbers.\n\ @@ -823,40 +831,46 @@ break; case 1: // (dbtype func) || (dbtype start:end) - dbg_fcn = get_user_code (argv[1]); + { + std::string arg = argv[1]; + + size_t ind = arg.find (':'); - if (dbg_fcn) - do_dbtype (octave_stdout, dbg_fcn->name (), 0, INT_MAX); - else - { - dbg_fcn = get_user_code (); + if (ind != std::string::npos) // (dbtype start:end) + { + dbg_fcn = get_user_code (); - if (dbg_fcn) - { - std::string arg = argv[1]; - - size_t ind = arg.find (':'); + if (dbg_fcn) + { + std::string start_str = arg.substr (0, ind); + std::string end_str = arg.substr (ind + 1); - if (ind != std::string::npos) - { - std::string start_str = arg.substr (0, ind); - std::string end_str = arg.substr (ind + 1); + int start, end; + start = atoi (start_str.c_str ()); + if (end_str == "end") + end = INT_MAX; + else + end = atoi (end_str.c_str ()); - int start = atoi (start_str.c_str ()); - int end = atoi (end_str.c_str ()); + if (std::min (start, end) <= 0) + error ("dbtype: start and end lines must be >= 1\n"); - if (std::min (start, end) <= 0) - error ("dbtype: start and end lines must be >= 1\n"); + if (start <= end) + do_dbtype (octave_stdout, dbg_fcn->name (), start, end); + else + error ("dbtype: start line must be less than end line\n"); + } + } + else // (dbtype func) + { + dbg_fcn = get_user_code (arg); - if (start <= end) - do_dbtype (octave_stdout, dbg_fcn->name (), start, end); - else - error ("dbtype: start line must be less than end line\n"); - } - else - error ("dbtype: line specification must be `start:end'"); - } - } + if (dbg_fcn) + do_dbtype (octave_stdout, dbg_fcn->name (), 0, INT_MAX); + else + error ("dbtype: function <%s> not found\n", arg.c_str ()); + } + } break; case 2: // (dbtype func start:end) , (dbtype func start) @@ -865,8 +879,7 @@ if (dbg_fcn) { std::string arg = argv[2]; - int start = 0; - int end = 0; + int start, end; size_t ind = arg.find (':'); if (ind != std::string::npos) @@ -875,8 +888,10 @@ std::string end_str = arg.substr (ind + 1); start = atoi (start_str.c_str ()); - end = atoi (end_str.c_str ()); - + if (end_str == "end") + end = INT_MAX; + else + end = atoi (end_str.c_str ()); } else { @@ -892,6 +907,9 @@ else error ("dbtype: start line must be less than end line\n"); } + else + error ("dbtype: function <%s> not found\n", argv[1].c_str ()); + break; default:
--- a/src/file-io.cc +++ b/src/file-io.cc @@ -43,7 +43,9 @@ #include <cstdio> #include <iostream> +#include <locale> #include <stack> +#include <stdexcept> #include <vector> #include <fcntl.h> @@ -1070,7 +1072,7 @@ DEFUN (fscanf, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {[@var{val}, @var{count}, @var{errmsg}] =} fscanf (@var{fid}, @var{template}, @var{size})\n\ -@deftypefnx {Built-in Function} {[@var{v1}, @var{v2}, @dots{}, @var{count}, @var{errmsg}] =} fscanf (@var{fid}, @var{template}, \"C\")\n\ ++@deftypefnx {Built-in Function} {[@var{v1}, @var{v2}, @dots{}, @var{count}] =} fscanf (@var{fid}, @var{template}, @var{locale})\n\ In the first form, read from @var{fid} according to @var{template},\n\ returning the result in the matrix @var{val}.\n\ \n\ @@ -1109,7 +1111,10 @@ with each conversion specifier in @var{template} corresponding to a\n\ single scalar return value. This form is more `C-like', and also\n\ compatible with previous versions of Octave. The number of successful\n\ -conversions is returned in @var{count}\n\ +conversions is returned in @var{count}. It permits to explicitly\n\ +specify a locale to take into account langage specific features, \n\ +such as decimal separator. This operation restores the previous locales\n\ +setting at the end of the conversion.\n\ @ifclear OCTAVE_MANUAL\n\ \n\ See the Formatted Input section of the GNU Octave manual for a\n\ @@ -1131,7 +1136,25 @@ if (! error_state) { if (args(1).is_string ()) - retval = os.oscanf (args(1), who); + { + std::locale oldloc; + try + { + // Use args(2) val as the new locale setting. Keep + // old val for restoring afterwards. + oldloc = + os.imbue (std::locale (args(2).string_value ().c_str ())); + + } + catch (std::runtime_error) + { + // Display a warning if the specified locale is unknown + warning ("fscanf: invalid locale. Try `locale -a' for a list of supported values."); + oldloc = std::locale::classic (); + } + retval = os.oscanf (args(1), who); + os.imbue (oldloc); + } else ::error ("%s: format TEMPLATE must be a string", who.c_str ()); } @@ -1199,7 +1222,7 @@ DEFUN (sscanf, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {[@var{val}, @var{count}, @var{errmsg}, @var{pos}] =} sscanf (@var{string}, @var{template}, @var{size})\n\ -@deftypefnx {Built-in Function} {[@var{v1}, @var{v2}, @dots{}, @var{count}, @var{errmsg}] =} sscanf (@var{string}, @var{template}, \"C\")\n\ +@deftypefnx {Built-in Function} {[@var{v1}, @var{v2}, @dots{}, @var{count}] =} sscanf (@var{string}, @var{template}, @var{locale})\n\ This is like @code{fscanf}, except that the characters are taken from the\n\ string @var{string} instead of from a stream. Reaching the end of the\n\ string is treated as an end-of-file condition. In addition to the values\n\ @@ -1224,8 +1247,22 @@ if (os.is_valid ()) { - if (args(1).is_string ()) - retval = os.oscanf (args(1), who); + if (args(1).is_string ()) + { + // Use args(2) val as the new locale setting. As the os + // object is short lived, we don't need to restore + // locale afterwards. + try + { + os.imbue (std::locale (args(2).string_value ().c_str ())); + } + catch (std::runtime_error) + { + // Display a warning if the specified locale is unknown + warning ("sscanf: invalid locale. Try `locale -a' for a list of supported values."); + } + retval = os.oscanf (args(1), who); + } else ::error ("%s: format TEMPLATE must be a string", who.c_str ()); } @@ -1293,10 +1330,16 @@ return retval; } +/* +%!test +%! assert(sscanf('1,2', '%f', 'C'), 1) +%! assert(sscanf('1,2', '%f', 'fr_FR'), 1.2) +*/ + DEFUN (scanf, args, nargout, "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {[@var{val}, @var{count}, @var{errmsg}] =} scanf (@var{template}, @var{size})\n\ -@deftypefnx {Built-in Function} {[@var{v1}, @var{v2}, @dots{}, @var{count}, @var{errmsg}]] =} scanf (@var{template}, \"C\")\n\ +@deftypefnx {Built-in Function} {[@var{v1}, @var{v2}, @dots{}, @var{count}]] =} scanf (@var{template}, @var{locale}))\n\ This is equivalent to calling @code{fscanf} with @var{fid} = @code{stdin}.\n\ \n\ It is currently not useful to call @code{scanf} in interactive\n\
--- a/src/graphics.cc +++ b/src/graphics.cc @@ -3029,6 +3029,8 @@ else if (xunits.compare ("normalized")) { ss = Matrix (1, 4, 1.0); + ss(0) = 0; + ss(1) = 0; } else if (xunits.compare ("points")) { @@ -3041,6 +3043,23 @@ set_screensize (ss); } +/* +%!test +%! set (0, "units", "pixels") +%! sz = get (0, "screensize") - [1, 1, 0, 0]; +%! dpi = get (0, "screenpixelsperinch"); +%! set (0, "units", "inches") +%! assert (get (0, "screensize"), sz / dpi, 0.5 / dpi) +%! set (0, "units", "centimeters") +%! assert (get (0, "screensize"), sz / dpi * 2.54, 0.5 / dpi * 2.54) +%! set (0, "units", "points") +%! assert (get (0, "screensize"), sz / dpi * 72, 0.5 / dpi * 72) +%! set (0, "units", "normalized") +%! assert (get (0, "screensize"), [0.0, 0.0, 1.0, 1.0]) +%! set (0, "units", "pixels") +%! assert (get (0, "screensize"), sz + [1, 1, 0, 0]) +*/ + void root_figure::properties::remove_child (const graphics_handle& gh) { @@ -3465,11 +3484,12 @@ Matrix pos = get_paperposition ().matrix_value (); Matrix sz = get_papersize ().matrix_value (); - pos (0) = pos (0) / sz(0); - pos (1) = pos (1) / sz(1); - pos (2) = pos (2) / sz(0); - pos (3) = pos (3) / sz(1); - + pos(0) /= sz(0); + pos(1) /= sz(1); + pos(2) /= sz(0); + pos(3) /= sz(1); + + std::string porient = get_paperorientation (); caseless_str punits = get_paperunits (); caseless_str typ = get_papertype (); @@ -3477,33 +3497,37 @@ { if (old_paperunits.compare ("centimeters")) { - sz (0) = sz (0) / 2.54; - sz (1) = sz (1) / 2.54; + sz(0) /= 2.54; + sz(1) /= 2.54; } else if (old_paperunits.compare ("points")) { - sz (0) = sz (0) / 72.0; - sz (1) = sz (1) / 72.0; + sz(0) /= 72.0; + sz(1) /= 72.0; } if (punits.compare ("centimeters")) { - sz(0) = sz(0) * 2.54; - sz(1) = sz(1) * 2.54; - } - else if (old_paperunits.compare ("points")) - { - sz (0) = sz (0) * 72.0; - sz (1) = sz (1) * 72.0; + sz(0) *= 2.54; + sz(1) *= 2.54; + } + else if (punits.compare ("points")) + { + sz(0) *= 72.0; + sz(1) *= 72.0; } } else - sz = papersize_from_type (punits, typ); - - pos (0) = pos (0) * sz(0); - pos (1) = pos (1) * sz(1); - pos (2) = pos (2) * sz(0); - pos (3) = pos (3) * sz(1); + { + sz = papersize_from_type (punits, typ); + if (porient == "landscape") + std::swap (sz(0), sz(1)); + } + + pos(0) *= sz(0); + pos(1) *= sz(1); + pos(2) *= sz(0); + pos(3) *= sz(1); papersize.set (octave_value (sz)); paperposition.set (octave_value (pos)); @@ -3513,18 +3537,152 @@ figure::properties::update_papertype (void) { caseless_str typ = get_papertype (); - if (! typ.compare ("<custom>")) - // Call papersize.set rather than set_papersize to avoid loops between - // update_papersize and update_papertype - papersize.set (octave_value (papersize_from_type (get_paperunits (), typ))); + { + Matrix sz = papersize_from_type (get_paperunits (), typ); + if (get_paperorientation () == "landscape") + std::swap (sz(0), sz(1)); + // Call papersize.set rather than set_papersize to avoid loops + // between update_papersize and update_papertype + papersize.set (octave_value (sz)); + } } void figure::properties::update_papersize (void) { - papertype.set ("<custom>"); -} + Matrix sz = get_papersize ().matrix_value (); + if (sz(0) > sz(1)) + { + std::swap (sz(0), sz(1)); + papersize.set (octave_value (sz)); + paperorientation.set (octave_value ("landscape")); + } + else + { + paperorientation.set ("portrait"); + } + std::string punits = get_paperunits (); + if (punits == "centimeters") + { + sz(0) /= 2.54; + sz(1) /= 2.54; + } + else if (punits == "points") + { + sz(0) = 72.0; + sz(1) = 72.0; + } + if (punits == "normalized") + { + caseless_str typ = get_papertype (); + if (get_papertype () == "<custom>") + error ("set: can't set the papertype to <custom> when the paperunits is normalized"); + } + else + { + // TODO - the papersizes info is also in papersize_from_type(). + // Both should be rewritten to avoid the duplication. + std::string typ = "<custom>"; + const double mm2in = 1.0 / 25.4; + const double tol = 0.01; + + if (std::abs (sz(0) - 8.5) + std::abs (sz(1) - 11.0) < tol) + typ = "usletter"; + else if (std::abs (sz(0) - 8.5) + std::abs (sz(1) - 14.0) < tol) + typ = "uslegal"; + else if (std::abs (sz(0) - 11.0) + std::abs (sz(1) - 17.0) < tol) + typ = "tabloid"; + else if (std::abs (sz(0) - 841.0 * mm2in) + std::abs (sz(1) - 1198.0 * mm2in) < tol) + typ = "a0"; + else if (std::abs (sz(0) - 594.0 * mm2in) + std::abs (sz(1) - 841.0 * mm2in) < tol) + typ = "a1"; + else if (std::abs (sz(0) - 420.0 * mm2in) + std::abs (sz(1) - 594.0 * mm2in) < tol) + typ = "a2"; + else if (std::abs (sz(0) - 297.0 * mm2in) + std::abs (sz(1) - 420.0 * mm2in) < tol) + typ = "a3"; + else if (std::abs (sz(0) - 210.0 * mm2in) + std::abs (sz(1) - 297.0 * mm2in) < tol) + typ = "a4"; + else if (std::abs (sz(0) - 148.0 * mm2in) + std::abs (sz(1) - 210.0 * mm2in) < tol) + typ = "a5"; + else if (std::abs (sz(0) - 1029.0 * mm2in) + std::abs (sz(1) - 1456.0 * mm2in) < tol) + typ = "b0"; + else if (std::abs (sz(0) - 728.0 * mm2in) + std::abs (sz(1) - 1028.0 * mm2in) < tol) + typ = "b1"; + else if (std::abs (sz(0) - 514.0 * mm2in) + std::abs (sz(1) - 728.0 * mm2in) < tol) + typ = "b2"; + else if (std::abs (sz(0) - 364.0 * mm2in) + std::abs (sz(1) - 514.0 * mm2in) < tol) + typ = "b3"; + else if (std::abs (sz(0) - 257.0 * mm2in) + std::abs (sz(1) - 364.0 * mm2in) < tol) + typ = "b4"; + else if (std::abs (sz(0) - 182.0 * mm2in) + std::abs (sz(1) - 257.0 * mm2in) < tol) + typ = "b5"; + else if (std::abs (sz(0) - 9.0) + std::abs (sz(1) - 12.0) < tol) + typ = "arch-a"; + else if (std::abs (sz(0) - 12.0) + std::abs (sz(1) - 18.0) < tol) + typ = "arch-b"; + else if (std::abs (sz(0) - 18.0) + std::abs (sz(1) - 24.0) < tol) + typ = "arch-c"; + else if (std::abs (sz(0) - 24.0) + std::abs (sz(1) - 36.0) < tol) + typ = "arch-d"; + else if (std::abs (sz(0) - 36.0) + std::abs (sz(1) - 48.0) < tol) + typ = "arch-e"; + else if (std::abs (sz(0) - 8.5) + std::abs (sz(1) - 11.0) < tol) + typ = "a"; + else if (std::abs (sz(0) - 11.0) + std::abs (sz(1) - 17.0) < tol) + typ = "b"; + else if (std::abs (sz(0) - 17.0) + std::abs (sz(1) - 22.0) < tol) + typ = "c"; + else if (std::abs (sz(0) - 22.0) + std::abs (sz(1) - 34.0) < tol) + typ = "d"; + else if (std::abs (sz(0) - 34.0) + std::abs (sz(1) - 43.0) < tol) + typ = "e"; + // Call papertype.set rather than set_papertype to avoid loops between + // update_papersize and update_papertype + papertype.set (typ); + } +} + +void +figure::properties::update_paperorientation (void) +{ + std::string porient = get_paperorientation (); + Matrix sz = get_papersize ().matrix_value (); + Matrix pos = get_paperposition ().matrix_value (); + if ((sz(0) > sz(1) && porient == "portrait") + || (sz(0) < sz(1) && porient == "landscape")) + { + std::swap (sz(0), sz(1)); + std::swap (pos(0), pos(1)); + std::swap (pos(2), pos(3)); + // Call papertype.set rather than set_papertype to avoid loops + // between update_papersize and update_papertype + papersize.set (octave_value (sz)); + paperposition.set (octave_value (pos)); + } +} + +/* +%!test +%! figure (1, "visible", false); +%! tol = 100 * eps (); +%! set (gcf (), "paperorientation", "PORTRAIT") +%! set (gcf (), "paperunits", "inches") +%! set (gcf (), "papertype", "USletter") +%! assert (get (gcf (), "papersize"), [8.5, 11.0], tol) +%! set (gcf (), "paperorientation", "Landscape") +%! assert (get (gcf (), "papersize"), [11.0, 8.5], tol) +%! set (gcf (), "paperunits", "centimeters") +%! assert (get (gcf (), "papersize"), [11.0, 8.5] * 2.54, tol) +%! set (gcf (), "papertype", "a4"); +%! assert (get (gcf (), "papersize"), [29.7, 21.0], tol) +%! set (gcf (), "paperunits", "inches", "papersize", [8.5, 11.0]) +%! assert (get (gcf (), "papertype"), "usletter") +%! assert (get (gcf (), "paperorientation"), "portrait") +%! set (gcf (), "papersize", [11.0, 8.5]) +%! assert (get (gcf (), "papertype"), "usletter") +%! assert (get (gcf (), "paperorientation"), "landscape") +*/ void figure::properties::set_units (const octave_value& v) @@ -3547,6 +3705,17 @@ get_units (), screen_size_pixels ())); } +/* +%!test +%! figure (1, "visible", false) +%! set (0, "units", "pixels") +%! rsz = get (0, "screensize"); +%! set (gcf (), "units", "pixels") +%! fsz = get (gcf (), "position"); +%! set (gcf (), "units", "normalized") +%! assert (get (gcf (), "position"), (fsz - [1, 1, 0, 0]) ./ rsz([3, 4, 3, 4])) +*/ + std::string figure::properties::get_title (void) const { @@ -6490,8 +6659,68 @@ update_ylim (false); } -void -axes::properties::translate_view (double delta_x, double delta_y) +static Matrix +do_translate (double x0, double x1, const Matrix& lims, bool is_logscale) +{ + Matrix new_lims = lims; + + double lo = lims(0); + double hi = lims(1); + + bool is_negative = lo < 0 && hi < 0; + + double delta; + + if (is_logscale) + { + if (is_negative) + { + double tmp = hi; + hi = std::log10 (-lo); + lo = std::log10 (-tmp); + x0 = -x0; + x1 = -x1; + } + else + { + hi = std::log10 (hi); + lo = std::log10 (lo); + } + + delta = std::log10 (x0) - std::log10 (x1); + } + else + { + delta = x0 - x1; + } + + // Perform the translation + lo += delta; + hi += delta; + + if (is_logscale) + { + if (is_negative) + { + double tmp = -std::pow (10.0, hi); + hi = -std::pow (10.0, lo); + lo = tmp; + } + else + { + lo = std::pow (10.0, lo); + hi = std::pow (10.0, hi); + } + } + + new_lims(0) = lo; + new_lims(1) = hi; + + return new_lims; +} + +void +axes::properties::translate_view (double x0, double x1, double y0, double y1) { // FIXME: Do we need error checking here? Matrix xlims = get_xlim ().matrix_value (); @@ -6511,17 +6740,8 @@ double max_neg_y = -octave_Inf; get_children_limits (miny, maxy, min_pos_y, max_neg_y, kids, 'y'); - if (! xscale_is ("log")) - { - xlims (0) += delta_x; - xlims (1) += delta_x; - } - - if (! yscale_is ("log")) - { - ylims (0) += delta_y; - ylims (1) += delta_y; - } + xlims = do_translate (x0, x1, xlims, xscale_is ("log")); + ylims = do_translate (y0, y1, ylims, yscale_is ("log")); zoom (xlims, ylims, false); }
--- a/src/graphics.h.in +++ b/src/graphics.h.in @@ -2310,7 +2310,7 @@ ~gtk_manager (void) { } - static void create_instance (void); + OCTINTERP_API static void create_instance (void); static bool instance_ok (void) { @@ -2331,7 +2331,7 @@ static void cleanup_instance (void) { delete instance; instance = 0; } - static gtk_manager *instance; + OCTINTERP_API static gtk_manager *instance; // The name of the default toolkit. std::string dtk; @@ -3340,7 +3340,7 @@ callback_property closerequestfcn , "closereq" handle_property currentaxes S , graphics_handle () array_property colormap , jet_colormap () - radio_property paperorientation , "{portrait}|landscape|rotated" + radio_property paperorientation U , "{portrait}|landscape|rotated" color_property color , color_property (color_values (1, 1, 1), radio_values ("none")) array_property alphamap , Matrix (64, 1, 1) string_property currentcharacter r , "" @@ -3663,7 +3663,7 @@ void zoom_about_point (double x, double y, double factor, bool push_to_zoom_stack = true); void zoom (const Matrix& xl, const Matrix& yl, bool push_to_zoom_stack = true); - void translate_view (double delta_x, double delta_y); + void translate_view (double x0, double x1, double y0, double y1); void rotate_view (double delta_az, double delta_el); void unzoom (void); void clear_zoom_stack (void);
--- a/src/lex.ll +++ b/src/lex.ll @@ -1497,10 +1497,26 @@ lexer_flags.at_beginning_of_statement = true; break; + case static_kw: + if ((reading_fcn_file || reading_script_file + || reading_classdef_file) + && ! curr_fcn_file_full_name.empty ()) + warning_with_id ("Octave:deprecated-keyword", + "the `static' keyword is obsolete and will be removed from a future version of Octave; please use `persistent' instead; near line %d of file `%s'", + input_line_number, + curr_fcn_file_full_name.c_str ()); + else + warning_with_id ("Octave:deprecated-keyword", + "the `static' keyword is obsolete and will be removed from a future version of Octave; please use `persistent' instead; near line %d", + input_line_number); + // fall through ... + + case persistent_kw: + break; + case case_kw: case elseif_kw: case global_kw: - case static_kw: case until_kw: break; @@ -3451,7 +3467,14 @@ bool is_keyword (const std::string& s) { - return octave_kw_hash::in_word_set (s.c_str (), s.length ()) != 0; + // Parsing function names like "set.property_name" inside + // classdef-style class definitions is simplified by handling the + // "set" and "get" portions of the names using the same mechanism as + // is used for keywords. However, they are not really keywords in + // the language, so omit them from the list of possible keywords. + + return (octave_kw_hash::in_word_set (s.c_str (), s.length ()) != 0 + && ! (s == "set" || s == "get")); } DEFUN (iskeyword, args, , @@ -3474,10 +3497,22 @@ if (argc == 1) { + // Neither set and get are keywords. See the note in the + // is_keyword function for additional details. + string_vector lst (TOTAL_KEYWORDS); + int j = 0; + for (int i = 0; i < TOTAL_KEYWORDS; i++) - lst[i] = wordlist[i].name; + { + std::string tmp = wordlist[i].name; + + if (! (tmp == "set" || tmp == "get")) + lst[j++] = tmp; + } + + lst.resize (j); retval = Cell (lst.sort ()); } @@ -3675,7 +3710,7 @@ case TRY: std::cerr << "TRY\n"; break; case CATCH: std::cerr << "CATCH\n"; break; case GLOBAL: std::cerr << "GLOBAL\n"; break; - case STATIC: std::cerr << "STATIC\n"; break; + case PERSISTENT: std::cerr << "PERSISTENT\n"; break; case FCN_HANDLE: std::cerr << "FCN_HANDLE\n"; break; case END_OF_INPUT: std::cerr << "END_OF_INPUT\n\n"; break; case LEXICAL_ERROR: std::cerr << "LEXICAL_ERROR\n\n"; break;
--- a/src/oct-parse.yy +++ b/src/oct-parse.yy @@ -446,7 +446,7 @@ %token <tok_val> BREAK CONTINUE FUNC_RET %token <tok_val> UNWIND CLEANUP %token <tok_val> TRY CATCH -%token <tok_val> GLOBAL STATIC +%token <tok_val> GLOBAL PERSISTENT %token <tok_val> FCN_HANDLE %token <tok_val> PROPERTIES METHODS EVENTS ENUMERATION %token <tok_val> METAQUERY @@ -997,9 +997,9 @@ $$ = make_decl_command (GLOBAL, $1, $3); lexer_flags.looking_at_decl_list = false; } - | STATIC parsing_decl_list decl1 + | PERSISTENT parsing_decl_list decl1 { - $$ = make_decl_command (STATIC, $1, $3); + $$ = make_decl_command (PERSISTENT, $1, $3); lexer_flags.looking_at_decl_list = false; } ; @@ -1395,11 +1395,13 @@ } | GET '.' identifier { + lexer_flags.parsed_function_name.top () = true; lexer_flags.maybe_classdef_get_set_method = false; $$ = $3; } | SET '.' identifier { + lexer_flags.parsed_function_name.top () = true; lexer_flags.maybe_classdef_get_set_method = false; $$ = $3; } @@ -3089,9 +3091,9 @@ retval = new tree_global_command (lst, l, c); break; - case STATIC: + case PERSISTENT: if (current_function_depth > 0) - retval = new tree_static_command (lst, l, c); + retval = new tree_persistent_command (lst, l, c); else { if (reading_script_file) @@ -3515,7 +3517,11 @@ reading_classdef_file = true; reading_fcn_file = false; - reading_script_file = false; + // FIXME -- Should classdef files be handled as + // scripts or separately? Currently, without setting up + // for reading script files, parsing classdef files + // fails. + reading_script_file = true; } else {
--- a/src/oct-stream.h +++ b/src/oct-stream.h @@ -371,6 +371,12 @@ virtual std::ostream *output_stream (void) { return 0; } + // If the derived class is locale-aware, it must implement this function + // in order to set a new locale. By default, this function avoids messing + // with locales and ignores its input argument. + virtual std::locale imbue ( const std::locale & loc ) + { return std::locale::classic (); } + // Return TRUE if this stream is open. bool is_open (void) const { return open_state; } @@ -613,7 +619,23 @@ { return rep ? rep->output_stream () : 0; } - + + std::locale imbue (const std::locale & loc ) + { + if (!rep) return std::locale::classic (); + + std::istream *is = rep->input_stream (); + std::ostream *os = rep->output_stream (); + + if (os) + { + if (is) + (void) is->imbue (loc); + return os->imbue (loc); + } + return is ? is->imbue (loc) : std::locale::classic (); + } + void clearerr (void) { if (rep) rep->clearerr (); } private:
--- a/src/octave.gperf +++ b/src/octave.gperf @@ -60,6 +60,7 @@ methods_kw, otherwise_kw, parfor_kw, + persistent_kw, properties_kw, return_kw, set_kw, @@ -106,11 +107,11 @@ methods, METHODS, methods_kw otherwise, OTHERWISE, otherwise_kw parfor, PARFOR, parfor_kw -persistent, STATIC, static_kw +persistent, PERSISTENT, persistent_kw properties, PROPERTIES, properties_kw return, FUNC_RET, return_kw set, SET, set_kw -static, STATIC, static_kw +static, PERSISTENT, static_kw switch, SWITCH, switch_kw try, TRY, try_kw until, UNTIL, until_kw
--- a/src/ov-usr-fcn.cc +++ b/src/ov-usr-fcn.cc @@ -51,6 +51,7 @@ #include "parse.h" #include "profiler.h" #include "variables.h" +#include "ov-fcn-handle.h" // Whether to optimize subsasgn method calls. static bool Voptimize_subsasgn_calls = true; @@ -629,12 +630,15 @@ DEFUN (nargin, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} nargin ()\n\ -@deftypefnx {Built-in Function} {} nargin (@var{fcn_name})\n\ +@deftypefnx {Built-in Function} {} nargin (@var{fcn})\n\ Within a function, return the number of arguments passed to the function.\n\ At the top level, return the number of command line arguments passed to\n\ -Octave. If called with the optional argument @var{fcn_name}, return the\n\ -maximum number of arguments the named function can accept, or -1 if the\n\ -function accepts a variable number of arguments.\n\ +Octave.\n\ +\n\ +If called with the optional argument @var{fcn}, a function name or handle,\n\ +return the declared number of arguments that the function can accept.\n\ +If the last argument is @var{varargin} the returned value is negative.\n\ +This feature does not work on builtin functions.\n\ @seealso{nargout, varargin, isargout, varargout, nthargout}\n\ @end deftypefn") { @@ -644,40 +648,37 @@ if (nargin == 1) { - std::string fname = args(0).string_value (); + octave_value func = args(0); - if (! error_state) + if (func.is_string ()) { - octave_value fcn_val = symbol_table::find_function (fname); - - if (fcn_val.is_user_function ()) - { - octave_user_function *fcn = fcn_val.user_function_value (true); + std::string name = func.string_value (); + func = symbol_table::find_function (name); + if (func.is_undefined ()) + error ("nargout: invalid function name: %s", name.c_str ()); + } - if (fcn) - { - if (fcn->takes_varargs ()) - retval = -1; - else - { - tree_parameter_list *param_list = fcn->parameter_list (); + octave_function *fcn_val = func.function_value (); + if (fcn_val) + { + octave_user_function *fcn = fcn_val->user_function_value (true); - retval = param_list ? param_list->length () : 0; - } - } - else - error ("nargin: loading user-defined function failed"); + if (fcn) + { + tree_parameter_list *param_list = fcn->parameter_list (); + + retval = param_list ? param_list->length () : 0; + if (fcn->takes_varargs ()) + retval = -1 - retval; } else { - // FIXME -- what about built-in functions or functions - // defined in .oct files or .mex files? - - error ("nargin: FCN_NAME must be a user-defined function"); + // Matlab gives up for histc, so maybe it's ok we give up somtimes too. + error ("nargin: nargin information not available for builtin functions"); } } else - error ("nargin: FCN_NAME must be a string"); + error ("nargin: FCN must be a string or function handle"); } else if (nargin == 0) { @@ -695,11 +696,12 @@ DEFUN (nargout, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} nargout ()\n\ -@deftypefnx {Built-in Function} {} nargout (@var{fcn_name})\n\ +@deftypefnx {Built-in Function} {} nargout (@var{fcn})\n\ Within a function, return the number of values the caller expects to\n\ -receive. If called with the optional argument @var{fcn_name}, return the\n\ -maximum number of values the named function can produce, or -1 if the\n\ -function can produce a variable number of values.\n\ +receive. If called with the optional argument @var{fcn}, a function\n\ +name or handle, return the number of declared output values that the\n\ +function can produce. If the final output argument is @var{varargout}\n\ +the returned value is negative.\n\ \n\ For example,\n\ \n\ @@ -718,7 +720,23 @@ will cause @code{nargout} to return 2 inside the function\n\ @code{f}.\n\ \n\ -At the top level, @code{nargout} is undefined.\n\ +In the second usage,\n\ +\n\ +@example\n\ +nargout (@@histc) \% or nargout ('histc')\n\ +@end example\n\ +\n\ +will return 2, because @code{histc} has two outputs, whereas\n\ +\n\ +@example\n\ +nargout (@@deal)\n\ +@end example\n\ +\n\ +will return -1, because @code{deal} has a variable number of outputs.\n\ +\n\ +At the top level, @code{nargout} with no argument is undefined.\n\ +@code{nargout} does not work on builtin functions.\n\ +@code{nargout} returns -1 for all anonymous functions.\n\ @seealso{nargin, varargin, isargout, varargout, nthargout}\n\ @end deftypefn") { @@ -728,30 +746,58 @@ if (nargin == 1) { - std::string fname = args(0).string_value (); + octave_value func = args(0); - if (! error_state) + if (func.is_string ()) + { + std::string name = func.string_value (); + func = symbol_table::find_function (name); + if (func.is_undefined ()) + error ("nargout: invalid function name: %s", name.c_str ()); + } + + if (func.is_inline_function ()) { - octave_value fcn_val = symbol_table::find_user_function (fname); + retval = 1; + return retval; + } + + if (func.is_function_handle ()) + { + octave_fcn_handle *fh = func.fcn_handle_value (); + std::string fh_nm = fh->fcn_name (); - octave_user_function *fcn = fcn_val.user_function_value (true); + if (fh_nm == octave_fcn_handle::anonymous) + { + retval = -1; + return retval; + } + } + + octave_function *fcn_val = func.function_value (); + if (fcn_val) + { + octave_user_function *fcn = fcn_val->user_function_value (true); if (fcn) { + tree_parameter_list *ret_list = fcn->return_list (); + + retval = ret_list ? ret_list->length () : 0; + if (fcn->takes_var_return ()) - retval = -1; - else - { - tree_parameter_list *ret_list = fcn->return_list (); - - retval = ret_list ? ret_list->length () : 0; - } + retval = -1 - retval; } else - error ("nargout: invalid function"); + { + // JWE said this information is not available (currently, 2011-03-10) + // without making intrusive changes to Octave. + // Matlab gives up for histc, so maybe it's ok we give up somtimes too. + error ("nargout: nargout information not available for builtin functions."); + } } else - error ("nargout: FCN_NAME must be a string"); + error ("nargout: FCN must be a string or function handle"); } else if (nargin == 0) {
--- a/src/pt-bp.cc +++ b/src/pt-bp.cc @@ -111,7 +111,7 @@ } void -tree_breakpoint::visit_static_command (tree_static_command& cmd) +tree_breakpoint::visit_persistent_command (tree_persistent_command& cmd) { do_decl_command (cmd); }
--- a/src/pt-bp.h +++ b/src/pt-bp.h @@ -58,7 +58,7 @@ void visit_global_command (tree_global_command&); - void visit_static_command (tree_static_command&); + void visit_persistent_command (tree_persistent_command&); void visit_decl_elt (tree_decl_elt&);
--- a/src/pt-check.cc +++ b/src/pt-check.cc @@ -105,7 +105,7 @@ } void -tree_checker::visit_static_command (tree_static_command& cmd) +tree_checker::visit_persistent_command (tree_persistent_command& cmd) { do_decl_command (cmd); }
--- a/src/pt-check.h +++ b/src/pt-check.h @@ -51,7 +51,7 @@ void visit_global_command (tree_global_command&); - void visit_static_command (tree_static_command&); + void visit_persistent_command (tree_persistent_command&); void visit_decl_elt (tree_decl_elt&);
--- a/src/pt-decl.cc +++ b/src/pt-decl.cc @@ -132,16 +132,16 @@ // Static. tree_command * -tree_static_command::dup (symbol_table::scope_id scope, +tree_persistent_command::dup (symbol_table::scope_id scope, symbol_table::context_id context) const { return - new tree_static_command (init_list ? init_list->dup (scope, context) : 0, - line (), column ()); + new tree_persistent_command (init_list ? init_list->dup (scope, context) : 0, + line (), column ()); } void -tree_static_command::accept (tree_walker& tw) +tree_persistent_command::accept (tree_walker& tw) { - tw.visit_static_command (*this); + tw.visit_persistent_command (*this); }
--- a/src/pt-decl.h +++ b/src/pt-decl.h @@ -207,20 +207,20 @@ tree_global_command& operator = (const tree_global_command&); }; -// Static. +// Persistent. class -tree_static_command : public tree_decl_command +tree_persistent_command : public tree_decl_command { public: - tree_static_command (int l = -1, int c = -1) - : tree_decl_command ("static", l, c) { } + tree_persistent_command (int l = -1, int c = -1) + : tree_decl_command ("persistent", l, c) { } - tree_static_command (tree_decl_init_list *t, int l = -1, int c = -1) - : tree_decl_command ("static", t, l, c) { } + tree_persistent_command (tree_decl_init_list *t, int l = -1, int c = -1) + : tree_decl_command ("persistent", t, l, c) { } - ~tree_static_command (void) { } + ~tree_persistent_command (void) { } tree_command *dup (symbol_table::scope_id scope, symbol_table::context_id context) const; @@ -233,9 +233,9 @@ // No copying! - tree_static_command (const tree_static_command&); + tree_persistent_command (const tree_persistent_command&); - tree_static_command& operator = (const tree_static_command&); + tree_persistent_command& operator = (const tree_persistent_command&); }; #endif
--- a/src/pt-eval.cc +++ b/src/pt-eval.cc @@ -215,7 +215,7 @@ } void -tree_evaluator::visit_static_command (tree_static_command& cmd) +tree_evaluator::visit_persistent_command (tree_persistent_command& cmd) { if (debug_mode) do_breakpoint (cmd.is_breakpoint ());
--- a/src/pt-eval.h +++ b/src/pt-eval.h @@ -60,7 +60,7 @@ void visit_global_command (tree_global_command&); - void visit_static_command (tree_static_command&); + void visit_persistent_command (tree_persistent_command&); void visit_decl_elt (tree_decl_elt&);
--- a/src/pt-pr-code.cc +++ b/src/pt-pr-code.cc @@ -165,7 +165,7 @@ } void -tree_print_code::visit_static_command (tree_static_command& cmd) +tree_print_code::visit_persistent_command (tree_persistent_command& cmd) { do_decl_command (cmd); }
--- a/src/pt-pr-code.h +++ b/src/pt-pr-code.h @@ -67,7 +67,7 @@ void visit_global_command (tree_global_command&); - void visit_static_command (tree_static_command&); + void visit_persistent_command (tree_persistent_command&); void visit_decl_elt (tree_decl_elt&);
--- a/src/pt-walk.h +++ b/src/pt-walk.h @@ -30,7 +30,7 @@ class tree_colon_expression; class tree_continue_command; class tree_global_command; -class tree_static_command; +class tree_persistent_command; class tree_decl_elt; class tree_decl_init_list; class tree_simple_for_command; @@ -92,7 +92,7 @@ visit_global_command (tree_global_command&) = 0; virtual void - visit_static_command (tree_static_command&) = 0; + visit_persistent_command (tree_persistent_command&) = 0; virtual void visit_decl_elt (tree_decl_elt&) = 0;