integralrr.h 2.09 KB
Newer Older
Olivier Mullier's avatar
Olivier Mullier committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
 * <one line to give the library's name and an idea of what it does.>
 * Copyright (C) 2019  mullier <email>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef INTEGRALRR_H
#define INTEGRALRR_H

#include <ibex.h>

#define __EPS__ (1e-4)

/**
 * @todo write docs
 */
class IntegralRR
{
private:
    double _inf_endpoint;
    double _sup_endpoint;
    
    ibex::Function * _f;
    
    ibex::Interval _solution;
    
public:
    //CONSTRUCTORS
    IntegralRR(double, double, ibex::Function *);
    IntegralRR(double inf, double sup, ibex::Function * f, const ibex::Interval & sol) : 
        _inf_endpoint(inf), _sup_endpoint(sup), _f(f), _solution(sol){};
    IntegralRR(){_f = nullptr;};
    IntegralRR(const IntegralRR & other) : IntegralRR(other.get_inf_endpoint(), other.get_sup_endpoint(), other.get_f(), other.get_solution()){};
    
    //GETTERS
    inline double get_inf_endpoint() const {return _inf_endpoint;};
    inline double get_sup_endpoint() const {return _sup_endpoint;};
    inline ibex::Function * get_f() const {return _f;};
    inline ibex::Interval get_solution() const {return _solution;};    
    
    //SETTERS
    void set_solution(const ibex::Interval & res){_solution = res;};
    
    void compute_integral();
    
    IntegralRR& operator+=(const IntegralRR& other);
};

IntegralRR operator+(const IntegralRR& lhs, const IntegralRR& rhs);

bool operator<(const IntegralRR &, const IntegralRR &);

std::ostream& operator<<(std::ostream& os, const IntegralRR& integral);

#endif // INTEGRALRR_H