Simple Examples |
This is an overview over Octaves numerical features. Here you will
learn how to work with matrices, how to integrate differential equations,
how to plot functions, how to edit what you have typed, how to get
help and how to work with script or function files.
|
octave:1> a = [ 1, 1, 2; 3, 5, 8; 13, 21, 34 ]
Octave will respond by printing the matrix in neatly aligned columns. Ending a command with a semicolon tells Octave to not print the result of a command. For example
octave:2> b = rand (3, 2);
will create a 3 row, 2 column matrix with each element set to a random value between zero and one.
To display the value of any variable, simply type the name of the variable. For example, to display the value stored in the matrix b, type the command
octave:3> b
octave:4> 2 * a
To multiply the two matrices a and b, type the command
octave:5> a * b
To form the matrix product a' * a, type the command
octave:6> a' * a
This is conceptually equivalent to inv(A) * b, but avoids computing the inverse of a matrix directly. If the coefficient matrix is singular, Octave will print a warning message and compute a minimum norm solution.
dx / dt = f (x, t)
with the initial condition
x(t = t0) = x0
For Octave to integrate equations of this form, you must first provide a definition of the function f(x,t).
This is straightforward, and may be accomplished by entering the function body directly on the command line. For example, the following commands define the right hand side function for an interesting pair of nonlinear differential equations. Note that while you are entering a function, Octave responds with a different prompt, to indicate that it is waiting for you to complete your input.
octave:8> function xdot = f (x, t) > > r = 0.25; > k = 1.4; > a = 1.5; > b = 0.16; > c = 0.9; > d = 0.8; > > xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1)); > xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2); > > endfunction
Given the initial condition
x0 = [1; 2];
and the set of output times as a column vector (note that the first output time corresponds to the initial condition given above)
t = linspace (0, 50, 200)';
it is easy to integrate the set of differential equations:
x = lsode ("f", x0, t);
The function lsode uses the Livermore Solver for Ordinary Differential Equations, described in A. C. Hindmarsh, ODEPACK, a Systematized Collection of ODE Solvers, in: Scientific Computing, R. S. Stepleman et al. (Eds.), North-Holland, Amsterdam, 1983, pages 55--64.
plot (t, x)
To capture the output of the plot command in a file rather than sending the output directly to your terminal, you can use a set of commands like this
gset term postscript gset output "foo.ps" replot
This will work for other types of output devices as well. Octave's gset command is really just piped to the gnuplot subprocess, so that once you have a plot on the screen that you like, you should be able to do something like this to create an output file suitable for your graphics printer.
Or, you can eliminate the intermediate file by using commands like this
gset term postscript gset output "|lpr -Pname_of_your_graphics_printer" replot
help plot
will display the help text for the plot function. Octave sends output that is too long to fit on one screen through a pager like less or more. Type a carriage return to advance one line, a space character to advance one page, and q to exit the pager.
Unlike a function file, a script file must not begin with the keyword function. If it does, Octave will assume that it is a function file, and that it defines a single function that should be evaluated as soon as it is defined.
A script file also differs from a function file in that the variables named in a script file are not local variables, but are in the same scope as the other variables that are visible on the command line.
Even though a script file may not begin with the function keyword, it is possible to define more than one function in a single script file and load (but not execute) all of them at once. To do this, the first token in the file (ignoring comments and other white space) must be something other than function.