A short overview how to use INTLAB (see also file FAQ):
=======================================================
INTLAB was started with the introduction of an operator concept in Matlab.
It is continuously developed since the first version in 1998.
The inventor and only developer is Siegfried M. Rump, head of the
Institute for Reliable Computing at the Hamburg University of Technology.
In any publication or other material using INTLAB please cite
S.M. Rump: INTLAB - INTerval LABoratory. In Tibor Csendes, editor,
Developments in Reliable Computing, pages 77-104. Kluwer Academic Publishers, Dordrecht, 1999.
@incollection{Ru99a,
author = {Rump, {S.M.}},
title = {{INTLAB - INTerval LABoratory}},
editor = {Tibor Csendes},
booktitle = {{Developments~in~Reliable Computing}},
publisher = {Kluwer Academic Publishers},
address = {Dordrecht},
pages = {77--104},
year = {1999},
url = {http://www.ti3.tuhh.de/rump/}
}
***** INSTALLATION *****
The easiest way to start is create a file startup.m (or to replace the content
of the existing one) in the Matlab path \toolbox\local by
cd ... insert the INTLAB path ...
startintlab
Then the startintlab.m file is started and should do the rest. For
some user-specific options you may adjust the file startintlab.m .
For Octave, download the current version from my homepage. For Octave
the routine "setround" for changing the rounding mode is generated automatically.
************************
===> The fastest way to change the rounding mode is chosen. This may be
===> by the built-in Matlab function "feature" or by some of the assembly
===> routines. In very rare cases it happened what should be blocked by
===> Matlab, namely the system goes to a hard stop and/or core dump.
===> In that case go to intvalinit.m in the directory intval and change
===> the value of the variable TESTROUNDING from 0 to 1.
===> If you are an expert you see which of the assembly routines caused
===> the problem; remove it and it should work.
===> Otherwise please send me the screen shot and I will try to help.
===> Sorry for the inconvenience; it happened only two or three times
===> in several thousand installations.
The documentation is included in every routine. INTLAB-code, i.e.
Matlab-code, is (hopefully) self-explaining. INTLAB stays to the
philosophy to implement everything in Matlab.
INTLAB is successfully tested under several Matlab versions, starting
with version 5.3 until to date.
INTLAB is entirely written in Matlab. There is no system dependency.
This is because the Mathworks company was so kind to add into the
routine "system_dependent" a possibility to change the rounding mode
(my dear thanks to Cleve).
Nevertheless assembly language programs for changing the rounding mode
are provided. If they are working properly and are faster, then the
fastest one is chosen automatically (thanks to a number of scientists
for providing routines for several platforms, see "setround").
The progress in the different INTLAB versions can be viewed using help,
for example
help INTLAB_version_9
Note that '_' is used rather than a dot.
INTLAB supports
- interval scalars, vectors and matrices, real and complex,
- full and sparse matrices,
- interval standard functions, real and complex,
- and a number of toolboxes for intervals, gradients, hessians, taylor,
slopes, polynomials, multi-precision arithmetic and more.
There are some demo-routines to get acquainted with INTLAB, just type "demos"
and look for the INTLAB demos. You may also enter
demointlab .
INTLAB results are verified to be correct including I/O and standard
functions. Interval input is rigorous when using string constants, see
help intval .
Interval output is always rigorous. For details, try e.g.
"help intval\display" and "demointval".
You may switch your display permanently to infimum/supremum notation,
or midpoint/radius, or display using "_" for uncertainties; see
"help intvalinit" for more information. For example
format long, x = midrad(pi,1e-14);
infsup(x)
midrad(x)
disp_(x)
produces
intval x =
[ 3.14159265358978, 3.14159265358981]
intval x =
< 3.14159265358979, 0.00000000000002>
intval x =
3.1415926535898_
Display with uncertainties represents the interval produces by subtracting
and adding 1 from and to the last displayed digit of the mantissa. Note that
the output is written in a way that "what you see is correct". For example,
midrad(4.99993,0.0004)
produces
intval ans =
< 4.9999, 0.0005>
in "format short" and mid-rad representation. Due to non-representable real numbers
this is about the best what can be done with four decimal places after the decimal point.
A possible trap is for example
>> Z=[1,2]+i*[-1,1]
Z =
1.0000 - 1.0000i 2.0000 + 1.0000i
The brackets in the definition of Z might lead to the conclusion that Z is a
complex interval (rectangle) with lower left endpoint 1-i and upper right
endpoint 2+i. This is not the case. The above statement is a standard Matlab
statement defining a (row) vector of length 2. It cannot be an interval:
Otherwise Z would be preceded in the output by "intval".
For linear systems also so-called inner inclusions are computed; in that
case please use "displayinner" for correct output.
Moreover, structured linear systems and eigendecompositions can be computed,
see "structlss" and "structeig", and also verified inclusions of extremely
ill-conditioned linear systems, see "verifylss".
Standard functions are rigorous. This includes trigonometric functions
with large argument. For example,
x=2^500; sin(x), sin(intval(x))
produces
ans =
0.429257392342428
intval ans =
0.42925739234242
the latter being correct to the last digit. All functions support vector
and matrix input to minimize interpretation overhead. For real interval input
causing an exception for a real standard function, one may switch between
changing to complex standard functions with or without warning or, to
stay with real standard functions causing NaN result. For example,
intvalinit('DisplayMidRad')
intvalinit('RealStdFctsExcptnAuto'), sqrt(infsup(-3,-2))
produces
===> Complex interval stdfct used automatically for real interval input
out of range (without warning)
intval ans =
< 0.0000 + 1.5811i, 0.1670>
whereas
intvalinit('RealStdFctsExcptnWarn'), sqrt(infsup(-3,-2))
produces
===> Complex interval stdfct used automatically for real interval input
out of range, but with warning
Warning: SQRT: Real interval input out of range changed to be complex
> In c:\matlab_v5.1\toolbox\intlab\intval\@intval\sqrt.m at line 81
intval ans =
< 0.0000 + 1.5811i, 0.1670>
Input out of range for standard functions may be ignored, please see the demo on interval
arithmetic. This is possible using
intvalinit('RealStdFctsExcptnIgnore'), sqrt(infsup(-3,4))
===> !!! Caution: Input arguments out of range are ignored !!!
intval ans =
[ 0.00000000000000, 2.00000000000000]
Using Brouwer's Fixed Point Theorem by checking f(X) in X is only possible if
the interval vector X is completely in the range of definition of f. Consider
f = inline('sqrt(x)-2'); X = infsup(-3,4); Y = f(X)
which produces
intval Y =
[ -2.0000, 0.0000]
Obviousy, Y is contained in X, but f has no real fixed point at all. You may
check whether an input out of range occurred by
NotDefined = intvalinit('RealStdFctsExcptnOccurred')
which gives
NotDefined =
1
Checking the out-of-range flag resets it to zero.
Certain data necessary for rigorous input/output and for rigorous sta