This is Info file octave.info, produced by Makeinfo-1.64 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: User Preferences,  Next: Other Built-in Variables,  Prev: Predefined Constants,  Up: Built-in Variables

User Preferences
================

   This section describes the variables that you can use to customize
Octave's behavior.

   Normally, preferences are set in the file `~/.octaverc', so that you
can customize your environment in the same way each time you use Octave
without having to remember and retype all the necessary commands.
*Note Startup Files:: for more information.

`EDITOR'
     A string naming the editor to use with the `edit_history' command.
     If the environment variable `EDITOR' is set when Octave starts, its
     value is used as the default.  Otherwise, `EDITOR' is set to
     `"vi"'.

`IMAGEPATH'
     A colon separated list of directories in which to search for image
     files.  *Note Image Processing:: for a description of Octave's
     image processing capabilities.

`INFO_FILE'
     A string naming the location of the Octave info file.

     The default value is `"/ade/info/octave.info"'.

`LOADPATH'
     A colon separated list of directories in which to search for
     function files.  *Note Functions and Scripts::.  The value of
     `LOADPATH' overrides the environment variable `OCTAVE_PATH'.
     *Note Installation::.

     `LOADPATH' is now handled in the same way as TeX handles
     `TEXINPUTS'.  If the path starts with `:', the standard path is
     prepended to the value of `LOADPATH'.  If it ends with `:' the
     standard path is appended to the value of `LOADPATH'.

     In addition, if any path element ends in `//', that directory and
     all subdirectories it contains are searched recursively for
     function files.  This can result in a slight delay as Octave
     caches the lists of files found in the `LOADPATH' the first time
     Octave searches for a function.  After that, searching is usually
     much faster because Octave normally only needs to search its
     internal cache for files.

     To improve performance of recursive directory searching, it is
     best for each directory that is to be searched recursively to
     contain *either* additional subdirectories *or* function files, but
     not a mixture of both.

     *Note Organization of Functions:: for a description of the
     function file directories that are distributed with Octave.

`OCTAVE_VERSION'
     The version number of Octave, as a string.

`PAGER'
     The default value is `"less"', or, if `less' is not available on
     your system, `"more"'.  *Note Installation::, and *Note Input and
     Output::.

`PS1'
     The primary prompt string.  When executing interactively, Octave
     displays the primary prompt `PS1' when it is ready to read a
     command.  Octave allows the prompt to be customized by inserting a
     number of backslash-escaped special characters that are decoded as
     follows:

    `\t'
          The time.

    `\d'
          The date.

    `\n'
          Begins a new line by printing the equivalent of a carriage
          return followed by a line feed.

    `\s'
          The name of the program (usually just `octave').

    `\w'
          The current working directory.

    `\W'
          The basename of the current working directory.

    `\u'
          The username of the current user.

    `\h'
          The hostname.

    `\#'
          The command number of this command, counting from when Octave
          starts.

    `\!'
          The history number of this command.  This differs from `\#'
          by the number of commands in the history list when Octave
          starts.

    `\$'
          If the effective UID is 0, a #, otherwise a $.

    `\nnn'
          The character whose character code in octal is `nnn'.

    `\\'
          A backslash.

     The default value of `PS1' is `"\s:\#> "'.  To change it, use a
     command like

          octave:13> PS1 = "\\u@\\h> "

     which will result in the prompt `boris@kremvax> ' for the user
     `boris' logged in on the host `kremvax'.  Note that two
     backslashes are required to enter a backslash into a string.
     *Note String Constants::.

`PS2'
     The secondary prompt string, which is printed when Octave is
     expecting additional input to complete a command.  For example,
     when defining a function over several lines, Octave will print the
     value of `PS1' at the beginning of each line after the first.
     Octave allows `PS2' to be customized in the same way as `PS1'.
     The default value of `PS2' is `"> "'.

`PS4'
     If Octave is invoked with the `--echo-input' option, the value of
     `PS4' is printed before each line of input that is echoed.  Octave
     allows `PS4' to be customized in the same way as `PS1'.  The
     default value of `PS4' is `"+ "'.  *Note Invoking Octave::, for a
     description of `--echo-input'.

`automatic_replot'
     If this variable is `"true"', Octave will automatically send a
     `replot' command to `gnuplot' each time the plot changes.  Since
     this is fairly inefficient, the default value is `"false"'.

`default_return_value'
     The value given to otherwise unitialized return values if
     `define_all_return_values' is `"true"'.  The default value is `[]'.

`default_save_format'
     Specify the default format used by the `save' command.  Options are
     `"ascii"', `"binary"', `"mat-binary"', or `"float-binary"'.  The
     default value is `ascii'.

`define_all_return_values'
     If the value of `define_all_return_values' is `"true"', Octave
     will substitute the value specified by `default_return_value' for
     any return values that remain undefined when a function returns.
     The default value is `"false"'.

`do_fortran_indexing'
     If the value of `do_fortran_indexing' is `"true"', Octave allows
     you to select elements of a two-dimensional matrix using a single
     index by treating the matrix as a single vector created from the
     columns of the matrix.  The default value is `"false"'.

`empty_list_elements_ok'
     This variable controls whether Octave ignores empty matrices in a
     matrix list.

     For example, if the value of `empty_list_elements_ok' is `"true"',
     Octave will ignore the empty matrices in the expression

          a = [1, [], 3, [], 5]

     and the variable `a' will be assigned the value `[ 1 3 5 ]'.

     The default value is `"warn"'.

`gnuplot_binary'
     The name of the program invoked by the plot command.  The default
     value is `"gnuplot"'.  *Note Installation::.

`ignore_function_time_stamp'
     This variable variable can be used to prevent Octave from making
     the system call `stat()' each time it looks up functions defined in
     function files.  If `ignore_function_time_stamp' to `"system"',
     Octave will not automatically recompile function files in
     subdirectories of `/ade/lib/1.1.1' if they have changed since they
     were last compiled, but will recompile other function files in the
     `LOADPATH' if they change.  If set to `"all"', Octave will not
     recompile any function files unless their definitions are removed
     with `clear'.  For any other value of
     `ignore_function_time_stamp', Octave will always check to see if
     functions defined in function files need to recompiled.  The
     default value of `ignore_function_time_stamp' is `"system"'.

`implicit_str_to_num_ok'
     If the value of `implicit_str_to_num_ok' is `"true"', implicit
     conversions of strings to their numeric ASCII equivalents are
     allowed.  Otherwise, an error message is printed and control is
     returned to the top level.  The default value is `"false"'.

`ok_to_lose_imaginary_part'
     If the value of `ok_to_lose_imaginary_part' is `"true"', implicit
     conversions of complex numbers to real numbers are allowed (for
     example, by fsolve).  If the value is `"warn"', the conversion is
     allowed, but a warning is printed.  Otherwise, an error message is
     printed and control is returned to the top level.  The default
     value is `"warn"'.

`output_max_field_width'
     This variable specifies the maximum width of a numeric output
     field.  The default value is 10.

     It is possible to achieve a wide range of output styles by using
     different values of `output_precision' and
     `output_max_field_width'.  Reasonable combinations can be set using
     the `format' function.  *Note Basic Input and Output::.

`output_precision'
     This variable specifies the minimum number of significant figures
     to display for numeric output.  The default value is 5.

     It is possible to achieve a wide range of output styles by using
     different values of `output_precision' and
     `output_max_field_width'.  Reasonable combinations can be set using
     the `format' function.  *Note Basic Input and Output::.

`page_screen_output'
     If the value of `page_screen_output' is `"true"', all output
     intended for the screen that is longer than one page is sent
     through a pager.  This allows you to view one screenful at a time.
     Some pagers (such as `less'--see *Note Installation::) are also
     capable of moving backward on the output.  The default value is
     `"true"'.  *Note Input and Output::.

     You can choose the program to use as the pager by setting the
     variable `PAGER'.

`prefer_column_vectors'
     If `prefer_column_vectors' is `"true"', operations like

          for i = 1:10
            a (i) = i;
          endfor

     (for `a' previously  undefined) produce column vectors.
     Otherwise, row vectors are preferred.  The default value is
     `"false"'.

     If a variable is already defined to be a vector (a matrix with a
     single row or column), the original orientation is respected,
     regardless of the value of `prefer_column_vectors'.

`prefer_zero_one_indexing'
     If the value of `prefer_zero_one_indexing' is `"true"', Octave
     will perform zero-one style indexing when there is a conflict with
     the normal indexing rules.  *Note Index Expressions::.  For
     example, given a matrix

          a = [1, 2, 3, 4]

     with `prefer_zero_one_indexing' is set to `"true"', the expression

          a ([1, 1, 1, 1])

     results in the matrix `[ 1  2  3  4 ]'.  If the value of
     `prefer_zero_one_indexing' set to `"false"', the result would be
     the matrix `[ 1 1 1 1 ]'.

     In the first case, Octave is selecting each element corresponding
     to a `1' in the index vector.  In the second, Octave is selecting
     the first element multiple times.

     The default value for `prefer_zero_one_indexing' is `"false"'.

`print_answer_id_name'
     If the value of `print_answer_id_name' is `"true"', variable names
     are printed along with the result.  Otherwise, only the result
     values are printed.  The default value is `"true"'.

`print_empty_dimensions'
     If the value of `print_empty_dimensions' is `"true"', the
     dimensions of empty matrices are printed along with the empty
     matrix symbol, `[]'.  For example, the expression

          zeros (3, 0)

     will print

          ans =
          
          [](3x0)

`propagate_empty_matrices'
     If the value of `propagate_empty_matrices' is `"true"', functions
     like `inverse' and `svd' will return an empty matrix if they are
     given one as an argument.  The default value is `"true"'.  *Note
     Empty Matrices::.

`resize_on_range_error'
     If the value of `resize_on_range_error' is `"true"', expressions
     like

          for i = 1:10
            a (i) = i;
          endfor

     (for `a' previously undefined) result in the variable `a' being
     resized to be just large enough to hold the new value.  Otherwise
     uninitialized elements are set to zero.  If the value of
     `resize_on_range_error' is `"false"', an error message is printed
     and control is returned to the top level.  The default value is
     `"true"'.

`return_last_computed_value'
     If the value of `return_last_computed_value' is true, and a
     function is defined without explicitly specifying a return value,
     the function will return the value of the last expression.
     Otherwise, no value will be returned.  The default value is
     `"false"'.

     For example, the function

          function f ()
            2 + 2;
          endfunction

     will either return nothing, if `return_last_computed_value' is
     `"false"', or 4, if it is `"true"'.

`save_precision'
     This variable specifies the number of digits to keep when saving
     data with the `save' command.  The default value is 17.

`silent_functions'
     If the value of `silent_functions' is `"true"', internal output
     from a function is suppressed.  Otherwise, the results of
     expressions within a function body that are not terminated with a
     semicolon will have their values printed.  The default value is
     `"false"'.

     For example, if the function

          function f ()
            2 + 2
          endfunction

     is executed, Octave will either print `ans = 4' or nothing
     depending on the value of `silent_functions'.

`split_long_rows'
     For large matrices, Octave may not be able to display all the
     columns of a given row on one line of your screen.  This can
     result in missing information or output that is nearly impossible
     to decipher, depending on whether your terminal truncates or wraps
     long lines.

     If the value of `split_long_rows' is `"true"', Octave will display
     the matrix in a series of smaller pieces, each of which can fit
     within the limits of your terminal width.  Each set of rows is
     labeled so that you can easily see which columns are currently
     being displayed.  For example:

          octave:13> rand (2, 9)
          ans =
          
           Columns 1 through 7:
          
             0.92205  0.72628  0.99841  0.62590  0.82422  0.77486  0.30258
             0.15999  0.79484  0.75443  0.86995  0.91430  0.23980  0.64591
          
           Columns 8 and 9:
          
            0.08894  0.13266
            0.28008  0.65575

     The default value of `split_long_rows' is `"true"'.

`suppress_verbose_help_message'
     If the value of `suppress_verbose_help_message' is `"true"',
     Octave will not add additional help information to the end of the
     output from the `help' command and usage messages for built-in
     commands.

`treat_neg_dim_as_zero'
     If the value of `treat_neg_dim_as_zero' is `"true"', expressions
     like

          eye (-1)

     produce an empty matrix (i.e., row and column dimensions are zero).
     Otherwise, an error message is printed and control is returned to
     the top level.  The default value is `"false"'.

`warn_assign_as_truth_value'
     If the value of `warn_assign_as_truth_value' is `"true"', a
     warning is issued for statements like

          if (s = t)
            ...

     since such statements are not common, and it is likely that the
     intent was to write

          if (s == t)
            ...

     instead.

     There are times when it is useful to write code that contains
     assignments within the condition of a `while' or `if' statement.
     For example, statements like

          while (c = getc())
            ...

     are common in C programming.

     It is possible to avoid all warnings about such statements by
     setting `warn_assign_as_truth_value' to `"false"', but that may
     also let real errors like

          if (x = 1)  # intended to test (x == 1)!
            ...

     slip by.

     In such cases, it is possible suppress errors for specific
     statements by writing them with an extra set of parentheses.  For
     example, writing the previous example as

          while ((c = getc()))
            ...

     will prevent the warning from being printed for this statement,
     while allowing Octave to warn about other assignments used in
     conditional contexts.

     The default value of `warn_assign_as_truth_value' is `"true"'.

`warn_comma_in_global_decl'
     If the value of `warn_comma_in_global_decl' is `"true"', a warning
     is issued for statements like

          global a = 1, b

     which makes the variables `a' and `b' global and assigns the value
     1 to the variable `a', because in this context, the comma is not
     interpreted as a statement separator.

     The default value of `warn_comma_in_global_decl' is `"true"'.

`warn_divide_by_zero'
     If the value of `warn_divide_by_zero' is `"true"', a warning is
     issued when Octave encounters a division by zero.  If the value is
     `"false"', the warning is omitted.  The default value is `"true"'.

`warn_function_name_clash'
     If the value of `warn_function_name_clash' is `"true"', a warning
     is issued when Octave finds that the name of a function defined in
     a function file differs from the name of the file.  If the value is
     `"false"', the warning is omitted.  The default value is `"true"'.

`whitespace_in_literal_matrix'
     This variable allows some control over how Octave decides to
     convert spaces to commas and semicolons in matrix expressions like
     `[m (1)]' or

          [ 1, 2,
            3, 4 ]

     If the value of `whitespace_in_literal_matrix' is `"ignore"',
     Octave will never insert a comma or a semicolon in a literal matrix
     list.  For example, the expression `[1 2]' will result in an error
     instead of being treated the same as `[1, 2]', and the expression

          [ 1, 2,
            3, 4 ]

     will result in the vector [1 2 3 4] instead of a matrix.

     If the value of `whitespace_in_literal_matrix' is `"traditional"',
     Octave will convert spaces to a comma between identifiers and `('.
     For example, given the matrix

          m = [3 2]

     the expression

          [m (1)]

     will be parsed as

          [m, (1)]

     and will result in

          [3 2 1]

     and the expression

          [ 1, 2,
            3, 4 ]

     will result in a matrix because the newline character is converted
     to a semicolon (row separator) even though there is a comma at the
     end of the first line (trailing commas or semicolons are ignored).
     This is apparently how MATLAB behaves.

     Any other value for `whitespace_in_literal_matrix' results in
     behavior that is the same as traditional, except that Octave does
     not convert spaces to a comma between identifiers and `('.  For
     example, the expression

          [m (1)]

     will produce `3'.  This is the way Octave has always behaved.


File: octave.info,  Node: Other Built-in Variables,  Next: Summary of Preference Variables,  Prev: User Preferences,  Up: Built-in Variables

Other Built-in Variables
========================

   In addition to these variables, there are two other special built-in
variables whose values are automatically updated.

`ans'
     This variable holds the most recently computed result that was not
     explicitly assigned to a variable.  For example, after the
     expression

          3^2 + 4^2

     is evaluated, the value of `ans' is `25'.

`PWD'
     The current working directory.  The value of `PWD' is updated each
     time the current working directory is changed with the `cd'
     command.  *Note System Utilities::.


File: octave.info,  Node: Summary of Preference Variables,  Prev: Other Built-in Variables,  Up: Built-in Variables

Summary of Preference Variables
===============================

   Here is a summary of all of Octave's preference variables and their
default values.  In the following table `OCTAVE_HOME' stands for the
root directory where Octave is installed, and `VERSION' stands for the
Octave version number.

     EDITOR                        EDITOR environment variable, or "vi"
     INFO_FILE                     "OCTAVE_HOME/info/octave.info"
     LOADPATH                      OCTAVE_PATH environment variable, or
                                   ".:OCTAVE_HOME/lib/VERSION"
     PAGER                         "less", or "more"
     PS1                           "\s:\#> "
     PS2                           "> "
     PS4                           "+ "
     automatic_replot              "false"
     default_return_value          []
     do_fortran_indexing           "false"
     define_all_return_values      "false"
     empty_list_elements_ok        "warn"
     gnuplot_binary                "gnuplot"
     ignore_function_time_stamp    "system"
     implicit_str_to_num_ok        "false"
     ok_to_lose_imaginary_part     "warn"
     output_max_field_width        10
     output_precision              5
     page_screen_output            "true"
     prefer_column_vectors         "false"
     prefer_zero_one_indexing      "false"
     print_answer_id_name          "true"
     print_empty_dimensions        "true"
     resize_on_range_error         "true"
     return_last_computed_value    "false"
     save_precision                17
     silent_functions              "false"
     split_long_rows               "true"
     suppress_verbose_help_message "true"
     treat_neg_dim_as_zero         "false"
     warn_assign_as_truth_value    "true"
     warn_comma_in_global_decl     "true"
     warn_divide_by_zero           "true"
     warn_function_name_clash      "true"
     whitespace_in_literal_matrix  ""


File: octave.info,  Node: Arithmetic,  Next: Linear Algebra,  Prev: Built-in Variables,  Up: Top

Arithmetic
**********

   Unless otherwise noted, all of the functions described in this
chapter will work for real and complex scalar or matrix arguments.

* Menu:

* Utility Functions::
* Complex Arithmetic::
* Trigonometry::
* Sums and Products::
* Special Functions::


File: octave.info,  Node: Utility Functions,  Next: Complex Arithmetic,  Prev: Arithmetic,  Up: Arithmetic

Utility Functions
=================

   The following functions are available for working with complex
numbers.  Each expects a single argument, and given a matrix, they work
on an element by element basis.

`ceil (X)'
     Return the smallest integer not less than X.  If X is complex,
     return `ceil (real (X)) + ceil (imag (X)) * I'.

`floor (X)'
     Return the largest integer not greater than X.  If X is complex,
     return `floor (real (X)) + floor (imag (X)) * I'.

`fix (X)'
     Truncate X toward zero.  If X is complex, return `fix (real (X)) +
     fix (imag (X)) * I'.

`round (X)'
     Return the integer nearest to X.  If X is complex, return `round
     (real (X)) + round (imag (X)) * I'.

`sign (X)'
     Compute the "signum" function, which is defined as

                     -1, x < 0;
          sign (x) =  0, x = 0;
                      1, x > 0.

     For complex arguments, `sign' returns `x ./ abs (X)'.

`exp (X)'
     Compute the exponential of X.  To compute the matrix exponential,
     see *Note Linear Algebra::.

`gcd (X, `...')'
     Compute the greatest common divisor of the elements of X, or the
     list of all the arguments.  For example,

          gcd (a1, ..., ak)

     is the same as

          gcd ([a1, ..., ak])

     An optional second return value, V contains an integer vector such
     that

          g = v(1) * a(k) + ... + v(k) * a(k)

`lcm (X, `...')'
     Compute the least common multiple of the elements elements of X, or
     the list of all the arguments.  For example,

          lcm (a1, ..., ak)

     is the same as

          lcm ([a1, ..., ak]).

`log (X)'
     Compute the natural logarithm of X.  To compute the matrix
     logarithm, see *Note Linear Algebra::.

`log2 (X)'
     Compute the base-2 logarithm of X.

`log10 (X)'
     Compute the base-10 logarithm of X.

`sqrt (X)'
     Compute the square root of X.  To compute the matrix square root,
     see *Note Linear Algebra::.

`max (X)'
     For a vector argument, return the maximum value.  For a matrix
     argument, return the maximum value from each column, as a row
     vector.  Thus,

          max (max (X))

     returns the largest element of X.

     For complex arguments, the magnitude of the elements are used for
     comparison.

`min (X)'
     Like `max', but return the minimum value.

`rem (X, Y)'
     Return the remainder of `X / Y', computed using the expression

          x - y .* fix (x ./ y)

     An error message is printed if the dimensions of the arguments do
     not agree, or if either of the arguments is complex.


File: octave.info,  Node: Complex Arithmetic,  Next: Trigonometry,  Prev: Utility Functions,  Up: Arithmetic

Complex Arithmetic
==================

   The following functions are available for working with complex
numbers.  Each expects a single argument.  Given a matrix they work on
an element by element basis.

`abs (X)'
     Compute the magnitude of X.

`angle (X)'
`arg (X)'
     Compute the argument of X.

`conj (X)'
     Return the complex conjugate of X.

`imag (X)'
     Return the imaginary part of X.

`real (X)'
     Return the real part of X.


File: octave.info,  Node: Trigonometry,  Next: Sums and Products,  Prev: Complex Arithmetic,  Up: Arithmetic

Trigonometry
============

   Octave provides the following trigonometric functions:

     sin    asin    sinh    asinh
     cos    acos    cosh    acosh
     tan    atan    tanh    atanh
     
     sec    asec    sech    asech
     csc    acsc    csch    acsch
     cot    acot    coth    acoth

Each of these functions expect a single argument.  For matrix arguments,
they work on an element by element basis.  For example, the expression

     sin ([1, 2; 3, 4])

produces

     ans =
     
        0.84147   0.90930
        0.14112  -0.75680

   `atan2 (Y, X)'


File: octave.info,  Node: Sums and Products,  Next: Special Functions,  Prev: Trigonometry,  Up: Arithmetic

Sums and Products
=================

`sum (X)'
     For a vector argument, return the sum of all the elements.  For a
     matrix argument, return the sum of the elements in each column, as
     a row vector.  The sum of an empty matrix is 0 if it has no
     columns, or a vector of zeros if it has no rows (*note Empty
     Matrices::.).

`prod (X)'
     For a vector argument, return the product of all the elements.
     For a matrix argument, return the product of the elements in each
     column, as a row vector.  The product of an empty matrix is 1 if
     it has no columns, or a vector of ones if it has no rows (*note
     Empty Matrices::.).

`cumsum (X)'
     Return the cumulative sum of each column of X.  For example,

          cumsum ([1, 2; 3, 4])

     produces

          ans =
          
            1  2
            4  6

`cumprod (X)'
     Return the cumulative product of each column of X.  For example,

          cumprod ([1, 2; 3, 4])

     produces

          ans =
          
            1  2
            3  8

`sumsq (X)'
     For a vector argument, return the sum of the squares of all the
     elements.  For a matrix argument, return the sum of the squares of
     the elements in each column, as a row vector.


File: octave.info,  Node: Special Functions,  Prev: Sums and Products,  Up: Arithmetic

Special Functions
=================

`beta'
     Returns the beta function,

          beta (a, b) = gamma (a) * gamma (b) / gamma (a + b).

`betai (A, B, X)'
     Returns the incomplete beta function,

                                              x
                                             /
          betai (a, b, x) = beta (a, b)^(-1) | t^(a-1) (1-t)^(b-1) dt.
                                             /
                                          t=0

     If x has more than one component, both A and B must be scalars.
     If X is a scalar, A and B must be of compatible dimensions.

`erf'
     Computes the error function,

                                   z
                                  /
          erf (z) = (2/sqrt (pi)) | e^(-t^2) dt
                                  /
                               t=0

`erfc (Z)'
     Computes the complementary error function, `1 - erf (Z)'.

`erfinv'
     Computes the inverse of the error function.

`gamma (Z)'
     Computes the gamma function,

                      infinity
                      /
          gamma (z) = | t^(z-1) exp (-t) dt.
                      /
                   t=0

`gammai (A, X)'
     Computes the incomplete gamma function,

                                        x
                              1        /
          gammai (a, x) = ---------    | exp (-t) t^(a-1) dt
                          gamma (a)    /
                                    t=0

     If A is scalar, then `gammai (A, X)' is returned for each element
     of X and vice versa.

     If neither A nor X is scalar, the sizes of A and X must agree, and
     GAMMAI is applied element-by-element.

`lgamma'
     Returns the natural logarithm of the gamma function.


File: octave.info,  Node: Linear Algebra,  Next: Polynomial Manipulations,  Prev: Arithmetic,  Up: Top

Linear Algebra
**************

   This chapter documents the linear algebra functions of Octave.
Reference material for many of these options may be found in Golub and
Van Loan, `Matrix Computations, 2nd Ed.', Johns Hopkins, 1989, and in
`LAPACK Users' Guide', SIAM, 1992.

* Menu:

* Basic Matrix Functions::
* Matrix Factorizations::
* Functions of a Matrix::


File: octave.info,  Node: Basic Matrix Functions,  Next: Matrix Factorizations,  Prev: Linear Algebra,  Up: Linear Algebra

Basic Matrix Functions
======================

`balance'
          aa = balance (a, opt)
          [dd, aa] =  balance(a, opt)
          [dd, aa] = balance (a, opt)
          [cc, dd, aa, bb] = balance (a, b, opt)

     `[dd, aa] = balance (a)' returns `aa = dd \ a * dd'.  `aa' is a
     matrix whose row/column norms are roughly equal in magnitude, and
     `dd' = `p * d', where `p' is a permutation matrix and `d' is a
     diagonal matrix of powers of two.  This allows the equilibration
     to be computed without roundoff.  Results of eigenvalue
     calculation are typically improved by balancing first.

     `[cc, dd, aa, bb] = balance (a, b)'  returns `aa' (`bb') `=
     cc*a*dd (cc*b*dd)'), where `aa' and `bb' have non-zero elements of
     approximately the same magnitude and `cc' and `dd'  are permuted
     diagonal matrices as in `dd' for the algebraic eigenvalue problem.

     The eigenvalue balancing option `opt' is selected as follows:

    `"N"', `"n"'
          No balancing; arguments copied, transformation(s) set to
          identity.

    `"P"', `"p"'
          Permute argument(s) to isolate eigenvalues where possible.

    `"S"', `"s"'
          Scale to improve accuracy of computed eigenvalues.

    `"B"', `"b"'
          Permute and scale, in that order. Rows/columns of a (and b)
          that are isolated by permutation are not scaled.  This is the
          default behavior.

     Algebraic eigenvalue balancing uses standard LAPACK routines.

     Generalized eigenvalue problem balancing uses Ward's algorithm
     (SIAM Journal on Scientific and Statistical Computing, 1981).

`cond (A)'
     Compute the (two-norm) condition number of a matrix. `cond (a)' is
     defined as `norm (a) * norm (inv (a))', and is computed via a
     singular value decomposition.

`det (A)'
     Compute the determinant of A using LINPACK.

`eig'
                      = eig (a)
          [v, lambda] = eig (a)

     The eigenvalues (and eigenvectors) of a matrix are computed in a
     several step process which begins with a Hessenberg decomposition
     (see `hess'), followed by a Schur decomposition (see `schur'), from
     which the eigenvalues are apparent.  The eigenvectors, when
     desired, are computed by further manipulations of the Schur
     decomposition.

     See also: `hess', `schur'.

`givens'
          [c, s] = givens (x, y)
          G = givens (x, y)

     `G = givens(x, y)' returns a 2 x 2 orthogonal matrix `G = [c s;
     -s' c]' such that `G [x; y] = [*; 0]'  (x, y scalars)

`inv (A)'
`inverse (A)'
     Compute the inverse of the square matrix A.

`norm (A, P)'
     Compute the p-norm of the matrix A.  If the second argument is
     missing, `p = 2' is assumed.

     If A is a matrix:

    P = `1'
          1-norm, the largest column sum of A.

    P = `2'
          Largest singular value of A.

    P = `Inf'
          Infinity norm, the largest row sum of A.

    P = `"fro"'
          Frobenius norm of A, `sqrt (sum (diag (a' * a)))'.

     If A is a vector or a scalar:

    P = `Inf'
          `max (abs (a))'.

    P = `-Inf'
          `min (abs (a))'.

    other
          p-norm of A, `(sum (abs (a) .^ p)) ^ (1/p)'.

`null (A, TOL)'
     Returns an orthonormal basis of the null space of A.

     The dimension of the null space is taken as the number of singular
     values of A not greater than TOL.  If the argument TOL is missing,
     it is computed as

          max (size (a)) * max (svd (a)) * eps

`orth (A, TOL)'
     Returns an orthonormal basis of the range of A.

     The dimension of the range space is taken as the number of singular
     values of A greater than TOL.  If the argument TOL is missing, it
     is computed as

          max (size (a)) * max (svd (a)) * eps

`pinv (X, TOL)'
     Returns the pseudoinverse of X.  Singular values less than TOL are
     ignored.

     If the second argument is omitted, it is assumed that

          tol = max (size (X)) * sigma_max (X) * eps,

     where `sigma_max (X)' is the maximal singular value of X.

`rank (A, TOL)'
     Compute the rank of A, using the singular value decomposition.
     The rank is taken to be the number  of singular values of A that
     are greater than the specified tolerance TOL.  If the second
     argument is omitted, it is taken to be

          tol =  max (size (a)) * sigma (1) * eps;

     where `eps' is machine precision and `sigma' is the largest
     singular value of `a'.

`trace (A)'
     Compute the trace of A, `sum (diag (a))'.


File: octave.info,  Node: Matrix Factorizations,  Next: Functions of a Matrix,  Prev: Basic Matrix Functions,  Up: Linear Algebra

Matrix Factorizations
=====================

`chol (A)'
     Compute the Cholesky factor, R, of the symmetric positive definite
     matrix A, where

          r' * r = a.

`hess (A)'
     Compute the Hessenberg decomposition of the matrix A.

               h = hess (a)
          [p, h] = hess (a)

     The Hessenberg decomposition is usually used as the first step in
     an eigenvalue computation, but has other applications as well (see
     Golub, Nash, and Van Loan, IEEE Transactions on Automatic Control,
     1979.  The Hessenberg decomposition is `p * h * p' = a' where `p'
     is a square unitary matrix (`p' * p = I', using complex-conjugate
     transposition) and `h' is upper Hessenberg (`i >= j+1 => h (i, j)
     = 0').

`lu (A)'
     Compute the LU decomposition of A, using subroutines from LAPACK.
     The result is returned in a permuted form, according to the
     optional return value P.  For example, given the matrix `a = [1,
     2; 3, 4]',

          [l, u, p] = lu (a)

     returns

          l =
          
            1.00000  0.00000
            0.33333  1.00000
          
          u =
          
            3.00000  4.00000
            0.00000  0.66667
          
          p =
          
            0  1
            1  0

`qr (A)'
     Compute the QR factorization of A, using standard LAPACK
     subroutines.  For example, given the matrix `a = [1, 2; 3, 4]',

          [q, r] = qr (a)

     returns

          q =
          
            -0.31623  -0.94868
            -0.94868   0.31623
          
          r =
          
            -3.16228  -4.42719
             0.00000  -0.63246

     The `qr' factorization has applications in the solution of least
     squares problems

          `min norm(A x - b)'

     for overdetermined systems of equations (i.e., `a'  is a tall,
     thin matrix).  The `qr' factorization is `q * r = a' where `q' is
     an orthogonal matrix and `r' is upper triangular.

     The permuted `qr' factorization `[q, r, pi] = qr (a)' forms the
     `qr' factorization such that the diagonal entries of `r' are
     decreasing in magnitude order.  For example, given the matrix `a =
     [1, 2; 3, 4]',

          [q, r, pi] = qr(a)

     returns

          q =
          
            -0.44721  -0.89443
            -0.89443   0.44721
          
          r =
          
            -4.47214  -3.13050
             0.00000   0.44721
          
          p =
          
             0  1
             1  0

     The permuted `qr' factorization `[q, r, pi] = qr (a)'
     factorization allows the construction of an orthogonal basis of
     `span (a)'.

`schur'
          [u, s] = schur (a, opt)   opt = "a", "d", or "u"
               s = schur (a)

     The Schur decomposition is used to compute eigenvalues of a square
     matrix, and has applications in the solution of algebraic Riccati
     equations in control (see `are' and `dare').  `schur' always
     returns `s = u' * a * u' where `u'  is a unitary matrix (`u'* u'
     is identity) and `s' is upper triangular.  The eigenvalues of `a'
     (and `s') are the diagonal elements of `s' If the matrix `a' is
     real, then the real Schur decomposition is computed, in which the
     matrix `u' is orthogonal and `s' is block upper triangular with
     blocks of size at most `2 x 2' blocks along the diagonal.  The
     diagonal elements of `s' (or the eigenvalues of the `2 x 2'
     blocks, when appropriate) are the eigenvalues of `a' and `s'.

     The eigenvalues are optionally ordered along the diagonal
     according to the value of `opt'.  `opt = "a"' indicates that all
     eigenvalues with negative real parts should be moved to the leading
     block of `s' (used in `are'), `opt = "d"' indicates that all
     eigenvalues with magnitude less than one should be moved to the
     leading block of `s' (used in `dare'), and `opt = "u"', the
     default, indicates that no ordering of eigenvalues should occur.
     The leading `k' columns of `u' always span the `a'-invariant
     subspace corresponding to the `k' leading eigenvalues of `s'.

`svd (A)'
     Compute the singular value decomposition of A

          a = u * sigma * v'

     The function `svd' normally returns the vector of singular values.
     If asked for three return values, it computes U, S, and V.  For
     example,

          svd (hilb (3))

     returns

          ans =
          
            1.4083189
            0.1223271
            0.0026873

     and

          [u, s, v] = svd (hilb (3))

     returns

          u =
          
            -0.82704   0.54745   0.12766
            -0.45986  -0.52829  -0.71375
            -0.32330  -0.64901   0.68867
          
          s =
          
            1.40832  0.00000  0.00000
            0.00000  0.12233  0.00000
            0.00000  0.00000  0.00269
          
          v =
          
            -0.82704   0.54745   0.12766
            -0.45986  -0.52829  -0.71375
            -0.32330  -0.64901   0.68867

     If given a second argument, `svd' returns an economy-sized
     decomposition, eliminating the unnecessary rows or columns of U or
     V.


File: octave.info,  Node: Functions of a Matrix,  Prev: Matrix Factorizations,  Up: Linear Algebra

Functions of a Matrix
=====================

`expm'
          expm (a)

     Returns the exponential of a matrix, defined as the infinite
     Taylor series

          expm(a) = I + a + a^2/2! + a^3/3! + ...

     The Taylor series is *not* the way to compute the matrix
     exponential; see Moler and Van Loan, `Nineteen Dubious Ways to
     Compute the Exponential of a Matrix', SIAM Review, 1978.  This
     routine uses Ward's diagonal Pade' approximation method with three
     step preconditioning (SIAM Journal on Numerical Analysis, 1977).

     Diagonal Pade'  approximations are rational polynomials of matrices

               -1
          D (a)   N (a)

     whose Taylor series matches the first `2q+1' terms of the Taylor
     series above; direct evaluation of the Taylor series (with the
     same preconditioning steps) may be desirable in lieu of the Pade'
     approximation when `Dq(a)' is ill-conditioned.

`logm (A)'
     Compute the matrix logarithm of the square matrix A.  Note that
     this is currently implemented in terms of an eigenvalue expansion
     and needs to be improved to be more robust.

`sqrtm (A)'
     Compute the matrix square root of the square matrix A.  Note that
     this is currently implemented in terms of an eigenvalue expansion
     and needs to be improved to be more robust.

`kron (A, B)'
     Form the kronecker product of two matrices, defined block by block
     as

          x = [a(i, j) b]

`qzhess (A, B)'
     Compute the Hessenberg-triangular decomposition of the matrix
     pencil `(a, b)'.  This function returns `aa = q * a * z', `bb = q
     * b * z', `q', `z' orthogonal.  For example,

          [aa, bb, q, z] = qzhess (a, b)

     The Hessenberg-triangular decomposition is the first step in Moler
     and Stewart's QZ decomposition algorithm.  (The QZ decomposition
     will be included in a later release of Octave.)

     Algorithm taken from Golub and Van Loan, `Matrix Computations, 2nd
     edition'.

`qzval (A, B)'
     Compute generalized eigenvalues.

`syl (A, B, C)'
     Solve the Sylvester equation

          A X + X B + C = 0

     using standard LAPACK subroutines.


File: octave.info,  Node: Polynomial Manipulations,  Next: Nonlinear Equations,  Prev: Linear Algebra,  Up: Top

Polynomial Manipulations
************************

   In Octave, a polynomial is represented by its coefficients (arranged
in descending order).  For example, a vector C of length N+1
corresponds to the following N-th order polynomial

     p(x) = c(1) x^n + ... + c(n) x + c(n+1).

`compan (C)'
     Compute the companion matrix corresponding to polynomial
     coefficient vector C.

     The companion matrix is

               _                                                        _
              |  -c(2)/c(1)   -c(3)/c(1)  ...  -c(n)/c(1)  -c(n+1)/c(1)  |
              |       1            0      ...       0             0      |
              |       0            1      ...       0             0      |
          A = |       .            .   .            .             .      |
              |       .            .       .        .             .      |
              |       .            .           .    .             .      |
              |_      0            0      ...       1             0     _|

     The eigenvalues of the companion matrix are equal to the roots of
     the polynomial.

`conv (A, B)'
     Convolve two vectors.

     `y = conv (a, b)' returns a vector of length equal to `length (a)
     + length (b) - 1'.  If A and B are polynomial coefficient vectors,
     `conv' returns the coefficients of the product polynomial.

`deconv (Y, A)'
     Deconvolve two vectors.

     `[b, r] = deconv (y, a)' solves for B and R such that `y = conv
     (a, b) + r'.

     If Y and A are polynomial coefficient vectors, B will contain the
     coefficients of the polynomial quotient and R will be a remander
     polynomial of lowest order.

`poly (A)'
     If A is a square N-by-N matrix, `poly (A)' is the row vector of
     the coefficients of `det (z * eye (n) - a)', the characteristic
     polynomial of A.  If X is a vector, `poly (X)' is a vector of
     coefficients of the polynomial whose roots are the elements of X.

`polyderiv (C)'
     Returns the coefficients of the derivative of the polynomial whose
     coefficients are given by vector C.

`polyinteg (C)'
     Returns the coefficients of the integral the polynomial whose
     coefficients are represented by the vector C.

     The constant of integration is set to zero.

`polyreduce (C)'
     Reduces a polynomial coefficient vector to a minimum number of
     terms by stripping off any leading zeros.

`polyval (C, X)'
     Evaluate a polynomial.

     `polyval (C, X)' will evaluate the polynomial at the specified
     value of X.

     If X is a vector or matrix, the polynomial is evaluated at each of
     the elements of X.

`polyvalm (C, X)'
     Evaluate a polynomial in the matrix sense.

     `polyvalm (C, X)' will evaluate the polynomial in the matrix
     sense, i.e. matrix multiplication is used instead of element by
     element multiplication as is used in polyval.

     The argument X must be a square matrix.

`residue (B, A, TOL)'
     If B and A are vectors of polynomial coefficients, then residue
     calculates the partial fraction expansion corresponding to the
     ratio of the two polynomials.

     The function `residue' returns R, P, K, and E, where the vector R
     contains the residue terms, P contains the pole values, K contains
     the coefficients of a direct polynomial term (if it exists) and E
     is a vector containing the powers of the denominators in the
     partial fraction terms.

     Assuming B and A represent polynomials  P (s) and Q(s)  we have:

           P(s)    M       r(m)         N
           ---- = SUM -------------  + SUM k(n)*s^(N-n)
           Q(s)   m=1 (s-p(m))^e(m)    n=1

     where M is the number of poles (the length of the R, P, and E
     vectors) and N is the length of the K vector.

     The argument TOL is optional, and if not specified, a default
     value of 0.001 is assumed.  The tolerance value is used to
     determine whether poles with small imaginary components are
     declared real.  It is also used to determine if two poles are
     distinct.  If the ratio of the imaginary part of a pole to the
     real part is less than TOL, the imaginary part is discarded.  If
     two poles are farther apart than TOL they are distinct.  For
     example,

     Example:

           b = [1, 1, 1];
           a = [1, -5, 8, -4];
          
           [r, p, k, e] = residue (b, a)

     returns

          r = [-2, 7, 3]
          
          p = [2, 2, 1]
          
          k = [](0x0)
          
          e = [1, 2, 1]

     which implies the following partial fraction expansion

                  s^2 + s + 1       -2        7        3
             ------------------- = ----- + ------- + -----
             s^3 - 5s^2 + 8s - 4   (s-2)   (s-2)^2   (s-1)

`roots (V)'
     For a vector V with N components, return the roots of the
     polynomial

          v(1) * z^(n-1) + ... + v(n-1) * z + v(n).


File: octave.info,  Node: Nonlinear Equations,  Next: Differential Equations,  Prev: Polynomial Manipulations,  Up: Top

Nonlinear Equations
*******************

   Octave can solve sets of nonlinear equations of the form

     F (x) = 0

using the function `fsolve', which is based on the MINPACK subroutine
`hybrd'.

   For example, to solve the set of equations

     -2x^2 + 3xy   + 4 sin(y) = 6
      3x^2 - 2xy^2 + 3 cos(x) = -4

you first need to write a function to compute the value of the given
function.  For example:

     function y = f (x)
     
       y(1) = -2*x(1)^2 + 3*x(1)*x(2)   + 4*sin(x(2)) - 6;
       y(2) =  3*x(1)^2 - 2*x(1)*x(2)^2 + 3*cos(x(1)) + 4;
     
     endfunction

   Then, call `fsolve' with a specified initial condition to find the
roots of the system of equations.  For example, given the function `f'
defined above,

     [x, info] = fsolve ("f", [1; 2])

results in the solution

     x =
     
       0.57983
       2.54621
     
     info = 1

   A value of `info = 1' indicates that the solution has converged.

   The function `perror' may be used to print English messages
corresponding to the numeric error codes.  For example,

     perror ("fsolve", 1)

prints

     solution converged to requested tolerance

   Tolerances and other options for `fsolve' may be specified using the
function `fsolve_options'.


File: octave.info,  Node: Differential Equations,  Next: Optimization,  Prev: Nonlinear Equations,  Up: Top

Differential Equations
**********************

   Octave has two built-in functions for solving differential equations.
Both are based on reliable ODE solvers written in Fortran.

* Menu:

* Ordinary Differential Equations::
* Differential-Algebraic Equations::

