view doc/interpreter/intro.txi @ 6778:083721ae3dfa

[project @ 2007-07-18 17:03:10 by jwe]
author jwe
date Wed, 18 Jul 2007 17:03:11 +0000
parents 545847da3b88
children 8b0cfeb06365
line wrap: on
line source

@c Copyright (C) 1996, 1997, 2007 John W. Eaton
@c This is part of the Octave manual.
@c For copying conditions, see the file gpl.texi.

@node Introduction
@chapter A Brief Introduction to Octave
@cindex introduction

This manual documents how to install, run, and use 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 FIXME -- add explanation about how and why Octave was written.
@c
@c FIXME -- 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
@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
@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.

@subsection 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

@subsection 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

@noindent
To multiply the two matrices @code{a} and @code{b}, type the command

@example
octave:5> A * B
@end example

@noindent
and to form the matrix product
@iftex
@tex
$@code{A}^T@code{A}$,
@end tex
@end iftex
@ifnottex
@code{transpose (A) * A},
@end ifnottex
type the command

@example
octave:6> A' * A
@end example

@subsection 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
@ifnottex
@code{inv (a) * b},
@end ifnottex
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.

@subsection 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
@ifnottex

@example
@group
dx
-- = f (x, t)
dt
@end group
@end example

@noindent
with the initial condition

@example
x(t = t0) = x0
@end example
@end ifnottex

@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
@ifnottex
@code{f(x,t)}.
@end ifnottex
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.

@subsection Producing Graphical Output

To display the solution of the previous example graphically, use the
command

@example
plot (t, x)
@end example

@noindent
If you are using a graphical user interface, Octave will automatically create
a separate window to display the plot.

To save a plot once it has been displayed on the screen, use the print
command.  For example,

@example
print -deps foo.eps
@end example

@noindent
will create a fille called @file{foo.eps} that contains a rendering of
the current plot.  The command

@example
help print
@end example

@noindent
explains more options for the @code{print} command and provides a list
of additional output file formats.

@subsection 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, press @kbd{Control-p} (usually written @kbd{C-p} for
short). 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}.

@subsection Help and Documentation

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. An alternative is to search the
documentation using the @code{lookfor} function. This function is
described in @ref{Getting Help}.

Once you know the name of the function you wish to use, you can get more
help on the function 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
@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
@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
@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
@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
@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
@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
@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 Function File
@cindex function file
The function described is defined using Octave commands stored in a text
file.  @xref{Function Files}.

@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 Mapping Function
@cindex mapping function
The function described works element-by-element for matrix and vector
arguments.
@end table

@node A Sample Command Description
@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
@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.