-
Notifications
You must be signed in to change notification settings - Fork 0
/
derivatives_handler.h
executable file
·236 lines (214 loc) · 10 KB
/
derivatives_handler.h
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
/**
* @file derivatives_handler.h
* @brief A set of function to compute derivation
*
* This is a set of function that can compute the first and second derivatives for any discrete function
*/
#pragma once
#include <iostream>
#include <Eigen/Dense>
#include "data.h"
using Eigen::VectorXd;
using Eigen::VectorXi;
using Eigen::MatrixXd;
// ---------------------------------------------------------
// -------------- **** 1st Derivative ***** ----------------
// ---------------------------------------------------------
/**
* @brief Computes the first order backward derivative with 1st order precision.
*
* @param y A vector containing 2 points: y at x-1 (y[0]) and y at x (y[1]).
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vector y must have a size of at least 2.
* If the size is less than 2, the program will exit with an error message.
*/
Deriv_out Fstder_backward_1err_reggrid(const VectorXd& y);
/**
* @brief Computes the first order backward derivative with 1st order precision.
*
* @param y A vector containing 2 points: y at x-1 (y[0]) and y at x (y[1]).
* @param x A vector containing the corresponding x values for the points in y.
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vectors y and x must have a size of at least 2.
* If the size is less than 2, the program will exit with an error message.
*/
Deriv_out Fstder_backward_1err_reggrid(const VectorXd& y, const VectorXd& x);
/**
* @brief Computes the first order forward derivative with 1st order precision.
*
* @param y A vector containing 2 points: y at x (y[0]) and y at x+1 (y[1]).
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vector y must have a size of at least 2.
* If the size is less than 2, the program will exit with an error message.
*/
Deriv_out Fstder_forward_1err_reggrid(const VectorXd& y);
/**
* @brief Computes the first order forward derivative with 1st order precision.
*
* @param y A vector containing 2 points: y at x (y[0]) and y at x+1 (y[1]).
* @param x A vector containing the corresponding x values for the points in y.
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vectors y and x must have a size of at least 2.
* If the size is less than 2, the program will exit with an error message.
*/
Deriv_out Fstder_forward_1err_reggrid(const VectorXd& y, const VectorXd& x);
/**
* @brief Computes the first order centered derivative with 2nd order precision.
*
* @param y A vector containing 3 points: y at x-1 (y[0]), y at x (y[1]), and y at x+1 (y[2]).
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vector y must have a size of at least 3.
* If the size is less than 3, the program will exit with an error message.
*/
Deriv_out Fstder_centered_2err_reggrid(const VectorXd& y);
/**
* @brief Computes the first order centered derivative with 2nd order precision.
*
* @param y A vector containing 3 points: the position y at x-1 (y[0]), y at x (y[1]), and y at x+1 (y[2]).
* @param x A vector containing the corresponding x values for the points in y.
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vectors y and x must have a size of at least 3.
* If the size is less than 3, the program will exit with an error message.
*/
Deriv_out Fstder_centered_2err_reggrid(const VectorXd& y, const VectorXd& x);
/**
* @brief Computes the first order centered derivative with 4th order precision.
*
* @param y A vector containing 5 points: the position y at x-2 (y[0]) to y at x+2 (y[4]).
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vector y must have a size of at least 5.
* If the size is less than 5, the program will exit with an error message.
*/
Deriv_out Fstder_centered_4err_reggrid(const VectorXd y);
/**
* @brief Computes the first order centered derivative with 4th order precision.
*
* @param y A vector containing 5 points: the position y at x-2 (y[0]) to y at x+2 (y[4]).
* @param x A vector containing the corresponding x values for the points in y.
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vectors y and x must have a size of at least 5.
* If the size is less than 5, the program will exit with an error message.
*/
Deriv_out Fstder_centered_4err_reggrid(const VectorXd& y, const VectorXd& x);
/**
* @brief Computes the second order backward derivative with 1st order precision.
*
* @param y A vector containing 3 points: the position y at x-2 (y[0]) to y at x (y[2]).
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vector y must have a size of at least 3.
* If the size is less than 3, the program will exit with an error message.
*/
Deriv_out Scndder_backward_1err_reggrid(const VectorXd& y);
/**
* @brief Computes the second order backward derivative with 1st order precision.
*
* @param y A vector containing 3 points: the position y at x-2 (y[0]) to y at x (y[2]).
* @param x A vector containing the corresponding x values for the points in y.
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vectors y and x must have a size of at least 3.
* If the size is less than 3, the program will exit with an error message.
*/
Deriv_out Scndder_backward_1err_reggrid(const VectorXd& y, const VectorXd& x);
/**
* @brief Computes the second order forward derivative with 1st order precision.
*
* @param y A vector containing 3 points: the position y at x (y[0]) to y at x+2 (y[2]).
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vector y must have a size of at least 3.
* If the size is less than 3, the program will exit with an error message.
*/
Deriv_out Scndder_forward_1err_reggrid(const VectorXd& y);
/**
* @brief Computes the second order forward derivative with 1st order precision.
*
* @param y A vector containing 3 points: the position y at x (y[0]) to y at x+2 (y[2]).
* @param x A vector containing the corresponding x values for the points in y.
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vectors y and x must have a size of at least 3.
* If the size is less than 3, the program will exit with an error message.
*/
Deriv_out Scndder_forward_1err_reggrid(const VectorXd& y, const VectorXd& x);
/**
* @brief Computes the second order centered derivative with second order precision.
*
* @param y A vector containing 3 points: the position y at x-1 (y[0]) to y at x+1 (y[2]).
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vector y must have a size of at least 3.
* If the size is less than 3, the program will exit with an error message.
*/
Deriv_out Scndder_centered_2err_reggrid(const VectorXd& y);
/**
* @brief Computes the second order centered derivative with second order precision.
*
* @param y A vector containing 3 points: the position y at x-1 (y[0]) to y at x+1 (y[2]).
* @param x A vector containing the corresponding x values for the points in y.
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vectors y and x must have a size of at least 3.
* If the size is less than 3, the program will exit with an error message.
*/
Deriv_out Scndder_centered_2err_reggrid(const VectorXd& y, const VectorXd& x);
// Main Functions
/**
* @brief Computes the first derivative of a list of values with adaptive precision.
*
* The computation is adaptive in the sense that the precision order of the derivative is automatically adjusted depending on the region (lower edge, center, upper edge) in which the derivative is computed.
*
* @param y A vector containing the list of values.
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vector y must have a size greater than or equal to 2.
* If the size is less than 2, the behavior is undefined.
*/
Deriv_out Frstder_adaptive_reggrid(const VectorXd& y);
/**
* @brief Computes the first derivative of a list of values with adaptive precision.
*
* The computation is adaptive in the sense that the precision order of the derivative is automatically adjusted depending on the region (lower edge, center, upper edge) in which the derivative is computed.
*
* @param y A vector containing the list of values.
* @param x A vector containing the corresponding x values for the points in y.
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vectors y and x must have the same size and have a size greater than or equal to 2.
* If the size is less than 2 or the sizes of y and x are not equal, the behavior is undefined.
*/
Deriv_out Frstder_adaptive_reggrid(const VectorXd& y, const VectorXd& x);
/**
* @brief Computes the second derivative of a list of values with adaptive precision.
*
* The computation is adaptive in the sense that the precision order of the derivative is automatically adjusted depending on the region (lower edge, center, upper edge) in which the derivative is computed.
*
* @param y A vector containing the list of values.
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vector y must have a size greater than or equal to 3.
* If the size is less than 3, the behavior is undefined.
*/
Deriv_out Scndder_adaptive_reggrid(const VectorXd& y);
/**
* @brief Computes the second derivative of a list of values with adaptive precision.
*
* The computation is adaptive in the sense that the precision order of the derivative is automatically adjusted depending on the region (lower edge, center, upper edge) in which the derivative is computed.
*
* @param y A vector containing the list of values.
* @param x A vector containing the corresponding x values for the points in y.
* @return Deriv_out A structure containing the computed derivative.
*
* @note The vectors y and x must have the same size and have a size greater than or equal to 3.
* If the size is less than 3 or the sizes of y and x are not equal, the behavior is undefined.
*/
Deriv_out Scndder_adaptive_reggrid(const VectorXd& y, const VectorXd& x);