From 6713e8da93daaf2e306de2844e1da6c26d573e31 Mon Sep 17 00:00:00 2001 From: mforets Date: Fri, 28 Feb 2020 15:28:25 -0300 Subject: [PATCH 1/4] special case concrete minkowski sum for intervals --- src/ConcreteOperations/minkowski_sum.jl | 4 ++++ test/unit_Interval.jl | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/ConcreteOperations/minkowski_sum.jl b/src/ConcreteOperations/minkowski_sum.jl index c3553ad779..d09a05942b 100644 --- a/src/ConcreteOperations/minkowski_sum.jl +++ b/src/ConcreteOperations/minkowski_sum.jl @@ -247,3 +247,7 @@ function minkowski_sum(Z1::AbstractZonotope{N}, Z2::AbstractZonotope{N}; Gnew = hcat(genmat(Z1), genmat(Z2)) return Zonotope(cnew, Gnew, remove_zero_generators=remove_zero_generators) end + +function minkowski_sum(x::Interval, y::Interval) + return Interval(x.dat + y.dat) +end diff --git a/test/unit_Interval.jl b/test/unit_Interval.jl index 5d473e14a3..d0d2b22296 100644 --- a/test/unit_Interval.jl +++ b/test/unit_Interval.jl @@ -56,6 +56,11 @@ for N in Ns v = vertices_list(m) @test N[1.5] in v && N[-2] in v + # the concrete Minkowski sum of intervals returns an interval + sum_x_y = minkowski_sum(x, y) + @test sum_x_y isa Interval + @test min(sum_x_y) == N[-2] && max(sum_x_y) == N[1.5] + # subtraction d = x - y @test dim(d) == 1 From 563b113d212625cc826a7bc6418072b019e5f150 Mon Sep 17 00:00:00 2001 From: Marcelo Forets Date: Fri, 28 Feb 2020 16:14:00 -0300 Subject: [PATCH 2/4] Update test/unit_Interval.jl --- test/unit_Interval.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit_Interval.jl b/test/unit_Interval.jl index d0d2b22296..841d7bc935 100644 --- a/test/unit_Interval.jl +++ b/test/unit_Interval.jl @@ -59,7 +59,7 @@ for N in Ns # the concrete Minkowski sum of intervals returns an interval sum_x_y = minkowski_sum(x, y) @test sum_x_y isa Interval - @test min(sum_x_y) == N[-2] && max(sum_x_y) == N[1.5] + @test min(sum_x_y) == N(-2) && max(sum_x_y) == N(1.5) # subtraction d = x - y From 90526f7f61a03b6afaea86f46338cf87cec97951 Mon Sep 17 00:00:00 2001 From: Marcelo Forets Date: Fri, 28 Feb 2020 16:33:52 -0300 Subject: [PATCH 3/4] Update unit_Interval.jl --- test/unit_Interval.jl | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/unit_Interval.jl b/test/unit_Interval.jl index 841d7bc935..513caa3d5e 100644 --- a/test/unit_Interval.jl +++ b/test/unit_Interval.jl @@ -57,10 +57,8 @@ for N in Ns @test N[1.5] in v && N[-2] in v # the concrete Minkowski sum of intervals returns an interval - sum_x_y = minkowski_sum(x, y) - @test sum_x_y isa Interval - @test min(sum_x_y) == N(-2) && max(sum_x_y) == N(1.5) - + @test minkowski_sum(x, y) == Interval(N(-2), N(1.5)) + # subtraction d = x - y @test dim(d) == 1 From d43222a6c0ea8438f4433dfa707412267219e673 Mon Sep 17 00:00:00 2001 From: mforets Date: Fri, 28 Feb 2020 23:42:00 -0300 Subject: [PATCH 4/4] add docstring --- docs/src/lib/binary_functions.md | 1 + src/ConcreteOperations/minkowski_sum.jl | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/docs/src/lib/binary_functions.md b/docs/src/lib/binary_functions.md index 28615e9948..f837d182d4 100644 --- a/docs/src/lib/binary_functions.md +++ b/docs/src/lib/binary_functions.md @@ -88,6 +88,7 @@ minkowski_sum(::AbstractHyperrectangle{N}, ::AbstractHyperrectangle{N}) where {N minkowski_sum(::AbstractZonotope{N}, ::AbstractZonotope{N}) where {N<:Real} minkowski_sum(::VPolygon{N}, ::VPolygon{N}) where {N<:Real} minkowski_sum(::PolynomialZonotope, ::Zonotope) +minkowski_sum(::Interval, ::Interval) ``` ## Minkowski difference diff --git a/src/ConcreteOperations/minkowski_sum.jl b/src/ConcreteOperations/minkowski_sum.jl index d09a05942b..afa530d54c 100644 --- a/src/ConcreteOperations/minkowski_sum.jl +++ b/src/ConcreteOperations/minkowski_sum.jl @@ -248,6 +248,25 @@ function minkowski_sum(Z1::AbstractZonotope{N}, Z2::AbstractZonotope{N}; return Zonotope(cnew, Gnew, remove_zero_generators=remove_zero_generators) end +""" + minkowski_sum(x::Interval, y::Interval) + +Concrete Minkowski sum of a pair of intervals. + +### Input + +- `x` -- hyperrectangular set +- `y` -- hyperrectangular set + +### Output + +An `Interval` corresponding to the concrete Minkowski sum of `x` and `y`. + +### Algorithm + +The function takes the sum of `x` and `y` following the rules of interval +arithmetic. +""" function minkowski_sum(x::Interval, y::Interval) return Interval(x.dat + y.dat) end