Mercurial > hg > octave-lyh
diff doc/interpreter/intro.txi @ 3294:bfe1573bd2ae
[project @ 1999-10-19 10:06:07 by jwe]
author | jwe |
---|---|
date | Tue, 19 Oct 1999 10:08:42 +0000 |
parents | |
children | 3c6989370d00 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/doc/interpreter/intro.txi @@ -0,0 +1,599 @@ +@c Copyright (C) 1996, 1997 John W. Eaton +@c This is part of the Octave manual. +@c For copying conditions, see the file gpl.texi. + +@node Introduction, Getting Started, Preface, Top +@chapter A Brief Introduction to Octave +@cindex introduction + +This manual documents how to run, install and port GNU Octave, and how +to report bugs. + +GNU Octave is a high-level language, primarily intended for numerical +computations. It provides a convenient command line interface for +solving linear and nonlinear problems numerically, and for performing +other numerical experiments. It may also be used as a batch-oriented +language. + +GNU Octave is also freely redistributable software. You may +redistribute it and/or modify it under the terms of the GNU General +Public License as published by the Free Software Foundation. The GPL is +included in this manual in @ref{Copying}. + +This document corresponds to Octave version @value{VERSION}. + +@c XXX FIXME XXX -- add explanation about how and why Octave was written. +@c +@c XXX FIXME XXX -- add a sentence or two explaining that we could +@c always use more funding. + +@menu +* Running Octave:: +* Simple Examples:: +* Conventions:: +@end menu + +@node Running Octave, Simple Examples, Introduction, Introduction +@section Running Octave + +On most systems, the way to invoke Octave is with the shell command +@samp{octave}. Octave displays an initial message and then a prompt +indicating it is ready to accept input. You can begin typing Octave +commands immediately afterward. + +If you get into trouble, you can usually interrupt Octave by typing +@kbd{Control-C} (usually written @kbd{C-c} for short). @kbd{C-c} gets +its name from the fact that you type it by holding down @key{CTRL} and +then pressing @key{c}. Doing this will normally return you to Octave's +prompt. + +@cindex exiting octave +@cindex quitting octave +To exit Octave, type @kbd{quit}, or @kbd{exit} at the Octave prompt. + +On systems that support job control, you can suspend Octave by sending +it a @code{SIGTSTP} signal, usually by typing @kbd{C-z}. + +@node Simple Examples, Conventions, Running Octave, Introduction +@section Simple Examples + +The following chapters describe all of Octave's features in detail, but +before doing that, it might be helpful to give a sampling of some of its +capabilities. + +If you are new to Octave, I recommend that you try these examples to +begin learning Octave by using it. Lines marked with @samp{octave:13>} +are lines you type, ending each with a carriage return. Octave will +respond with an answer, or by displaying a graph. + +@unnumberedsubsec Creating a Matrix + +To create a new matrix and store it in a variable so that it you can +refer to it later, type the command + +@example +octave:1> a = [ 1, 1, 2; 3, 5, 8; 13, 21, 34 ] +@end example + +@noindent +Octave will respond by printing the matrix in neatly aligned columns. +Ending a command with a semicolon tells Octave to not print the result +of a command. For example + +@example +octave:2> b = rand (3, 2); +@end example + +@noindent +will create a 3 row, 2 column matrix with each element set to a random +value between zero and one. + +To display the value of any variable, simply type the name of the +variable. For example, to display the value stored in the matrix +@code{b}, type the command + +@example +octave:3> b +@end example + +@unnumberedsubsec Matrix Arithmetic + +Octave has a convenient operator notation for performing matrix +arithmetic. For example, to multiply the matrix @code{a} by a scalar +value, type the command + +@example +octave:4> 2 * a +@end example + +To multiply the two matrices @code{a} and @code{b}, type the command + +@example +octave:5> a * b +@end example + +To form the matrix product +@iftex +@tex +$@code{a}^T@code{a}$, +@end tex +@end iftex +@ifinfo +@code{transpose (a) * a}, +@end ifinfo +type the command + +@example +octave:6> a' * a +@end example + +@unnumberedsubsec Solving Linear Equations + +To solve the set of linear equations @code{a@var{x} = b}, +use the left division operator, @samp{\}: + +@example +octave:7> a \ b +@end example + +@noindent +This is conceptually equivalent to +@iftex +@tex +$@code{a}^{-1}@code{b}$, +@end tex +@end iftex +@ifinfo +@code{inv (a) * b}, +@end ifinfo +but avoids computing the inverse of a matrix directly. + +If the coefficient matrix is singular, Octave will print a warning +message and compute a minimum norm solution. + +@unnumberedsubsec Integrating Differential Equations + +Octave has built-in functions for solving nonlinear differential +equations of the form +@iftex +@tex +$$ + {dx \over dt} = f(x,t), \qquad x(t=t_0) = x_0 +$$ +@end tex +@end iftex +@ifinfo + +@example +@group +dx +-- = f (x, t) +dt +@end group +@end example + +@noindent +with the initial condition + +@example +x(t = t0) = x0 +@end example +@end ifinfo + +@noindent +For Octave to integrate equations of this form, you must first provide a +definition of the function +@iftex +@tex +$f (x, t)$. +@end tex +@end iftex +@ifinfo +@code{f(x,t)}. +@end ifinfo +This is straightforward, and may be accomplished by entering the +function body directly on the command line. For example, the following +commands define the right hand side function for an interesting pair of +nonlinear differential equations. Note that while you are entering a +function, Octave responds with a different prompt, to indicate that it +is waiting for you to complete your input. + +@example +@group +octave:8> function xdot = f (x, t) +> +> r = 0.25; +> k = 1.4; +> a = 1.5; +> b = 0.16; +> c = 0.9; +> d = 0.8; +> +> xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1)); +> xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2); +> +> endfunction +@end group +@end example + +@noindent +Given the initial condition + +@example +x0 = [1; 2]; +@end example + +@noindent +and the set of output times as a column vector (note that the first +output time corresponds to the initial condition given above) + +@example +t = linspace (0, 50, 200)'; +@end example + +@noindent +it is easy to integrate the set of differential equations: + +@example +x = lsode ("f", x0, t); +@end example + +@noindent +The function @code{lsode} uses the Livermore Solver for Ordinary +Differential Equations, described in A. C. Hindmarsh, @cite{ODEPACK, a +Systematized Collection of ODE Solvers}, in: Scientific Computing, R. S. +Stepleman et al. (Eds.), North-Holland, Amsterdam, 1983, pages 55--64. + +@unnumberedsubsec Producing Graphical Output + +To display the solution of the previous example graphically, use the +command + +@example +plot (t, x) +@end example + +If you are using the X Window System, Octave will automatically create +a separate window to display the plot. If you are using a terminal that +supports some other graphics commands, you will need to tell Octave what +kind of terminal you have. Type the command + +@example +gset term +@end example + +@noindent +to see a list of the supported terminal types. Octave uses +@code{gnuplot} to display graphics, and can display graphics on any +terminal that is supported by @code{gnuplot}. + +To capture the output of the plot command in a file rather than sending +the output directly to your terminal, you can use a set of commands like +this + +@example +@group +gset term postscript +gset output "foo.ps" +replot +@end group +@end example + +@noindent +This will work for other types of output devices as well. Octave's +@code{gset} command is really just piped to the @code{gnuplot} +subprocess, so that once you have a plot on the screen that you like, +you should be able to do something like this to create an output file +suitable for your graphics printer. + +Or, you can eliminate the intermediate file by using commands like this + +@example +@group +gset term postscript +gset output "|lpr -Pname_of_your_graphics_printer" +replot +@end group +@end example + +@unnumberedsubsec Editing What You Have Typed + +At the Octave prompt, you can recall, edit, and reissue previous +commands using Emacs- or vi-style editing commands. The default +keybindings use Emacs-style commands. For example, to recall the +previous command, type @kbd{Control-p} (usually written @kbd{C-p} for +short). @kbd{C-p} gets its name from the fact that you type it by +holding down @key{CTRL} and then pressing @key{p}. Doing this will +normally bring back the previous line of input. @kbd{C-n} will bring up +the next line of input, @kbd{C-b} will move the cursor backward on the +line, @kbd{C-f} will move the cursor forward on the line, etc. + +A complete description of the command line editing capability is given +in this manual in @ref{Command Line Editing}. + +@unnumberedsubsec Getting Help + +Octave has an extensive help facility. The same documentation that is +available in printed form is also available from the Octave prompt, +because both forms of the documentation are created from the same input +file. + +In order to get good help you first need to know the name of the command +that you want to use. This name of the function may not always be +obvious, but a good place to start is to just type @code{help}. +This will show you all the operators, reserved words, functions, +built-in variables, and function files. You can then get more +help on anything that is listed by simply including the name as an +argument to help. For example, + +@example +help plot +@end example + +@noindent +will display the help text for the @code{plot} function. + +Octave sends output that is too long to fit on one screen through a +pager like @code{less} or @code{more}. Type a @key{RET} to advance one +line, a @key{SPC} to advance one page, and @key{q} to exit the pager. + +The part of Octave's help facility that allows you to read the complete +text of the printed manual from within Octave normally uses a separate +program called Info. When you invoke Info you will be put into a menu +driven program that contains the entire Octave manual. Help for using +Info is provided in this manual in @ref{Getting Help}. + +@node Conventions, , Simple Examples, Introduction +@section Conventions + +This section explains the notational conventions that are used in this +manual. You may want to skip this section and refer back to it later. + +@menu +* Fonts:: +* Evaluation Notation:: +* Printing Notation:: +* Error Messages:: +* Format of Descriptions:: +@end menu + +@node Fonts, Evaluation Notation, Conventions, Conventions +@subsection Fonts +@cindex fonts + +Examples of Octave code appear in this font or form: @code{svd (a)}. +Names that represent arguments or metasyntactic variables appear +in this font or form: @var{first-number}. Commands that you type at the +shell prompt sometimes appear in this font or form: +@samp{octave --no-init-file}. Commands that you type at the Octave +prompt sometimes appear in this font or form: @kbd{foo --bar --baz}. +Specific keys on your keyboard appear in this font or form: @key{ANY}. +@cindex any key + +@node Evaluation Notation, Printing Notation, Fonts, Conventions +@subsection Evaluation Notation +@cindex evaluation notation +@cindex documentation notation + +In the examples in this manual, results from expressions that you +evaluate are indicated with @samp{@result{}}. For example, + +@example +@group +sqrt (2) + @result{} 1.4142 +@end group +@end example + +@noindent +You can read this as ``@code{sqrt (2)} evaluates to 1.4142''. + +In some cases, matrix values that are returned by expressions are +displayed like this + +@example +@group +[1, 2; 3, 4] == [1, 3; 2, 4] + @result{} [ 1, 0; 0, 1 ] +@end group +@end example + +@noindent +and in other cases, they are displayed like this + +@example +@group +eye (3) + @result{} 1 0 0 + 0 1 0 + 0 0 1 +@end group +@end example + +@noindent +in order to clearly show the structure of the result. + +Sometimes to help describe one expression, another expression is +shown that produces identical results. The exact equivalence of +expressions is indicated with @samp{@equiv{}}. For example, + +@example +@group +rot90 ([1, 2; 3, 4], -1) +@equiv{} +rot90 ([1, 2; 3, 4], 3) +@equiv{} +rot90 ([1, 2; 3, 4], 7) +@end group +@end example + +@node Printing Notation, Error Messages, Evaluation Notation, Conventions +@subsection Printing Notation +@cindex printing notation + +Many of the examples in this manual print text when they are +evaluated. Examples in this manual indicate printed text with +@samp{@print{}}. The value that is returned by evaluating the +expression (here @code{1}) is displayed with @samp{@result{}} and +follows on a separate line. + +@example +@group +printf ("foo %s\n", "bar") + @print{} foo bar + @result{} 1 +@end group +@end example + +@node Error Messages, Format of Descriptions, Printing Notation, Conventions +@subsection Error Messages +@cindex error message notation + +Some examples signal errors. This normally displays an error message +on your terminal. Error messages are shown on a line starting with +@code{error:}. + +@example +@group +struct_elements ([1, 2; 3, 4]) +error: struct_elements: wrong type argument `matrix' +@end group +@end example + +@node Format of Descriptions, , Error Messages, Conventions +@subsection Format of Descriptions +@cindex description format + +Functions, commands, and variables are described in this manual in a +uniform format. The first line of a description contains the name of +the item followed by its arguments, if any. +@ifinfo +The category---function, variable, or whatever---appears at the +beginning of the line. +@end ifinfo +@iftex +The category---function, variable, or whatever---is printed next to the +right margin. +@end iftex +The description follows on succeeding lines, sometimes with examples. + +@menu +* A Sample Function Description:: +* A Sample Command Description:: +* A Sample Variable Description:: +@end menu + +@node A Sample Function Description, A Sample Command Description, Format of Descriptions, Format of Descriptions +@subsubsection A Sample Function Description +@cindex function descriptions + +In a function description, the name of the function being described +appears first. It is followed on the same line by a list of parameters. +The names used for the parameters are also used in the body of the +description. + +Here is a description of an imaginary function @code{foo}: + +@deftypefn {Function} {} foo (@var{x}, @var{y}, @dots{}) +The function @code{foo} subtracts @var{x} from @var{y}, then adds the +remaining arguments to the result. If @var{y} is not supplied, then the +number 19 is used by default. + +@example +@group +foo (1, [3, 5], 3, 9) + @result{} [ 14, 16 ] +foo (5) + @result{} 14 +@end group +@end example + +More generally, + +@example +@group +foo (@var{w}, @var{x}, @var{y}, @dots{}) +@equiv{} +@var{x} - @var{w} + @var{y} + @dots{} +@end group +@end example +@end deftypefn + +Any parameter whose name contains the name of a type (e.g., +@var{integer}, @var{integer1} or @var{matrix}) is expected to be of that +type. Parameters named @var{object} may be of any type. Parameters +with other sorts of names (e.g., @var{new_file}) are discussed +specifically in the description of the function. In some sections, +features common to parameters of several functions are described at the +beginning. + +Functions in Octave may be defined in several different ways. The +catagory name for functions may include another name that indicates the +way that the function is defined. These additional tags include + +@table @asis +@item Built-in Function +@cindex built-in function +The function described is written in a language like C++, C, or Fortran, +and is part of the compiled Octave binary. + +@item Loadable Function +@cindex loadable function +The function described is written in a language like C++, C, or Fortran. +On systems that support dynamic linking of user-supplied functions, it +may be automatically linked while Octave is running, but only if it is +needed. @xref{Dynamically Linked Functions}. + +@item Function File +@cindex function file +The function described is defined using Octave commands stored in a text +file. @xref{Function Files}. + +@item Mapping Function +@cindex mapping function +The function described works element-by-element for matrix and vector +arguments. +@end table + +@node A Sample Command Description, A Sample Variable Description, A Sample Function Description, Format of Descriptions +@subsubsection A Sample Command Description +@cindex command descriptions + +Command descriptions have a format similar to function descriptions, +except that the word `Function' is replaced by `Command. Commands are +functions that may called without surrounding their arguments in +parentheses. For example, here is the description for Octave's +@code{cd} command: + +@deffn {Command} cd dir +@deffnx {Command} chdir dir +Change the current working directory to @var{dir}. For example, +@kbd{cd ~/octave} changes the current working directory to +@file{~/octave}. If the directory does not exist, an error message is +printed and the working directory is not changed. +@end deffn + +@node A Sample Variable Description, , A Sample Command Description, Format of Descriptions +@subsubsection A Sample Variable Description +@cindex variable descriptions + +A @dfn{variable} is a name that can hold a value. Although any variable +can be set by the user, @dfn{built-in variables} typically exist +specifically so that users can change them to alter the way Octave +behaves (built-in variables are also sometimes called @dfn{user +options}). Ordinary variables and built-in variables are described +using a format like that for functions except that there are no +arguments. + +Here is a description of the imaginary variable +@code{do_what_i_mean_not_what_i_say}. + +@defvr {Built-in Variable} do_what_i_mean_not_what_i_say +If the value of this variable is nonzero, Octave will do what you +actually wanted, even if you have typed a completely different and +meaningless list of commands. +@end defvr + +Other variable descriptions have the same format, but `Built-in +Variable' is replaced by `Variable', for ordinary variables, or +`Constant' for symbolic constants whose values cannot be changed.