ODT
Loading...
Searching...
No Matches
source
interp_linear.h
Go to the documentation of this file.
1
/*
2
* @file interp_linear.h
3
* @brief Header file for class Linear_interp
4
*/
5
6
#ifndef INTERP_LINEAR_H
7
#define INTERP_LINEAR_H
8
9
#include <vector>
10
#include <cstdlib>
11
#include <iostream>
12
13
using namespace
std;
14
15
class
Linear_interp
{
16
17
public
:
18
19
vector<double> *
X
;
20
vector<double> *
Y
;
21
22
int
nxy
;
23
24
private
:
25
26
int
ilo
;
27
int
ihi
;
28
30
31
public
:
32
33
double
interp
(
double
x){
34
set_bounding_indicies
(x);
35
return
(*
Y
)[
ilo
] + (x-(*X)[
ilo
])*((*
Y
)[
ihi
]-(*Y)[
ilo
])/((*
X
)[
ihi
]-(*X)[
ilo
]);
36
}
37
38
private
:
39
40
void
set_bounding_indicies
(
double
x){
41
if
(x <= (*
X
)[0])
42
ihi
= 1;
43
else
if
(x >= (*X).back())
44
ihi
=
nxy
-1;
45
else
{
46
vector<double>::iterator itHi = lower_bound((*X).begin(), (*X).end(), x);
// lower_bound gives values >= x
47
ihi
= itHi - (*X).begin();
48
}
49
ilo
=
ihi
-1;
50
}
51
53
54
public
:
55
56
//------------- constructors
57
58
Linear_interp
(){}
59
60
Linear_interp
(vector<double> &X_p, vector<double> &Y_p){
61
X
= &X_p;
62
Y
= &Y_p;
63
nxy
= (*X).size();
64
if
((*X).size()!=(*Y).size()){
65
cout << endl <<
"Error in interp_linear: X, Y need same size"
<< endl;
66
exit(0);
67
}
68
69
for
(
int
i=1; i<
nxy
-1; i++)
70
if
( ((*
X
)[i] == (*
X
)[i-1]) ||
71
((*
X
)[i] == (*
X
)[i+1]) ||
72
((*
X
)[i]<(*
X
)[i-1] && (*
X
)[i]<(*
X
)[i+1]) ||
73
((*
X
)[i]>(*
X
)[i-1] && (*
X
)[i]>(*
X
)[i+1]) ){
74
cout << endl <<
"Error in interp_linear: X should be monotonic"
<< endl;
75
exit(0);
76
}
77
}
78
79
};
80
81
#endif
Linear_interp
Definition
interp_linear.h:15
Linear_interp::Linear_interp
Linear_interp(vector< double > &X_p, vector< double > &Y_p)
Definition
interp_linear.h:60
Linear_interp::ihi
int ihi
Definition
interp_linear.h:27
Linear_interp::nxy
int nxy
Definition
interp_linear.h:22
Linear_interp::X
vector< double > * X
Definition
interp_linear.h:19
Linear_interp::ilo
int ilo
Definition
interp_linear.h:26
Linear_interp::set_bounding_indicies
void set_bounding_indicies(double x)
Definition
interp_linear.h:40
Linear_interp::Y
vector< double > * Y
Definition
interp_linear.h:20
Linear_interp::interp
double interp(double x)
Definition
interp_linear.h:33
Linear_interp::Linear_interp
Linear_interp()
Definition
interp_linear.h:58
Generated by
1.10.0