Using intervals¶
This document gives an overview of how to use the interval
class.
Contents
Construction¶
The interval
package can be loaded into the Python interpreter with the statement
>>> from interval import interval, inf, imath
which injects in the current namespace the interval class, a constant representing the mathematical infinity, and a module providing interval transcendental functions.
Intervals are immutable objects that can be created by specifying their connected components:
>>> k = interval([0, 1], [2, 3], [10, 15])
creates an object representing the union of the mathematical intervals [0, 1], [2, 3] and [10, 15].
>>> interval[1, 2]
interval([1.0, 2.0])
represents the mathematical interval [1, 2], not be confused with the union of the one-point intervals {1} and {2}:
>>> interval(1, 2)
interval([1.0], [2.0])
An interval consisting of only one number can be instantiated with either forms:
>>> interval(1), interval[1]
(interval([1.0]), interval([1.0]))
An empty interval has no components:
>>> interval()
interval()
Operations¶
Intervals can be added:
>>> interval[1, 2] + interval[4, 5]
interval([5.0, 7.0])
subtracted:
>>> interval[5, 7] - interval[1, 2]
interval([3.0, 6.0])
multiplied:
>>> interval[0, 2] * interval[4, inf]
interval([-inf, inf])
divided:
>>> interval[1] / interval[3]
interval([0.3333333333333333, 0.33333333333333337])
intersected:
>>> interval[1, 4] & interval[2, 5]
interval([2.0, 4.0])
merged by set-theoretic union:
>>> interval[1, 4] | interval[2, 5]
interval([1.0, 5.0])
>>> interval[1, 2] | interval[4, 5]
interval([1.0, 2.0], [4.0, 5.0])
raised to integer power:
>>> interval[-3, 2] ** 2
interval([0.0, 9.0])
You can take the absolute value of an interval:
>>> abs(interval[-3, 2])
interval([0.0, 3.0])
Scalar numbers are automatically cast as intervals when used as operands together with intervals:
>>> 1/interval[3] == interval[1]/interval[3]
True
The imath module provides transcendental functions that accept interval arguments. For instance,
>>> imath.exp(interval[0, 1])
interval([1.0, 2.7182818284590455])
Inspection¶
The in
operator can be used to test whether a scalar is contained
in an interval:
>>> 0 in interval[-1, 1]
True
>>> 0 in interval[1, 2]
False
or whether an interval is a subset of another interval:
>>> interval[1, 2] in interval[0, 3]
True
>>> interval[1, 2] in interval[1.5, 3]
False
The len
operator returns the number of connected components in the
interval:
>>> len(interval())
0
>>> len(interval[1, 2])
1
>>> len(interval(1, 2))
2
You can iterate on the connected components of an interval:
>>> [x for x in interval([1, 2], 3)]
[(1.0, 2.0), (3.0, 3.0)]
Each component behaves like a named tuple:
>>> x = interval([1, 2], 3)
>>> x[0].inf
1.0
>>> x[1].sup
3.0
You can use the components
attribute to iterate over the components
so that each component is itself an interval:
>>> [x for x in interval([1, 2], 3).components]
[interval([1.0, 2.0]), interval([3.0])]
Similarly, the endpoints are given by
>>> interval([1, 2], 3).extrema
interval([1.0], [2.0], [3.0])
and the midpoints by
>>> interval([1, 2], 3).midpoint
interval([1.5], [3.0])