home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21fs.zip / octave / NEWS.1 < prev    next >
Text File  |  2000-01-15  |  57KB  |  1,603 lines

  1. Summary of changes for version 1.1.1:
  2. ------------------------------------
  3.  
  4.   * New built-in variables, default_return_value and
  5.     define_all_return_values.
  6.  
  7.     If define_all_return_values is set to "false", Octave does not do
  8.     anything special for return values that are left undefined, and
  9.     you will get an error message if you try to use them.  For
  10.     example, if the function
  11.  
  12.       function [x, y] = f ()
  13.         y = 1;
  14.       endfunction
  15.  
  16.     is called as
  17.  
  18.       octave:13> [a, b] = f ()
  19.  
  20.     Octave will print an error message for the attempt to assign an
  21.     undefined value to `a'.
  22.  
  23.     This is incompatible with Matlab, which will define the return
  24.     variable `x' to be the empty matrix.  To get the Matlab-like
  25.     behavior, you can set the variable define_all_return_values to
  26.     "true" (the default is "false") and default_return_value to `[]'
  27.     (the default).  Then, any return values that remain undefined when
  28.     the function returns will be initialized to `[]'.
  29.  
  30.     If the function is called without explicitly asking for an output,
  31.     it will succeed.  This behavior is compatible and unchanged from
  32.     previous versions of Octave.
  33.  
  34.   * New built-in variable suppress_verbose_help_message.  If set to
  35.     "true", Octave will not add additional help information to the end
  36.     of the output from the help command and usage messages for
  37.     built-in commands.  The default value is "false".
  38.  
  39.   * New built-in variable PS4 is used as the prefix of echoed input
  40.     (enabled with the --echo-input (-x) option).
  41.  
  42.   * The function size() now accepts an optional second argument.
  43.  
  44.   * Output from `save - ...' now goes through the pager.
  45.  
  46.   * The break statement may also be used to exit a function, for
  47.     compatibility with Matlab.
  48.  
  49.   * The directory tree for installing Octave is now closer to
  50.     conforming with the current GNU standards.
  51.  
  52.   * More bug fixes.
  53.  
  54. Summary of changes for version 1.1.0:
  55. ------------------------------------
  56.  
  57.   * Octave now requires g++ 2.6.3 or later.  This change is necessary
  58.     to make template instantiations cleaner, and to avoid having to
  59.     have special cases in the code for earlier versions of gcc.
  60.  
  61.   * A new data structure type has been added.  The implementation uses
  62.     an associative array with indices limited to strings, but the
  63.     syntax is more like C-style structures.  here are some examples of
  64.     using it.
  65.  
  66.     Elements of structures can be of any type, including structures:
  67.  
  68.       octave:1> x.a = 1;
  69.       octave:2> x.b = [1, 2; 3, 4];
  70.       octave:3> x.c = "string";
  71.       octave:4> x
  72.       x =
  73.  
  74.       <structure: a b c>
  75.  
  76.       octave:5> x.a
  77.       x.a = 1
  78.       octave:6> x.b
  79.       x.b =
  80.  
  81.         1  2
  82.         3  4
  83.  
  84.       octave:7> x.c
  85.       x.c = string
  86.       octave:8> x.b.d = 3
  87.       x.b.d = 3
  88.       octave:9> x.b
  89.       x.b =
  90.  
  91.       <structure: d>
  92.  
  93.       octave:10> x.b.d
  94.       x.b.d = 3
  95.  
  96.     Functions can return structures:
  97.  
  98.       octave:1> a = rand (3) + rand (3) * I;
  99.       octave:2> function y = f (x)
  100.       > y.re = real (x);
  101.       > y.im = imag (x);
  102.       > endfunction
  103.       octave:3> f (a)
  104.       ans =
  105.  
  106.       <structure: im re>
  107.  
  108.       octave:4> ans.im
  109.       ans.im =
  110.  
  111.         0.093411  0.229690  0.627585
  112.         0.415128  0.221706  0.850341
  113.         0.894990  0.343265  0.384018
  114.  
  115.       octave:5> ans.re
  116.       ans.re =
  117.  
  118.         0.56234  0.14797  0.26416
  119.         0.72120  0.62691  0.20910
  120.         0.89211  0.25175  0.21081
  121.  
  122.     Return lists can include structure elements:
  123.  
  124.       octave:1> [x.u, x.s, x.v] = svd ([1, 2; 3, 4])
  125.       x.u =
  126.  
  127.         -0.40455  -0.91451
  128.         -0.91451   0.40455
  129.  
  130.       x.s =
  131.  
  132.         5.46499  0.00000
  133.         0.00000  0.36597
  134.  
  135.       x.v =
  136.  
  137.         -0.57605   0.81742
  138.         -0.81742  -0.57605
  139.  
  140.       octave:8> x
  141.       x =
  142.  
  143.       <structure: s u v>
  144.  
  145.     This feature should be considered experimental, but it seems to
  146.     work ok.  Suggestions for ways to improve it are welcome.
  147.  
  148.   * Octave now supports a limited form of exception handling modelled
  149.     after the unwind-protect form of Lisp:
  150.  
  151.       unwind_protect
  152.         BODY
  153.       unwind_protect_cleanup
  154.         CLEANUP
  155.       end_unwind_protect
  156.  
  157.     Where BODY and CLEANUP are both optional and may contain any
  158.     Octave expressions or commands.  The statements in CLEANUP are
  159.     guaranteed to be executed regardless of how control exits BODY.
  160.  
  161.     This is useful to protect temporary changes to global variables
  162.     from possible errors.  For example, the following code will always
  163.     restore the original value of the built-in variable
  164.     do_fortran_indexing even if an error occurs while performing the
  165.     indexing operation.
  166.  
  167.       save_do_fortran_indexing = do_fortran_indexing;
  168.       unwind_protect
  169.         do_fortran_indexing = "true";
  170.         elt = a (idx)
  171.       unwind_protect_cleanup
  172.         do_fortran_indexing = save_do_fortran_indexing;
  173.       end_unwind_protect
  174.  
  175.     Without unwind_protect, the value of do_fortran_indexing would not
  176.     be restored if an error occurs while performing the indexing
  177.     operation because evaluation would stop at the point of the error
  178.     and the statement to restore the value would not be executed.
  179.  
  180.   * Recursive directory searching has been implemented using Karl
  181.     Berry's kpathsea library.  Directories below path elements that
  182.     end in // are searched recursively for .m files.
  183.  
  184.   * Octave now waits for additional input when a pair of parentheses
  185.     is `open' instead of giving an error.  This allows one to write
  186.     statements like this
  187.  
  188.       if (big_long_variable_name == other_long_variable_name
  189.           || not_so_short_variable_name > 4
  190.           && y > x)
  191.         some (code, here);
  192.  
  193.     without having to clutter up the if statement with continuation
  194.     characters.
  195.  
  196.   * Continuation lines are now allowed in string constants and are
  197.     handled correctly inside matrix constants.
  198.  
  199.   * Both `...{whitespace}\n' and `\{whitespace}\n' can be used to
  200.     introduce continuation lines, where {whitespace} may include
  201.     spaces, tabs and comemnts.
  202.  
  203.   * The script directory has been split up by topic.
  204.  
  205.   * Dynamic linking mostly works with dld.  The following limitations
  206.     are known problems:
  207.  
  208.     -- Clearing dynamically linked functions doesn't work.
  209.  
  210.     -- Dynamic linking only works with dld, which has not been ported
  211.        to very many systems yet.
  212.  
  213.     -- Configuring with --enable-lite-kernel seems to mostly work to
  214.        make nonessential built-in functions dynamically loaded, but
  215.        there also seem to be some problems.  For example, fsolve seems
  216.        to always return info == 3.  This is difficult to debug since
  217.        gdb won't seem to allow breakpoints to be set inside
  218.        dynamically loaded functions.
  219.  
  220.     -- Octave uses a lot of memory if the dynamically linked functions
  221.        are compiled with -g.  This appears to be a limitation with
  222.        dld, and can be avoided by not using -g to compile functions
  223.        that will be linked dynamically.
  224.  
  225.   * fft2 and ifft2 are now built-in functions.
  226.  
  227.   * The `&&' and `||' logical operators are now evaluated in a
  228.     short-circuit fashion and work differently than the element by
  229.     element operators `&' and `|'.  See the Octave manual for more
  230.     details.
  231.  
  232.   * Expressions like 1./m are now parsed as 1 ./ m, not 1. / m.
  233.  
  234.   * The replot command now takes the same arguments as gplot or
  235.     gsplot (except ranges, which cannot be respecified with replot
  236.     (yet)) so you can add additional lines to existing plots.
  237.  
  238.   * The hold command has been implemented.
  239.  
  240.   * New function `clearplot' clears the plot window.  The name `clg'
  241.     is aliased to `clearplot' for compatibility with Matlab.
  242.  
  243.   * The commands `gplot clear' and `gsplot clear' are equivalent to
  244.     `clearplot'.  (Previously, `gplot clear' would evaluate `clear' as
  245.     an ordinary expression and clear all the visible variables.)
  246.  
  247.   * The Matlab-style plotting commands have been improved.  They now
  248.     accept line-style arguments, multiple x-y pairs, and other plot
  249.     option flags.  For example,
  250.  
  251.       plot (x, y, "@12", x, y2, x, y3, "4", x, y4, "+")
  252.  
  253.     results in a plot with
  254.  
  255.       y  plotted with points of type 2 ("+") and color 1 (red).
  256.       y2 plotted with lines.
  257.       y3 plotted with lines of color 4.
  258.       y4 plotted with points which are "+"s.
  259.  
  260.     the help message for `plot' and `plot_opt' provide full
  261.     descriptions of the options.
  262.  
  263.   * NaN is now dropped from plot data, and Inf is converted to a
  264.     very large value before calling gnuplot.
  265.  
  266.   * Improved load and save commands:
  267.  
  268.     -- The save and load commands can now read and write a new binary
  269.        file format.  Conversion to and from IEEE big and little endian
  270.        formats is handled automatically.  Conversion for other formats
  271.        has not yet been implemented.
  272.  
  273.     -- The load command can now read Matlab .mat files, though it is
  274.        not yet able to read sparse matrices or handle conversion for
  275.        all data formats.
  276.  
  277.     -- The save command can write Matlab .mat files.
  278.  
  279.     -- The load command automatically determines the save format
  280.        (binary, ascii, or Matlab binary).
  281.  
  282.     -- The default format for the save command is taken from the
  283.        built-in variable `default_save_format'.
  284.  
  285.     -- The save and load commands now both accept a list of globbing
  286.        patterns so you can easily load a list of variables from a
  287.        file.
  288.  
  289.     -- The load command now accepts the option -list, for listing the
  290.        variable names without actually loading the data.  With
  291.        -verbose, it prints a long listing.
  292.  
  293.     -- The load command now accepts the option -float-binary, for
  294.        saving floating point data in binary files in single precision.
  295.  
  296.   * who and whos now accept a list of globbing patterns so you can
  297.     limit the lists of variables and functions to those that match a
  298.     given set of patterns.
  299.  
  300.   * New functions for manipulating polynomials
  301.       
  302.       compan     -- companion matrix corresponding to polynomial coefficients
  303.       conv       -- convolve two vectors
  304.       deconv     -- deconvolve two vectors
  305.       roots      -- find the roots of a polynomial
  306.       poly       -- characteristic polynomial of a matrix
  307.       polyderiv  -- differentiate a polynomial
  308.       polyinteg  -- integrate a polynomial
  309.       polyreduce -- reduce a polynomial to minimum number of terms
  310.       polyval    -- evaluate a polynomial at a point
  311.       polyvalm   -- evaluate a polynomial in the matrix sense
  312.       residue    -- partial fraction expansion corresponding to the ratio
  313.                     of two polynomials
  314.  
  315.   * New functions for manipulating sets
  316.  
  317.       create_set   -- create a set of unique values
  318.       complement   -- find the complement of two sets
  319.       intersection -- find the intersection of two sets
  320.       union        -- find the union of two sets
  321.  
  322.   * New elementary functions:
  323.  
  324.       acot   acoth   acsc   acsch
  325.       asec   asech   cot    coth
  326.       csc    csch    log2   sec
  327.       sech
  328.  
  329.   * New special functions:
  330.  
  331.       beta   -- beta function
  332.       betai  -- incomplete beta function
  333.       gammai -- incomplete gamma function
  334.  
  335.   * New image processing functions:
  336.  
  337.       colormap  -- set and return current colormap
  338.       gray      -- set a gray colormap
  339.       gray2ind  -- image format conversion
  340.       image     -- display an image
  341.       imagesc   -- scale and display an image
  342.       imshow    -- display images
  343.       ind2gray  -- image format conversion
  344.       ind2rgb   -- image format conversion
  345.       loadimage -- load an image from a file
  346.       ntsc2rgb  -- image format conversion
  347.       ocean     -- set a color colormap
  348.       rgb2ind   -- image format conversion
  349.       rgb2ntsc  -- image format conversion
  350.       saveimage -- save an image to a file
  351.  
  352.   * New time and date funcitons:
  353.  
  354.       tic          -- set wall-clock timer
  355.       toc          -- get elapsed wall-clock time, since timer last set
  356.       etime        -- another way to get elapsed wall-clock time
  357.       cputime      -- get CPU time used since Octave started
  358.       is_leap_year -- is the given year a leap year?
  359.  
  360.   * Other new functions:
  361.  
  362.       bug_report -- submit a bug report to the bug-octave mailing list
  363.  
  364.       toascii -- convert a string to a matrix of ASCII character codes
  365.  
  366.       octave_tmp_file -- generate a unique temporary file name
  367.  
  368.       undo_string_escapes -- replace special characters in a string by
  369.                              their backslash forms
  370.  
  371.       is_struct -- determine whether something is a structure data type
  372.  
  373.       feof   -- check EOF condition for a specified file
  374.       ferror -- check error state for a specified file
  375.       fread  -- read binary data from a file
  376.       fwrite -- write binary data to a file
  377.  
  378.       file_in_path -- check to see if named file exists in given path
  379.  
  380.       kbhit  -- get a single character from the terminal
  381.  
  382.       axis   -- change plot ranges
  383.       hist   -- plot histograms
  384.  
  385.       diary  -- save commands and output to a file
  386.  
  387.       type   -- show the definition of a function
  388.       which  -- print the type of an identifier or the location of a
  389.                 function file
  390.  
  391.       isieee  -- Returns 1 if host uses IEEE floating point
  392.       realmax -- Returns largest floating point number
  393.       realmin -- Returns smallest floating point number
  394.  
  395.       gcd     -- greatest common divisor
  396.       lcm     -- least common multiple
  397.  
  398.       null    -- orthonormal basis of the null space of a matrix
  399.       orth    -- orthonormal basis of the range space of a matrix
  400.  
  401.       fft2    -- two-dimensional fast fourier transform
  402.       ifft2   -- two-dimensional inverse fast fourier transform
  403.       filter  -- digital filter
  404.       fftfilt -- filter using fft
  405.       fftconv -- convolve to vectors using fft
  406.       sinc    -- returns sin(pi*x)/(pi*x)
  407.       freqz   -- compute the frequency response of a filter
  408.  
  409.   * The meaning of nargin (== args.length ()) in built-in functions
  410.     has been changed to match the meaning of nargin in user-defined
  411.     functions.
  412.  
  413.   * Variable return lists.  Octave now has a real mechanism for
  414.     handling functions that return an unspecified number of values,
  415.     so it is no longer necessary to place an upper bound on the number
  416.     of outputs that a function can produce.
  417.  
  418.     Here is an example of a function that uses the new syntax to
  419.     produce n values:
  420.  
  421.       function [...] = foo (n)
  422.         for i = 1:n
  423.           vr_val (i * x);
  424.         endfor
  425.       endfunction
  426.  
  427.   * New keyword, all_va_args, that allows the entire list of va_args
  428.     to be passed to another function.  For example, given the functions
  429.  
  430.       function f (...)
  431.         while (nargin--)
  432.           disp (va_arg ())
  433.         endwhile
  434.       endfunction
  435.       function g (...)
  436.         f ("begin", all_va_args, "end")
  437.       endfunction
  438.  
  439.     the statement
  440.  
  441.       g (1, 2, 3)
  442.  
  443.     prints
  444.  
  445.       begin
  446.       1
  447.       2
  448.       3
  449.       end
  450.  
  451.     all_va_args may be used more than once, but can only be used
  452.     within functions that take a variable number of arguments.
  453.  
  454.   * If given a second argument, svd now returns an economy-sized
  455.     decomposition, eliminating the unecessary rows or columns of U or
  456.     V.
  457.  
  458.   * The max and min functions correctly handle complex matrices in
  459.     which some columns contain real values only.
  460.  
  461.   * The find function now handles 2 and 3 output arguments.
  462.  
  463.   * The qr function now allows computation of QR with pivoting.
  464.  
  465.   * hilb() is much faster for large matrices.
  466.  
  467.   * computer() is now a built-in function.
  468.  
  469.   * pinv() is now a built-in function.
  470.  
  471.   * The output from the history command now goes through the pager.
  472.  
  473.   * If a function is called without assigning the result, nargout is
  474.     now correctly set to 0.
  475.  
  476.   * It is now possible to write functions that only set some return
  477.     values.  For example, calling the function
  478.  
  479.       function [x, y, z] = f () x = 1; z = 2; endfunction
  480.  
  481.     as
  482.  
  483.       [a, b, c] = f ()
  484.  
  485.     produces:
  486.  
  487.       a = 1
  488.  
  489.       b = [](0x0)
  490.  
  491.       c = 2
  492.  
  493.   * The shell_cmd function has been renamed to system (the name
  494.     shell_cmd remains for compatibility).  It now returns [output, status].
  495.  
  496.   * New built-in variable `OCTAVE_VERSION'.  Also a new function,
  497.     version, for compatibility with Matlab.
  498.  
  499.   * New built-in variable `automatic_replot'.  If it is "true", Octave
  500.     will automatically send a replot command to gnuplot each time the
  501.     plot changes.  Since this is fairly inefficient, the default value
  502.     is "false".
  503.  
  504.   * New built-in variable `whitespace_in_literal_matrix' allows some
  505.     control over how Octave decides to convert spaces to commas in
  506.     matrix expressions like `[m (1)]'.
  507.  
  508.     If the value of `whitespace_in_literal_matrix' is "ignore", Octave
  509.     will never insert a comma or a semicolon in a literal matrix list.
  510.     For example, the expression `[1 2]' will result in an error
  511.     instead of being treated the same as `[1, 2]', and the expression
  512.  
  513.       [ 1, 2,
  514.         3, 4 ]
  515.  
  516.     will result in the vector [1 2 3 4] instead of a matrix.
  517.  
  518.     If the value of `whitespace_in_literal_matrix' is "traditional",
  519.     Octave will convert spaces to a comma between identifiers and `('.
  520.     For example, given the matrix
  521.  
  522.       m = [3 2]
  523.  
  524.     the expression
  525.  
  526.       [m (1)]
  527.  
  528.     will be parsed as
  529.  
  530.       [m, (1)]
  531.  
  532.     and will result in
  533.  
  534.       [3 2 1]
  535.  
  536.     and the expression
  537.  
  538.       [ 1, 2,
  539.         3, 4 ]
  540.  
  541.     will result in a matrix because the newline character is converted
  542.     to a semicolon (row separator) even though there is a comma at the
  543.     end of the first line (trailing commas or semicolons are ignored).
  544.     This is apparently how Matlab behaves.
  545.  
  546.     Any other value for `whitespace_in_literal_matrix' results in
  547.     behavior that is the same as traditional, except that Octave does
  548.     not convert spaces to a comma between identifiers and `('.
  549.     For example, the expression
  550.  
  551.       [m (1)]
  552.  
  553.     will produce 3.  This is the way Octave has always behaved.
  554.  
  555.   * Line numbers in error messages for functions defined in files and
  556.     for script files now correspond to the file line number, not the
  557.     number of lines after the function keyword appeared.
  558.  
  559.   * Octave now extracts help from script files.  The comments must
  560.     come before any other statements in the file.
  561.  
  562.   * In function files, the first block of comments in the file will
  563.     now be interpreted as the help text if it doesn't look like the
  564.     Octave copyright notice.  Otherwise, Octave extracts the first set
  565.     of comments after the function keyword.
  566.  
  567.   * The function clock is more accurate on systems that have the
  568.     gettimeofday() function.
  569.  
  570.   * The standard output stream is now automatically flushed before
  571.     reading from stdin with any of the *scanf() functions.
  572.  
  573.   * Expanded reference card.
  574.  
  575.   * The Octave distribution now includes a frequently asked questions
  576.     file, with answers.  Better answers and more questions (with
  577.     answers!) are welcome.
  578.  
  579.   * New option --verbose.  If Octave is invoked with --verbose and not
  580.     --silent, a message is printed if an octaverc file is read while
  581.     Octave is starting.
  582.  
  583.   * An improved configure script generated by Autoconf 2.0.
  584.  
  585.   * Lots of bug fixes.
  586.  
  587. Summary of changes for version 1.0:
  588. ----------------------------------
  589.  
  590.   * C-style I/O functions now handle files referenced by name or by
  591.     number more consistently.
  592.  
  593. Summary of changes for version 0.83:
  594. -----------------------------------
  595.  
  596.   * Loading global symbols should work now.
  597.  
  598.   * Clearing the screen doesn't reprint the prompt unnecessarily.
  599.  
  600.   * The operations <complex scalar> OP <real matrix> for OP == +, -,
  601.     *, or ./ no longer crash Octave.
  602.  
  603.   * More portability and configuration fixes.
  604.  
  605. Summary of changes for version 0.82:
  606. -----------------------------------
  607.  
  608.   * Octave now comes with a reference card.
  609.  
  610.   * The manual has been improved, but more work remains to be done.
  611.  
  612.   * The atanh function now works for complex arguments.
  613.  
  614.   * The asin, acos, acosh, and atanh functions now work properly when
  615.     given real-valued arguments that produce complex results.
  616.  
  617.   * SEEK_SET, SEEK_CUR, and SEEK_END are now constants.
  618.  
  619.   * The `using' qualifier now works with gplot and gsplot when the
  620.     data to plot is coming directly from a file.
  621.  
  622.   * The strcmp function now works correctly for empty strings.
  623.  
  624.   * Eliminated bogus parse error for M-files that don't end with `end'
  625.     or `endfunction'.
  626.  
  627.   * For empty matrices with one nonzero dimension, the +, -, .*, and
  628.     ./ operators now correctly preserve the dimension.
  629.  
  630.   * Octave no longer crashes if you type ^D at the beginning of a line
  631.     in the middle of defining a loop or if statement.
  632.  
  633.   * On AIX systems, Back off on indexing DiagArray via Proxy class to
  634.     avoid gcc (or possibly AIX assembler?) bug. 
  635.  
  636.   * Various other bug and portability fixes.
  637.  
  638. Summary of changes for version 0.81:
  639. -----------------------------------
  640.  
  641.   * Octave no longer dumps core if you try to define a function in
  642.     your .octaverc file.
  643.  
  644.   * Fixed bug in Array class that resulted in bogus off-diagonal
  645.     elements when computing eigenvalue and singular value
  646.     decompositions.
  647.  
  648.   * Fixed bug that prevented lsode from working on the SPARCstation,
  649.     at least with some versions of Sun's f77.  This bug was introduced
  650.     in 0.80, when I changed LSODE to allow the user to abort the
  651.     integration from within the RHS function.
  652.  
  653.   * Fixed bug that prevented global attribute of variables from being
  654.     saved with save(), and another that prevented load() from working
  655.     at all.
  656.  
  657. Summary of changes for version 0.80:
  658. -----------------------------------
  659.  
  660.   * I have started working on a manual for the C++ classes.  At this
  661.     point, it is little more than a list of function names.  If you
  662.     would like to volunteer to help work on this, please contact
  663.     bug-octave@bevo.che.wisc.edu.
  664.  
  665.   * The patterns accepted by the save and clear commands now work like
  666.     file name globbing patterns instead of regular expressions.  I
  667.     apologize for any inconvenience this change may cause, but file
  668.     name globbing seems like a more reasonable style of pattern
  669.     matching for this purpose.
  670.  
  671.   * It is now possible to specify tolerances and other optional inputs
  672.     for dassl, fsolve, lsode, npsol, qpsol, and quad.  For each of
  673.     these functions, there is a corresponding function X_options,
  674.     which takes a keyword and value arguments.  If invoked without any
  675.     arguments, the X_options functions print a list of possible
  676.     keywords and current values.  For example,
  677.  
  678.       npsol_options ()
  679.  
  680.     prints a list of possible options with values, and
  681.  
  682.       npsol_options ("major print level", 10)
  683.  
  684.     sets the major print level to 10.
  685.  
  686.     The keyword match is not case sensitive, and the keywords may be
  687.     abbreviated to the shortest unique match.  For example,
  688.  
  689.       npsol_options ("ma p", 10)
  690.  
  691.     is equivalent to the statement shown above.
  692.  
  693.   * The new built-in variable save_precision can be used to set the
  694.     number of digits preserved by the ASCII save command.
  695.  
  696.   * Assignment of [] now works in most cases to allow you to delete
  697.     rows or columns of matrices and vectors.  For example, given a
  698.     4x5 matrix A, the assignment
  699.  
  700.       A (3, :) = []
  701.  
  702.     deletes the third row of A, and the assignment
  703.  
  704.       A (:, 1:2:5) = []
  705.  
  706.     deletes the first, third, and fifth columns.
  707.  
  708.   * Variable argument lists.  Octave now has a real mechanism for
  709.     handling functions that take an unspecified number of arguments,
  710.     so it is no longer necessary to place an upper bound on the number
  711.     of optional arguments that a function can accept.
  712.  
  713.     Here is an example of a function that uses the new syntax to print
  714.     a header followed by an unspecified number of values:
  715.  
  716.       function foo (heading, ...)
  717.         disp (heading);
  718.         va_start ();
  719.         while (--nargin)
  720.           disp (va_arg ());
  721.         endwhile
  722.       endfunction
  723.  
  724.     Note that the argument list must contain at least one named
  725.     argument (this restriction may eventually be removed), and the
  726.     ellipsis must appear as the last element of the argument list.
  727.  
  728.     Calling va_start() positions an internal pointer to the first
  729.     unnamed argument and allows you to cycle through the arguments
  730.     more than once.  It is not necessary to call va_start() if you
  731.     do not plan to cycle through the arguments more than once.
  732.  
  733.   * Recursive functions should work now.
  734.  
  735.   * The environment variable OCTAVE_PATH is now handled in the same
  736.     way as TeX handles TEXINPUTS.  If the path starts with `:', the
  737.     standard path is prepended to the value obtained from the
  738.     environment.  If it ends with `:' the standard path is appended to
  739.     the value obtained from the environment.
  740.  
  741.   * New functions, from Kurt Hornik (hornik@neuro.tuwien.ac.at) and
  742.     the Department of Probability Theory and Statistics TU Wien,
  743.     Austria:
  744.  
  745.      corrcoef    -- corrcoef (X, Y) is the correlation between the i-th
  746.                     variable in X and the j-th variable in Y
  747.                     corrcoef (X) is corrcoef (X, X)
  748.      cov         -- cov (X, Y) is the covariance between the i-th
  749.                     variable in X and the j-th variable in Y
  750.                     cov (X) is cov (X, X)
  751.      gls         -- generalized least squares estimation
  752.      kurtosis    -- kurtosis(x) = N^(-1) std(x)^(-4) SUM_i (x(i)-mean(x))^4 - 3
  753.                     If x is a matrix, return the row vector containing
  754.                     the kurtosis of each column
  755.      mahalanobis -- returns Mahalanobis' D-square distance between the
  756.                     multivariate samples X and Y, which must have the
  757.                     same number of components (columns), but may have
  758.                     a different number of observations (rows)
  759.      ols         -- ordinary least squares estimation
  760.      pinv        -- returns the pseudoinverse of X; singular values
  761.                     less than tol are ignored
  762.      skewness    -- skewness (x) = N^(-1) std(x)^(-3) SUM_i (x(i)-mean(x))^3
  763.                     if x is a matrix, return the row vector containing
  764.                     the skewness of each column
  765.  
  766.   * Errors in user-supplied functions called from dassl, fsolve,
  767.     lsode, npsol, and quad are handled more gracefully.
  768.  
  769.   * Programming errors in the use of the C++ classes within Octave
  770.     should no longer cause Octave to abort.  Instead, Octave's error
  771.     handler function is called and execution continues as best as is
  772.     possible.  This should result in eventually returning control to
  773.     the top-level Octave prompt.  (It would be nice to have a real
  774.     exception handling mechanism...)
  775.  
  776.   * A number of memory leaks have been eliminated.  Thanks to
  777.     Fong Kin Fui <fui@ee.nus.sg> for reporting them.
  778.  
  779.   * The C++ matrix classes are now derived from a generic
  780.     template-based array class.
  781.  
  782.   * The readline function operate-and-get-next (from bash) is now
  783.     available and bound to C-O by default.
  784.  
  785.   * Octave now uses the version of readline currently distributed with
  786.     bash-1.13.  On some systems, interactive invocations of Octave
  787.     will now blink the cursor to show matching parens.
  788.  
  789.   * By default, include files are now installed in
  790.     $prefix/include/octave instead of $prefix/include.
  791.  
  792.   * Octave now uses a config.h file instead of putting all defines on
  793.     the compiler command line.
  794.  
  795. Summary of changes for version 0.79:
  796. -----------------------------------
  797.  
  798.   * New control systems functions:
  799.  
  800.      dgram -- Returns the discrete controllability and observability gramian.
  801.      dlqr  -- Discrete linear quadratic regulator design.
  802.      dlqe  -- Discrete linear quadratic estimator (Kalman Filter) design.
  803.      c2d   -- Convert continuous system description to discrete time
  804.               description assuming zero-order hold and given sample time.
  805.  
  806.   * The max (min) functions can now return the index of the max (min)
  807.     value as a second return value.
  808.  
  809. Summary of changes for version 0.78:
  810. -----------------------------------
  811.  
  812.   * Octave's handling of global variables has been completely
  813.     rewritten.  To access global variables inside a function, you must
  814.     now declare them to be global within the function body.  Likewise,
  815.     if you do not declare a variable as global at the command line,
  816.     you will not have access to it within a function, even if it is
  817.     declared global there.  For example, given the function
  818.  
  819.       function f ()
  820.         global x = 1;
  821.         y = 2;
  822.       endfunction
  823.  
  824.     the global variable `x' is not visible at the top level until the
  825.     command
  826.  
  827.       octave:13> global x
  828.  
  829.     has been evaluated, and the variable `y' remains local to the
  830.     function f() even if it is declared global at the top level.
  831.  
  832.     Clearing a global variable at the top level will remove its global
  833.     scope and leave it undefined.  For example,
  834.  
  835.       octave:1> function f ()   # Define a function that accesses
  836.       >  global x;              #   the global variable `x'.
  837.       >  x
  838.       > endfunction
  839.       octave:2> global x = 1    # Give the variable `x' a value.
  840.       octave:3> f ()            # Evaluating the function accesses the
  841.       x = 1                     #   global `x'.
  842.       octave:4> clear x         # Remove `x' from global scope, clear value.
  843.       octave:5> x = 2           # Define new local `x' at the top level
  844.       x = 2
  845.       octave:6> f               # The global `x' is no longer defined.
  846.       error: `x' undefined near line 1 column 25
  847.       error: evaluating expression near line 1, column 25
  848.       error: called from `f'
  849.       octave:7> x               # But the local one is.
  850.       x = 2
  851.  
  852.   * The new function, `is_global (string)' returns 1 if the variable
  853.     named by string is globally visible.  Otherwise, returns 0.
  854.  
  855.   * The implementation of `who' has changed.  It now accepts the
  856.     following options:
  857.  
  858.       -b -builtins   -- display info for built-in variables and functions
  859.       -f -functions  -- display info for currently compiled functions
  860.       -v -variables  -- display info for user variables
  861.       -l -long       -- display long info
  862.  
  863.     The long output looks like this:
  864.  
  865.       octave:5> who -l
  866.  
  867.       *** currently compiled functions:
  868.  
  869.       prot  type               rows   cols  name
  870.       ====  ====               ====   ====  ====
  871.        wd   user function         -      -  f
  872.  
  873.       *** local user variables:
  874.  
  875.       prot  type               rows   cols  name
  876.       ====  ====               ====   ====  ====
  877.        wd   real scalar           1      1  y
  878.  
  879.       *** globally visible user variables:
  880.  
  881.       prot  type               rows   cols  name
  882.       ====  ====               ====   ====  ====
  883.        wd   complex matrix       13     13  x
  884.  
  885.     where the first character of the `protection' field is `w' if the
  886.     symbol can be redefined, and `-' if it has read-only access.  The
  887.     second character may be `d' if the symbol can be deleted, or `-'
  888.     if the symbol cannot be cleared.
  889.  
  890.   * The new built-in variable ignore_function_time_stamp can be used
  891.     to prevent Octave from calling stat() each time it looks up
  892.     functions defined in M-files.  If set to "system", Octave will not
  893.     automatically recompile M-files in subdirectories of
  894.     $OCTAVE_HOME/lib/VERSION if they have changed since they were last
  895.     compiled, but will recompile other M-files in the LOADPATH if they
  896.     change.  If set to "all", Octave will not recompile any M-files
  897.     unless their definitions are removed with clear.  For any other
  898.     value of ignore_function_time_stamp, Octave will always check to
  899.     see if functions defined in M-files need to recompiled.  The
  900.     default value of ignore_function_time_stamp is "system".
  901.  
  902.   * The new built-in variable EDITOR can be used to specify the editor
  903.     for the edit_history command.  It is set to the value of the
  904.     environment variable EDITOR, or `vi' if EDITOR is not set, or is
  905.     empty.
  906.  
  907.   * There is a new built-in variable, INFO_FILE, which is used as the
  908.     location of the info file.  Its initial value is
  909.     $OCTAVE_HOME/info/octave.info, so `help -i' should now work
  910.     provided that OCTAVE_HOME is set correctly, even if Octave is
  911.     installed in a directory different from that specified at compile
  912.     time.
  913.  
  914.   * There is a new command line option, --info-file FILE, that may be
  915.     used to set Octave's idea of the location of the info file.  It
  916.     will override any value of OCTAVE_INFO_FILE found in the
  917.     environment, but not any INFO_FILE="filename" commands found in
  918.     the system or user startup files. 
  919.  
  920.   * Octave's Info reader will now recognize gzipped files that have
  921.     names ending in `.gz'.
  922.  
  923.   * The save command now accepts regular expressions as arguments.
  924.     Note that these patterns are regular expressions, and do not work
  925.     like filename globbing.  For example, given the variables `a',
  926.     `aa', and `a1', the command `save a*' saves `a' and `aa' but not
  927.     `a1'.  To match all variables beginning with `a', you must use an
  928.     expression like `a.*' (match all sequences beginning with `a'
  929.     followed by zero or more characters).
  930.  
  931.   * Line and column information is included in more error messages.
  932.  
  933. Summary of changes for version 0.77:
  934. -----------------------------------
  935.  
  936.   * Improved help.  The command `help -i topic' now uses the GNU Info
  937.     browser to display help for the given topic directly from the
  938.     Texinfo documenation.
  939.  
  940.   * New function: chol -- Cholesky factorization.
  941.  
  942. Summary of changes for version 0.76:
  943. -----------------------------------
  944.  
  945.   * Better run-time error messages.  Many now include line and column
  946.     information indicating where the error occurred.  Octave will also
  947.     print a traceback for errors occurring inside functions. If you
  948.     find error messages that could use improvement, or errors that
  949.     Octave fails to catch, please send a bug report to
  950.     bug-octave@bevo.che.wisc.edu.
  951.  
  952.   * If gplot (or gsplot) is given a string to plot, and the string
  953.     does not name a file, Octave will pass the string along to gnuplot
  954.     directly.  This allows commands like
  955.  
  956.       gplot "sin (x)" w l, data w p
  957.  
  958.     to work (assuming that data is a variable containing a matrix of
  959.     values).
  960.  
  961.   * Long options (--help, --version, etc.) are supported.
  962.  
  963. Summary of changes for version 0.75:
  964. -----------------------------------
  965.  
  966.   * The documentation is much more complete, but still could use a lot
  967.     of work.
  968.  
  969.   * The history function now prints line numbers by default.  The
  970.     command `history -q' will  omit them.
  971.  
  972.   * The clear function now accepts regular expressions.
  973.  
  974.   * If gplot (or gsplot) is given a string to plot, and the string
  975.     names a file, Octave attempts to plot the contents of the file.
  976.  
  977.   * New functions:
  978.  
  979.     history:
  980.  
  981.       run_history  -- run commands from the history list.
  982.       edit_history -- edit commands from the history list with your
  983.                       favorite editor.
  984.  
  985.     linear algebra:
  986.  
  987.       balance         -- Balancing for algebraic and generalized
  988.                          eigenvalue problems.
  989.       givens          -- Givens rotation.
  990.       is_square       -- Check to see if a matrix is square.
  991.       qzhess          -- QZ decomposition of the matrix pencil (a - lambda b).
  992.       qzval           -- Generalized eigenvalues for real matrices.
  993.       syl             -- Sylvester equation solver.
  994.  
  995.     control systems:
  996.  
  997.       is_symmetric    -- Check to see if a matrix is symmetric.
  998.       abcddim         -- Check dimensions of linear dynamic system [A,B,C,D].
  999.       is_controllable -- Check to see if [A,B,C,D] is controllable.
  1000.       is_observable   -- Check to see if [A,B,C,D] is observable.
  1001.       are             -- Solve algebraic Ricatti equation.
  1002.       dare            -- Solve discrete-time algebraic Ricatti equation.
  1003.       lqe             -- Kalman filter design for continuous linear system.
  1004.       lqr             -- Linear Quadratic Regulator design.
  1005.       lyap            -- Solve Lyapunov equation.
  1006.       dlyap           -- Solve discrete Lyapunov equation.
  1007.       tzero           -- Compute the transmission zeros of [A,B,C,D].
  1008.  
  1009. Summary of changes for version 0.74:
  1010. -----------------------------------
  1011.  
  1012.   * Formal parameters to functions are now always considered to be
  1013.     local variables, so things like
  1014.  
  1015.       global x = 0
  1016.       global y = 0
  1017.       function y = f (x) x = 1; y = x; end
  1018.       f (x)
  1019.  
  1020.     result in the function returning 1, with the global values of x
  1021.     and y unchanged.
  1022.  
  1023.   * Multiple assignment expressions are now allowed to take indices,
  1024.     so things like
  1025.  
  1026.       octave:13> [a([1,2],[3,4]), b([5,6],[7,8])] = lu ([1,2;3,4])
  1027.  
  1028.     will work correctly.
  1029.  
  1030. Summary of changes for version 0.73:
  1031. -----------------------------------
  1032.  
  1033.   * Saving and loading global variables works correctly now.
  1034.  
  1035.   * The save command no longer saves built-in variables.
  1036.  
  1037.   * Global variables are more reliable.
  1038.  
  1039.   * Matrices may now have one or both dimensions zero, so that
  1040.     operations on empty matrices are now handled more consistently.
  1041.  
  1042.     By default, dimensions of the empty matrix are now printed along
  1043.     with the empty matrix symbol, `[]'.  For example:
  1044.  
  1045.       octave:13> zeros (3, 0)
  1046.       ans = 
  1047.  
  1048.       [](3x0)
  1049.  
  1050.     The new variable `print_empty_dimensions' controls this behavior.
  1051.     
  1052.     See also Carl de Boor, An Empty Exercise, SIGNUM, Volume 25,
  1053.     pages 2--6, 1990, or C. N. Nett and W. M. Haddad, A
  1054.     System-Theoretic Appropriate Realization of the Empty Matrix
  1055.     Concept, IEEE Transactions on Automatic Control, Volume 38,
  1056.     Number 5, May 1993.
  1057.  
  1058.   * The right and left division operators `/' and `\' will now find a
  1059.     minimum norm solution if the system is not square, or if the
  1060.     coefficient matrix is singular.
  1061.  
  1062.   * New functions:
  1063.  
  1064.       hess   -- Hessenberg decomposition
  1065.       schur  -- Ordered Schur factorization
  1066.       perror -- print error messages corresponding to error codes
  1067.                 returned from the functions fsolve, npsol, and qpsol
  1068.                 (with others to possibly be added later).
  1069.  
  1070.   * Octave now prints a warning if it finds anything other than
  1071.     whitespace or comments after the final `end' or `endfunction'
  1072.     statement.
  1073.  
  1074.   * The bodies of functions, and the for, while, and if commands are
  1075.     now allowed to be empty.
  1076.  
  1077.   * Support for Gill and Murray's QPSOL has been added.  Like NPSOL,
  1078.     QPSOL is not freely redistributable either, so you must obtain
  1079.     your own copy to be able to use this feature.  More information
  1080.     about where to find QPSOL and NPSOL are in the file README.NLP.
  1081.  
  1082. Summary of changes for version 0.72:
  1083. -----------------------------------
  1084.  
  1085.   * For numeric output, columns are now lined up on the decimal point.
  1086.     (This requires libg++-2.3.1 or later to work correctly).
  1087.  
  1088.   * If octave is running interactively and the output intended for the
  1089.     screen is longer than one page and a pager is available, it is
  1090.     sent to the pager through a pipe.  You may specify the program to
  1091.     use as the pager by setting the variable PAGER.  PAGER may also
  1092.     specify a command pipeline.
  1093.  
  1094.   * Spaces are not always significant inside square brackets now, so
  1095.     commands like
  1096.  
  1097.       [ linspace (1, 2) ]
  1098.  
  1099.     will work.  However, some possible sources of confusion remain
  1100.     because Octave tries (possibly too hard) to determine exactly what
  1101.     operation is intended from the context surrounding an operator.
  1102.     For example:
  1103.  
  1104.     -- In the command 
  1105.  
  1106.          [ 1 - 1 ]
  1107.  
  1108.        the `-' is treated as a binary operator and the result is the
  1109.        scalar 0, but in the command
  1110.  
  1111.          [ 1 -1 ]
  1112.  
  1113.        the `-' is treated as a unary operator and the result is the
  1114.        vector [ 1 -1 ].
  1115.  
  1116.     -- In the command
  1117.  
  1118.          a = 1; [ 1 a' ]
  1119.  
  1120.        the single quote character `'' is treated as a transpose operator
  1121.        and the result is the vector [ 1 1 ], but in the command
  1122.  
  1123.          a = 1; [ 1 a ' ]
  1124.  
  1125.        an error message indicating an unterminated string constant is
  1126.        printed.
  1127.  
  1128.   * Assignments are just expressions now, so they are valid anywhere
  1129.     other expressions are.  This means that things like
  1130.  
  1131.       if (a = n < m) ... endif
  1132.  
  1133.     are valid.  This is parsed as:  compare `n < m', assign the result
  1134.     to the variable `a', and use it as the test expression in the if
  1135.     statement.
  1136.  
  1137.     To help avoid errors where `=' has been used but `==' was
  1138.     intended, Octave issues a warning suggesting parenthesis around
  1139.     assignments used as truth values.  You can suppress this warning
  1140.     by adding parenthesis, or by setting the value of the new built-in
  1141.     variable `warn_assign_as_truth_value' to 'false' (the default
  1142.     value is 'true').
  1143.  
  1144.     This is also true for multiple assignments, so expressions like
  1145.  
  1146.       [a, b, c] = [u, s, v] = expression
  1147.  
  1148.     are now possible.  If the expression is a function, nargout is set
  1149.     to the number of arguments for the right-most assignment.  The
  1150.     other assignments need not contain the same number of elements.
  1151.     Extra left hand side variables in an assignment become undefined.
  1152.  
  1153.   * The default line style for plots is now `lines' instead of
  1154.     `points'.  To change it, use the `set data style STYLE' command.
  1155.  
  1156.   * New file handling and I/O functions:
  1157.  
  1158.       fopen    -- open a file for reading or writing
  1159.       fclose   -- close a file
  1160.       fflush   -- flush output to a file
  1161.       fgets    -- read characters from a file
  1162.       frewind  -- set file position to the beginning of a file
  1163.       fseek    -- set file position
  1164.       ftell    -- tell file position
  1165.       freport  -- print a report for all open files
  1166.       fscanf   -- read from a file
  1167.       sscanf   -- read from a string
  1168.       scanf    -- read from the standard input
  1169.  
  1170.   * New built-in variables for file and I/O functions:
  1171.  
  1172.       stdin    -- file number corresponding to the standard input stream.
  1173.       stdout   -- file number corresponding to the standard output stream.
  1174.       stderr   -- file number corresponding to the standard error stream.
  1175.  
  1176.     The following may be used as the final (optional) argument for
  1177.     fseek: 
  1178.  
  1179.       SEEK_SET -- set position relative to the beginning of the file.
  1180.       SEEK_CUR -- set position relative to the current position.
  1181.       SEEK_END -- set position relative to the end of the file.
  1182.  
  1183.   * New function: setstr -- convert vectors or scalars to strings
  1184.     (doesn't work for matrices yet).
  1185.  
  1186.   * If possible, computer now prints the system type instead of
  1187.     always printing `Hi Dave, I'm a HAL-9000'.
  1188.  
  1189.   * Octave now properly saves and restores its internal state
  1190.     correctly in more places.  Interrupting Octave while it is
  1191.     executing a script file no longer causes it to exit.
  1192.  
  1193.   * Octave now does tilde expansion on each element of the LOADPATH.
  1194.  
  1195.   * A number of memory leaks have been plugged.
  1196.  
  1197.   * Dependencies for C++ source files are now generated automatically
  1198.     by g++.
  1199.  
  1200.   * There is a new command line option, -p PATH, that may be used to
  1201.     set Octave's loadpath from the command line.  It will override any
  1202.     value of OCTAVE_PATH found in the environment, but not any
  1203.     LOADPATH="path" commands found in the system or user startup files.
  1204.  
  1205.   * It is now possible to override Octave's default idea of the
  1206.     location of the system-wide startup file (usually stored in
  1207.     $(prefix)/lib/octave/octaverc) using the environment variable
  1208.     OCTAVE_HOME.  If OCTAVE_HOME has a value, Octave will look for
  1209.     octaverc and its M-files in the directory $OCTAVE_HOME/lib/octave.
  1210.  
  1211.     This allows people who are using binary distributions (as is
  1212.     common with systems like Linux) to install the real octave binary
  1213.     in any directory (using a name like octave.bin) and then install
  1214.     a simple script like this
  1215.  
  1216.       #!/bin/sh
  1217.       OCTAVE_HOME=/foo/bar/baz
  1218.       export OCTAVE_HOME
  1219.       exec octave.bin
  1220.  
  1221.     to be invoked as octave.
  1222.  
  1223.  
  1224. Summary of changes for version 0.71:
  1225. -----------------------------------
  1226.  
  1227.   * Much improved plotting facility.  With this release, Octave does
  1228.     not require a specially modified version of gnuplot, so gnuplot
  1229.     sources are no longer distributed with Octave.  For a more
  1230.     detailed description of the new plotting features, see the file
  1231.     PLOTTING.
  1232.  
  1233.   * New plotting commands:
  1234.  
  1235.       plot            -- 2D plots
  1236.       semilogx        -- 2D semilog plot with logscale on the x axis
  1237.       semilogy        -- 2D semilog plot with logscale on the y axis
  1238.       loglog          -- 2D log-log plot
  1239.       mesh            -- 3D mesh plot
  1240.       meshdom         -- create matrices for 3D plotting from two vectors
  1241.       contour         -- contour plots of 3D data
  1242.       bar             -- create bar graphs
  1243.       stairs          -- create stairstep plots
  1244.       polar           -- 2D plots from theta-R data
  1245.       grid            -- turn plot grid lines on or off
  1246.       xlabel, ylabel  -- place labels on the x and y axes of 2D plots
  1247.       sombrero        -- demonstrate 3D plotting
  1248.       gplot           -- 2D plot command with gnuplot-like syntax
  1249.       gsplot          -- 3D plot command with gnuplot-like syntax
  1250.       set             -- set plot options with gnuplot syntax
  1251.       show            -- show plot options with gnuplot syntax
  1252.       closeplot       -- close stream to gnuplot process
  1253.       purge_tmp_files -- delete temporary files created by plot command
  1254.  
  1255.   * Other new commands:
  1256.  
  1257.       ls, dir         -- print a directory listing
  1258.       shell_cmd       -- execute shell commands
  1259.       keyboard        -- get input from keyboard, useful for debugging
  1260.       menu            -- display a menu of options and ask for input
  1261.       fft             -- fast fourier transform
  1262.       ifft            -- inverse fast fourier transform
  1263.  
  1264.   * Strings may be enclosed in either single or double quote
  1265.     characters.  Double quote characters are not special within single
  1266.     quote strings, and single quotes are not special within double
  1267.     quote strings.
  1268.  
  1269.   * Command name completion now works for M-file names too.
  1270.  
  1271.   * Better help and usage messages for many functions.
  1272.  
  1273.   * Help is now available for functions defined in M-files.  The first
  1274.     block of comments is taken as the text of the help message.
  1275.  
  1276.   * Numerous changes in preparation to support dynamic loading of
  1277.     object files with dld.
  1278.  
  1279.   * Bug fixes to make solving DAEs with dassl actually work.
  1280.  
  1281.   * The command `save file' now saves all variables in the named file.
  1282.  
  1283.   * If do_fortran_indexing is 'true', indexing a scalar with
  1284.     [1,1,1,...] (n times) replicates its value n times.  The
  1285.     orientation of the resulting vector depends on the value of
  1286.     prefer_column_vectors.
  1287.  
  1288.   * Things like [[1,2][3,4]] no longer cause core dumps, and invalid
  1289.     input like [1,2;3,4,[5,6]] now produces a diagnositic message.
  1290.  
  1291.   * The cd, save, and load commands now do tilde expansion.
  1292.  
  1293.   * It's now possible to clear global variables and functions by name.
  1294.  
  1295.   * Use of clear inside functions is now a parse error.
  1296.  
  1297. Summary of changes for version 0.70:
  1298. -----------------------------------
  1299.  
  1300.   * Better parse error diagnostics.  For interactive input, you get
  1301.     messages like
  1302.  
  1303.       octave:1> a = 3 + * 4;
  1304.  
  1305.       parse error:
  1306.  
  1307.           a = 3 + * 4;
  1308.                   ^
  1309.  
  1310.     and for script files, the message includes the file name and input
  1311.     line number:
  1312.  
  1313.       octave:1> foo
  1314.  
  1315.       parse error near line 4 of file foo.m:
  1316.  
  1317.           a = 3 + * 4;
  1318.                   ^
  1319.  
  1320.   * New built-in variable PS2 which is used as the secondary prompt.
  1321.     The default value is '> '.
  1322.  
  1323.   * New file, octave-mode.el, for editing Octave code with GNU Emacs.
  1324.     This is a modified version of Matthew R. Wette's matlab-mode.el.
  1325.  
  1326.   * Better support for missing math functions.
  1327.  
  1328.   * User preferences are now cached in a global struct so we don't
  1329.     have to do a symbol table lookup each time we need to know what
  1330.     they are.  This should mean slightly improved performance for
  1331.     evaluating expressions.
  1332.  
  1333. Summary of changes for version 0.69:
  1334. -----------------------------------
  1335.  
  1336.   * Multiple assignments are now possible, so statements like
  1337.  
  1338.       a = b = c = 3;
  1339.       a = b = c = [1,2;3,4];
  1340.  
  1341.     or
  1342.  
  1343.       c = (a = (b = 2) * 3 + 4) * 5
  1344.  
  1345.     are legal, as are things that have even more bizarre effects, like
  1346.  
  1347.       a(4:6,4:6) = b(2:3,2:3) = [1,2;3,4];
  1348.  
  1349.     (try it).
  1350.  
  1351.   * Improved parsing of strings (but they still don't work as matrix
  1352.     elements).
  1353.  
  1354.   * An M-file may now either define a function or be a list of
  1355.     commands to execute.
  1356.  
  1357.   * Better detection and conditional compilation of IEEE functions
  1358.     isinf, finite, and isnan.
  1359.  
  1360.   * Replacements for acosh, asinh, atanh, and gamma from the BSD math
  1361.     library for those systems that don't have them.
  1362.  
  1363. Summary of changes for version 0.68:
  1364. -----------------------------------
  1365.  
  1366.   * New functions:
  1367.  
  1368.       eval  -- evaluate a string as a sequence of Octave commands. 
  1369.       input -- print a prompt and get user input.
  1370.  
  1371. Summary of changes for version 0.67:
  1372. -----------------------------------
  1373.  
  1374.   * New functions:
  1375.  
  1376.       find -- return the indices of nonzero elements.
  1377.  
  1378.   * Zero-one style indexing now works.  For example,
  1379.  
  1380.       a = [1,2,3,4];
  1381.       b = a([1,0,0,1])
  1382.  
  1383.     sets b to the first and fourth elememnts of a.
  1384.  
  1385.     Zero-one style indexing also works for indexing the left hand side
  1386.     of an assignment.  For example,
  1387.  
  1388.       a = rand (1,2;3,4);
  1389.       a([0,1],:) = [-1,-2]
  1390.  
  1391.     sets the second row of a to [-1 -2]
  1392.  
  1393.     The behavior for the ambiguous case
  1394.  
  1395.       a = [1,2,3,4];
  1396.       b = a([1,1,1,1]);
  1397.  
  1398.     is controlled by the new global variable `prefer_zero_one_indexing'.
  1399.     If this variable is equal to 'true', b will be set to [1 2 3 4].
  1400.     If it is false, b will be set to [1 1 1 1].  The default value is
  1401.     'false'.
  1402.  
  1403.   * Using the new global variable `propagate_empty_matrices', it is
  1404.     possible to have unary andy binary operations on empty matrices
  1405.     return an empty matrix.  The default value of this variable is
  1406.     'warn', so that empty matrices are propagated but you get a
  1407.     warning.  Some functions, like eig and svd have also been changed
  1408.     to handle this.
  1409.  
  1410.   * Empty matrices can be used in conditionals, but they always
  1411.     evaluate to `false'.  With propagate_empty_matrices = 'true', both
  1412.     of the following expressions print 0: 
  1413.  
  1414.       if  [], 1, else 0, end
  1415.       if ~[], 1, else 0, end
  1416.  
  1417.   * Octave no longer converts input like `3.2 i' or `3 I' to complex
  1418.     constants directly because that causes problems inside square
  1419.     brackets, where spaces are important.  This abbreviated notation
  1420.     *does* work if there isn't a space between the number and the i,
  1421.     I, j, or J.
  1422.  
  1423. Summary of changes for version 0.66:
  1424. -----------------------------------
  1425.  
  1426.   * Logical unary not operator (~ or !) now works for complex.
  1427.  
  1428.   * Left division works.
  1429.  
  1430.   * Right and left element by element division should work correctly
  1431.     now.
  1432.  
  1433.   * Numbers like .3e+2 are no longer errors.
  1434.  
  1435.   * Indexing a matrix with a complex value doesn't cause a core dump.
  1436.  
  1437.   * The min and max functions should work correctly for two arguments.
  1438.  
  1439.   * Improved (I hope!) configuration checks.
  1440.  
  1441.   * Octave is now installed as octave-M.N, where M and N are version
  1442.     numbers, and octave is a link to that file.  This makes it
  1443.     possible to have more than one version of the interpreter installed.
  1444.  
  1445. Summary of changes for version 0.63:
  1446. -----------------------------------
  1447.  
  1448.   * The reshape function works again.
  1449.  
  1450.   * Octave now converts input like `3.2i' or `3 I' or `2.3e5 j' to be 
  1451.     complex constants directly, rather than requiring an expression
  1452.     like `3.3 * i' to be evaluated.
  1453.  
  1454. Summary of changes for version 0.61:
  1455. -----------------------------------
  1456.  
  1457.   * Octave has been successfully compiled using gcc 2.3.3 and libg++ 2.3.
  1458.     on a 486 system running Linux.
  1459.  
  1460.   * The win_texas_lotto function is now called texas_lotto (it's a
  1461.     script file, and win_texas_lotto.m is too long for some Linux and
  1462.     System V systems).
  1463.  
  1464. Summary of changes for version 0.57:
  1465. ------------------------------------
  1466.  
  1467.   * The C-like formatted print functions printf, fprintf, and sprintf
  1468.     finally work. 
  1469.  
  1470. Summary of changes for version 0.56:
  1471. ------------------------------------
  1472.  
  1473.   * By default, octave prints a short disclaimer when it starts.
  1474.     (You can suppress it by invoking octave with -q).
  1475.  
  1476.   * You can keep octave from reading your ~/.octaverc and .octaverc
  1477.     files by invoking it with -f.
  1478.  
  1479.   * When returning two values, eig now returns [v, d] instead of
  1480.     [lambda, v], where d is a diagonal matrix made from lambda.
  1481.  
  1482.   * The win_texas_lotto function now produces a sorted list.
  1483.  
  1484.   * New functions:
  1485.  
  1486.       expm -- matrix exponential.
  1487.       logm -- matrix logarithm.
  1488.  
  1489. Summary of changes for version 0.55:
  1490. ------------------------------------
  1491.  
  1492.   * The following (C-style) backslash escape sequences work in quoted
  1493.     strings (useful(?) with printf()):
  1494.  
  1495.       \a  bell         \r  carriage return
  1496.       \b  backspace    \t  horizontal tab
  1497.       \f  formfeed     \v  vertical tab
  1498.       \n  newline      \\  backslash
  1499.  
  1500.   * Use of `...' at the end of a line will allow a statement to
  1501.     continue over more than one line.
  1502.  
  1503.   * The names `inf' and `nan' are now aliases for `Inf' and `NaN',
  1504.     respectively.
  1505.  
  1506.   * New functions:
  1507.  
  1508.       casesen -- print a warning if the luser tries to turn off case
  1509.                  sensitivity.
  1510.       median  -- find median value.
  1511.       norm    -- compute the norm of a matrix.
  1512.       sort    -- sort columns.
  1513.  
  1514.   * New variable, `silent_functions'.  If silent_functions == 'true',
  1515.     the results of expressions are not printed even if they are not
  1516.     followed by a semicolon.  The disp() and printf() functions still
  1517.     result in output.  The default value for this variable is 'false'.
  1518.  
  1519.   * New variable `return_last_value_computed'.  If it is 'true',
  1520.     functions defined in script files return the last value computed
  1521.     if a return value has not been explicitly declared.  The default
  1522.     value for this variable is 'false'.
  1523.  
  1524. Summary of changes for version 0.52:
  1525. ------------------------------------
  1526.  
  1527.   * Name completion works for function and variable names currently in
  1528.     the symbol tables.  Coming soon: completion for names of functions
  1529.     defined in script files but not yet compiled. 
  1530.  
  1531.   * The initial value of do_fortran_indexing is now false, and the
  1532.     initial value of prefer_column_vectors is now true.  Swap the
  1533.     values of these variables if you want behavior that is more like
  1534.     Matlab.
  1535.  
  1536.   * All script files check the number of input arguments before doing
  1537.     much real work.
  1538.  
  1539.   * The identifiers `i' and `j' are now also names for sqrt(-1).
  1540.     These symbols may be used for other purposes, but their original
  1541.     definition will reappear if they are cleared.
  1542.  
  1543.   * The symbol tables are now implemented with hash tables for faster
  1544.     searching. 
  1545.  
  1546.   * A small amount of help is now available for most built-in
  1547.     operators, keywords and functions.  Coming soon: help for script
  1548.     files.
  1549.  
  1550.   * Without any arguments, the help command now lists all known
  1551.     built-in operators, keywords and functions.
  1552.  
  1553.   * Generic parse errors are now signalled by `Eh, what's up doc?',
  1554.     which is closer to what Bugs actually says.
  1555.  
  1556.   * The who command now only prints variable names by default.
  1557.     Use the -fcn (or -fcns, or -functions) switch to print the names of
  1558.     built-in or currently compiled functions.
  1559.  
  1560. Summary of changes for version 0.51:
  1561. ------------------------------------
  1562.  
  1563.   * Major overhaul of array indexing.
  1564.  
  1565.   * The colloc function actually works now.
  1566.  
  1567. Summary of changes for version 0.50:
  1568. ------------------------------------
  1569.  
  1570.   * The lsode and dassl functions now return the states only,
  1571.     instead of the time and the states, so you must keep track of
  1572.     the corresponding times (this is easy though, because you have
  1573.     to specify a vector of desired output times anyway).
  1574.  
  1575.   * Solution of NLPs with NPSOL now works on the SPARC.
  1576.  
  1577.   * New keywords `endif', `endfor', `endfunction', `endif', and
  1578.     `endwhile', which allow for better diagnostics.  The `end' keyword
  1579.     is still recognized.  All script files have been changed to use
  1580.     these new keywords in place of `end'.
  1581.  
  1582.   * It is now possible to uninstall Octave by doing a `make uninstall'
  1583.     in the top level directory.
  1584.  
  1585.   * The Makefiles are much closer to conforming with GNU coding standards.
  1586.  
  1587.   * New functions:
  1588.  
  1589.       win_texas_lotto  -- produce six unique random numbers between 1 and 50.
  1590.       quad             -- numerical integration.
  1591.       lu               -- LU factorization
  1592.       qr               -- QR factorization
  1593.       dassl            -- Solution of DAEs using DASSL.
  1594.  
  1595.   * New files:
  1596.  
  1597.       THANKS -- A list of people and organazations who have supported
  1598.                 the development of Octave.
  1599.  
  1600.       NEWS   -- This file, listing recent changes.
  1601.  
  1602.   * Help is now available at the gnuplot prompt.
  1603.