Interval
LazySets.Interval — TypeInterval{N, IN<:AbstractInterval{N}} <: AbstractHyperrectangle{N}Type representing an interval on the real line. Mathematically, it is of the form
\[[a, b] := \{ a ≤ x ≤ b \} ⊆ \mathbb{R}.\]
Fields
dat– data container for the given interval
Notes
This type relies on the IntervalArithmetic.jl library for representation of intervals and arithmetic operations.
Examples
Unidimensional intervals are symbolic representations of a real closed interval.
We can create intervals in different ways, the simpler way is to pass a pair of numbers:
julia> x = Interval(0.0, 1.0)
Interval{Float64,IntervalArithmetic.Interval{Float64}}([0, 1])or a 2-vector:
julia> x = Interval([0.0, 1.0])
Interval{Float64,IntervalArithmetic.Interval{Float64}}([0, 1])Note that if the package IntervalArithmetic is loaded in the current scope, you have to prepend LazySets. to the Interval type since there is a name conflict otherwise.
julia> using IntervalArithmetic
WARNING: using IntervalArithmetic.Interval in module Main conflicts with an existing identifier.
julia> x = Interval(IntervalArithmetic.Interval(0.0, 1.0))
Interval{Float64,IntervalArithmetic.Interval{Float64}}([0, 1])
julia> dim(x)
1
julia> center(x)
1-element Array{Float64,1}:
0.5This type is such that the usual pairwise arithmetic operators +, -, * trigger the corresponding interval arithmetic backend method, and return a new Interval object. For the symbolic Minkowksi sum, use MinkowskiSum or ⊕.
Interval of other numeric types can be created as well, eg. a rational interval:
julia> Interval(0//1, 2//1)
Interval{Rational{Int64},IntervalArithmetic.Interval{Rational{Int64}}}([0//1, 2//1])LazySets.dim — Methoddim(x::Interval)Return the ambient dimension of an interval.
Input
x– interval
Output
The integer 1.
LazySets.σ — Methodσ(d::AbstractVector, x::Interval)Return the support vector of an interval in a given direction.
Input
d– directionx– interval
Output
Support vector in the given direction.
LazySets.ρ — Methodρ(d::AbstractVector, x::Interval)Evaluate the support function of an interval in a given direction.
Input
d– directionx– interval
Output
Evaluation of the support function in the given direction.
Base.:∈ — Method∈(v::AbstractVector, x::Interval))Return whether a vector is contained in the interval.
Input
v– one-dimensional vectorx– interval
Output
true iff x contains v's first component.
Base.:∈ — Method∈(v::N, x::Interval{N}) where {N}Return whether a number is contained in the interval.
Input
v– scalarx– interval
Output
true iff x contains v.
LazySets.an_element — Methodan_element(x::Interval)Return some element of an interval.
Input
x– interval
Output
The left border (min(x)) of the interval.
LazySets.vertices_list — Methodvertices_list(x::Interval)Return the list of vertices of this interval.
Input
x– interval
Output
The list of vertices of the interval represented as two one-dimensional vectors, or just one if the interval is degenerate (the endpoints match within the tolerance).
LazySets.translate — Methodtranslate(x::Interval, v::AbstractVector)Translate (i.e., shift) an interval by a given vector.
Input
x– intervalv– translation vector
Output
A translated interval.
Algorithm
We add the vector to the left and right of the interval.
LazySets.center — Methodcenter(x::Interval)Return the interval's center.
Input
x– interval
Output
The center, or midpoint, of $x$.
LazySets.center — Methodcenter(H::Interval, i::Int)Return the center along a given dimension of a interval.
Input
x– intervali– dimension of interest
Output
The center along a given dimension of the interval.
Base.min — Methodmin(x::Interval)Return the lower component of an interval.
Input
x– interval
Output
The lower (lo) component of the interval.
Base.max — Methodmax(x::Interval)Return the higher or upper component of an interval.
Input
x– interval
Output
The higher (hi) component of the interval.
LazySets.low — Methodlow(x::Interval{N}) where {N}Return the lower coordinate of an interval set.
Input
x– interval
Output
A vector with the lower coordinate of the interval.
LazySets.high — Methodhigh(x::Interval{N}) where {N}Return the higher coordinate of an interval set.
Input
x– interval
Output
A vector with the higher coordinate of the interval.
LazySets.radius_hyperrectangle — Methodradius_hyperrectangle(x::Interval)Return the box radius of an interval in every dimension.
Input
x– interval
Output
The box radius of the interval (a one-dimensional vector).
LazySets.radius_hyperrectangle — Methodradius_hyperrectangle(x::Interval{N}, i::Int) where {N}Return the box radius of an interval in a given dimension.
Input
x– intervali– dimension index (must be1)
Output
The box radius in the given dimension.
Base.:- — Method-(x::Interval, y::Interval)Return the difference of the intervals.
Input
x– intervaly– interval
Output
The difference of the intervals as a new Interval set.
Base.:* — Method *(x::Interval, y::Interval)Return the product of the intervals.
Input
x– intervaly– interval
Output
The product of the intervals as a new Interval set.
Base.rand — Methodrand(::Type{Interval}; [N]::Type{<:Real}=Float64, [dim]::Int=2,
[rng]::AbstractRNG=GLOBAL_RNG, [seed]::Union{Int, Nothing}=nothing)Create a random interval.
Input
Interval– type for dispatchN– (optional, default:Float64) numeric typedim– (optional, default: 1) dimensionrng– (optional, default:GLOBAL_RNG) random number generatorseed– (optional, default:nothing) seed for reseeding
Output
A random interval.
Algorithm
All numbers are normally distributed with mean 0 and standard deviation 1.
LazySets.isflat — Methodisflat(I::Interval)Determine whether an interval is flat, i.e. whether its extreme values coincide.
Input
I– interval
Output
A boolean which is true if the interval is flat and false otherwise.
Notes
For robustness with respect to floating-point inputs, this function relies on the result of isapproxzero when applied to the diameter of the interval. Hence, this function depends on the absolute zero tolerance ABSZTOL.
LazySets.plot_recipe — Methodplot_recipe(I::Interval{N}, [ε]=zero(N)) where {N}Convert an interval to a pair (x, y) of points for plotting.
Input
I– intervalε– (optional, default:0) ignored, used for dispatch
Output
A pair (x, y) of two points that can be plotted.
Notes
We consider the interval as a line segment with y coordinate equal to zero.
LazySets.linear_map — Methodlinear_map(M::AbstractMatrix, x::Interval)Concrete linear map of an interval.
Input
M– matrixx– interval
Output
Either an interval or a zonotope, depending on the leading dimension (i.e. the number of rows) of M:
- If
size(M, 1) == 1, the output is an interval obtained by scalingxby the matrixM. - If
size(M, 1) > 1, the output is a zonotope whose center isM * center(x)and it has the single generator,M * g, whereg = (high(x)-low(x))/2.
LazySets.scale — Methodscale(α::Real, x::Interval)Concrete scaling of an interval.
Input
α– scalarx– interval
Output
The interval obtained by applying the numerical scale to the given interval.
LazySets.constraints_list — Methodconstraints_list(H::AbstractHyperrectangle{N}) where {N}Return the list of constraints of an axis-aligned hyperrectangular set.
Input
H– hyperrectangular set
Output
A list of linear constraints.
constraints_list(P::Ball1{N}) where {N}Return the list of constraints defining a ball in the 1-norm.
Input
B– ball in the 1-norm
Output
The list of constraints of the ball.
Algorithm
The constraints can be defined as $d_i^T (x-c) ≤ r$ for all $d_i$, where $d_i$ is a vector with elements $1$ or $-1$ in $n$ dimensions. To span all possible $d_i$, the function Iterators.product is used.
constraints_list(x::Interval{N}) where {N}Return the list of constraints of the given interval.
Input
x– interval
Output
The list of constraints of the interval represented as two one-dimensional half-spaces.
constraints_list(L::Line{N, VN}) where {N, VN}Return the list of constraints of a line.
Input
L– line
Output
A list containing 2n-2 half-spaces whose intersection is L, where n is the ambient dimension of L.
constraints_list(U::Universe{N}) where {N}Return the list of constraints defining a universe.
Input
U– universe
Output
The empty list of constraints, as the universe is unconstrained.
constraints_list(P::HParallelotope{N, VN}) where {N, VN}Return the list of constraints of the given parallelotope.
Input
P– parallelotope in constraint representation
Output
The list of constraints of P.
constraints_list(cpa::CartesianProductArray{N}) where {N}
Return the list of constraints of a (polyhedral) Cartesian product of a finite number of sets.
Input
cpa– Cartesian product array
Output
A list of constraints.
constraints_list(ia::IntersectionArray{N}) where {N}Return the list of constraints of an intersection of a finite number of (polyhedral) sets.
Input
ia– intersection of a finite number of (polyhedral) sets
Output
The list of constraints of the intersection.
Notes
We assume that the underlying sets are polyhedral, i.e., offer a method constraints_list.
Algorithm
We create the polyhedron from the constraints_lists of the sets and remove redundant constraints.
constraints_list(rm::ResetMap{N}) where {N}Return the list of constraints of a polytopic reset map.
Input
rm– reset map of a polytope
Output
The list of constraints of the reset map.
Notes
We assume that the underlying set X is a polytope, i.e., is bounded and offers a method constraints_list(X).
Algorithm
We fall back to constraints_list of a LinearMap of the A-matrix in the affine-map view of a reset map. Each reset dimension $i$ is projected to zero, expressed by two constraints for each reset dimension. Then it remains to shift these constraints to the new value.
For instance, if the dimension $5$ was reset to $4$, then there will be constraints $x₅ ≤ 0$ and $-x₅ ≤ 0$. We then modify the right-hand side of these constraints to $x₅ ≤ 4$ and $-x₅ ≤ -4$, respectively.
constraints_list(rm::ResetMap{N, S}) where {N, S<:AbstractHyperrectangle}Return the list of constraints of a hyperrectangular reset map.
Input
rm– reset map of a hyperrectangular set
Output
The list of constraints of the reset map.
Algorithm
We iterate through all dimensions. If there is a reset, we construct the corresponding (flat) constraints. Otherwise, we construct the corresponding constraints of the underlying set.
LazySets.Arrays.rectify — Methodrectify(x::Interval{N}) where {N}Concrete rectification of an interval.
Input
x– interval
Output
The Interval that corresponds to the rectification of x.
Notes
Note that the result is an Interval even if the set becomes a singleton (which is the case if the original interval was nonpositive).
LazySets.diameter — Functiondiameter(x::Interval, [p]::Real=Inf)Compute the diameter of an interval, defined as $\Vert b - a\Vert$ in the $p`-norm, where$a$(resp.$b``) are the minimum (resp. maximum) of the given interval.
Input
x– intervalp– (optional, default:Inf) norm
Output
A real number representing the diameter.
Notes
In one dimension all norms are the same.
Base.split — Methodsplit(x::Interval, k)Partition an interval into k uniform sub-intervals.
Input
x– intervalk– number of sub-intervals, possibly wrapped in a vector of length 1
Output
A list of k Intervals.
Inherited from LazySet:
Inherited from AbstractPolytope:
Inherited from AbstractCentrallySymmetricPolytope:
Inherited from AbstractZonotope:
Inherited from AbstractHyperrectangle: