ZonoOpt 2.2.0
Loading...
Searching...
No Matches
Interval.hpp
Go to the documentation of this file.
1#ifndef ZONOOPT_INTERVAL_HPP_
2#define ZONOOPT_INTERVAL_HPP_
3
15#include <string>
16#include <vector>
17#include <set>
18#include <Eigen/Dense>
19#include <Eigen/Sparse>
20#include <cmath>
21#include <boost/numeric/interval.hpp>
22
23namespace ZonoOpt
24{
25 namespace detail
26 {
27 // need this to get inverse hyperbolics to compile with MSVC
28 template<class T>
29 struct rounded_transc_fixed : boost::numeric::interval_lib::rounded_transc_std<T> {
30 static T asinh_down(const T& x) { using std::asinh; return asinh(x); }
31 static T asinh_up (const T& x) { using std::asinh; return asinh(x); }
32 static T acosh_down(const T& x) { using std::acosh; return acosh(x); }
33 static T acosh_up (const T& x) { using std::acosh; return acosh(x); }
34 static T atanh_down(const T& x) { using std::atanh; return atanh(x); }
35 static T atanh_up (const T& x) { using std::atanh; return atanh(x); }
36 };
37 }
38
39 using namespace detail;
40
41
48 {
49 public:
50 // constructor
51
55 Interval() : _val(zero, zero) {}
56
62 Interval(const zono_float y_min, const zono_float y_max) : _val(y_min, y_max) {}
63
68 Interval* clone() const;
69
70 // get methods
71
77 zono_float lower() const;
78
84 zono_float upper() const;
85
86 // operators
87
93 Interval operator+(const Interval& other) const;
94
99 void operator+=(const Interval& other);
100
107 Interval operator+(const zono_float alpha) const;
108
114 void operator+=(const zono_float alpha);
115
123 friend Interval operator+(const zono_float alpha, const Interval& interval);
124
130 Interval operator-(const Interval& other) const;
131
136 void operator-=(const Interval& other);
137
144 Interval operator-(const zono_float alpha) const;
145
150 void operator-=(const zono_float alpha);
151
159 friend Interval operator-( const zono_float alpha, const Interval& interval );
160
166 Interval operator*(const Interval& other) const;
167
172 void operator*=(const Interval& other);
173
180 Interval operator*(const zono_float alpha) const;
181
186 void operator*=(const zono_float alpha);
187
195 friend Interval operator*(const zono_float alpha, const Interval& interval);
196
202 Interval operator/(const Interval& other) const;
203
208 void operator/=(const Interval& other);
209
216 Interval operator/(const zono_float alpha) const;
217
222 void operator/=(const zono_float alpha);
223
231 friend Interval operator/(const zono_float alpha, const Interval& interval);
232
238 Interval operator-() const;
239
245 Interval operator&(const Interval& other) const;
246
253 Interval operator|(const Interval& other) const;
254
261 bool operator<=(const Interval& other) const;
262
269 bool operator>=(const Interval& other) const;
270
277 bool operator==(const Interval& other) const;
278
283 Interval inv() const;
284
290 Interval intersect(const Interval& other) const;
291
298 Interval interval_hull(const Interval& other) const;
299
305 bool contains(const zono_float x) const;
306
313 bool contains_set(const Interval& other) const;
314
319 bool is_single_valued() const;
320
325 bool is_empty() const;
326
331 zono_float center() const;
332
337 zono_float width() const;
338
345 Interval radius() const;
346
351 Interval abs() const;
352
357 Interval sqrt() const;
358
365 Interval pow(const int n) const;
366
377 Interval pow(const zono_float f) const;
378
384 Interval nth_root(const int n) const;
385
390 Interval exp() const;
391
396 Interval log() const;
397
402 Interval sin() const;
403
408 Interval cos() const;
409
414 Interval tan() const;
415
420 Interval arcsin() const;
421
426 Interval arccos() const;
427
432 Interval arctan() const;
433
438 Interval sinh() const;
439
444 Interval cosh() const;
445
450 Interval tanh() const;
451
456 Interval arcsinh() const;
457
462 Interval arccosh() const;
463
468 Interval arctanh() const;
469
474 std::string print() const;
475
482 friend std::ostream& operator<<(std::ostream& os, const Interval& interval);
483
484
485 private:
486
487 typedef boost::numeric::interval_lib::policies<
488 boost::numeric::interval_lib::save_state<rounded_transc_fixed<zono_float>>,
489 boost::numeric::interval_lib::checking_base<zono_float>
490 > interval_policy;
491
492 boost::numeric::interval<zono_float, interval_policy> _val;
493
494 explicit Interval(const boost::numeric::interval<zono_float, interval_policy>& val) : _val(val) {}
495 };
496
497} // namespace ZonoOpt
498
499#endif
Interval class.
Definition Interval.hpp:48
friend Interval operator/(const zono_float alpha, const Interval &interval)
Interval division with scalar.
Definition Interval.cpp:113
void operator/=(const Interval &other)
Interval division in-place.
Definition Interval.cpp:98
bool is_single_valued() const
Checks whether interval is single-valued (i.e., width is 0 within numerical tolerance)
Definition Interval.cpp:173
std::string print() const
Print method for interval.
Definition Interval.cpp:301
friend Interval operator+(const zono_float alpha, const Interval &interval)
Interval addition with scalar.
Definition Interval.cpp:38
Interval arctanh() const
Compute interval containing arctanh(x) for all x in interval.
Definition Interval.cpp:296
Interval()
Default constructor.
Definition Interval.hpp:55
Interval intersect(const Interval &other) const
Interval intersection.
Definition Interval.cpp:153
Interval tanh() const
Compute interval containing tanh(x) for all x in interval.
Definition Interval.cpp:281
Interval arctan() const
Compute interval containing arctan(x) for all x in interval.
Definition Interval.cpp:266
Interval log() const
Compute interval containing log(x) (base e) for all x in interval.
Definition Interval.cpp:236
Interval sinh() const
Compute interval containing sinh(x) for all x in interval.
Definition Interval.cpp:271
Interval exp() const
Compute interval containing exp(x) for all x in interval.
Definition Interval.cpp:231
bool operator==(const Interval &other) const
Set equality operator.
Definition Interval.cpp:143
Interval sqrt() const
Get square root of interval.
Definition Interval.cpp:204
Interval arcsin() const
Compute interval containing arcsin(x) for all x in interval.
Definition Interval.cpp:256
zono_float upper() const
Get upper bound.
Definition Interval.cpp:14
Interval pow(const int n) const
Interval power.
Definition Interval.cpp:209
Interval arcsinh() const
Compute interval containing arcsinh(x) for all x in interval.
Definition Interval.cpp:286
Interval operator|(const Interval &other) const
Interval hull.
Definition Interval.cpp:128
zono_float lower() const
Get lower bound.
Definition Interval.cpp:12
Interval operator&(const Interval &other) const
Interval intersection.
Definition Interval.cpp:123
void operator-=(const Interval &other)
Interval subtraction in-place.
Definition Interval.cpp:48
Interval abs() const
Get absolute value of interval.
Definition Interval.cpp:199
Interval radius() const
Get radius of interval.
Definition Interval.cpp:193
friend Interval operator*(const zono_float alpha, const Interval &interval)
Interval multiplication with scalar.
Definition Interval.cpp:88
Interval arccosh() const
Compute interval containing arccosh(x) for all x in interval.
Definition Interval.cpp:291
friend std::ostream & operator<<(std::ostream &os, const Interval &interval)
Print to ostream.
Definition Interval.cpp:306
bool contains_set(const Interval &other) const
Set containment for intervals.
Definition Interval.cpp:168
Interval tan() const
Compute interval containing tan(x) for all x in interval.
Definition Interval.cpp:251
friend Interval operator-(const zono_float alpha, const Interval &interval)
Interval subtraction with scalar.
Definition Interval.cpp:63
Interval inv() const
Interval inverse.
Definition Interval.cpp:148
void operator*=(const Interval &other)
Interval multiplication in-place.
Definition Interval.cpp:73
zono_float width() const
Get width of interval.
Definition Interval.cpp:188
bool operator>=(const Interval &other) const
Set containment operator.
Definition Interval.cpp:138
zono_float center() const
Get center of interval.
Definition Interval.cpp:183
bool operator<=(const Interval &other) const
Set containment operator.
Definition Interval.cpp:133
Interval sin() const
Compute interval containing sin(x) for all x in interval.
Definition Interval.cpp:241
bool is_empty() const
Checks whether interval is empty.
Definition Interval.cpp:178
Interval nth_root(const int n) const
Interval nth root.
Definition Interval.cpp:226
Interval cos() const
Compute interval containing cos(x) for all x in interval.
Definition Interval.cpp:246
Interval cosh() const
Compute interval containing cosh(x) for all x in interval.
Definition Interval.cpp:276
Interval interval_hull(const Interval &other) const
Interval hull.
Definition Interval.cpp:158
Interval * clone() const
Clone Interval object.
Definition Interval.cpp:7
bool contains(const zono_float x) const
Checks whether interval contains a value.
Definition Interval.cpp:163
Interval(const zono_float y_min, const zono_float y_max)
Interval constructor.
Definition Interval.hpp:62
Interval arccos() const
Compute interval containing arccos(x) for all x in interval.
Definition Interval.cpp:261
void operator+=(const Interval &other)
Interval addition in-place.
Definition Interval.cpp:23
#define zono_float
Defines the floating-point type used in ZonoOpt.
Definition ZonoOpt.hpp:45
Definition ZonoOpt.hpp:58