home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
octave-1.1.1p1-src.tgz
/
tar.out
/
fsf
/
octave
/
doc
/
octave.info-7
(
.txt
)
< prev
next >
Wrap
GNU Info File
|
1996-09-28
|
50KB
|
1,020 lines
This is Info file octave.info, produced by Makeinfo-1.55 from the input
file octave.texi.
Copyright (C) 1993, 1994, 1995 John W. Eaton.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided that
the entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions.
File: octave.info, Node: Rearranging Matrices, Prev: Finding Elements and Checking Conditions, Up: Matrix Manipulation
Rearranging Matrices
====================
The function `fliplr' reverses the order of the columns in a matrix,
and `flipud' reverses the order of the rows. For example,
octave:13> fliplr ([1, 2; 3, 4])
ans =
2 1
4 3
octave:13> flipud ([1, 2; 3, 4])
ans =
3 4
1 2
The function `rot90 (A, N)' rotates a matrix counterclockwise in
90-degree increments. The second argument is optional, and specifies
how many 90-degree rotations are to be applied (the default value is
1). Negative values of N rotate the matrix in a clockwise direction.
For example,
rot90 ([1, 2; 3, 4], -1)
ans =
3 1
4 2
rotates the given matrix clockwise by 90 degrees. The following are all
equivalent statements:
rot90 ([1, 2; 3, 4], -1)
rot90 ([1, 2; 3, 4], 3)
rot90 ([1, 2; 3, 4], 7)
The function `reshape (A, M, N)' returns a matrix with M rows and N
columns whose elements are taken from the matrix A. To decide how to
order the elements, Octave pretends that the elements of a matrix are
stored in column-major order (like Fortran arrays are stored).
For example,
octave:13> reshape ([1, 2, 3, 4], 2, 2)
ans =
1 3
2 4
If the variable `do_fortran_indexing' is `"true"', the `reshape'
function is equivalent to
retval = zeros (m, n);
retval (:) = a;
but it is somewhat less cryptic to use `reshape' instead of the colon
operator. Note that the total number of elements in the original
matrix must match the total number of elements in the new matrix.
The function `sort' can be used to arrange the elements of a vector
in increasing order. For matrices, `sort' orders the elements in each
column.
For example,
octave:13> sort (rand (4))
ans =
0.065359 0.039391 0.376076 0.384298
0.111486 0.140872 0.418035 0.824459
0.269991 0.274446 0.421374 0.938918
0.580030 0.975784 0.562145 0.954964
The `sort' function may also be used to produce a matrix containing
the original row indices of the elements in the sorted matrix. For
example,
s =
0.051724 0.485904 0.253614 0.348008
0.391608 0.526686 0.536952 0.600317
0.733534 0.545522 0.691719 0.636974
0.986353 0.976130 0.868598 0.713884
i =
2 4 2 3
4 1 3 4
1 2 4 1
3 3 1 2
These values may be used to recover the original matrix from the sorted
version. For example,
The `sort' function does not allow sort keys to be specified, so it
can't be used to order the rows of a matrix according to the values of
the elements in various columns(1) in a single call. Using the second
output, however, it is possible to sort all rows based on the values in
a given column. Here's an example that sorts the rows of a matrix
based on the values in the third column.
octave:13> a = rand (4)
a =
0.080606 0.453558 0.835597 0.437013
0.277233 0.625541 0.447317 0.952203
0.569785 0.528797 0.319433 0.747698
0.385467 0.124427 0.883673 0.226632
octave:14> [s, i] = sort (a (:, 3));
octave:15> a (i, :)
ans =
0.569785 0.528797 0.319433 0.747698
0.277233 0.625541 0.447317 0.952203
0.080606 0.453558 0.835597 0.437013
0.385467 0.124427 0.883673 0.226632
The functions `triu (A, K)' and `tril (A, K)' extract the upper or
lower triangular part of the matrix A, and set all other elements to
zero. The second argument is optional, and specifies how many
diagonals above or below the main diagonal should also be set to zero.
The default value of K is zero, so that `triu' and `tril' normally
include the main diagonal as part of the result matrix.
If the value of K is negative, additional elements above (for
`tril') or below (for `triu') the main diagonal are also selected.
The absolute value of K must not be greater than the number of sub-
or super-diagonals.
For example,
octave:13> tril (rand (4), 1)
ans =
0.00000 0.00000 0.00000 0.00000
0.09012 0.00000 0.00000 0.00000
0.01215 0.34768 0.00000 0.00000
0.00302 0.69518 0.91940 0.00000
forms a lower triangular matrix from a random 4 by 4 matrix, omitting
the main diagonal, and
octave:13> tril (rand (4), -1)
ans =
0.06170 0.51396 0.00000 0.00000
0.96199 0.11986 0.35714 0.00000
0.16185 0.61442 0.79343 0.52029
0.68016 0.48835 0.63609 0.72113
forms a lower triangular matrix from a random 4 by 4 matrix, including
the main diagonal and the first super-diagonal.
---------- Footnotes ----------
(1) For example, to first sort based on the values in column 1, and
then, for any values that are repeated in column 1, sort based on the
values found in column 2, etc.
File: octave.info, Node: String Functions, Next: System Utilities, Prev: Matrix Manipulation, Up: Top
String Functions
****************
Octave currently has a limited ability to work with strings.
The function `strcmp (S1, S2)' compares two strings, returning 1 if
they are the same, and 0 otherwise.
*Note: For compatibility with MATLAB, Octave's strcmp function
returns 1 if the strings are equal, and 0 otherwise. This is just the
opposite of the corresponding C library function.*
The functions `int2str' and `num2str' convert a numeric argument to
a string. These functions are not very flexible, but are provided for
compatibility with MATLAB. For better control over the results, use
`sprintf' (*note Formatted Output::.).
The function `setstr' can be used to convert a vector to a string.
Each element of the vector is converted to the corresponding ASCII
character. For example,
setstr ([97, 98, 99])
creates the string
abc
The function `undo_string_escapes (STRING)' converts special
characters in strings back to their escaped forms. For example, the
expression
bell = "\a";
assigns the value of the alert character (control-g, ASCII code 7) to
the string variable BELL. If this string is printed, the system will
ring the terminal bell (if it is possible). This is normally the
desired outcome. However, sometimes it is useful to be able to print
the original representation of the string, with the special characters
replaced by their escape sequences. For example,
octave:13> undo_string_escapes (bell)
ans = \a
replaces the unprintable alert character with its printable
representation. *Note String Constants::, for a description of string
escapes.
File: octave.info, Node: System Utilities, Next: Command History Functions, Prev: String Functions, Up: Top
System Utilities
****************
This chapter describes the functions that are available to allow you
to get information about what is happening outside of Octave, while it
is still running, and use this information in your program. For
example, you can get information about environment variables, the
current time, and even start other programs from the Octave prompt.
* Menu:
* Timing Utilities::
* Interacting with the OS::
* System Information::
* Other Functions::
File: octave.info, Node: Timing Utilities, Next: Interacting with the OS, Prev: System Utilities, Up: System Utilities
Timing Utilities
================
The function `clock' returns a vector containing the current year,
month (1-12), day (1-31), hour (0-23), minute (0-59) and second (0-60).
For example,
octave:13> clock
ans =
1993 8 20 4 56 1
The function clock is more accurate on systems that have the
`gettimeofday' function.
To get the date as a character string in the form DD-MMM-YY, use the
command `date'. For example,
octave:13> date
ans = 20-Aug-93
Octave also has functions for computing time intervals and CPU time
used. The functions `tic' and `toc' can be used to set and check a
wall-clock timer. For example,
tic ();
# many computations later...
elapsed_time = toc ();
will set the variable `elapsed_time' to the number of seconds since the
most recent call to the function `tic'.
The function `etime' provides another way to get elapsed wall-clock
time by returning the difference (in seconds) between two time values
returned from `clock'. For example:
t0 = clock ();
# many computations later...
elapsed_time = etime (clock (), t0);
will set the variable `elapsed_time' to the number of seconds since the
variable `t0' was set.
The function `cputime' allows you to obtain information about the
amount of CPU time your Octave session is using. For example,
[total, user, system] = cputime ();
returns the CPU time used by your Octave session. The first output is
the total time spent executing your process and is equal to the sum of
second and third outputs, which are the number of CPU seconds spent
executing in user mode and the number of CPU seconds spent executing in
system mode, respectively.
Finally, Octave's function `is_leap_year' returns 1 if the given
year is a leap year and 0 otherwise. If no arguments are provided,
`is_leap_year' will use the current year. For example,
octave:13> is_leap_year (2000)
ans = 1
Contrary to what many people who post misinformation to Usenet
apparently believe, Octave knows that the year 2000 will be a leap year.
File: octave.info, Node: Interacting with the OS, Next: System Information, Prev: Timing Utilities, Up: System Utilities
Interacting with the OS
=======================
You can execute any shell command using the function `system (CMD,
FLAG)'. The second argument is optional. If it is present, the output
of the command is returned by `system' as a string. If it is not
supplied, any output from the command is printed, with the standard
output filtered through the pager. For example,
users = system ("finger", 1)
places the output of the command `finger' in the variable `users'.
If you want to execute a shell command and have it behave as if it
were typed directly from the shell prompt, you may need to specify extra
arguments for the command. For example, to get `bash' to behave as an
interactive shell, you can type
system ("bash -i >/dev/tty");
The first argument, `-i', tells `bash' to behave as an interactive
shell, and the redirection of the standard output stream prevents any
output produced by `bash' from being sent back to Octave, where it
would be buffered until Octave displays another prompt.
The `system' function can return two values. The first is any
output from the command that was written to the standard output stream,
and the second is the output status of the command. For example,
[output, status] = system ("echo foo; exit 2");
will set the variable `output' to the string `foo', and the variable
`status' to the integer `2'.
The name `shell_cmd' exists for compatibility with earlier versions
of Octave.
You can find the values of environment variables using the function
`getenv'. For example,
getenv ("PATH")
returns a string containing the value of your path.
The functions `clc', and `home' clear your terminal screen and move
the cursor to the upper left corner.
You can change the current working directory using the `cd' command.
Tilde expansion is performed on the path. For example,
cd ~/octave
Changes the current working directory to `~/octave'. If the directory
does not exist, an error message is printed and the working directory
is not changed.
The name `chdir' is an alias for `cd'.
The command `pwd' prints the current working directory.
The functions `dir' and `ls' list directory contents. For example,
octave:13> ls -l
total 12
-rw-r--r-- 1 jwe users 4488 Aug 19 04:02 foo.m
-rw-r--r-- 1 jwe users 1315 Aug 17 23:14 bar.m
The `dir' and `ls' commands are implemented by calling your system's
directory listing command, so the available options may vary from
system to system.
File: octave.info, Node: System Information, Next: Other Functions, Prev: Interacting with the OS, Up: System Utilities
System Information
==================
If possible, `computer' prints a string of the form CPU-VENDOR-OS
that identifies the kind of computer Octave is running on. For example,
octave:13> computer
sparc-sun-sunos4.1.2
The function `isieee' returns 1 if your computer claims to conform
to the IEEE standard for floating point calculations.
The function `version' returns Octave's version number as a string.
This is also the value of the built-in variable `OCTAVE_VERSION'.
*Note Built-in Variables::.
File: octave.info, Node: Other Functions, Prev: System Information, Up: System Utilities
Other Functions
===============
The function `pause' allows you to suspend the execution of a
program. If invoked without any arguments, Octave waits until you type
a character. With a numeric argument, it pauses for the given number of
seconds. For example, the following statement prints a message and then
waits 5 seconds before clearing the screen.
fprintf (stderr, "wait please...\n"), pause (5), clc
File: octave.info, Node: Command History Functions, Next: Help, Prev: System Utilities, Up: Top
Command History Functions
*************************
Octave provides three functions for viewing, editing, and re-running
chunks of commands from the history list.
The function `history' displays a list of commands that you have
executed. It also allows you to write the current history to a file for
safe keeping, and to replace the history list with the commands stored
in a named file. Valid arguments are:
`-w file'
Write the current history to the named file. If the name is
omitted, use the default history file (normally `~/.octave_hist').
`-r file'
Read the named file, replacing the current history list with its
contents. If the name is omitted, use the default history file
(normally `~/.octave_hist').
Only display the most recent `N' lines of history.
Don't number the displayed lines of history. This is useful for
cutting and pasting commands if you are using the X Window System.
For example, to display the five most recent commands that you have
typed without displaying line numbers, use the command `history -q 5'.
The function `edit_history' allows you to edit a block of commands
from the history list using the editor named by the environment
variable `EDITOR', or the default editor (normally `vi'). It is often
more convenient to use `edit_history' to define functions rather than
attempting to enter them directly on the command line. By default, the
block of commands is executed as soon as you exit the editor. To avoid
executing any commands, simply delete all the lines from the buffer
before exiting the editor.
The `edit_history' command takes two optional arguments specifying
the history numbers of first and last commands to edit. For example,
the command
edit_history 13
extracts all the commands from the 13th through the last in the history
list. The command
edit_history 13 169
only extracts commands 13 through 169. Specifying a larger number for
the first command than the last command reverses the list of commands
before placing them in the buffer to be edited. If both arguments are
omitted, the previous command in the history list is used.
The command `run_history' is like `edit_history', except that the
editor is not invoked, and the commands are simply executed as they
appear in the history list.
The `diary' command allows you to create a list of all commands
*and* the output they produce, mixed together just as you see them on
your terminal.
For example, the command
diary on
tells Octave to start recording your session in a file called `diary'
in your current working directory. To give Octave the name of the file
write to, use the a command like
diary my-diary.txt
Then Octave will write all of your commands to the file `my-diary.txt'.
To stop recording your session, use the command
diary off
Without any arguments, `diary' toggles the current diary state.
File: octave.info, Node: Help, Next: Programming Utilities, Prev: Command History Functions, Up: Top
Octave's `help' command can be used to print brief usage-style
messages, or to display information directly from an on-line version of
the printed manual, using the GNU Info browser. If invoked without any
arguments, `help' prints a list of all the available operators,
functions, and built-in variables. If the first argument is `-i', the
`help' command searches the index of the on-line version of this manual
for the given topics.
For example, the command
help help
prints a short message describing the `help' command, and
help -i help
starts the GNU Info browser at this node in the on-line version of the
manual.
*Note Using Info::, for complete details about how to use the GNU
Info browser to read the on-line version of the manual.
File: octave.info, Node: Programming Utilities, Next: Amusements, Prev: Help, Up: Top
Programming Utilities
*********************
* Menu:
* Evaluating Strings as Commands::
* Miscellaneous Utilities::
File: octave.info, Node: Evaluating Strings as Commands, Next: Miscellaneous Utilities, Prev: Programming Utilities, Up: Programming Utilities
Evaluating Strings as Commands
==============================
It is often useful to evaluate a string as if it were an Octave
program, or use a string as the name of a function to call. These
functions are necessary in order to evaluate commands that are not
known until run time, or to write functions that will need to call
user-supplied functions.
The function `eval (COMMAND)' parses COMMAND and evaluates it as if
it were an Octave program, returning the last value computed. The
COMMAND is evaluated in the current context, so any results remain
available after `eval' returns. For example,
octave:13> a
error: `a' undefined
octave:14> eval ("a = 13")
a = 13
ans = 13
octave:15> a
a = 13
In this case, two values are printed: one for the expression that
was evaluated, and one for the value returned from `eval'. Just as
with any other expression, you can turn printing off by ending the
expression in a semicolon. For example,
octave:13> a
error: `a' undefined
octave:14> eval ("a = 13;")
ans = 13
octave:15> a
a = 13
The function `feval (NAME, ...)' can be used to evaluate the
function named NAME. Any arguments after the first are passed on to
the named function. For example,
octave:12> feval ("acos", -1)
ans = 3.1416
calls the function `acos' with the argument `-1'.
The function `feval' is necessary in order to be able to write
functions that call user-supplied functions, because Octave does not
have a way to declare a pointer to a function (like C) or to declare a
special kind of variable that can be used to hold the name of a function
(like `EXTERNAL' in Fortran). Instead, you must refer to functions by
name, and use `feval' to call them.
For example, here is a simple-minded function for finding the root
of a function of one variable:
function result = newtroot (fname, x)
# usage: newtroot (fname, x)
#
# fname : a string naming a function f(x).
# x : initial guess
delta = tol = sqrt (eps);
maxit = 200;
fx = feval (fname, x);
for i = 1:maxit
if (abs (fx) < tol)
result = x;
return;
else
fx_new = feval (fname, x + delta);
deriv = (fx_new - fx) / delta;
x = x - fx / deriv;
fx = fx_new;
endif
endfor
result = x;
endfunction
Note that this is only meant to be an example of calling
user-supplied functions and should not be taken too seriously. In
addition to using a more robust algorithm, any serious code would check
the number and type of all the arguments, ensure that the supplied
function really was a function, etc.
File: octave.info, Node: Miscellaneous Utilities, Prev: Evaluating Strings as Commands, Up: Programming Utilities
Miscellaneous Utilities
=======================
The following functions allow you to determine the size of a
variable or expression, find out whether a variable exists, print error
messages, or delete variable names from the symbol table.
`columns (A)'
Return the number of columns of A.
`rows (A)'
Return the number of rows of A.
`length (A)'
Return the number of rows of A or the number of columns of A,
whichever is larger.
`size (A [, N])'
Return the number rows and columns of A.
With one input argument and one output argument, the result is
returned in a 2 element row vector. If there are two output
arguments, the number of rows is assigned to the first, and the
number of columns to the second. For example,
octave:13> size ([1, 2; 3, 4; 5, 6])
ans =
3 2
octave:14> [nr, nc] = size ([1, 2; 3, 4; 5, 6])
nr = 3
nc = 2
If given a second argument of either 1 or 2, `size' will return
only the row or column dimension. For example
octave:15> size ([1, 2; 3, 4; 5, 6], 2)
ans = 2
returns the number of columns in the given matrix.
`is_global (A)'
Return 1 if A is globally visible. Otherwise, return 0.
`is_matrix (A)'
Return 1 if A is a matrix. Otherwise, return 0.
`is_vector (A)'
Return 1 if A is a vector. Otherwise, return 0.
`is_scalar (A)'
Return 1 if A is a scalar. Otherwise, return 0.
`is_square (X)'
If X is a square matrix, then return the dimension of X.
Otherwise, return 0.
`is_symmetric (X, TOL)'
If X is symmetric within the tolerance specified by TOL, then
return the dimension of X. Otherwise, return 0. If TOL is
omitted, use a tolerance equal to the machine precision.
`isstr (A)'
Return 1 if A is a string. Otherwise, return 0.
`isempty (A)'
Return 1 if A is an empty matrix (either the number of rows, or
the number of columns, or both are zero). Otherwise, return 0.
`clear PATTERN ...'
Delete the names matching the given patterns from the symbol
table. The pattern may contain the following special characters:
`?'
Match any single character.
`*'
Match zero or more characters.
`[ LIST ]'
Match the list of characters specified by LIST. If the first
character is `!' or `^', match all characters except those
specified by LIST. For example, the pattern `[a-zA-Z]' will
match all lower and upper case alphabetic characters.
For example, the command
clear foo b*r
clears the name `foo' and all names that begin with the letter `b'
and end with the letter `r'.
If `clear' is called without any arguments, all user-defined
variables (local and global) are cleared from the symbol table. If
`clear' is called with at least one argument, only the visible
names matching the arguments are cleared. For example, suppose
you have defined a function `foo', and then hidden it by
performing the assignment `foo = 2'. Executing the command `clear
foo' once will clear the variable definition and restore the
definition of `foo' as a function. Executing `clear foo' a second
time will clear the function definition.
This command may not be used within a function body.
`who OPTIONS PATTERN ...'
List currently defined symbols matching the given patterns. The
following are valid options. They may be shortened to one
character but may not be combined.
`-all'
List all currently defined symbols.
`-builtins'
List built-in variables and functions. This includes all
currently compiled function files, but does not include all
function files that are in the `LOADPATH'.
`-functions'
List user-defined functions.
`-long'
Print a long listing including the type and dimensions of any
symbols. The symbols in the first column of output indicate
whether it is possible to redefine the symbol, and whether it
is possible for it to be cleared.
`-variables'
List user-defined variables.
Valid patterns are the same as described for the `clear' command
above. If no patterns are supplied, all symbols from the given
category are listed. By default, only user defined functions and
variables visible in the local scope are displayed.
The command `whos' is equivalent to `who -long'.
`exist (NAME)'
Return 1 if the name exists as a variable, and 2 if the name (after
appending `.m') is a function file in the path. Otherwise, return
0.
`error (MSG)'
Print the message MSG, prefixed by the string `error: ', and set
Octave's internal error state such that control will return to the
top level without evaluating any more commands. This is useful for
aborting from functions.
If MSG does not end with a new line character, Octave will print a
traceback of all the function calls leading to the error. For
example,
function f () g () end
function g () h () end
function h () nargin == 1 || error ("nargin != 1"); end
f ()
error: nargin != 1
error: evaluating index expression near line 1, column 30
error: evaluating binary operator `||' near line 1, column 27
error: called from `h'
error: called from `g'
error: called from `f'
produces a list of messages that can help you to quickly locate the
exact location of the error.
If MSG ends in a new line character, Octave will only print MSG
and will not display any traceback messages as it returns control
to the top level. For example, modifying the error message in the
previous example to end in a new line causes Octave to only print
a single message:
function h () nargin == 1 || error ("nargin != 1\n"); end
f ()
error: nargin != 1
`warning (MSG)'
Print the message MSG prefixed by the string `warning: '.
`usage (MSG)'
Print the message MSG, prefixed by the string `usage: ', and set
Octave's internal error state such that control will return to the
top level without evaluating any more commands. This is useful for
aborting from functions.
After `usage' is evaluated, Octave will print a traceback of all
the function calls leading to the usage message.
`perror (NAME, NUM)'
Print the error message for function NAME corresponding to the
error number NUM. This function is intended to be used to print
useful error messages for those functions that return numeric error
codes.
`menu (TITLE, OPT1, ...)'
Print a title string followed by a series of options. Each option
will be printed along with a number. The return value is the
number of the option selected by the user. This function is
useful for interactive programs. There is no limit to the number
of options that may be passed in, but it may be confusing to
present more than will fit easily on one screen.
`document SYMBOL TEXT'
Set the documentation string for SYMBOL to TEXT.
`file_in_path (PATH, FILE)'
Return the absolute name name of FILE if it can be found in PATH.
The value of PATH should be a colon-separated list of directories
in the format described for the built-in variable `LOADPATH'.
If the file cannot be found in the path, an empty matrix is
returned. For example,
octave:13> file_in_path (LOADPATH, "nargchk.m")
ans = /usr/local/lib/octave/1.1.0/m/general/nargchk.m
`nargchk (NARGIN_MIN, NARGIN_MAX, N)'
If N is in the range NARGIN_MIN through NARGIN_MAX inclusive,
return the empty matrix. Otherwise, return a message indicating
whether N is too large or too small.
This is useful for checking to see that the number of arguments
supplied to a function is within an acceptable range.
`octave_tmp_file_name'
Return a unique temporary file name.
Since the named file is not opened, by `octave_tmp_file_name', it
is possible (though relatively unlikely) that it will not be
available by the time your program attempts to open it.
`type NAME ...'
Display the definition of each NAME that refers to a function.
Currently, Octave can only display functions that can be compiled
cleanly, because it uses its internal representation of the
function to recreate the program text.
Comments are not displayed because Octave's currently discards
them as it converts the text of a function file to its internal
representation. This problem may be fixed in a future release.
`which NAME ...'
Display the type of each NAME. If NAME is defined from a function
file, the full name of the file is also displayed.
File: octave.info, Node: Amusements, Next: Installation, Prev: Programming Utilities, Up: Top
Amusements
**********
Octave cannot promise that you will actually win the lotto, but it
can pick your numbers for you. The function `texas_lotto' will select
six numbers between 1 and 50.
The function `list_primes (N)' uses a brute-force algorithm to
compute the first N primes.
Other amusing functions include `casesen', `flops', `sombrero',
`exit', and `quit'.
File: octave.info, Node: Installation, Next: Trouble, Prev: Amusements, Up: Top
Installing Octave
*****************
Here is the procedure for installing Octave from scratch on a Unix
system. For instructions on how to install the binary distributions of
Octave, see *Note Binary Distributions::.
* Run the shell script `configure'. This will determine the features
your system has (or doesn't have) and create a file named Makefile
from each of the files named Makefile.in.
Here is a summary of the configure options that are most
frequently used when building Octave:
`--prefix=PREFIX'
Install Octave in subdirectories below PREFIX. The default
value of PREFIX is `/usr/local'.
`--srcdir=DIR'
Look for Octave sources in the directory DIR.
`--with-f2c'
Use f2c even if Fortran compiler is available.
`--enable-dld'
Use DLD to make Octave capable of dynamically linking
externally compiled functions. This only works on systems
that have a working port of DLD.
`--enable-lite-kernel'
Compile smaller kernel. This currently requires DLD so that
Octave can load functions at run time that are not loaded at
compile time.
`--help'
Print a summary of the options recognized by the configure
script.
See the file INSTALL for more information about the command line
options used by configure. That file also contains instructions
for compiling in a directory other than where the source is
located.
* Run make.
You will need a recent version of GNU make. Modifying Octave's
Makefiles to work with other make programs is probably not worth
your time. We recommend you get and compile GNU make instead.
For plotting, you will need to have gnuplot installed on your
system. Gnuplot is a command-driven interactive function plotting
program. Gnuplot is copyrighted, but freely distributable. The
`gnu' in gnuplot is a coincidence--it is not related to the GNU
project or the FSF in any but the most peripheral sense.
For version 1.1.1, you must have the GNU C++ compiler (gcc)
version 2.6.3 or later to compile Octave. You will also need
version 2.6.1 of the GNU C++ class library (libg++). If you plan
to modify the parser you will also need GNU bison and fles. If
you modify the documentation, you will need GNU Texinfo, along
with the patch for the makeinfo program that is distributed with
Octave.
GNU make, gcc, and libg++, gnuplot, bison, flex, and Texinfo are
all available from many anonymous ftp archives, including
ftp.che.utexas.edu, ftp.uu.net, prep.ai.mit.edu, and
wuarchive.wustl.edu.
If you don't have a Fortran compiler, or if your Fortran compiler
doesn't work like the traditional Unix f77, you will need to have
the Fortran to C translator f2c. You can get f2c from any number
of anonymous ftp archives. The most recent version of f2c is
always available from research.att.com.
On an otherwise idle SPARCstation II, it will take somewhere
between 60 and 90 minutes to compile everything, depending on
whether you are compiling the Fortran libraries with f2c or using
the Fortran compiler directly. You will need about 50 megabytes
of disk storage to work with (considerably less if you don't
compile with debugging symbols). To do that, use the command
make CFLAGS=-O CXXFLAGS=-O LDFLAGS=
instead of just `make'.
* If you encounter errors while compiling Octave, first check the
list of known problems below to see if there is a workaround or
solution for your problem. If not, see *Note Trouble::, for
information about how to report bugs.
* Once you have successfully compiled Octave, run `make install'.
This will install a copy of octave, its libraries, and its
documentation in the destination directory. As distributed,
Octave is installed in the following directories:
`PREFIX/bin'
Octave and other binaries that people will want to run
directly.
`PREFIX/lib'
Libraries like libcruft.a and liboctave.a.
`PREFIX/include/octave'
Include files distributed with Octave.
`PREFIX/man/man1'
Unix-style man pages describing Octave.
`PREFIX/info'
Info files describing Octave.
`PREFIX/lib/octave/VERSION/m'
Function files distributed with Octave. This includes the
Octave version, so that multiple versions of Octave may be
installed at the same time.
`PREFIX/lib/octave/VERSION/exec/HOST_TYPE'
Executables to be run by Octave rather than the user.
`PREFIX/lib/octave/VERSION/oct/HOST_TYPE'
Object files that will be dynamically loaded.
`PREFIX/lib/octave/VERSION/imagelib'
Image files that are distributed with Octave.
where PREFIX defaults to `/usr/local', VERSION stands for the
current version number of the interpreter, and HOST_TYPE is the
type of computer on which Octave is installed (for example,
`i486-unknown-gnu').
* Menu:
* Installation Problems::
* Binary Distributions::
File: octave.info, Node: Installation Problems, Next: Binary Distributions, Prev: Installation, Up: Installation
Installation Problems
=====================
This section contains a list of problems (and some apparent problems
that don't really mean anything is wrong) that may show up during
installation of Octave.
* On AIX (and possibly other) systems, GCC 2.6.2 generates invalid
assembly code when compiling some parts of Octave. On AIX
systems, it is possible to get a working binary by not using the
compiler flag `-fno-implicit-templates'. You can specify this as
an option to make by using a command like
make NO_IMPLICIT_TEMPLATES=
* You may need to edit some files in the gcc include subdirectory to
add prototypes for functions there. For example, Ultrix 4.2 needs
proper declarations for the `signal()' and the `SIG_IGN' macro in
the file `signal.h'.
On some systems the `SIG_IGN' macro is defined to be something like
this:
#define SIG_IGN (void (*)())1
when it should really be something like:
#define SIG_IGN (void (*)(int))1
to match the prototype declaration for `signal()'.
The gcc fixincludes/fixproto script should probably fix this when
gcc installs its modified set of header files, but I don't think
that's been done yet.
* There is a bug with the makeinfo program that is distributed with
texinfo-3.1 that causes the indices in Octave's on-line manual to
be generated incorrectly. If you need to recreate the on-line
documentation, you should get the makeinfo program that is
distributed with texinfo-3.1 and apply the patch for makeinfo that
is distributed with Octave. See the file MAKEINFO.PATCH for more
details.
* If you don't have NPSOL but you still want to be able to solve
NLPs, or if you don't have QPSOL but you still want to solve QPs,
you'll need to find replacements or order them from Stanford. If
you know of a freely redistributable replacement, please let us
know--we might be interested in distributing it with Octave.
You can get more information about NPSOL and QPSOL from
Stanford University
Office of Technology Licensing
857 Serra Street
Stanford CA 94305-6225
Tel: (415) 723-0651
Fax: (415) 725-7295
Octave may soon support FSQP, an NLP solver from Andre Tits
(andre@src.umd.edu) of the University of Maryland. FSQP is
available free of charge to academic sites, but can not be
redistributed to third parties.
* Some of the Fortran subroutines may fail to compile with older
versions of the Sun Fortran compiler. If you get errors like
zgemm.f:
zgemm:
warning: unexpected parent of complex expression subtree
zgemm.f, line 245: warning: unexpected parent of complex expression subtree
warning: unexpected parent of complex expression subtree
zgemm.f, line 304: warning: unexpected parent of complex expression subtree
warning: unexpected parent of complex expression subtree
zgemm.f, line 327: warning: unexpected parent of complex expression subtree
pcc_binval: missing IR_CONV in complex op
make[2]: *** [zgemm.o] Error 1
when compiling the Fortran subroutines in the `libcruft'
subdirectory, you should either upgrade your compiler or try
compiling with optimization turned off.
* On NeXT systems, if you get errors like this:
/usr/tmp/cc007458.s:unknown:Undefined local symbol LBB7656
/usr/tmp/cc007458.s:unknown:Undefined local symbol LBE7656
when compiling `Array.cc' and `Matrix.cc', try recompiling these
files without `-g'.
* Some people have reported that calls to shell_cmd and the pager do
not work on SunOS systems. This is apparently due to having
`G_HAVE_SYS_WAIT' defined to be 0 instead of 1 when compiling
libg++.
* On NeXT systems, linking to `libsys_s.a' may fail to resolve the
following functions
_tcgetattr
_tcsetattr
_tcflow
which are part of `libposix.a'. Unfortunately, linking Octave with
`-posix' results in the following undefined symbols.
.destructors_used
.constructors_used
_objc_msgSend
_NXGetDefaultValue
_NXRegisterDefaults
.objc_class_name_NXStringTable
.objc_class_name_NXBundle
One kludge around this problem is to extract `termios.o' from
`libposix.a', put it in Octave's `src' directory, and add it to
the list of files to link together in the Makefile. Suggestions
for better ways to solve this problem are welcome!
* With g++ 2.6.3 (and possibly other 2.6.x versions) on some Intel
x86 systems, compiling `Array-d.cc' fails with the messages like
as: /tmp/cc005254.s:4057: Local symbol LBB103 never defined.
as: /tmp/cc005254.s:4057: Local symbol LBE103 never defined.
A possible workaround for this is to compile without `-g'.
* If Octave crashes immediately with a floating point exception, it
is likely that it is failing to initialize the IEEE floating point
values for infinity and NaN.
If your system actually does support IEEE arithmetic, you should
be able to fix this problem by modifying the function
`octave_ieee_init' in the file `sysdep.cc' to correctly initialize
Octave's internal infinity and NaN variables.
If your system does not support IEEE arithmetic but Octave's
configure script incorrectly determined that it does, you can work
around the problem by editing the file `config.h' to not define
`HAVE_ISINF', `HAVE_FINITE', and `HAVE_ISNAN'.
In any case, please report this as a bug since it might be
possible to modify Octave's configuration script to automatically
determine the proper thing to do.
File: octave.info, Node: Binary Distributions, Prev: Installation Problems, Up: Installation
Binary Distributions
====================
This section contains instructions for creating and installing a
binary distribution.
* Menu:
* Installing Octave from a Binary Distribution::
* Creating a Binary Distribution::
File: octave.info, Node: Installing Octave from a Binary Distribution, Next: Creating a Binary Distribution, Prev: Binary Distributions, Up: Binary Distributions
Installing Octave from a Binary Distribution
--------------------------------------------
* To install Octave from a binary distribution, execute the command
sh ./doinstall.sh
in the top level directory of the distribution.
Binary distributions are normally compiled assuming that Octave
will be installed in the following subdirectories of `/usr/local'.
`bin'
Octave and other binaries that people will want to run
directly.
`man/man1'
Unix-style man pages describing Octave.
`info'
Info files describing Octave.
`lib/octave/VERSION/m'
Function files distributed with Octave. This includes the
Octave version, so that multiple versions of Octave may be
installed at the same time.
`lib/octave/VERSION/exec/HOST_TYPE'
Executables to be run by Octave rather than the user.
`lib/octave/VERSION/imagelib'
Image files that are distributed with Octave.
where VERSION stands for the current version number of the
interpreter, and HOST_TYPE is the type of computer on which Octave
is installed (for example, `i486-unknown-gnu').
If these directories don't exist, the script `doinstall.sh' will
create them for you.
If this is possible for you to install Octave in `/usr/local', or
if you would prefer to install it in a different directory, you can
specify the name of the top level directory as an argument to the
doinstall.sh script. For example:
sh ./doinstall.sh /some/other/directory
Octave will then be installed in subdirectories of the directory
`/some/other/directory'
File: octave.info, Node: Creating a Binary Distribution, Prev: Installing Octave from a Binary Distribution, Up: Binary Distributions
Creating a Binary Distribution
------------------------------
Here is how to build a binary distribution for others.
* Build Octave in the same directory as the source. This is required
since the `binary-dist' targets in the Makefiles will not work if
you compile outside the source tree.
* Use `CFLAGS=-O CXXFLAGS=-O LDFLAGS=' as arguments for Make because
most people who get the binary distributions are probably not
going to be interested in debugging Octave.
* Type `make binary-dist'. This will build everything and then pack
it up for distribution.
File: octave.info, Node: Trouble, Next: Command Line Editing, Prev: Installation, Up: Top
Known Causes of Trouble with Octave
***********************************
This section describes known problems that affect users of Octave.
Most of these are not Octave bugs per se--if they were, we would fix
them. But the result for a user may be like the result of a bug.
Some of these problems are due to bugs in other software, some are
missing features that are too much work to add, and some are places
where people's opinions differ as to what is best.
* Menu:
* Actual Bugs:: Bugs we will fix later.
* Reporting Bugs::
* Bug Criteria::
* Bug Lists::
* Bug Reporting::
* Sending Patches::
* Service::
File: octave.info, Node: Actual Bugs, Next: Reporting Bugs, Prev: Trouble, Up: Trouble
Actual Bugs We Haven't Fixed Yet
================================
* Output that comes directly from Fortran functions is not sent
through the pager and may appear out of sequence with other output
that is sent through the pager. One way to avoid this is to force
pending output to be flushed before calling a function that will
produce output from within Fortran functions. To do this, use the
command
fflush (stdout)
Another possible workaround is to use the command
page_screen_output = "false"
to turn the pager off.
* Control-C doesn't work properly in the pager on DEC Alpha systems
running OSF/1 3.0.
This appears to be a bug in the OSF/1 3.0 Bourne shell. The
problem doesn't appear on systems running OSF/1 1.3.
* If you get messages like
Input line too long
when trying to plot many lines on one graph, you have probably
generated a plot command that is too larger for `gnuplot''s
fixed-length buffer for commands. Splitting up the plot command
doesn't help because replot is implemented in gnuplot by simply
appending the new plotting commands to the old command line and
then evaluating it again.
You can demonstrate this `feature' by running gnuplot and doing
something like
plot sin (x), sin (x), sin (x), ... lots more ..., sin (x)
and then
replot sin (x), sin (x), sin (x), ... lots more ..., sin (x)
after repeating the replot command a few times, gnuplot will give
you an error.
Also, it doesn't help to use backslashes to enter a plot command
over several lines, because the limit is on the overall command
line length, once the backslashed lines are all pasted together.
Because of this, Octave tries to use as little of the command-line
length as possible by using the shortest possible abbreviations for
all the plot commands and options. Unfortunately, the length of
the temporary file names is probably what is taking up the most
space on the command line.
You can buy a little bit of command line space by setting the
environment variable `TMPDIR' to be "." before starting Octave, or
you can increase the maximum command line length in gnuplot by
changing the following limits in the file plot.h in the gnuplot
distribution and recompiling gnuplot.
#define MAX_LINE_LEN 32768 /* originally 1024 */
#define MAX_TOKENS 8192 /* originally 400 */
Of course, this doesn't really fix the problem, but it does make it
much less likely that you will run into trouble unless you are
putting a very large number of lines on a given plot.
* String handling could use some work.
A list of ideas for future enhancements is distributed with Octave.
See the file `PROJECTS' in the top level directory in the source
distribution.
File: octave.info, Node: Reporting Bugs, Next: Bug Criteria, Prev: Actual Bugs, Up: Trouble
Reporting Bugs
==============
Your bug reports play an essential role in making Octave reliable.
When you encounter a problem, the first thing to do is to see if it
is already known. *Note Trouble::. If it isn't known, then you should
report the problem.
Reporting a bug may help you by bringing a solution to your problem,
or it may not. In any case, the principal function of a bug report is
to help the entire community by making the next version of Octave work
better. Bug reports are your contribution to the maintenance of Octave.
In order for a bug report to serve its purpose, you must include the
information that makes it possible to fix the bug.
If you have Octave working at all, the easiest way to prepare a
complete bug report is to use the Octave function `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.
* Menu:
* Bug Criteria::
* Where: Bug Lists. Where to send your bug report.
* Reporting: Bug Reporting. How to report a bug effectively.
* Patches: Sending Patches. How to send a patch for Octave.