Mercurial > hg > octave-lojdl
changeset 12490:30f2a3b1d236
Major update to FAQ
author | Jordi Gutiérrez Hermoso <jordigh@gmail.com> |
---|---|
date | Tue, 01 Mar 2011 13:16:44 -0600 |
parents | ac3bdc27734e |
children | 981cd6796065 |
files | doc/ChangeLog doc/faq/OctaveFAQ.texi |
diffstat | 2 files changed, 265 insertions(+), 194 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -4,6 +4,22 @@ a C++ source file and refer to the section where other languages are discussed. + * faq/OctaveFAQ.texi: Major update to FAQ. Whitespace changes. + Update comments to version 3.4 of Octave. Summarise important + points of the NEWS file. We no longer have + stable/testing/unstable, only stable and development. Mention + newer versions of Windows. Update references to Matlab's latest + version. Mention that `!' can't be used for shell escapes. + Update other numbers like number of pages in manual, version + numbers, dates when things happened, file sizes. Clean out dead + links. Remove mentions of bugs@octave.org email address. Don't + say you can get Octave tapes from the FSF. Mention Ubuntu as + another distribution with Octave packages. Change package names + in anticipation for the forthcoming 3.4 binary packages. Explain + nested functions. Hint that classdef might happen in 3.5. + Mention 3D patches in the OpenGL backend. Clarify Matlab-style + short-circuiting. + 2010-02-28 Rik <octave@nomad.inbox5.com> * interpreter/numbers.txi: Add isrow, iscolumn functions to manual.
--- a/doc/faq/OctaveFAQ.texi +++ b/doc/faq/OctaveFAQ.texi @@ -6,12 +6,12 @@ % 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/>. @@ -44,10 +44,10 @@ This is a list of frequently asked questions (FAQ) for Octave users. We are always looking for new questions (@emph{with} answers), better -answers, or both. Please send suggestions to @email{bug@@octave.org}. -If you have general questions about Octave, or need help for something -that is not covered by the Octave manual or the FAQ, please use the -@email{help@@octave.org} mailing list. +answers, or both. Please send suggestions to +@url{http://bugs.octave.org}. If you have general questions about +Octave, or need help for something that is not covered by the Octave +manual or the FAQ, please use the @email{help@@octave.org} mailing list. This FAQ is intended to supplement, not replace, the Octave manual. Before posting a question to the @email{help@@octave.org} mailing list, @@ -57,7 +57,7 @@ * What is Octave?:: * Licensing Issues:: * How can I cite Octave?:: -* Series 3.0.N:: +* Series 3.4.N:: * Octave Features:: * Learning more about Octave:: * Getting Octave:: @@ -88,7 +88,7 @@ command history is saved, so that commands entered during previous sessions are not lost. -The Octave distribution includes a 590+ page Texinfo manual. Access to +The Octave distribution includes a 650+ page Texinfo manual. Access to the complete text of the manual is available via the @code{doc} command at the Octave prompt. @@ -140,7 +140,7 @@ In general, you will find the latest version on @url{http://www.octave.org/download.html}. It is recommended to use the -``testing'' version of octave for general use, and the ``development'' +``stable'' version of octave for general use, and the ``development'' version if you want the latest features. A list of user-visible changes since the last release is available in @@ -154,7 +154,10 @@ Octave runs on various Unices---at least Linux and Solaris, Mac OS X, Windows and anything you can compile it on. Binary distributions exist at least for Debian, Suse, Fedora and RedHat Linuxes (Intel and AMD -CPUs, at least), for Mac Os X and Windows' 98, 2000 and XP. +@c Does Vista work? I get the feeling that even Windows users are trying +@c to forget Vista like a bad nightmare. Tatsuro only confirmed XP and +@c 7. I am tentatively assuming that Vista also works. +CPUs, at least), for Mac OS X and Windows' 98, 2000, XP, Vista, and 7. Two and three dimensional plotting is fully supported using gnuplot and an experimental OpenGL backend. @@ -262,11 +265,53 @@ @end group @end example -@node Series 3.0.N -@chapter What's new in version series 3.0.N and 3.1.N of Octave +@node Series 3.4.N +@chapter What's new in version series 3.4.N and 3.5.N of Octave + +The 3.4.N series has enough new features to justify a minor version +number change. The full details are in the @file{NEWS} file, but in +brief 3.4.N series brings: + +@c This list is distilled from the NEWS file. Does it have enough +@c things? Does it have too many? +@itemize @bullet + +@item ARPACK now distributed with Octave + +@item Indexing optimisations + +@item FTP object using @file{libcurl} + +@item Better consistency with ismatrix, issquare, and issymetric + +@item Function handles aware of overloaded functions + +@item More efficient matrix division by making a single LAPACK call -The 3.0.N series has enough new features to justify a major version -number change. The 3.0.N series brings +@item Other optimisations in matrix operations + +@item @code{bsxfun} optimised for basic arithmetic functions + +@item @sc{Matlab}-style ignoring of output arguments using @samp{~} + +@item Many optimisations of the @code{accumarray} function + +@item Sparse matrix indexing has been rewritten for speed + +@item Configuration pseudo-variables like @code{page_screen_output} +accept a ``local'' option argument to limit their scope to function +scope + +@item The @code{pkg} command now accepts a @code{-forge} option to pull +packages directly from Octave-forge + +@item Several @code{dlmread} improvements + +@item Octave now uses gnulib for better cross-platform compatibility + +@end itemize + +Here are some features that have been around since 3.2.N @itemize @bullet @@ -288,23 +333,6 @@ @item many many other minor features and compatibility changes -@end itemize - -Here are some features that have been around since 2.1.N: - -@itemize @bullet - -@item NDarrays - -@item cells - -@end itemize - -The 3.1.N series is the current development release and will become a -3.2.N release in the future. This series brings the following new -features: - -@itemize @item OpenGL graphics toolkit An experimental OpenGL graphics toolkit to replace gnuplot. @@ -328,6 +356,25 @@ @item Improved array indexing The underlying code used for indexing of arrays has been completely rewritten and so the indexing of arrays is now significantly faster. + +@end itemize + +Here are some older features that have been around since 2.1.N: + +@itemize @bullet + +@item NDarrays + +@item cells + +@end itemize + +The 3.5.N series is the current development release and will become a +3.6.N release in the future. This series brings the following new +features: + +@itemize +@item Perl-compatible regular expressions are now part of Octave @end itemize @@ -347,14 +394,13 @@ * Built-in ODE and DAE solvers:: @end menu -This section refers to @sc{Matlab} R2008b and Octave 2.1.51. +This section refers to @sc{Matlab} R2010b and Octave 3.4.0. @node Functions defined on the command-line @section Functions defined on the command-line -Functions can be defined by entering code on the command line, a -feature not supported by the other leading brand. For example, you may -type: +Functions can be defined by entering code on the command line, a feature +not supported by @sc{Matlab}. For example, you may type: @example @group @@ -372,18 +418,18 @@ @node Comments with # @section Comments with # -The pound character, @samp{#}, may be used to start comments, in addition -to @samp{%}. See the previous example. The major advantage of this is -that as @samp{#} is also a comment character for unix script files, any -file that starts with a string like @samp{#! /usr/bin/octave -q} will be -treated as an octave script and be executed by octave. +The pound character, @samp{#}, may be used to start comments, in +addition to @samp{%}. See the previous example. The major advantage of +this is that as @samp{#} is also a comment character for unix script +files, any file that starts with a string like @samp{#! /usr/bin/octave +-q} will be treated as an octave script and be executed by octave. @node Strings delimitted by double quotes " @section Strings delimitted by double quotes " -The double quote, @samp{"}, may be used to delimit strings, in addition to -the single quote @samp{'}. See the previous example. Also, double-quoted -strings include backslash interpretation (like C++, C, and Perl) while -single quoted are uninterpreted (like @sc{Matlab} and Perl). +The double quote, @samp{"}, may be used to delimit strings, in addition +to the single quote @samp{'}. See the previous example. Also, +double-quoted strings include backslash interpretation (like C++, C, and +Perl) while single quoted are uninterpreted (like @sc{Matlab} and Perl). @node Line continuation by backslash @section Line continuation by backslash @@ -416,8 +462,8 @@ @node Exclamation mark as not operator @section Exclamation mark as not operator -The exclamation mark '!' (aka ``Bang!'') is a negation operator, just -like the tilde '~': +The exclamation mark @samp{!} (aka ``Bang!'') is a negation operator, just +like the tilde @samp{~}: @example @group @@ -430,6 +476,10 @@ @end group @end example +@noindent +Note however that @sc{Matlab} uses the @samp{!} operator for shell +escapes, for which Octave requires using the @code{system} command. + @node Increment and decrement operators @section Increment and decrement operators @@ -485,8 +535,8 @@ The @code{unwind_protect} statement is often used to reliably restore the values of global variables that need to be temporarily changed. -@sc{Matlab} can be made to do something similar with their @code{OnCleanUp} -function that was introduced in 2008a. +@sc{Matlab} can be made to do something similar with their +@code{OnCleanUp} function that was introduced in 2008a. @node Built-in ODE and DAE solvers @section Built-in ODE and DAE solvers @@ -513,7 +563,7 @@ @cindex Octave, documentation -The Octave distribution includes a 590+ page manual that is also +The Octave distribution includes a 650+ page manual that is also distributed under the terms of the GNU GPL. It is available on the web at @url{http://www.octave.org/docs.html} and you will also @@ -521,7 +571,7 @@ The complete text of the Octave manual is also available using the GNU Info system via the GNU Emacs, info, or xinfo programs, or by using -the @samp{help -i} command to start the GNU info browser directly from +the @samp{doc} command to start the GNU info browser directly from the Octave prompt. If you have problems using this documentation, or find that some topic @@ -542,8 +592,8 @@ @node User community @section User community -To subscribe to the list, go to @url{www.octave.org/archive.html} and -follow the link to the subscription page for the list. +To subscribe to the list, go to @url{http://www.octave.org/archive.html} +and follow the link to the subscription page for the list. @strong{Please do not} send requests to be added or removed from the mailing list, or other administrative trivia to the list itself. @@ -568,25 +618,9 @@ First, see the section on bugs and bug reports in the Octave manual. When you report a bug, make sure to describe the type of computer you are using, the version of the operating system it is running, and the -version of Octave that you are using. Also provide enough code so that -the Octave maintainers can duplicate your bug. - -If you have Octave working at all, the easiest way to do this is to use -the Octave function @code{bug_report}. When you execute this function, -Octave will prompt you for a subject and then invoke the editor on a -file that already contains all the configuration information. When you -exit the editor, Octave will mail the bug report for you (in a unix-like -operating system). - -@cindex Octave bug report -@cindex Mailing lists, bug-octave - -If for some reason you cannot use Octave's @code{bug_report} function, -mail your bug report to @email{bug@@octave.org}. Your message needs to -include enough information to allow the maintainers of Octave to fix the -bug. Please read the section on bugs and bug reports in the Octave -manual for a list of things that should be included in every bug report. - +version of Octave that you are using. Also provide enough code and +configuration details of your operating system so that the Octave +maintainers can duplicate your bug. @node Getting Octave @chapter Getting Octave @@ -610,8 +644,7 @@ @end itemize Since Octave is distrubted under the terms of the GPL, you can get -Octave from a friend who has a copy, by anonymous FTP, or by ordering -a tape or CD-ROM from the Free Software Foundation (FSF). +Octave from a friend who has a copy, or from the Octave website. @node Pre-compiled binary packages @section Pre-compiled binary packages @@ -626,8 +659,9 @@ @item @url{http://wiki.octave.org/wiki.pl?CategoryInstall} @end itemize -As of today, Octave binaries are available at least on Debian, RedHat, -Suse and Fedora Linuxes, Mac OS X, Windows' 98, 2000 and XP. +As of today, Octave binaries are available at least on Debian, Ubuntu, +RedHat, Suse and Fedora GNU/Linuxen, Mac OS X, Windows' 98, 2000 and XP, +Vista, and 7. @node Octave for other platforms @section How do I get a copy of Octave for (some other platform)? @@ -659,11 +693,11 @@ @cindex Octave, building -Octave 3.2 require approximately 800MB of disk storage to unpack -and compile from source (considerably less if you don't compile with -debugging symbols). Once installed, Octave requires approximately 200MB +Octave 3.4 require approximately 1.3 GB of disk storage to unpack and +compile from source (considerably less if you don't compile with +debugging symbols). Once installed, Octave requires approximately 355 MB of disk space (again, considerably less if you don't compile with -debugging symbols). +debugging symbols, approximately 50 MB). @menu * What else do I need?:: @@ -681,7 +715,7 @@ @cindex GNU Bison To compile Octave, you will need a recent version of GNU Make. You -will also need GCC 3.3 or later, although GCC 4.1 or later is +will also need GCC 4.3 or later, although GCC 4.4 or later is recommended. @strong{You must have GNU Make to compile octave}. Octave's Makefiles @@ -692,10 +726,10 @@ @section Can I compile Octave with another C++ compiler? Yes, but development is done primarily with GCC, so you may hit some -incompatibilities. Octave is intended to be portable to any standard -conforming compiler. If you have difficulties that you think are bugs, -please report them to the @email{bug@@octave.org} mailing list, or ask -for help on the @email{help@@octave.org} mailing list. +incompatibilities. Octave is intended to be portable to any standard +conforming compiler. If you have difficulties that you think are bugs, +please report them to the @url{http://bugs.octave.org} bug tracker, or +ask for help on the @email{help@@octave.org} mailing list. @node Common problems @chapter Common problems @@ -713,19 +747,19 @@ long check your use of the @code{genpath} function. @item -When plotting Octave occasionally gives me errors like @samp{gnuplot> 9 0.735604 -line 26317: invalid command}. +When plotting Octave occasionally gives me errors like @samp{gnuplot> 9 +0.735604 line 26317: invalid command}. There is a known bug in gnuplot 4.2 that can cause an off by one error -while piping data to gnuplot. The relevant gnuplot bug report can be -found at @url{http://sourceforge.net/tracker/index.php?func=detail&aid=1716556&group_id=2055&atid=102055} +while piping data to gnuplot. It has been fixed in gnuplot 4.4. If you have obtained your copy of Octave from a distribution please file a bug report requesting that the fix reported in the above bug report be included. @item -I cannot install a package. Octave complains about a missing @code{mkoctfile}. +I cannot install a package. Octave complains about a missing +@code{mkoctfile}. Most distributions split Octave into several packages. The script @code{mkoctfile} is then part of a separate package: @@ -733,7 +767,9 @@ @item Debian/Ubuntu -@code{aptitude install octave3.0-headers} +@c This will work once we upload the Octave packages without a version +@c in their name to Debian. +@code{aptitude install octave-headers} @item Fedora @@ -798,10 +834,11 @@ description of this difference (with code illustrating the difference, if possible) to @url{http://bugs.octave.org}. -Furthermore, Octave adds a few syntactical extensions to @sc{Matlab} that -might cause some issues when exchanging files between @sc{Matlab} and Octave -users. As both Octave and @sc{Matlab} are under constant development the -information in this section is subject to change at anytime. +Furthermore, Octave adds a few syntactical extensions to @sc{Matlab} +that might cause some issues when exchanging files between @sc{Matlab} +and Octave users. As both Octave and @sc{Matlab} are under constant +development the information in this section is subject to change at +anytime. You should also look at the page @url{http://octave.sourceforge.net/packages.html} and @@ -810,12 +847,12 @@ number of octave function that are available and their @sc{Matlab} compatibility. -The major differences between Octave 3.2.N and @sc{Matlab} R2008a are: +The major differences between Octave 3.4.N and @sc{Matlab} R2010b are: @itemize @bullet @item Nested Functions -Octave doesn't yet have nested functions. That is +Octave has limited support for nested functions. That is @example @group @@ -828,9 +865,7 @@ @end group @end example -There was discussion in Octave of having these even prior to @sc{Matlab}, -and the decision was made not to have these in Octave at the time for -compatibility. The above written with sub-functions functions would be +is equivalent to @example @group @@ -843,10 +878,10 @@ @end group @end example -Now that @sc{Matlab} has recently introduced nested functions, Octave will -probably have them soon as well. Until then nested functions in Octave -are treated as sub-functions with the same scoping rules as -sub-functions. +The main difference with @sc{Matlab} is a matter of scope. While nested +functions have access to the parent function's scope in @sc{Matlab}, no +such thing is available in Octave, due to how Octave essentially +``un-nests'' nested functions. The authors of Octave consider the nested function scoping rules of @sc{Matlab} to be more problems than they are worth as they introduce @@ -868,8 +903,8 @@ though the most common types are accepted. @item -@sc{Matlab} classdef object oriented programming is not yet supportted, -though work is underway and when development more on to Octave 3.3 this +@sc{Matlab} classdef object oriented programming is not yet supported, +though work is underway and when development more on to Octave 3.5 this will be included in the development tree. @end itemize @@ -877,49 +912,53 @@ A large number of the @sc{Matlab} core functions (ie those that are in the core and not a toolbox) are implemented, and certainly all of the commonly used ones. There are a few functions that aren't implemented, -@c this is no longer true, condest is now implemented in Octave -for example @code{condest} or to do with specific missing Octave functionality -(gui, dll, java, activex, dde, web, and serial functions). Some of the -core functions have limitations that aren't in the @sc{Matlab} -version. For example the @code{sprandn} function can not force a -particular condition number for the matrix like @sc{Matlab} can. +usually to do with specific missing Octave functionality (GUI, DLL, +Java, ActiveX, DDE, web, and serial functions). Some of the core +functions have limitations that aren't in the @sc{Matlab} version. For +example the @code{sprandn} function can not force a particular condition +number for the matrix like @sc{Matlab} can. @item Just-In-Time compiler @sc{Matlab} includes a "Just-In-Time" compiler. This compiler allows the -acceleration of for-loops in @sc{Matlab} to almost native performance with -certain restrictions. The JIT must know the return type of all functions -called in the loops and so you can't include user functions in the loop -of JIT optimized loops. Octave doesn't have a JIT and so to some might -seem slower than @sc{Matlab}. For this reason you must vectorize your code as -much as possible. The MathWorks themselves have a good document -discussing vectorization at -@c it would be nice if we had our own guide for this instead of relying +acceleration of for-loops in @sc{Matlab} to almost native performance +with certain restrictions. The JIT must know the return type of all +functions called in the loops and so you can't include user functions in +the loop of JIT optimized loops. Octave doesn't have a JIT and so to +some might seem slower than @sc{Matlab}. For this reason you must +vectorize your code as much as possible. The MathWorks themselves have a +good document discussing vectorization at +@c It would be nice if we had our own guide for this instead of relying @c on Matlab documentation. @url{http://www.mathworks.com/support/tech-notes/1100/1109.html}. @item Compiler On a related point, there is no Octave compiler, and so you can't convert your Octave code into a binary for additional speed or -distribution. There is an example of how to do this at -@url{http://www.stud.tu-ilmenau.de/~rueckn/}, but this is a very early -example code and would need lots of work to complete it. +distribution. There have been several aborted attempts at creating an +Octave compiler. Should the JIT compiler above ever be implemented, an +Octave compiler should be more feasible. +@c Should we mention here any of the efforts to create a compiler? There +@c used to be a dead link here to http://www.stud.tu-ilmenau.de/~rueckn/ @item Graphic Handles Up to Octave 2.9.9 there was no support for graphic handles in Octave -itself. In the 3.2.N versions of Octave the support for graphics -handles is converging towards full compatibility. The @code{patch} -function is currently limited to 2-D patches, due to an underlying -limitation in gnuplot. +itself. In the 3.2.N versions of Octave and beyond the support for +graphics handles is converging towards full compatibility. The +@code{patch} function is currently limited to 2-D patches, due to an +underlying limitation in gnuplot, but the experimental OpenGL backend is +starting to see an implementation of 3-D patches. @item GUI -There are no @sc{Matlab} compatible GUI functions. There are a number of -bindings from Octave to Tcl/Tk, Vtk and zenity included in the -Octave Forge project (@url{http://octave.sourceforge.net}) for example -that can be used for a GUI, but these are not @sc{Matlab} -compatible. Work on a @sc{Matlab} compatible GUI is in an alpha stage in the -JHandles package (@url{http://octave.sourceforge.net/jhandles/index.html}). -This might be an issue if you intend to exchange Octave code with -@sc{Matlab} users. +There are no @sc{Matlab} compatible GUI functions. There are a number of +bindings from Octave to Tcl/Tk, VTK and Zenity included in the Octave +@c Is it too early to mention here the nascent fltk UI buttons? +Forge project (@url{http://octave.sourceforge.net}) for example that can +be used for a GUI, but these are not @sc{Matlab} compatible. Work on a +@sc{Matlab} compatible GUI is in an alpha stage in the JHandles package +@c Is Jhandles still usable? I thought Michael Goffioul had more or less +@c already disowned it. +(@url{http://octave.sourceforge.net/jhandles/index.html}). This might be +an issue if you intend to exchange Octave code with @sc{Matlab} users. @item Simulink Octave itself includes no Simulink support. Typically the simulink @@ -931,13 +970,13 @@ @url{http://www.scicraft.org/} @item Mex-Files -Octave includes an API to the @sc{Matlab} MEX interface. However, as MEX is -an API to the internals of @sc{Matlab} and the internals of Octave +Octave includes an API to the @sc{Matlab} MEX interface. However, as MEX +is an API to the internals of @sc{Matlab} and the internals of Octave differ from @sc{Matlab}, there is necessarily a manipulation of the data to convert from a MEX interface to the Octave equivalent. This is notable for all complex matrices, where @sc{Matlab} stores complex arrays as real and imaginary parts, whereas Octave respects the C99/C++ -standards of co-locating the real/imag parts in memory. Also due to the +standards of co-locating the real/imag parts in memory. Also due to the way @sc{Matlab} allows access to the arrays passed through a pointer, the MEX interface might require copies of arrays (even non complex ones). @@ -948,27 +987,29 @@ comments are not supported within [] or @{@}. @item Mat-File format -There are some differences in the mat v5 file format accepted by -Octave. @sc{Matlab} recently introduced the "-V7.3" save option which is -an HDF5 format which is particularly useful for 64-bit platforms where -the standard @sc{Matlab} format can not correctly save variables.. Octave +@c How much of this is still true? +There are some differences in the mat v5 file format accepted by Octave. +@sc{Matlab} recently introduced the "-V7.3" save option which is an HDF5 +format which is particularly useful for 64-bit platforms where the +standard @sc{Matlab} format can not correctly save variables. Octave accepts HDF5 files, but is not yet compatible with the "-v7.3" versions produced by @sc{Matlab}. -Although Octave can load inline abd function handles saved by -@sc{Matlab}, it can not yet save them. +Although Octave can load inline function handles saved by @sc{Matlab}, +it can not yet save them. -Finally, Some multi-byte unicode characters aren't yet treated in +Finally, Some multi-byte Unicode characters aren't yet treated in mat-files. @item Profiler Octave doesn't have a profiler. Though there is a patch for a flat -profiler, that might become a real profiler sometime in the future. see +profiler, that might become a real profiler sometime in the future. See the thread -@url{http://www.cae.wisc.edu/pipermail/octave-maintainers/2007-January/001685.html} +@c Did this idea go anywhere? Should it be mentioned? +@url{http://octave.1599824.n4.nabble.com/Octave-profiler-td1641945.html#a1641947} -for more details +for more details. @item Toolboxes Octave is a community project and so the toolboxes that exist are @@ -977,7 +1018,6 @@ functionality relative to the @sc{Matlab} toolboxes, and might not exactly duplicate the @sc{Matlab} functionality or interface. -@c TODO: Update this to mention how it's now enabled in Octave @item Short-circuit & and | operators The @code{&} and @code{|} operators in @sc{Matlab} short-circuit when included in an if statemant and not otherwise. In Octave only the @@ -992,7 +1032,7 @@ @end example and - + @example @group t = a | b; @@ -1004,13 +1044,22 @@ @noindent are different in @sc{Matlab}. This is really a @sc{Matlab} bug, but -there is too much code out there that relies on this behavior to change -it. Prefer the || and && operators in if statements if possible. +there is too much code out there that relies on this behaviour to change +it. Prefer the || and && operators in if statements if possible. If you +need to use code written for @sc{Matlab} that depends on this buggy +behaviour, you can enable it since Octave 3.4.0 with the following +command: -Note that the difference is also significant when either argument is a -function with side effects or if the first argument is a scalar and the -second argument is an empty matrix. For example, note the difference -between +@example +@group + do_braindead_shortcircuit_evaluation(1) +@end group +@end example + +Note that the difference with @sc{Matlab} is also significant when +either argument is a function with side effects or if the first argument +is a scalar and the second argument is an empty matrix. For example, +note the difference between @example @group @@ -1034,8 +1083,8 @@ @end group @end example -Also @sc{Matlab} requires the operands of && and || to be scalar values but -Octave does not (it just applies the rule that for an operand to be +Also @sc{Matlab} requires the operands of && and || to be scalar values +but Octave does not (it just applies the rule that for an operand to be considered true, every element of the object must be nonzero or logically true). @@ -1056,29 +1105,31 @@ if ([]) != if (all ([])) @end example -because @code{samp ([]) == 1} (because, despite the name, it is really +because @code{samp ([]) == 1} because, despite the name, it is really returning true if none of the elements of the matrix are zero, and since -there are no elements, well, none of them are zero). But, somewhere -along the line, someone decided that if @code{([])} should be false. -Mathworks probably thought it just looks wrong to have @code{[]} be true -in this context even if you can use logical gymnastics to convince -yourself that "all" the elements of a matrix that doesn't actually have -any elements are nonzero. Octave however duplicates this behavior for if -statements containing empty matrices. +there are no elements, well, none of them are zero. This is an example +of vacuous truth. But, somewhere along the line, someone decided that if +@code{([])} should be false. Mathworks probably thought it just looks +wrong to have @code{[]} be true in this context even if you can use +logical gymnastics to convince yourself that "all" the elements of a +matrix that doesn't actually have any elements are nonzero. Octave +however duplicates this behavior for if statements containing empty +matrices. @item Solvers for singular, under- and over-determined matrices -@sc{Matlab}'s solvers as used by the operators mldivide (\) and mrdivide (/), -use a different approach than Octave's in the case of singular, under-, -or over-determined matrices. In the case of a singular matrix, @sc{Matlab} -returns the result given by the LU decomposition, even though the underlying -solver has flagged the result as erroneous. Octave has made the choice -of falling back to a minimum norm solution of matrices that have been -flagged as singular which arguably is a better result for these cases. +@sc{Matlab}'s solvers as used by the operators mldivide (\) and mrdivide +(/), use a different approach than Octave's in the case of singular, +under-, or over-determined matrices. In the case of a singular matrix, +@sc{Matlab} returns the result given by the LU decomposition, even +though the underlying solver has flagged the result as erroneous. Octave +has made the choice of falling back to a minimum norm solution of +matrices that have been flagged as singular which arguably is a better +result for these cases. In the case of under- or over-determined matrices, Octave continues to -use a minimum norm solution, whereas @sc{Matlab} uses an approach that is -equivalent to +use a minimum norm solution, whereas @sc{Matlab} uses an approach that +is equivalent to @example @group @@ -1094,9 +1145,9 @@ Octave's minimum norm approach, this approach seems to be inferior in other ways. -A numerical question arises: how big can the null space component become, -relative to the minimum-norm solution? Can it be nicely bounded, or can it be -arbitrarily big? Consider this example: +A numerical question arises: how big can the null space component +become, relative to the minimum-norm solution? Can it be nicely bounded, +or can it be arbitrarily big? Consider this example: @example @group @@ -1109,8 +1160,8 @@ @end example @noindent -while Octave's minimum-norm values are around 3e-2, @sc{Matlab}'s results -are 50-times larger. For another issue, try this code: +while Octave's minimum-norm values are around 3e-2, @sc{Matlab}'s +results are 50-times larger. For another issue, try this code: @example @group @@ -1134,11 +1185,12 @@ result than permuting the solution vector. This will surprise many users. -Since the mldivide (\) and mrdivide (/) operators are often part of a more -complex expression, where there is no room to react to warnings or flags, it -should prefer intelligence (robustness) to speed, and so the Octave developers -are firmly of the opinion that Octave's approach for singular, under- and -over-determined matrices is a better choice that @sc{Matlab}'s +Since the mldivide (\) and mrdivide (/) operators are often part of a +more complex expression, where there is no room to react to warnings or +flags, it should prefer intelligence (robustness) to speed, and so the +Octave developers are firmly of the opinion that Octave's approach for +singular, under- and over-determined matrices is a better choice that +@sc{Matlab}'s @item Octave extensions The extensions in Octave over @sc{Matlab} syntax are @@ -1149,21 +1201,24 @@ @itemize @bullet @item Comments in octave can be marked with @samp{#}. This allows POSIX -systems to have the first line as @samp{#! octave -q} and mark the script -itself executable. @sc{Matlab} doesn't have this feature due to the -absence of comments starting with @samp{#}". +systems to have the first line as @samp{#! octave -q} and mark the +script itself executable. @sc{Matlab} doesn't have this feature due to +the absence of comments starting with @samp{#}". @item -Code blocks like if, for, while, etc can be terminated with block -specific terminations like "endif". @sc{Matlab} doesn't have this and -all blocks must be terminated with "end" +Code blocks like @code{if}, @code{for}, @code{while}, etc can be +terminated with block specific terminations like @code{endif}. +@sc{Matlab} doesn't have this and all blocks must be terminated with +@code{end}. @item -Octave has a lisp like unwind_protect block that allows blocks of -code that terminate in an error to ensure that the variables that -are touched are restored. You can do something similar with +Octave has a lisp like @code{unwind_protect} block that allows blocks of +code that terminate in an error to ensure that the variables that are +touched are restored. You can do something similar with @code{try}/@code{catch} combined with @samp{rethrow (lasterror ())} in -@sc{Matlab}, however rethrow and lasterror are only available in Octave 2.9.10 and later. +@sc{Matlab}, however rethrow and lasterror are only available in Octave +2.9.10 and later. @sc{Matlab} 2008a also introduced @code{OnCleanUp} +that is similar to @code{unwind_protect}. Note that using @code{try}/@code{catch} combined with @samp{rethrow (lasterror ())} can not guarantee that global variables will be